summaryrefslogtreecommitdiffstats
path: root/For Weekly Test/Old/20-07-2011/sipCall.py
blob: 51ae240d8d04a94b0db0b170a4112f7948cdbecf (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
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