[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 d77e5a83cb57d260ea73a1e76ec9c89d04ce52aa
Author: Daniel Willmann <daniel at totalueberwachung.de>
Date:   Fri Nov 14 03:02:13 2008 +0100

    ogsmd: Make PDUAddress parsing/generation more robust
    
    This adds support for numbers that have *#abd "digits" in them.

diff --git a/framework/subsystems/ogsmd/gsm/const.py b/framework/subsystems/ogsmd/gsm/const.py
index 34cd178..4b73072 100644
--- a/framework/subsystems/ogsmd/gsm/const.py
+++ b/framework/subsystems/ogsmd/gsm/const.py
@@ -14,6 +14,7 @@ GSM constants, strings, formats, parse patterns, timeouts, you name it.
 """
 
 import re
+import string
 from ogsmd.helpers import BiDict
 
 import logging
@@ -723,6 +724,9 @@ CB_PDU_DCS_LANGUAGE = [ "German", "English", "Italian", "French", "Spanish",
         "Dutch", "Swedish", "Danish", "Portuguese", "Finnish",
         "Norwegian", "Greek", "Turkish", "Hungarian", "Polish", None]
 
+#=========================================================================#
+PDUADDR_DEC_TRANS = string.maketrans("abcde", "*#abc")
+PDUADDR_ENC_TRANS = string.maketrans("*#abc", "abcde")
 
 #=========================================================================#
 CALL_DIRECTION = { \
diff --git a/framework/subsystems/ogsmd/gsm/convert.py b/framework/subsystems/ogsmd/gsm/convert.py
index 4cdfcae..d7fcd31 100644
--- a/framework/subsystems/ogsmd/gsm/convert.py
+++ b/framework/subsystems/ogsmd/gsm/convert.py
@@ -14,7 +14,8 @@ Module: convert
 GSM conversion functions.
 """
 from datetime import datetime
-from const import GSMALPHABET, GSMEXTBYTE, GSMEXTALPHABET
+from const import GSMALPHABET, GSMEXTBYTE, GSMEXTALPHABET, \
+		PDUADDR_ENC_TRANS, PDUADDR_DEC_TRANS
 from codecs import register, CodecInfo
 
 #=========================================================================#
@@ -55,6 +56,10 @@ def decodePDUNumber(bs):
 
     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)
 
 #=========================================================================#
@@ -67,8 +72,10 @@ def encodePDUNumber(num):
         if (len(num.number)*7)%8 <= 4:
             length -= 1
     else:
-        enc = bcd_encode(num.number)
-        length = len(num.number)
+        # 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] )
 
 #=========================================================================#
@@ -83,6 +90,9 @@ def bcd_decode(bs):
 def bcd_encode(number):
 #=========================================================================#
     bcd = []
+    if type(number) is str:
+        # Need to encode with base 16 for the special "digits"
+        number = [int(i, 16) for i in number]
     for i in range(0, len(number)-1, 2):
         bcd.append( int(number[i]) | int(number[i+1]) << 4 )
     if len(number)%2 == 1:
diff --git a/framework/subsystems/ogsmd/gsm/sms.py b/framework/subsystems/ogsmd/gsm/sms.py
index e650277..7c3b7e6 100644
--- a/framework/subsystems/ogsmd/gsm/sms.py
+++ b/framework/subsystems/ogsmd/gsm/sms.py
@@ -297,11 +297,10 @@ class AbstractSMS(object):
     def pdu( self ):
         pdubytes = []
         if self.sca:
-            scabcd = bcd_encode( self.sca.number )
-            pdubytes.append( len(scabcd) + 1 )
-            pdubytes.append( 0x80 | (self.sca.type << 4) | self.sca.dialplan )
+            scabcd = encodePDUNumber( self.sca )
+            # SCA has non-standard length
+            scabcd[0] = len( scabcd ) - 1
             pdubytes.extend( scabcd )
-            # FIXME This won't work with alphanumeric "numbers"
         else:
             pdubytes.append( 0 )
 

-- 
FSO frameworkd Debian packaging



More information about the pkg-fso-commits mailing list