import sys import string import pjsua as pj import classServer import LogFileClass from time import sleep def log_cb(level, str, len): print "--------starting Handler--------" # Receive events from incoming Call class Account(pj.AccountCallback): def on_incoming_call(self, call): global current_call current_call = call call_cb = Calling(current_call) current_call.set_callback(call_cb) logger.logEvent(current_call) sleep(0.5) call.answer(200) logger.logEvent("Answer call") sleep(0.5) if current_call <> None: logger.logEvent("Hangup call") call.hangup() logger.logEvent('200') 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": logger.logEvent("Call Connecting") logger.logEvent('200') server.sendData('200') if self.call.info().last_reason == "Busy Here": logger.logEvent('Number busy or Offline') server.sendData('486') logger.logEvent('486') if self.call.info().state == pj.CallState.DISCONNECTED: logger.logEvent('Call Disconnected') 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 global acc_cfg global handler global state handler = sys.argv[1] port = sys.argv[2] lib = pj.Lib() stop = False logger = LogFileClass.Logging('sipHandler.log') 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() server = classServer.ServerHandler(port) logger.logEvent('Connect to Controller') conn = server.openSocket() message = server.receiveData(30) num = message[7:] if handler == 'sip': logger.logEvent('Beeing SIP') acc_cfg = pj.AccountConfig("132.230.4.8","mpselftest1","1mpselftest") elif handler == 'landline': logger.logEvent('Beeing Landline') acc_cfg = pj.AccountConfig("sipgate.de","1289459","MMW9AX") elif handler == 'unisip': logger.logEvent('Beeing University SIP') acc_cfg = pj.AccountConfig("132.230.252.228", "4976120397897", "hB8M3WyFt61C") else: logger.logEvent('Unknown Message') server.sendData('Unknown Message') server.closeConnection() sys.exit(1) try: logger.logEvent('Register Account to SIP server') acc = lib.create_account(acc_cfg, cb=Account()) if acc.info().reg_status < 700: if message.find('RECEIVER') <> -1: logger.logEvent(acc.info().reg_status) server.sendData('ready') logger.logEvent('Receiver Handler Ready') while 1: data = server.receiveData(3) if data == "487": logger.logEvent('Terminate') stop = True break elif message.find('CALLER') <> -1: logger.logEvent(acc.info().reg_status) server.sendData('ready') logger.logEvent('Caller Handler Ready') while 1: data = server.receiveData(3) if event == "start" and num <> "": logger.logEvent(event) logger.logEvent('Make a call to: ' + num) number = "sip:"+num+"@132.230.4.8" make_call(number) if data == "487": stop = True logger.logEvent('Terminate') break else: logger.logEvent('Unknow Message') server.sendData('Unknow Message') server.closeConnection() sys.exit(1) 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