From 8a7755d6f96e599fe75ac8e5e1c6994138f4b99e Mon Sep 17 00:00:00 2001 From: gsmselftest Date: Wed, 16 Nov 2011 18:06:02 +0100 Subject: under Testing folder --- Under-Testing/Server-Code-New/SIPHandler.py | 287 ++++++++++++++++++++++++++++ 1 file changed, 287 insertions(+) create mode 100644 Under-Testing/Server-Code-New/SIPHandler.py (limited to 'Under-Testing/Server-Code-New/SIPHandler.py') diff --git a/Under-Testing/Server-Code-New/SIPHandler.py b/Under-Testing/Server-Code-New/SIPHandler.py new file mode 100644 index 0000000..b2343f4 --- /dev/null +++ b/Under-Testing/Server-Code-New/SIPHandler.py @@ -0,0 +1,287 @@ +import sys +import string +import pjsua as pj +import ServerClass +import LogFileClass +import setproctitle +from time import sleep +import csv + +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") + server.sendData('CALL OK') + #print 'Answer Call' + try : + logger.logEvent("Try to Hangup the call") + call.hangup() + logger.logEvent("Hangup call") + except ValueError: + logger.logEvent('CALL OK but cant hangup call') + + if current_call <> None: + logger.logEvent("Hangup call") + #print 'Hangup Call' + call.hangup() + + logger.logEvent('CALL OK') + +#creating object for calling +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 + +#function to make a call +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 openFile(): + global sipServer, username, password, ip, portadd + global port + + #String format: + # textFile = 'Account:username:password:server:handler:PortName:portCaller + + reader = csv.reader(open('handler.txt'), delimiter=':') + for row in reader: + if str(row[0]) == 'Account': + username = str(row[1]) + password = str(row[2]) + sipServer = str(row[3]) + #handler = str(row[4]) + #portadd = str(row[5]) + port = int(row[6]) + +#send greeting message to the controller +def greeting(): + global server + global status + + #port = sys.argv[2] + server = None + status = None + + # create socket communication object + server = ServerClass.ServerHandler(port) + logger.logEvent('try to Connect to Controller') + conn = server.openSocket() + + if server.connected == 1: + #connection to the controller esatablish + if server.receiveData(25) == '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:] + + # need special handle for calling from unisip account + 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] # need to read from text file + + 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() +openFile() +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: + + # being receiver state + if state =='RECEIVER': + logger.logEvent(acc.info().reg_status) + server.sendData('RECEIVER READY') + logger.logEvent('Receiver Handler Ready') + + #waiting state + while 1: + + data = server.receiveData(1) + if data == 'RECEIVE START': + print data + logger.logEvent(data) + + #shutting down message + if data == 'TERMINATE CONNECTION': + print data + logger.logEvent('Terminate') + stop = True + break + #being caller state + elif state =='CALLER': + logger.logEvent(acc.info().reg_status) + server.sendData('CALLER READY') + logger.logEvent('Caller Handler Ready') + + while 1: + data = server.receiveData(1) + + #start the call + 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') + + #shutting down message + 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