Exemple #1
0
 def check_operation(self, filename):
     """
     Executes gammu operation which causes debug logs.
     """
     gammu.DecodePDU(PDU_DATA)
     if filename is not None:
         with open(filename, 'r') as handle:
             self.assertTrue('SMS type: Status report' in handle.read())
Exemple #2
0
def pdudecode(request):
    decoded = None
    smsinfo = None
    if request.method == "POST":
        form = PDUDecodeForm(request.POST)
        if form.is_valid():
            # Decode PDU
            decoded = []
            parts = []
            for i, part in enumerate(form.cleaned_data["text"].split()):
                try:
                    d = gammu.DecodePDU(binascii.unhexlify(part))
                    parts.append([d])
                    if isinstance(d["Text"], bytes):
                        d["TextHex"] = d["Text"].hex()
                    else:
                        d["TextHex"] = None
                    d["UDH"]["TextHex"] = d["UDH"]["Text"].hex()
                    d["Id"] = i + 1
                    d["PDU"] = part
                    decoded.append(d)
                except gammu.GSMError as e:
                    decoded.append({"Error": e.args[0]})
                except Exception as e:
                    decoded.append({"Error": {"Text": str(e)}})
            # Link multipart messages
            linked = gammu.LinkSMS(parts)
            # Decode multipart messages
            smsinfo = []
            part = 1
            for x in linked:
                try:
                    d = gammu.DecodeSMS(x)
                    if d is not None:
                        d["Id"] = part
                        part = part + 1
                        smsinfo.append(d)
                except UnicodeDecodeError as err:
                    smsinfo.append({
                        "Error": str(err),
                        "Id": part,
                        "Unknown": True
                    })
                    part = part + 1

    else:
        form = PDUDecodeForm()
    return render(
        request,
        "tools/pdudecode.html",
        {
            "form": form,
            "decoded": decoded,
            "smsinfo": smsinfo,
        },
    )
Exemple #3
0
def pdudecode(request):
    decoded = None
    smsinfo = None
    if request.method == 'POST':
        form = PDUDecodeForm(request.POST)
        if form.is_valid():
            # Decode PDU
            decoded = []
            parts = []
            for i, part in enumerate(form.cleaned_data['text'].split()):
                try:
                    d = gammu.DecodePDU(binascii.unhexlify(part))
                    parts.append([d])
                    if isinstance(d['Text'], bytes):
                        d['TextHex'] = d['Text'].hex()
                    else:
                        d['TextHex'] = None
                    d['UDH']['TextHex'] = d['UDH']['Text'].hex()
                    d['Id'] = i + 1
                    d['PDU'] = part
                    decoded.append(d)
                except gammu.GSMError as e:
                    decoded.append({'Error': e.args[0]})
                except Exception as e:
                    decoded.append({'Error': {'Text': str(e)}})
            # Link multipart messages
            linked = gammu.LinkSMS(parts)
            # Decode multipart messages
            smsinfo = []
            part = 1
            for x in linked:
                try:
                    d = gammu.DecodeSMS(x)
                    if d is not None:
                        d['Id'] = part
                        part = part + 1
                        smsinfo.append(d)
                except UnicodeDecodeError as err:
                    smsinfo.append({
                        "Error": str(err),
                        "Id": part,
                        "Unknown": True
                    })
                    part = part + 1

    else:
        form = PDUDecodeForm()
    return render(request, 'tools/pdudecode.html', {
        'form': form,
        'decoded': decoded,
        'smsinfo': smsinfo,
    })
Exemple #4
0
    def do_smstest(self, smsinfo, expected):
        # encode SMSes
        sms = gammu.EncodeSMS(smsinfo)

        # decode back SMSes
        decodedsms = gammu.DecodeSMS(sms)

        # compare text
        self.assertEqual(decodedsms['Entries'][0]['Buffer'], expected)

        # do conversion to PDU
        pdu = [gammu.EncodePDU(s) for s in sms]

        # Convert back
        pdusms = [gammu.DecodePDU(p) for p in pdu]

        # decode back SMS from PDU
        decodedsms = gammu.DecodeSMS(pdusms)

        # compare PDU results
        self.assertEqual(decodedsms['Entries'][0]['Buffer'], expected)
Exemple #5
0
def pdudecode(request):
    decoded = None
    smsinfo = None
    if request.method == 'POST':
        form = PDUDecodeForm(request.POST)
        if form.is_valid():
            # Decode PDU
            decoded = []
            parts = []
            for i, part in enumerate(form.cleaned_data['text'].split()):
                try:
                    d = gammu.DecodePDU(part.decode('hex'))
                    parts.append([d])
                    if type(d['Text']) == unicode:
                        d['TextHex'] = None
                    else:
                        d['TextHex'] = d['Text'].encode('hex')
                    d['UDH']['TextHex'] = d['UDH']['Text'].encode('hex')
                    d['Id'] = i + 1
                    d['PDU'] = part
                    decoded.append(d)
                except gammu.GSMError, e:
                    decoded.append({'Error': e[0]})
                except Exception, e:
                    decoded.append({'Error': {'Text': str(e)}})
            # Link multipart messages
            linked = gammu.LinkSMS(parts)
            # Decode multipart messages
            smsinfo = []
            part = 1
            for x in linked:
                d = gammu.DecodeSMS(x)
                if d is not None:
                    d['Id'] = part
                    part = part + 1
                    smsinfo.append(d)
Exemple #6
0
import gammu

# text of sms
txt = u'.........1$........2..Ø......3...åÅ....4....Λ....5....Æ....6....ñ....7.........8.........9........0.........1.........2.........3.........4.........5.........6.........7.........8.........9........0.........1.........2.........3.........4.........5.........6.........7.........8.........9....¥€..0'

# SMS info about message
smsinfo = {'Entries': [{'ID': 'ConcatenatedTextLong', 'Buffer': txt}]}

# encode SMSes
sms = gammu.EncodeSMS(smsinfo)

# decode back SMSes
decodedsms = gammu.DecodeSMS(sms)

# show results
print "Text:", repr(decodedsms['Entries'][0]['Buffer'])
print "Comparsion:", (decodedsms['Entries'][0]['Buffer'] == txt)

# do conversion to PDU
pdu = [gammu.EncodePDU(s) for s in sms]

# Convert back
pdusms = [gammu.DecodePDU(p) for p in pdu]

# decode back SMS from PDU
decodedsms = gammu.DecodeSMS(pdusms)

# show PDU results
print "PDU Text:", repr(decodedsms['Entries'][0]['Buffer'])
print "PDU Comparsion:", (decodedsms['Entries'][0]['Buffer'] == txt)
Exemple #7
0
 def test_decode(self):
     sms = gammu.DecodePDU(PDU_DATA)
     self.assertEqual(sms['Number'], '604865888')
     self.assertEqual(sms['Text'], 'Delivered')
Exemple #8
0
#!/usr/bin/env python

import gammu

import sys
if len(sys.argv) != 2:
    print 'This requires parameter with hex encoded PDU data!'
    sys.exit(1)

# Global debug level
gammu.SetDebugFile(sys.stderr)
gammu.SetDebugLevel('textall')

sms = gammu.DecodePDU(sys.argv[1].decode('hex'))
print sms