[pkg-fso-commits] [SCM] FSO frameworkd Debian packaging branch, master, updated. milestone4-368-g700ab82
Daniel Willmann
daniel at totalueberwachung.de
Mon Feb 2 18:51:16 UTC 2009
The following commit has been merged in the master branch:
commit 914dabcf5dc03abc0419c6783ec7941994783f7a
Author: Daniel Willmann <daniel at totalueberwachung.de>
Date: Fri Nov 14 03:20:27 2008 +0100
ogsmd: Move {en,de}codePDUNumber to PDUAddress.{pdu,decode}
This moves the functions from convert.py to (class) methods of
PDUAddress which is much cleaner.
diff --git a/framework/subsystems/ogsmd/gsm/convert.py b/framework/subsystems/ogsmd/gsm/convert.py
index d7fcd31..3061a1e 100644
--- a/framework/subsystems/ogsmd/gsm/convert.py
+++ b/framework/subsystems/ogsmd/gsm/convert.py
@@ -43,42 +43,6 @@ def flatten(x):
return result
#=========================================================================#
-def decodePDUNumber(bs):
-#=========================================================================#
- num_type = (bs[0] & 0x70) >> 4
- num_plan = (bs[0] & 0x0F)
- number = bs[1:]
- if number == []:
- number = ""
- elif num_type == 5:
- number = unpack_sevenbit(number)
- number = number.decode( "gsm_default" )
-
- else:
- number = bcd_decode(number)
- # Every occurence of the padding semi-octet should be removed
- number = number.replace("f", "")
- # Decode special "digits"
- number = number.translate(PDUADDR_DEC_TRANS)
- return (num_type, num_plan, number)
-
-#=========================================================================#
-def encodePDUNumber(num):
-#=========================================================================#
- if num.type == 5:
- number = num.number.encode("gsm_default")
- enc = pack_sevenbit(number)
- length = len(enc)*2
- if (len(num.number)*7)%8 <= 4:
- length -= 1
- else:
- # Encode special "digits"
- number = num.number.translate(PDUADDR_ENC_TRANS)
- enc = bcd_encode(number)
- length = len(number)
- return flatten( [length, 0x80 | num.type << 4 | num.dialplan, enc] )
-
-#=========================================================================#
def bcd_decode(bs):
#=========================================================================#
s = "".join(["%1x%1x" % (b & 0xF, b >> 4) for b in bs])
diff --git a/framework/subsystems/ogsmd/gsm/sms.py b/framework/subsystems/ogsmd/gsm/sms.py
index 7c3b7e6..35a96e2 100644
--- a/framework/subsystems/ogsmd/gsm/sms.py
+++ b/framework/subsystems/ogsmd/gsm/sms.py
@@ -44,7 +44,7 @@ def decodeSMS( pdu, direction ):
sca_len = bytes[offset]
offset += 1
if sca_len > 0:
- sms.sca = PDUAddress( *decodePDUNumber( bytes[offset:offset+sca_len] ) )
+ sms.sca = PDUAddress.decode( bytes[offset:offset+sca_len] )
else:
sms.sca = False
@@ -71,7 +71,7 @@ def decodeSMS( pdu, direction ):
# WARNING, the length is coded in digits of the number, not in octets occupied!
oa_len = 1 + (bytes[offset] + 1) / 2
offset += 1
- sms.oa = PDUAddress( *decodePDUNumber( bytes[offset:offset+oa_len] ) )
+ sms.oa = PDUAddress.decode( bytes[offset:offset+oa_len] )
sms.da = sms.oa
offset += oa_len
@@ -157,6 +157,25 @@ class PDUAddress:
number = number
ntype = 5
return cls( ntype, 1, number )
+
+ @classmethod
+ def decode( cls, bs ):
+ num_type = ( bs[0] & 0x70) >> 4
+ num_plan = ( bs[0] & 0x0F )
+ number = bs[1:]
+ if number == []:
+ number = ""
+ elif num_type == 5:
+ number = unpack_sevenbit( number )
+ number = number.decode( "gsm_default" )
+ else:
+ number = bcd_decode( number )
+ # Every occurence of the padding semi-octet should be removed
+ number = number.replace( "f", "" )
+ # Decode special "digits"
+ number = number.translate( PDUADDR_DEC_TRANS )
+ return cls( num_type, num_plan, number )
+
def __init__( self, type, dialplan, number ):
self.type = type
self.dialplan = dialplan
@@ -167,6 +186,21 @@ class PDUAddress:
prefix = "+"
return prefix + self.number
+ def pdu( self ):
+ if self.type == 5:
+ number = self.number.encode("gsm_default")
+ enc = pack_sevenbit(number)
+ length = len(enc)*2
+ if (len(self.number)*7)%8 <= 4:
+ length -= 1
+ else:
+ # Encode special "digits"
+ number = self.number.translate(PDUADDR_ENC_TRANS)
+ enc = bcd_encode(number)
+ length = len(number)
+ return flatten( [length, 0x80 | self.type << 4 | self.dialplan, enc] )
+
+
class AbstractSMS(object):
def __init__( self, direction ):
self.direction = direction
@@ -297,7 +331,7 @@ class AbstractSMS(object):
def pdu( self ):
pdubytes = []
if self.sca:
- scabcd = encodePDUNumber( self.sca )
+ scabcd = self.sca.pdu()
# SCA has non-standard length
scabcd[0] = len( scabcd ) - 1
pdubytes.extend( scabcd )
@@ -322,7 +356,7 @@ class AbstractSMS(object):
if self.pdu_mti == 1:
pdubytes.append( self.mr )
- pdubytes.extend( encodePDUNumber(self.oa) )
+ pdubytes.extend( self.oa.pdu() )
pdubytes.append( self.pid )
--
FSO frameworkd Debian packaging
More information about the pkg-fso-commits
mailing list