You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
sems/apps/conf_auth/conf_auth.py

127 lines
3.6 KiB

from log import *
from ivr import *
import xmlrpclib
XMLRPC_PROTOCOL = 'http' # could e.g. be https
XMLRPC_SERVER = 'localhost'
XMLRPC_PORT = 23456
XMLRPC_DIR = '/conf_auth'
HINT_TIMEOUT = 10 # seconds until hint msg is played
server_path = XMLRPC_PROTOCOL + '://' + XMLRPC_SERVER + \
':' + str(XMLRPC_PORT) + XMLRPC_DIR
collect = 0
connect = 1
connected = 2
HINT_TIMER = 1
CONF_TIMER = 2
def loopedTTS(str):
af = IvrAudioFile.tts(str)
af.loop = True
return af
class IvrDialog(IvrDialogBase):
welcome_msg = None
auth_ok_msg = None
auth_fail_msg = None
hint_msg = None
state = collect
keys = ''
conf_to = ''
conf_uri = ''
conf_duration = 0
def sessionInfo(self):
print "IVR Session info:"
print " user: ", self.dialog.user
print " domain: ", self.dialog.domain
print " sip_ip: ", self.dialog.sip_ip
print " sip_port: ", self.dialog.sip_port
print " local_uri: ", self.dialog.local_uri
print " remote_uri: ", self.dialog.remote_uri
print " contact_uri: ", self.dialog.contact_uri
print " callid: ", self.dialog.callid
print " remote_tag: ", self.dialog.remote_tag
print " local_tag: ", self.dialog.local_tag
print " remote_party:", self.dialog.remote_party
print " local_party: ", self.dialog.local_party
print " route: ", self.dialog.route
print " next_hop: ", self.dialog.next_hop
print " cseq: ", self.dialog.cseq
def onSessionStart(self):
self.sessionInfo()
self.setNoRelayonly()
self.welcome_msg = IvrAudioFile.tts("Welcome to the conferencing server. "+ \
"Please enter your PIN number, followed by the star key.")
self.auth_ok_msg = IvrAudioFile.tts("Your PIN number is correct, you will be connected now.")
# self.auth_fail_msg = IvrAudioFile.tts("Sorry, you have entered an invalid PIN number. " + \
# "Please try again.")
self.hint_msg = IvrAudioFile.tts("Please enter your PIN number, followed by the star key.")
self.enqueue(self.welcome_msg,None)
def onBye(self):
self.stopSession()
def onDtmf(self,key,duration):
if self.state == collect:
self.flush()
if key == 10:
c = xmlrpclib.ServerProxy(server_path )
erg = c.AuthorizeConference(self.dialog.remote_uri,
self.dialog.local_party, self.keys)
debug('result of authentication: '+ str(erg))
if erg[0] == 'OK':
self.flush()
self.enqueue(self.auth_ok_msg, None)
self.conf_to = erg[1]
self.conf_uri = erg[2]
self.conf_duration = erg[3]
self.state = connect
self.removeTimer(HINT_TIMER)
else:
self.keys = ''
self.auth_fail_msg = IvrAudioFile()
self.auth_fail_msg.open(erg[1], ivr.AUDIO_READ)
#self.flush()
self.enqueue(self.auth_fail_msg, None)
self.setTimer(HINT_TIMER, HINT_TIMEOUT)
else:
self.keys += str(key)
debug("added key, PIN = " + self.keys)
self.setTimer(HINT_TIMER, HINT_TIMEOUT)
def onEmptyQueue(self):
if self.state == connect:
debug("connecting to " + self.conf_to + "uri: " + self.conf_uri)
self.disconnectMedia()
self.mute()
self.connectCallee(self.conf_to, self.conf_uri)
self.state = connected
if (self.conf_duration > 0):
self.setTimer(CONF_TIMER, self.conf_duration)
elif self.state == collect:
self.setTimer(HINT_TIMER, HINT_TIMEOUT)
def onTimer(self, id):
if id == HINT_TIMER and self.state == collect:
self.enqueue(self.hint_msg, None)
elif id == CONF_TIMER and self.state == connected:
debug("conference timer timeout. disconnecting " + self.conf_to + " uri: " + self.conf_uri)
self.terminateOtherLeg()
self.bye()
self.stopSession()