import sys import pjsua as pj import socket import time from time import sleep from datetime import datetime HOST = None PORT = 50020 s = None stop ="false" server = "132.230.4.8" username = "mpselftest2" password = "2mpselftest" LOG_LEVEL=2 current_call = None success = "" number = "" # Logging callback def log_cb(level, str, len): print str, "I am here" # Callback to receive events from account class MyAccountCallback(pj.AccountCallback): def __init__(self, account=None): pj.AccountCallback.__init__(self, account) # Notification on incoming call def on_incoming_call(self, call): global current_call global number if current_call: call.answer(486, "Busy") return number = call.info().remote_uri current_call = call call_cb = MyCallCallback(current_call) current_call.set_callback(call_cb) current_call.answer(180) current_call.answer(200) print "accept call" sleep(5) current_call.hangup() # Callback to receive events from Call class MyCallCallback(pj.CallCallback): def __init__(self, call=None): pj.CallCallback.__init__(self, call) # Notification when call state has changed def on_state(self): global current_call if self.call.info().state_text == "CONNECTING": success = "true" #connection.send(success) if self.call.info().state == pj.CallState.DISCONNECTED: current_call = None print 'Current call is', current_call # Notification when call's media state has changed. def on_media_state(self): if self.call.info().media_state == pj.MediaState.ACTIVE: # Connect the call to sound device call_slot = self.call.info().conf_slot pj.Lib.instance().conf_connect(call_slot, 0) pj.Lib.instance().conf_connect(0, call_slot) #connection.send('establish connection') print "Media is now active" else: print "Media is inactive" lib = pj.Lib() try: for res in socket.getaddrinfo(HOST, PORT, socket.AF_UNSPEC, socket.SOCK_STREAM, 0, socket.AI_PASSIVE): af, socktype, proto, canonname, sa = res try: s = socket.socket(af, socktype, proto) except socket.error, msg: s = None continue try: s.bind(sa) s.listen(1) except socket.error, msg: s.close() s = None continue break if s is None: print 'could not open socket' sys.exit(1) lib.init(log_cfg = pj.LogConfig(level=LOG_LEVEL, callback=log_cb)) transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0)) print "\nListening on", transport.info().host, print "port", transport.info().port, "\n" # Start the library lib.start() lib.set_null_snd_dev() # Create local account acc_cfg = pj.AccountConfig(server, username, password) acc = lib.create_account(acc_cfg, cb=MyAccountCallback()) if acc.info().reg_status < 700: my_sip_uri = "sip:" + transport.info().host + ":" + str(transport.info().port) #connection, addr = s.accept() #print 'Connected by', addr #connection.send('I am ready') while stop <> "true": #data = connection.recv(1024) #if data == "terminated": # break if current_call == None: continue else: print "Incoming call from :", number sleep(4) # Shutdown the library transport = None acc.delete() acc = None lib.destroy() lib = None else: Regis_status= "Bad" print "error when register" lib.destroy() lib = None acc = None except pj.Error, e: print "Exception: " + str(e) lib.destroy() lib = None