import sys import pjsua as pj from time import sleep import string server = "sipgate.de" username = "1289459" password = "MMW9AX" number = "" LOG_LEVEL = 2 current_call = None is486 = False isConfirmed = False isRinging = False isConnected = False isStopped = False firstTime502 = True firstTime100 = True firstTime408 = True TIMEOUT_LIMIT = 30 # Logging callback def log_cb(level, str, len): print str, # Callback to receive events from account class MyAccountCallback(pj.AccountCallback): def __init__(self, account=None): pj.AccountCallback.__init__(self, account) # 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 global isConfirmed global isConnected global isRinging global is486 if self.call.info().state == pj.CallState.CALLING: print "CALLING..." if self.call.info().last_code == 486: is486 = True if self.call.info().state == pj.CallState.EARLY: isRinging = True if self.call.info().state == pj.CallState.CONFIRMED: isConfirmed = True isConnected = True isRinging = False if self.call.info().state == pj.CallState.DISCONNECTED: current_call = None isConnected = False def make_call(uri): try: print "Making call to", uri cb=MyCallCallback() return acc.make_call(uri, cb) except pj.Error, e: print "Exception: " + str(e) return None print "Whenever something comes from the server (at the moment from you), it will continue. Imitating the server behaviour!" while not isStopped: lib = pj.Lib() lib.init(log_cfg = pj.LogConfig(level=LOG_LEVEL, callback=log_cb)) transport = lib.create_transport(pj.TransportType.UDP, pj.TransportConfig(0)) lib.start() lib.set_null_snd_dev() # server = classServer.ServerHandler(50099) # tried = server.openSocket() # # if server.error != 'No error': # print server.error # if server.error == '[Errno 98] Address already in use': # print "Trying to kill the port" # print server.killPort() # server.closeConection() acc_cfg = pj.AccountConfig(server,username,password) acc = lib.create_account(acc_cfg, cb=MyAccountCallback()) if acc.info().reg_status == 502: if firstTime502: print "CONNECTION ERROR!!" print "Please check your internet connection!\n" firstTime502 = False acc.delete() lib.destroy() lib = None acc = None # server.sendData('NOT ready') continue while acc.info().reg_status == 100: if firstTime100: print "Trying to register." firstTime100 = False while acc.info().reg_status == 408: if firstTime408: print "408: REGISTRATION FAILED DUE TO TIMEOUT!!" print "I will try to check again if I can be successful to register!" firstTime408 = False # server.sendData('NOT ready') if acc.info().reg_status == 200: print ("REGISTRATION IS SUCCESSFUL") #server.sendData('ready') while 1: # try: print "Waiting for server(at the moment YOU!) to send command here:" #This line should be deleted further! startStop = sys.stdin.readline().rstrip("\r\n") #startStop = server.receiveData() if startStop == "start": timeCounterRinging = 0 firstTimeRinging = True while 1: #number = server.receiveData() print "Please enter the number to call:" #This line should be deleted further! number = sys.stdin.readline().rstrip("\r\n")#This line should be deleted further! if number <> "": numberToCall = "sip:"+number+"@"+server current_call = make_call(numberToCall) while 1: if isRinging: sleep(1) timeCounterRinging = timeCounterRinging + 1 if firstTimeRinging: print "RINGING..." firstTimeRinging = False if is486: print "THE NUMBER THAT YOU'VE DIALLED IS BUSY!!" isConfirmed = False isConnected = False isRinging = False is486 = False break if isConnected and isConfirmed: print "CALL SUCCESSFULLY ESTABLISHED!!" sleep(5) current_call.hangup() print "CALL SUCCESSFULLY TERMINATED!!" isConfirmed = False isConnected = False isRinging = False is486 = False break if timeCounterRinging == TIMEOUT_LIMIT and isRinging: current_call.hangup() print "THE NUMBER THAT YOU'VE DIALLED IS NOT ANSWERING!!" isConfirmed = False isConnected = False isRinging = False is486 = False break break if startStop == "stop": isStopped = True break # except ValueError: # print "813 General socket layer error: Failed send message" # server.closeConnection() # del server # server.closeConnection() # del server # server.closeConnection() # del server sleep(2) print "LOGGING OUT..." acc.delete() lib.destroy() lib = None acc = None print "LOGOUT WAS SUCCESSFULL!!"