[pkg-fso-commits] [SCM] framworkd debian packageing branch, master, updated. milestone2-89-geb27523
Daniel Willmann
daniel at totalueberwachung.de
Sat Aug 23 14:06:19 UTC 2008
The following commit has been merged in the master branch:
commit bfcd83eafb4f9b259a059d64ba0083b53bce6d80
Author: Daniel Willmann <daniel at totalueberwachung.de>
Date: Thu Aug 14 13:32:33 2008 +0200
ogsmd: Move PDU conversion functions to convert.py
Return a datetime object when parsing the time
Rename functions for consistency
diff --git a/framework/subsystems/ogsmd/gsm/convert.py b/framework/subsystems/ogsmd/gsm/convert.py
index 602dc0a..d7011c3 100644
--- a/framework/subsystems/ogsmd/gsm/convert.py
+++ b/framework/subsystems/ogsmd/gsm/convert.py
@@ -13,9 +13,10 @@ Module: convert
GSM conversion functions.
"""
+from datetime import datetime
#=========================================================================#
-def PDUNumberToTuple(bs):
+def decodePDUNumber(bs):
#=========================================================================#
num_type = (bs[0] & 0x70) >> 4
num_plan = (bs[0] & 0x0F)
@@ -29,6 +30,27 @@ def PDUNumberToTuple(bs):
return (num_type, num_plan, number)
#=========================================================================#
+def bcd_decode(bs):
+#=========================================================================#
+ s = "".join(["%1x%1x" % (b & 0xF, b >> 4) for b in bs])
+ if s[-1] == "f":
+ s = s[:-1]
+ return s
+
+#=========================================================================#
+def decodePDUTime(bs):
+#=========================================================================#
+ bs = [((n & 0xf) * 10) + (n >> 4) for n in bs]
+ if bs[0] >= 90: # I don't know if this is the right cut-off point...
+ year = 1900 + bs[0]
+ else:
+ year = 2000 + bs[0]
+ timezone = bs[6]
+ sign = (timezone >> 7) * -2 + 1
+ zone = (timezone & 0x7f) / -4. * sign
+ return ( datetime(year, bs[1], bs[2], bs[3], bs[4], bs[5]), zone )
+
+#=========================================================================#
def tobinary( n ):
#=========================================================================#
s = ""
diff --git a/framework/subsystems/ogsmd/gsm/sms.py b/framework/subsystems/ogsmd/gsm/sms.py
index 8f93b8c..855a71d 100644
--- a/framework/subsystems/ogsmd/gsm/sms.py
+++ b/framework/subsystems/ogsmd/gsm/sms.py
@@ -35,7 +35,7 @@ def decodeSMS( pdu ):
# SCA - Service Center address
sca_len = bytes[offset]
offset += 1
- sms.sca = PDUNumberToTuple( bytes[offset:offset+sca_len] )
+ sms.sca = decodePDUNumber( bytes[offset:offset+sca_len] )
offset += sca_len
# PDU type
@@ -60,7 +60,7 @@ def decodeSMS( pdu ):
# 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 = PDUNumberToTuple( bytes[offset:offset+oa_len] )
+ sms.oa = decodePDUNumber( bytes[offset:offset+oa_len] )
sms.da = sms.oa
offset += oa_len
@@ -74,7 +74,7 @@ def decodeSMS( pdu ):
offset += 1
if sms.pdu_mti == 0:
# SCTS - Service Centre Time Stamp
- sms.scts = parse_time( bytes[offset:offset+7] )
+ sms.scts = decodePDUTime( bytes[offset:offset+7] )
offset += 7
else:
# VP - Validity Period FIXME
@@ -84,7 +84,7 @@ def decodeSMS( pdu ):
offset += 1
elif sms.pdu_vpf == 3:
# Absolute
- sms.vp = parse_time( bytes[offset:offset+7] )
+ sms.vp = decodePDUTime( bytes[offset:offset+7] )
offset += 7
# UD - User Data
@@ -141,27 +141,6 @@ Headers: %s
Message: %s
""" % (self.sca, self.scts, self.pid, self.oa, self.udh, self.ud)
-def bcd_decode(bs):
- s = "".join(["%1x%1x" % (b & 0xF, b >> 4) for b in bs])
- if s[-1] == "f":
- s = s[:-1]
- return s
-
-def parse_time(bs):
- if len(bs) != 7:
- return "timestamp-length-not-7"
- bs = [((n & 0xf) * 10) + (n >> 4) for n in bs]
- if bs[0] >= 90: # I don't know if this is the right cut-off point...
- year = 1900 + bs[0]
- else:
- year = 2000 + bs[0]
- timezone = bs[6]
- if timezone > 0x80:
- zone = "-%.2f" % ((timezone - 0x80) / 4,)
- else:
- zone = "+%.2f" % (timezone / 4,)
- return "%04d-%02d-%02d %02d:%02d:%02d GMT%s" % (year, bs[1], bs[2], bs[3], bs[4], bs[5], zone)
-
if __name__ == "__main__":
pdus = [
"0791448720900253040C914497035290960000500151614414400DD4F29C9E769F41E17338ED06",
--
framworkd debian packageing
More information about the pkg-fso-commits
mailing list