[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