add osmo-mslookup-client program (#2)

Standalone program using libosmo-mslookup to easily integrate with programs
that want to connect services (SIP, SMS,...) to the current location of a
subscriber. Also useful for manual testing.

For a detailed overview of the D-GSM and mslookup related files, please see the
elaborate comment at the top of mslookup.c (already added in an earlier patch).

Resubmit of 637bbfcd92 after revert in
41fe362591.

Change-Id: Ie39d30e20461ab10ae3584863d8bfc6b76a12f37
This commit is contained in:
Neels Hofmeyr
2019-11-20 12:37:41 +01:00
committed by Oliver Smith
parent 3a9f267983
commit 52ef60fe96
8 changed files with 957 additions and 1 deletions

View File

@@ -1 +1,4 @@
SUBDIRS = systemd
SUBDIRS = \
systemd \
dgsm \
$(NULL)

4
contrib/dgsm/Makefile.am Normal file
View File

@@ -0,0 +1,4 @@
EXTRA_DIST = \
osmo-mslookup-pipe.py \
osmo-mslookup-socket.py \
$(NULL)

View File

@@ -0,0 +1,24 @@
#!/usr/bin/env python3
# vim: shiftwidth=4 tabstop=4 expandtab
import subprocess
import json
def query_mslookup(query_str):
result = {'result': 'not-found'}
proc = subprocess.Popen(('osmo-mslookup-client', '-f', 'json', query_str),
stdout=subprocess.PIPE)
for line in iter(proc.stdout.readline,''):
if not line:
break
response = json.loads(line)
if response.get('result') == 'result':
result = response
print('Response: %r' % response)
return result
if __name__ == '__main__':
import sys
query_str = '1000-5000@sip.voice.12345.msisdn'
if len(sys.argv) > 1:
query_str = sys.argv[1]
print('Final result: %r' % query_mslookup(query_str))

View File

@@ -0,0 +1,35 @@
#!/usr/bin/env python3
# vim: shiftwidth=4 tabstop=4 expandtab
import socket
import time
MSLOOKUP_SOCKET_PATH = '/tmp/mslookup'
def query_mslookup_socket(query_str, socket_path=MSLOOKUP_SOCKET_PATH):
mslookup_socket = socket.socket(socket.AF_UNIX, socket.SOCK_SEQPACKET)
mslookup_socket.setblocking(True)
mslookup_socket.connect(socket_path)
result = {'result': 'not-found'}
column_names = mslookup_socket.recv(1024).decode('ascii')
if not column_names:
return result
column_names = column_names.split('\t')
mslookup_socket.sendall(query_str.encode('ascii'))
while True:
csv = mslookup_socket.recv(1024).decode('ascii')
if not csv:
break
response = dict(zip(column_names, csv.split('\t')))
if response.get('result') == 'result':
result = response
print('Response: %r' % response)
return result
if __name__ == '__main__':
import sys
print(
'\nPlease run separately: osmo-mslookup-client --socket /tmp/mslookup -d\n')
query_str = '1000-5000@sip.voice.12345.msisdn'
if len(sys.argv) > 1:
query_str = sys.argv[1]
print('Final result: %r' % query_mslookup_socket(query_str))