[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