summaryrefslogblamecommitdiffstats
path: root/For Weekly Test/23-07-2011/sipHandler.py
blob: 419b1dbd580342c5943a16cfc71de18d4d20163e (plain) (tree)

















































































































                                                                                              
             

















































                                                                                         
                             





























                                                                             
import sys
import classServer
import LogFileClass

from time import sleep

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

# Receive events from Call
class Account(pj.AccountCallback):

	def on_incoming_call(self, call):

		current_call = call
		logger.logEvent(current_call)
		sleep(0.5)

		call.answer(200)
		logger.logEvent("Answer call")
		sleep(0.5)

		if current_call <> None:
			logger.logEvent("Hangup call")
			call.hangup()
		
		server.sendData('200')
		logger.logEvent('200')

class Calling(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=Calling()
        return acc.make_call(uri, cb)

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

global acc_cfg
global handler
global state
port = sys.argv[1]

lib 	= pj.Lib()
stop	= False

logger = LogFileClass.Logging('sipHandler'+port+'.log')
logger.logEvent('')

while stop <> True:
	
	acc_cfg = None

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

	while 1:
		message = server.receiveData(0)
		handler	= message[0:2]
		state 	= message[3:5] # Receiver / caller

		if handler <> 'NO DATA':
			break

	if handler == "-S":
		logger.logEvent('Beeing SIP')
		acc_cfg = pj.AccountConfig("132.230.4.8","mpselftest1","1mpselftest")

	elif handler == "-L":
		logger.logEvent('Beeing Landline')
		acc_cfg = pj.AccountConfig("sipgate.de","1289459","MMW9AX")

	elif handler == "-U":
		logger.logEvent('Beeing University SIP')
		acc_cfg = pj.AccountConfig("132.230.252.228", "4976120397897", "hB8M3WyFt61C")

	else:
		logger.logEvent('Unknown Message')
		server.sendData('Unknown Message')
		server.closeConnection()
		sys.exit(1)

	try:

		logger.logEvent('Register Account to SIP server')	
		acc = lib.create_account(acc_cfg, cb=Account())
		
			
		if acc.info().reg_status < 700:

			if state == "-R":
				logger.logEvent(acc.info().reg_status)
				server.sendData('ready')
				logger.logEvent('Receiver Handler Ready')

    				while 1:
			
					data = server.receiveData(0)

					if data == "487":
						logger.logEvent('Terminate')
						stop = True
						break

   			elif state == "-C":
				logger.logEvent(acc.info().reg_status)
				server.sendData('ready')
				logger.logEvent('Caller Handler Ready')

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

					if data == "487":
						stop = True
						logger.logEvent('Terminate')
						break

			else:
				logger.logEvent('Unknow Message')
				server.sendData('Unknow Message')
				server.closeConnection()
				sys.exit(1)

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