summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/Backup/landlineCall.py
blob: 51853b8f1f1eaf19044dc1b5a82437a572a9e9c7 (plain) (tree)












































































































































































































                                                                                                                                                
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!!"