summaryrefslogtreecommitdiffstats
path: root/For Weekly Test/15-07-2011/LandlineReceiver.py
blob: 607f56dba9861b53080e485b6ce9c33eaff49e7b (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
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
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