[PATCH] openbsc[master]: bsc_control.py: use ipa.py module

This is merely a historical archive of years 2008-2021, before the migration to mailman3.

A maintained and still updated list archive can be found at https://lists.osmocom.org/hyperkitty/list/gerrit-log@lists.osmocom.org/.

Max gerrit-no-reply at lists.osmocom.org
Mon Dec 12 16:21:03 UTC 2016


Hello Neels Hofmeyr, Harald Welte, Jenkins Builder,

I'd like you to reexamine a change.  Please visit

    https://gerrit.osmocom.org/1266

to look at the new patch set (#9).

bsc_control.py: use ipa.py module

Simplify code by using Ctrl implementation from ipa.py

Change-Id: I25fd7cd4b42126354b72abd60a3837be5d13e159
---
M openbsc/contrib/bsc_control.py
1 file changed, 28 insertions(+), 61 deletions(-)


  git pull ssh://gerrit.osmocom.org:29418/openbsc refs/changes/66/1266/9

diff --git a/openbsc/contrib/bsc_control.py b/openbsc/contrib/bsc_control.py
index ba86947..cd2ba6d 100755
--- a/openbsc/contrib/bsc_control.py
+++ b/openbsc/contrib/bsc_control.py
@@ -1,29 +1,12 @@
 #!/usr/bin/python
 # -*- mode: python-mode; py-indent-tabs-mode: nil -*-
 
-import sys,os, random
+import random
 from optparse import OptionParser
+from ipa import Ctrl
 import socket
-import struct
 
 verbose = False
-
-def prefix_ipa_ctrl_header(data):
-	return struct.pack(">HBB", len(data)+1, 0xee, 0) + data
-
-def ipa_ctrl_header(header):
-        (plen, ipa_proto, osmo_proto) = struct.unpack(">HBB", header)
-        return None if (ipa_proto != 0xee or osmo_proto != 0) else plen
-
-def remove_ipa_ctrl_header(data):
-	if (len(data) < 4):
-		raise BaseException("Answer too short!")
-        plen = ipa_ctrl_header(data[:4])
-        if (None == plen):
-                raise BaseException("Wrong protocol in answer!")
-	if (plen + 3 > len(data)):
-		print "Warning: Wrong payload length (expected %i, got %i)" % (plen, len(data) - 3)
-	return data[4:plen+3], data[plen+3:]
 
 def connect(host, port):
         if verbose:
@@ -34,39 +17,31 @@
         sck.connect((host, port))
         return sck
 
-def send(sck, data):
-	if verbose:
-		print "Sending \"%s\"" %(data)
-	data = prefix_ipa_ctrl_header(data)
-	sck.send(data)
-
-def do_set(var, value, op_id, sck):
-	setmsg = "SET %s %s %s" %(op_id, var, value)
-	send(sck, setmsg)
-
-def do_get(var, op_id, sck):
-	getmsg = "GET %s %s" %(op_id, var)
-	send(sck, getmsg)
-
 def do_set_get(sck, var, value = None):
-        r = random.randint(1, sys.maxint)
-        if (value != None):
-                s = 'SET_REPLY'
-                do_set(var, value, r, sck)
-        else:
-                s = 'GET_REPLY'
-                do_get(var, r, sck)
-        (answer, data) = remove_ipa_ctrl_header(sck.recv(4096))
-        x  = answer.split()
-        if (s == x[0] and str(r) == x[1] and var == x[2]):
-                return None if ('SET_REPLY' == s and value != x[3]) else x[3]
-        return None
+        (r, c) = Ctrl().cmd(var, value)
+        sck.send(c)
+        answer = Ctrl().rem_header(sck.recv(4096))
+        return (answer,) + Ctrl().verify(answer, r, var, value)
 
 def set_var(sck, var, val):
-        return do_set_get(sck, var, val)
+        (a, _, _) = do_set_get(sck, var, val)
+        return a
 
 def get_var(sck, var):
-        return do_set_get(sck, var)
+        (_, _, v) = do_set_get(sck, var)
+        return v
+
+def _leftovers(sck):
+        data = sck.recv(1024)
+        if len(data) != 0:
+                tail = data
+                while True:
+                        (head, tail) = Ctrl().split_combined(tail)
+                        print "Got message:", Ctrl().rem_header(head)
+                        if len(tail) == 0:
+                                break
+                return True
+        return False
 
 if __name__ == '__main__':
         random.seed()
@@ -105,27 +80,19 @@
         if options.cmd_set:
                 if len(args) < 2:
                         parser.error("Set requires var and value arguments")
-	        do_set(args[0], ' '.join(args[1:]), options.op_id, sock)
+                _leftovers(sock)
+                print "Got message:", set_var(sock, args[0], ' '.join(args[1:]))
 
         if options.cmd_get:
                 if len(args) != 1:
                         parser.error("Get requires the var argument")
-	        do_get(args[0], options.op_id, sock)
-
-        data = sock.recv(1024)
-        while (len(data)>0):
-	        (answer, data) = remove_ipa_ctrl_header(data)
-	        print "Got message:", answer
+                _leftovers(sock)
+                (a, _, _) = do_set_get(sock, args[0])
+                print "Got message:", a
 
         if options.monitor:
                 while True:
-                        data = sock.recv(1024)
-                        if len(data) == 0:
+                        if not _leftovers(sock):
                                 print "Connection is gone."
                                 break
-
-                        while len(data) > 0:
-                                (answer, data) = remove_ipa_ctrl_header(data)
-                                print "Got message:", answer
-
         sock.close()

-- 
To view, visit https://gerrit.osmocom.org/1266
To unsubscribe, visit https://gerrit.osmocom.org/settings

Gerrit-MessageType: newpatchset
Gerrit-Change-Id: I25fd7cd4b42126354b72abd60a3837be5d13e159
Gerrit-PatchSet: 9
Gerrit-Project: openbsc
Gerrit-Branch: master
Gerrit-Owner: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Harald Welte <laforge at gnumonks.org>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: Max <msuraev at sysmocom.de>
Gerrit-Reviewer: Neels Hofmeyr <nhofmeyr at sysmocom.de>



More information about the gerrit-log mailing list