[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:45 UTC 2009
The following commit has been merged in the master branch:
commit f9638c6abc0c1590c3286fa35b3455040901d256
Author: Daniel Willmann <daniel at totalueberwachung.de>
Date: Wed Dec 24 02:03:28 2008 +0100
ogsmd: Make ucs2hexToUnicode into a codec (gsm_ucs2)
diff --git a/framework/subsystems/ogsmd/gsm/convert.py b/framework/subsystems/ogsmd/gsm/convert.py
index 8d43c25..11179da 100644
--- a/framework/subsystems/ogsmd/gsm/convert.py
+++ b/framework/subsystems/ogsmd/gsm/convert.py
@@ -15,7 +15,7 @@ GSM conversion functions.
"""
from datetime import datetime
from const import GSMALPHABET, GSMEXTBYTE, GSMEXTALPHABET, \
- PDUADDR_ENC_TRANS, PDUADDR_DEC_TRANS
+ PDUADDR_ENC_TRANS, PDUADDR_DEC_TRANS
from codecs import register, CodecInfo
#=========================================================================#
@@ -145,6 +145,8 @@ def gsmcodec(name):
#=========================================================================#
if name == "gsm_default":
return CodecInfo( gsm_default_encode, gsm_default_decode, name="gsm_default" )
+ elif name == "gsm_ucs2":
+ return CodecInfo( UnicodeToucs2hex, ucs2hexToUnicode, name="gsm_ucs2" )
register( gsmcodec )
@@ -204,16 +206,25 @@ def ira_pdu_to_string( pdu ):
return unpack_sevenbit( bytes ).strip()
#=========================================================================#
-def ucs2hexToUnicode( text ):
+def ucs2hexToUnicode( text, errors="strict" ):
#=========================================================================#
- bytes = ( int( text[ i:i+2 ], 16 ) for i in range( 0, len(text), 2 ) )
- return "".join( map( chr, bytes ) ).decode("utf_16_be")
+ bytes = []
+ for i in range( 0, len(text), 2 ):
+ try:
+ bytes.append( int( text[i:i+2], 16 ) )
+ except ValueError:
+ raise UnicodeError
+ if errors == 'strict': raise UnicodeError,"invalid PDU Byte"
+ elif errors == 'replace': bytes.append(0) # replace with 0
+ elif errors == 'ignore': bytes.append(0)
+ else: raise UnicodeError, "unknown error handling"
+ return "".join( map( chr, bytes ) ).decode("utf_16_be") , len(text)
#=========================================================================#
-def UnicodeToucs2hex( text ):
+def UnicodeToucs2hex( text, errors="strict" ):
#=========================================================================#
bytes = map( ord, text.encode("utf_16_be") )
- return "".join( ( "%02X" % i for i in bytes) )
+ return "".join( ( "%02X" % i for i in bytes) ), len(text)
#=========================================================================#
if __name__ == "__main__":
@@ -221,5 +232,5 @@ if __name__ == "__main__":
assert ira_pdu_to_string( "33DAED46ABD56AB5186CD668341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D168341A8D46A3D100" ) == "347745555103", "ira_pdu_to_string failed"
print "OK"
- assert ucs2hexToUnicode( "00420072006100730069006C002000540065006C00650063006F006D" ) == "Brasil Telecom", "ucs2hexToUnicode failed"
+ assert "00420072006100730069006C002000540065006C00650063006F006D".decode("gsm_ucs2") == "Brasil Telecom", "ucs2hexToUnicode failed"
print "OK"
diff --git a/framework/subsystems/ogsmd/modems/abstract/mediator.py b/framework/subsystems/ogsmd/modems/abstract/mediator.py
index 1c1437b..fc0debd 100644
--- a/framework/subsystems/ogsmd/modems/abstract/mediator.py
+++ b/framework/subsystems/ogsmd/modems/abstract/mediator.py
@@ -789,7 +789,7 @@ class SimRetrieveEntry( SimMediator ):
index = int( index )
number = number.strip( '"' )
ntype = int( ntype )
- name = convert.ucs2hexToUnicode( name.strip('"') )
+ name = name.strip('"').decode("gsm_ucs2")
self._ok( name, const.phonebookTupleToNumber( number, ntype ) )
#=========================================================================#
@@ -1231,7 +1231,7 @@ class NetworkSendUssdRequest( NetworkMediator ): # s
def trigger( self ):
# FIXME request code validation
# when using UCS2 we need to encode the request, although it is just a number :/
- request = convert.UnicodeToucs2hex( self.request )
+ request = self.request.encode("gsm_ucs2")
commchannel = self._object.modem.communicationChannel( "UnsolicitedMediator" ) # exceptional, since CUSD is semi-unsolicited
commchannel.enqueue( '+CUSD=1,"%s",15' % request, self.responseFromChannel, self.errorFromChannel )
diff --git a/framework/subsystems/ogsmd/modems/abstract/unsolicited.py b/framework/subsystems/ogsmd/modems/abstract/unsolicited.py
index 455d61f..8faabc2 100644
--- a/framework/subsystems/ogsmd/modems/abstract/unsolicited.py
+++ b/framework/subsystems/ogsmd/modems/abstract/unsolicited.py
@@ -190,7 +190,7 @@ class AbstractUnsolicitedResponseDelegate( object ):
self._object.IncomingUssd( mode, "" )
elif len( values ) == 3:
mode = const.NETWORK_USSD_MODE[int(values[0])]
- message = convert.ucs2hexToUnicode(values[1].strip( '" ' ) )
+ message = values[1].strip( '" ' ).decode("gsm_ucs2")
self._object.IncomingUssd( mode, message )
else:
logger.warning( "Ignoring unknown format: '%s'" % righthandside )
--
FSO frameworkd Debian packaging
More information about the pkg-fso-commits
mailing list