summaryrefslogtreecommitdiffstats
path: root/Code/Server-Code/SIPHandler.py
diff options
context:
space:
mode:
Diffstat (limited to 'Code/Server-Code/SIPHandler.py')
-rw-r--r--[-rwxr-xr-x]Code/Server-Code/SIPHandler.py138
1 files changed, 75 insertions, 63 deletions
diff --git a/Code/Server-Code/SIPHandler.py b/Code/Server-Code/SIPHandler.py
index e446e1a..eb5302c 100755..100644
--- a/Code/Server-Code/SIPHandler.py
+++ b/Code/Server-Code/SIPHandler.py
@@ -5,6 +5,7 @@ import ServerClass
import LogFileClass
import setproctitle
from time import sleep
+import csv
def log_cb(level, str, len):
@@ -13,23 +14,22 @@ def log_cb(level, str, len):
# Receive events from incoming Call
class Account(pj.AccountCallback):
+ def __init__(self, account=None):
+ pj.AccountCallback.__init__(self, account)
+
def on_incoming_call(self, call):
global current_call
- print 'Incoming Call'
+ #print 'Incoming Call'
current_call = call
call_cb = Calling(current_call)
current_call.set_callback(call_cb)
- logger.logEvent(current_call)
+ logger.logEvent('Incoming Call')
call.answer(200)
- logger.logEvent("Answer call")
- print 'Answer Call'
- if current_call <> None:
- logger.logEvent("Hangup call")
- print 'Hangup Call'
- call.hangup()
+
+ sleep(2)
logger.logEvent('CALL OK')
@@ -44,20 +44,23 @@ class Calling(pj.CallCallback):
if self.call.info().state <> pj.CallState.DISCONNECTED:
if self.call.info().state_text == "CONNECTING":
- print 'Call Connecting'
logger.logEvent("Call Connecting")
- logger.logEvent('200')
+ try:
+ logger.logEvent('Try to hangup the call')
+ self.call.hangup()
+ logger.logEvent('Hangup OK')
+ except ValueError:
+ logger.logEvent('hangup failed, waiting destination hangup the call')
+
server.sendData('CALL OK')
if self.call.info().last_reason == "Busy Here":
- print 'Number busy or offline'
logger.logEvent('Number busy or Offline')
server.sendData('CALL NOT OK')
logger.logEvent('CALL NOT OK')
if self.call.info().state == pj.CallState.DISCONNECTED:
logger.logEvent('Call Disconnected')
- print 'Call Discont'
current_call = None
#function to make a call
@@ -68,19 +71,41 @@ def make_call(uri):
return acc.make_call(uri, cb)
except pj.Error, e:
- print "408 " + str(e)
- logger.logEvent('408')
+ logger.logEvent('Error when trying to call, 408')
+ server.sendData('CALL NOT OK')
return None
+def writeToFile():
+ try:
+ string = '--'
+ with open('handler.txt', 'w') as F:
+ writer = csv.writer(F)
+ writer.writerow([string])
+ F.close()
+ except ValueError:
+ print "can't write to file"
+
+def openFile():
+ global sipServer, username, password, ip, portadd
+ global port
+
+ #file format: 'Account:username:password:server:handler:PortName:portCommunication
+ File = open('handler.txt')
+ reader = csv.reader(File, delimiter=':')
+ for row in reader:
+ if str(row[0]) == 'Account':
+ username = str(row[1])
+ password = str(row[2])
+ sipServer = str(row[3])
+ port = int(row[6])
+ File.close()
+ writeToFile()
+
#send greeting message to the controller
def greeting():
- global server
- global status
- global port
- port = sys.argv[2]
+ global server
server = None
- status = None
# create socket communication object
server = ServerClass.ServerHandler(port)
@@ -88,15 +113,15 @@ def greeting():
conn = server.openSocket()
if server.connected == 1:
- #connection to the controller esatablish
+ #connection to the controller establish
+ logger.logEvent('Connection Establish')
if server.receiveData(25) == 'HELLO HANDLER':
- print 'GREETING'
server.sendData('HELLO CONTROLLER')
- status = 'OK'
+ return 1
else:
- status = 'NOT OK'
logger.logEvent('Cant connect to Controller')
- sys.exit(1)
+ del server
+ return 0
def initLogFile(sipServer):
@@ -104,15 +129,15 @@ def initLogFile(sipServer):
if sipServer == '132.230.4.8':
nameOfLogFile = 'SIP handler.log'
- print '--SIP Asterisk--'
+ #print '--SIP Asterisk--'
elif sipServer == 'sipgate.de':
nameOfLogFile = 'Landline handler.log'
- print '--Landline--'
+ #print '--Landline--'
elif sipServer == '132.230.252.228':
nameOfLogFile = 'University SIP handler.log'
- print '--university tephone network--'
+ #print '--university tephone network--'
logger = LogFileClass.Logging(nameOfLogFile)
@@ -127,7 +152,6 @@ def initState():
if message == 'RECEIVER':
state = 'RECEIVER'
-
elif message[0:6] == 'CALLER':
state = 'CALLER'
no = message[7:]
@@ -137,30 +161,13 @@ def initState():
num = no[7:]
else:
num = no
- print 'INIT STATE', state
-
-def initHandler():
- global sipServer
- global username
- global password
-
-
- accConf = sys.argv[1]
- username = accConf[0:accConf.find(':')]
-
- line = accConf[accConf.find(':')+1:]
- password = line[0:line.find(':')]
-
- newLine = line[line.find(':')+1:]
- sipServer = newLine[0:newLine.find(':')]
-
lib = pj.Lib()
stop = False
print 'INIT SYSTEM'
-initHandler()
+openFile()
setproctitle.setproctitle('SIP Handler')
initLogFile(sipServer)
@@ -176,9 +183,9 @@ while stop <> True:
lib.start()
lib.set_null_snd_dev()
- greeting()
-
-
+ if greeting() != 1:
+ lib.destroy()
+ break
try:
initState()
acc_cfg = pj.AccountConfig(str(sipServer),str(username),str(password))
@@ -201,7 +208,7 @@ while stop <> True:
print data
logger.logEvent(data)
- #shutting down message
+ #get shutting down message
if data == 'TERMINATE CONNECTION':
print data
logger.logEvent('Terminate')
@@ -218,13 +225,12 @@ while stop <> True:
#start the call
if data == 'CALL START':
- print data
+ #print data
if num <> '':
sleep(3)
logger.logEvent(data)
logger.logEvent('Make a call to: ' + num)
number = "sip:"+num+"@"+sipServer
- print number
make_call(number)
else:
logger.logEvent('No number to call')
@@ -232,7 +238,7 @@ while stop <> True:
#shutting down message
if data == 'TERMINATE CONNECTION':
- print data
+ #print data
stop = True
logger.logEvent('Terminate')
break
@@ -240,21 +246,27 @@ while stop <> True:
else:
logger.logEvent('Unknow Message')
server.sendData('Unknow Message')
- server.closeConnection()
- sys.exit(0.5)
+ break
else:
logger.logEvent("488 Not Acceptable Here")
- lib.destroy()
+ server.sendData('DEVICE NOT READY')
+ break
- except ValueError:
- print "401 Unauthorized " + str(e)
+ except ValueError:
logger.logEvent("401 Unauthorized ")
+ break
logger.logEvent("Goodbye")
-acc.delete()
-lib.destroy()
-server.closeConnection()
-lib = None
-acc = None
+logger.closeLogging()
+# trying to clean everything before shutting down
+try:
+ acc.delete()
+ lib.destroy()
+ lib = None
+ acc = None
+ server.closeConnection()
+ del server
+except ValueError:
+ message = 'trying failure'