aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mncc.py2
-rw-r--r--mncc_sock.py32
-rwxr-xr-xregen-mncc-py.sh1
3 files changed, 34 insertions, 1 deletions
diff --git a/mncc.py b/mncc.py
index 94ace48..627ef38 100644
--- a/mncc.py
+++ b/mncc.py
@@ -589,7 +589,7 @@ class struct_sockaddr_storage(Structure):
struct_sockaddr_storage._pack_ = 1 # source:False
struct_sockaddr_storage._fields_ = [
('ss_family', ctypes.c_uint16),
- ('__ss_padding', ctypes.c_char * 118),
+ ('ss_padding', ctypes.c_char * 118),
('__ss_align', ctypes.c_uint64),
]
diff --git a/mncc_sock.py b/mncc_sock.py
index 79e2346..8918c3a 100644
--- a/mncc_sock.py
+++ b/mncc_sock.py
@@ -65,7 +65,39 @@ class mncc_data_frame_msg(mncc.struct_gsm_data_frame, mncc_msg_common):
else:
return "(???)"
+def pad(x, l):
+ if len(x) < l:
+ return x + (l - len(x)) * b'\x00'
+ else:
+ return x
+
class mncc_rtp_msg(mncc.struct_gsm_mncc_rtp, mncc_msg_common):
+ def __init__(self, *args, **kwargs):
+ super().__init__(*args, **kwargs)
+ # we have to do this here to make sure our setters below are used
+ if 'ip' in kwargs:
+ self.ip = kwargs['ip']
+ if 'port' in kwargs:
+ self.port = kwargs['port']
+
+ @property
+ def ip(self):
+ assert self.addr.ss_family == 2
+ return int.from_bytes(self.addr.ss_padding[2:6], 'big')
+ @ip.setter
+ def ip(self, val):
+ self.addr.ss_family = 2
+ val = pad(self.addr.ss_padding[:2], 2) + val.to_bytes(4, 'big') + self.addr.ss_padding[6:]
+ self.addr.ss_padding = val
+
+ @property
+ def port(self):
+ return int.from_bytes(self.addr.ss_padding[:2], 'big')
+ @port.setter
+ def port(self, val):
+ self.addr.ss_family = 2
+ self.addr.ss_padding = val.to_bytes(2, 'big') + self.addr.ss_padding[2:]
+
def __str__(self):
return 'mncc_rtp_msg(type=0x%04x, callref=%u, ip=%x, port=%u)' % (self.msg_type, self.callref, self.ip, self.port)
def __unicode__(self):
diff --git a/regen-mncc-py.sh b/regen-mncc-py.sh
index 08a92f1..4f9e3f3 100755
--- a/regen-mncc-py.sh
+++ b/regen-mncc-py.sh
@@ -4,3 +4,4 @@ echo See https://github.com/trolldbois/ctypeslib
echo
clang2py -k ems -o mncc.py mncc.h
+sed -e 's/__ss_padding/ss_padding/' -i mncc.py