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())
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, }, )
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, })
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)
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)
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)
def test_decode(self): sms = gammu.DecodePDU(PDU_DATA) self.assertEqual(sms['Number'], '604865888') self.assertEqual(sms['Text'], 'Delivered')
#!/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