import sys import classServer import LogFileClass from time import sleep def log_cb(level, str, len): print str, "SIP log" # Receive events from Call class Account(pj.AccountCallback): def on_incoming_call(self, call): current_call = call 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() server.sendData('200') logger.logEvent('200') class Calling(pj.CallCallback): 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") sleep(1) if self.call.info().state <> pj.CallState.DISCONNECTED: logger.logEvent("will Hangup call") current_call.hangup() logger.logEvent('200') server.sendData('200') else: sleep(0.5) 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 port = sys.argv[1] lib = pj.Lib() stop = False logger = LogFileClass.Logging('sipHandler'+port+'.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() while 1: message = server.receiveData(0) handler = message[0:2] state = message[3:5] # Receiver / caller if handler <> 'NO DATA': break if handler == "-S": logger.logEvent('Beeing SIP') acc_cfg = pj.AccountConfig("132.230.4.8","mpselftest1","1mpselftest") elif handler == "-L": logger.logEvent('Beeing Landline') acc_cfg = pj.AccountConfig("sipgate.de","1289459","MMW9AX") elif handler == "-U": logger.logEvent('Beeing University SIP') acc_cfg = pj.AccountConfig("132.230.252.228", "4976120397897", "hB8M3WyFt61C") elif: 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 state == "-R": logger.logEvent(acc.info().reg_status) server.sendData('ready') logger.logEvent('Receiver Handler Ready') while 1: data = server.receiveData(0) if data == "487": logger.logEvent('Terminate') stop = True break elif state == "-C": logger.logEvent(acc.info().reg_status) server.sendData('ready') logger.logEvent('Caller Handler Ready') while 1: data = server.receiveData(0) event = data[0:5] num = data[6:] 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 elif: logger.logEvent('Unknow Message') server.sendData('Unknow Message') server.closeConnection() sys.exit(1) server.closeConnection() logger.logEvent('Close Connection to the Controller') else: logger.logEvent("488 Not Acceptable Here") lib.destroy() lib = None acc = None server.closeConnection() logger.logEvent('Close Connection to the Controller') except ValueError: print "401 Unauthorized " + str(e) logger.logEvent("401 Unauthorized ") logger.logEvent("Goodbye") acc.delete() logger.logEvent('Un-Rigester SIP Account') lib.destroy() server.closeConnection() logger.logEvent('Close Connection to the Controller') lib = None acc = None