summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/20-07-2011/sipCall.py
blob: 51ae240d8d04a94b0db0b170a4112f7948cdbecf (plain) (tree)
1
2
3
4
5
6
7
8

                  
                  

                                                   
                      

 


                            

                                      
 

                                   
 

                                                                       

                                                                  
                                                                                       
                                                                           
                                                             
 
                                                      


                                                      
 
                                                               
                                                                 
                                              
                                              
        
                                                                       
                                                            
                                           


                   
 
        
 

                                     
 
                       
                             
                              


                   
              

                   
                   
 
                   
 

                                                                  

                                                                                     


                                
        

                                                                
                                  
 
            
                                                                 
                                                                                        
                                                                          
                

                                               

                                                

                                                        

                                    
                                                                    

                                                         
 
                                                                          


                                                                                         

                                                                                  
 

                                                           
                                                                            


                                                     

                                                                                                        
                                                                

                                                                                             

                                                
                                                                             

                                        
                                                                  





                                     

                                                                     
                              
                                                  
                                                    
 
                          

            
                                          

                        
                                                     


          
import sys
import pjsua as pj
import classServer
import LogFileClass
logger = LogFileClass.Logging('sipCallHandler.log')
from time import sleep


def log_cb(level, str, len):
    print str, "SIP log"

# Receive events from Call
class MyCallCallback(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=MyCallCallback()
        return acc.make_call(uri, cb)

    except pj.Error, e:
        print "408 " + str(e)
	logger.logEvent('408')
        return None
        

lib = pj.Lib()
stop =False
current_call = None
logger.logEvent('')

while stop <> True:


	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(50097)
	logger.logEvent('Connect to Controller via port 50097') 
	conn = server.openSocket()

	try:
		logger.logEvent('Register Account to SIP server')
		acc_cfg = pj.AccountConfig("132.230.4.8","mpselftest1","1mpselftest")	
		acc = lib.create_account(acc_cfg, cb=pj.AccountCallback())
		
			
		if acc.info().reg_status < 700:

			server.sendData('ready')
			logger.logEvent('Handler Ready')

			while 1:
				try:
					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"
						current_call = make_call(number)

					if data == "487":
						stop = True
						logger.logEvent('Terminate')
						break
	
				except ValueError:
					logger.logEvent("error: Failed retrive message from Controller")
					logger.logEvent('999')
					server.closeConnection()
					logger.logEvent('Close Connection to the Controller')
					 

			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")
sleep(3)
acc.delete()
logger.logEvent('Un-Rigester SIP Account')
lib.destroy()
server.closeConnection()
logger.logEvent('Close Connection to the Controller')
lib = None
acc = None