From 8c16ed8663a52c827ed562ea9bdbd7de02a48906 Mon Sep 17 00:00:00 2001 From: gsmselftest Date: Thu, 20 Oct 2011 18:14:09 +0200 Subject: almost final version --- For Weekly Test/tricode/SIPHandler.py | 252 ++++++++++++++++++++++++++++++++++ 1 file changed, 252 insertions(+) create mode 100755 For Weekly Test/tricode/SIPHandler.py (limited to 'For Weekly Test/tricode/SIPHandler.py') diff --git a/For Weekly Test/tricode/SIPHandler.py b/For Weekly Test/tricode/SIPHandler.py new file mode 100755 index 0000000..4a6b435 --- /dev/null +++ b/For Weekly Test/tricode/SIPHandler.py @@ -0,0 +1,252 @@ +import sys +import string +import pjsua as pj +import ServerClass +import LogFileClass +import setproctitle +from time import sleep + +def log_cb(level, str, len): + + print "" + +# Receive events from incoming Call +class Account(pj.AccountCallback): + + def on_incoming_call(self, call): + global current_call + + print 'Incoming Call' + current_call = call + call_cb = Calling(current_call) + current_call.set_callback(call_cb) + + logger.logEvent(current_call) + + call.answer(200) + logger.logEvent("Answer call") + print 'Answer Call' + if current_call <> None: + logger.logEvent("Hangup call") + print 'Hangup Call' + call.hangup() + + logger.logEvent('CALL OK') + +class Calling(pj.CallCallback): + + def __init__(self, call=None): + pj.CallCallback.__init__(self, call) + + def on_state(self): + global current_call + + if self.call.info().state <> pj.CallState.DISCONNECTED: + if self.call.info().state_text == "CONNECTING": + print 'Call Connecting' + logger.logEvent("Call Connecting") + logger.logEvent('200') + server.sendData('CALL OK') + + if self.call.info().last_reason == "Busy Here": + print 'Number busy or offline' + logger.logEvent('Number busy or Offline') + server.sendData('CALL NOT OK') + logger.logEvent('CALL NOT OK') + + if self.call.info().state == pj.CallState.DISCONNECTED: + logger.logEvent('Call Disconnected') + print 'Call Discont' + current_call = None + + +def make_call(uri): + + try: + + cb=Calling() + return acc.make_call(uri, cb) + + except pj.Error, e: + print "408 " + str(e) + logger.logEvent('408') + return None + +def greeting(): + global server + global status + global port + + port = sys.argv[2] + server = None + status = None + + server = ServerClass.ServerHandler(port) + logger.logEvent('try to Connect to Controller') + conn = server.openSocket() + + if server.connected == 1: + if server.receiveData(30) == 'HELLO HANDLER': + print 'GREETING' + server.sendData('HELLO CONTROLLER') + status = 'OK' + else: + status = 'NOT OK' + logger.logEvent('Cant connect to Controller') + sys.exit(1) + +def initLogFile(sipServer): + + global logger + + if sipServer == '132.230.4.8': + nameOfLogFile = 'SIP handler.log' + print '--SIP Asterisk--' + + elif sipServer == 'sipgate.de': + nameOfLogFile = 'Landline handler.log' + print '--Landline--' + + elif sipServer == '132.230.252.228': + nameOfLogFile = 'University SIP handler.log' + print '--university tephone network--' + + logger = LogFileClass.Logging(nameOfLogFile) + +def initState(): + global message + global state + global num + + logger.logEvent('init state') + message = server.receiveData(30) + + if message == 'RECEIVER': + state = 'RECEIVER' + + + elif message[0:6] == 'CALLER': + state = 'CALLER' + no = message[7:] + if sipServer == '132.230.252.228': + num = no[7:] + else: + num = no + print 'INIT STATE', state + +def initHandler(): + global sipServer + global username + global password + + + accConf = sys.argv[1] + username = accConf[0:accConf.find(':')] + + line = accConf[accConf.find(':')+1:] + password = line[0:line.find(':')] + + newLine = line[line.find(':')+1:] + sipServer = newLine[0:newLine.find(':')] + + +lib = pj.Lib() +stop = False + +print 'INIT SYSTEM' + +initHandler() +setproctitle.setproctitle('SIP Handler') +initLogFile(sipServer) + +logger.logEvent('') + +while stop <> True: + + acc_cfg = None + + lib.init(log_cfg = pj.LogConfig(level=1, callback=log_cb)) + transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0)) + + lib.start() + lib.set_null_snd_dev() + + greeting() + + + try: + initState() + acc_cfg = pj.AccountConfig(str(sipServer),str(username),str(password)) + logger.logEvent('Register Account to SIP server') + acc = lib.create_account(acc_cfg, cb=Account()) + + if acc.info().reg_status < 700: + + if state =='RECEIVER': + logger.logEvent(acc.info().reg_status) + server.sendData('RECEIVER READY') + logger.logEvent('Receiver Handler Ready') + + while 1: + + data = server.receiveData(1) + + if data == 'RECEIVE START': + print data + logger.logEvent(data) + + if data == 'TERMINATE CONNECTION': + print data + logger.logEvent('Terminate') + stop = True + break + + elif state =='CALLER': + logger.logEvent(acc.info().reg_status) + server.sendData('CALLER READY') + logger.logEvent('Caller Handler Ready') + + while 1: + + data = server.receiveData(1) + + if data == 'CALL START': + print data + if num <> '': + sleep(3) + logger.logEvent(data) + logger.logEvent('Make a call to: ' + num) + number = "sip:"+num+"@"+sipServer + print number + make_call(number) + else: + logger.logEvent('No number to call') + logger.logEvent('CALL NOT OK') + + if data == 'TERMINATE CONNECTION': + print data + stop = True + logger.logEvent('Terminate') + break + + else: + logger.logEvent('Unknow Message') + server.sendData('Unknow Message') + server.closeConnection() + sys.exit(0.5) + + else: + logger.logEvent("488 Not Acceptable Here") + lib.destroy() + + except ValueError: + print "401 Unauthorized " + str(e) + logger.logEvent("401 Unauthorized ") + +logger.logEvent("Goodbye") +acc.delete() +lib.destroy() +server.closeConnection() +lib = None +acc = None + -- cgit v1.2.3-55-g7522