[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