summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/15-07-2011/LandlineReceiver.py
blob: 607f56dba9861b53080e485b6ce9c33eaff49e7b (plain) (tree)































































































































































                                                                                                      
import sys
import pjsua as pj
import string
import classServer

from time import sleep
from datetime import datetime

stop = False

LOG_LEVEL=2
current_call = None
status = None
global accept
accept = None


# Logging
def log_cb(level, str, len):
    print str, "SIP Handler Receiver Log"



class MyAccountCallback(pj.AccountCallback):
	
	global success

	def __init__(self, account=None):
		pj.AccountCallback.__init__(self, account)

	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)
		print "accept call"

		if current_call <> None:
			accept = True

		if accept == True:
			sleep(0.5)
			current_call.answer(200)
			sleep(1.5)
			current_call.hangup()
			status = 200
			server.sendData(success)

class MyCallCallback(pj.CallCallback):

	def __init__(self, call=None):
		pj.CallCallback.__init__(self, call)

    
	def on_state(self):
	        global current_call
		global success
        
		if self.call.info().state == pj.CallState.CONNECTING:
			print self.call.info().state_text
			status = 200

	        if self.call.info().state == pj.CallState.DISCONNECTED:
			current_call = None
        		print '701 The called party has hung up'

        
lib = pj.Lib()

try:
	
	server = classServer.ServerHandler(50104)
	tried = server.openSocket()

	if server.error != 'No error':
		print server.error
		if server.error == '[Errno 98] Address already in use':
			print 'one should try to kill the port'
			print server.killPort()
			server.closeConection()
	
	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"
    
   
    	lib.start()
    	lib.set_null_snd_dev()


   
	try:
    		acc_cfg = pj.AccountConfig("132.230.4.8", "mpselftest2", "2mpselftest")
    		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)

			server.sendData('ready')

    			while stop <> True:
			
				data = server.receiveData()

				if data == "487":
					stop = True
					break
	
				if current_call == None:
					accept = None
					continue
				else:
					print "Incoming call from :", number
					
        

    
    			transport = None
    			acc.delete()
    			acc = None
    			lib.destroy()
    			lib = None
			server.closeConnection()
			
		else:
			print "Bad Register"

			lib.destroy()
			lib = None
    			acc = None
			server.closeConnection()
			

	except pj.Error, e:
		print "401 Unauthorized " +str(e)
    		lib.destroy()
    		lib = None
    		server.closeConnection()
    		

except pj.Error, e:
    print "Exception: " + str(e)
    lib.destroy()
    lib = None
    server.closeConnection()
    del server