diff --git a/apps/pin_collect/etc/pin_collect.conf b/apps/pin_collect/etc/pin_collect.conf index 3bad31ca..5bfbe95c 100644 --- a/apps/pin_collect/etc/pin_collect.conf +++ b/apps/pin_collect/etc/pin_collect.conf @@ -1,3 +1,6 @@ welcome_msg=/usr/lib/sems/audio/pincollect/welcome.wav pin_msg=/usr/lib/sems/audio/pincollect/enter_pin.wav +fail_msg=/usr/lib/sems/audio/pincollect/fail.wav +auth_fail_msg=/usr/lib/sems/audio/pincollect/notcorrect.wav +auth_xmlrpc_url = http://127.0.0.1:9090/ \ No newline at end of file diff --git a/apps/pin_collect/pin_collect.py b/apps/pin_collect/pin_collect.py index ab06a01d..9a55c467 100644 --- a/apps/pin_collect/pin_collect.py +++ b/apps/pin_collect/pin_collect.py @@ -1,38 +1,32 @@ from log import * from ivr import * +import xmlrpclib +#states collect = 0 connect = 1 connect_failed = 2 - HINT_TIMER = 1 HINT_TIMEOUT = 10 # seconds until hint msg is played -CONF_TIMER = 2 - -# def loopedTTS(str): -# af = IvrAudioFile.tts(str) -# af.loop = True -# return af - class IvrDialog(IvrDialogBase): - + # messages to be played to the caller welcome_msg = None - auth_ok_msg = None - auth_fail_msg = None pin_msg = None + auth_fail_msg = None + fail_msg = None - transfer_cseq = None - dlg_remote_uri = None - + # initial state state = collect + # entered keys keys = '' - conf_to = '' - conf_uri = '' - conf_duration = 0 - conf_participants = 0 + # cseq of transfer request + transfer_cseq = None + # remote_uri of dialog + dlg_remote_uri = None + def sessionInfo(self): debug("IVR Session info:") @@ -75,13 +69,27 @@ class IvrDialog(IvrDialogBase): debug("added key, PIN = " + self.keys) self.setTimer(HINT_TIMER, HINT_TIMEOUT) elif key == 10: - self.state = connect - self.removeTimer(HINT_TIMER) - self.dlg_remote_uri = self.dialog.remote_uri - debug("saved remote_uri "+ self.dlg_remote_uri) - self.transfer_cseq = self.dialog.cseq - self.redirect("sip:" + self.dialog.user + "@" + \ - self.dialog.domain) + + c = xmlrpclib.ServerProxy(config['auth_xmlrpc_url']) + erg = c.authorize(self.dialog.user, self.keys) + + debug('result of authentication: '+ str(erg)) + if erg == 'OK': + self.state = connect + self.removeTimer(HINT_TIMER) + self.dlg_remote_uri = self.dialog.remote_uri + debug("saved remote_uri "+ self.dlg_remote_uri) + self.transfer_cseq = self.dialog.cseq + self.redirect("sip:" + self.dialog.user + "@" + \ + self.dialog.domain) + else: + self.flush() + self.keys = '' + if self.auth_fail_msg == None: + self.auth_fail_msg = IvrAudioFile() + self.auth_fail_msg.open(config['auth_fail_msg'],AUDIO_READ) + self.enqueue(self.auth_fail_msg,None) + def onEmptyQueue(self): if self.state == collect: diff --git a/apps/pin_collect/test/authserver.py b/apps/pin_collect/test/authserver.py new file mode 100644 index 00000000..ec707246 --- /dev/null +++ b/apps/pin_collect/test/authserver.py @@ -0,0 +1,24 @@ +import SimpleXMLRPCServer + +#The server object +class AuthServer: + def __init__(self): + self.keys = {} + + def authorize(self, room, pin): + if self.keys.has_key(room): + if self.keys[room] == pin: + return 'OK' + else: + return 'FAIL' + else: + self.keys[room] = pin + return 'OK' + +authsrv = AuthServer() +server = SimpleXMLRPCServer.SimpleXMLRPCServer(("127.0.0.1", 9090)) +server.register_instance(authsrv) + +#Go into the main listener loop +print "Listening on port 9090" +server.serve_forever()