View Single Post
Posts: 14 | Thanked: 18 times | Joined on Dec 2009
#23
Two things:
1. My code does not handle odd phone number length and in fact, it can only handle 8-digit numbers. My bad.
2. The negative shift count is another error in my code but i have fixed it.

I have just done some quick changes to the code and have not fully validated it but could you please try this:

smsutil.py:

Code:
#!/usr/bin/env python2.5
import sched, time
def octify(str):
	'''
	Returns a list of octet bytes representing
	each char of the input str.
	'''
	
	bytes = map(ord, str)
	bitsconsumed = 0
	referencebit = 7
	octets = []
	while len(bytes):
		byte = bytes.pop(0)
		byte = byte >> bitsconsumed
		try:
			nextbyte = bytes[0]
			bitstocopy = (nextbyte & (0xff >> referencebit)) << referencebit
			octet = (byte | bitstocopy)
			octets.append(octet)
		except:
			octets.append(byte)
		bitsconsumed += 1
		referencebit -= 1
		if referencebit == 0:
			referencebit = 7
		
	return octets

def semi_octify(str):
	'''
	Expects a string containing two digits.
	Returns an octet -
	first nibble in the octect is the first
	digit and the second nibble represents
	the second digit.
	'''
	try:
		digit_1 = int(str[0])
		digit_2 = int(str[1])	
		octet = (digit_2 << 4) | digit_1
	except:
		octet = (1 << 4) | digit_1
	return octet

def createPDUmessage(number, msg):
	'''
	Returns a list of bytes to represent a valid PDU message
	'''
	numlength = len(number)
	if (numlength % 2) == 0:
		rangelength = numlength
	else:
		number = number + 'F'
		rangelength = len(number)

	octifiednumber = [ semi_octify(number[i:i+2]) for i in range(0,rangelength,2) ]
	octifiedmsg = octify(msg)
	HEADER = 1
	FIRSTOCTETOFSMSDELIVERMSG = 10 
	ADDR_TYPE = 129 #unknown format
	number_length = len(number)
	msg_length = len(octifiedmsg)
	pdu_message = [HEADER, FIRSTOCTETOFSMSDELIVERMSG, number_length, ADDR_TYPE]
	pdu_message.extend(octifiednumber)
	pdu_message.append(0)
	pdu_message.append(0)
	pdu_message.append(msg_length)
	pdu_message.extend(octifiedmsg)
	return pdu_message

Last edited by shaunramos; 2009-12-29 at 02:53.