diff options
Diffstat (limited to 'clients/ivamVoiceBox.py')
-rw-r--r-- | clients/ivamVoiceBox.py | 60 |
1 files changed, 40 insertions, 20 deletions
diff --git a/clients/ivamVoiceBox.py b/clients/ivamVoiceBox.py index 9dc84f9..b05de03 100644 --- a/clients/ivamVoiceBox.py +++ b/clients/ivamVoiceBox.py @@ -13,6 +13,8 @@ class VoiceBox(ivamApi.Processor): # State currentState = STATE_INVALID fileSuffix = ".ulaw.gz" + recordOnly = False + noRecord = False def getClip(self, s): return "%s/%s%s" % (self.directory, s, self.fileSuffix) @@ -25,8 +27,11 @@ class VoiceBox(ivamApi.Processor): self.callerNumber = callerNumber self.ringNumber = ringNumber - self.currentState = self.STATE_WELCOME - c.playClip(self.getClip("welcome")) + if self.noRecord: + self.authNow(c) + else: + self.currentState = self.STATE_WELCOME + c.playClip(self.getClip("welcome")) def loginComplete(self, c): self.messages = self.getMessageNames() @@ -41,6 +46,14 @@ class VoiceBox(ivamApi.Processor): self.currentState = self.STATE_MESSAGE_BEEP c.playClip(self.getClip("beep")) + + def authNow(self, c): + self.currentState = self.STATE_AUTH + self.inputPin = "" + c.stopPlayback() + c.playClip(self.getClip("auth")) + c.setTimeout(self.AUTH_TIMEOUT) + def onClipFinish(self, c, fname): if ivamCore.DEBUG: @@ -121,7 +134,7 @@ class VoiceBox(ivamApi.Processor): if ivamCore.DEBUG: ivamCore.log("onDtmfEvent(%c)" % event) - if ((self.currentState == self.STATE_WELCOME) or (self.currentState == self.STATE_WELCOME_BEEP)) and (event == '0'): + if ((self.currentState == self.STATE_WELCOME) or (self.currentState == self.STATE_WELCOME_BEEP)) and (event == '0') and not self.recordOnly: if self.pin == "": self.loginComplete(c) @@ -131,11 +144,7 @@ class VoiceBox(ivamApi.Processor): c.hangup() else: - self.currentState = self.STATE_AUTH - self.inputPin = "" - c.stopPlayback() - c.playClip(self.getClip("auth")) - c.setTimeout(self.AUTH_TIMEOUT) + self.authNow(c) elif self.currentState == self.STATE_AUTH: c.stopPlayback() @@ -227,7 +236,7 @@ class VoiceBox(ivamApi.Processor): os.environ["LENGTH"] = `c.recordLength` os.environ["SEC_LENGTH"] = "%0.1f" % (c.recordLength/8000.0) - ivamCore.log("Starting new message notification program.") + ivamCore.log("Starting new message notification program ('%s %s')." % (self.messageProgram, fname)) r=os.spawnvp(os.P_WAIT, self.messageProgram, (self.messageProgram, fname)) ivamCore.log("Program finished (return value is %i)." % r) @@ -276,19 +285,30 @@ class VoiceBox(ivamApi.Processor): -def setupVoiceBox(dname, pin = "-", recordTime = 60, email = "root"): - if dname.find("/") == -1: - dname = "%s/%s" % (ivamDefs.spoolDirectory, dname) +def setupVoiceBox(dname, pin = "-", recordTime = 60, email = "root", umask = 0007): + + u = os.umask(umask) + try: + + if dname.find("/") == -1: + dname = "%s/%s" % (ivamDefs.spoolDirectory, dname) - os.mkdir(dname, 0770) - os.mkdir("%s/messages" % dname, 0770) + os.mkdir(dname, 0777) + os.mkdir("%s/messages" % dname, 0777) - setContents("%s/PIN" % dname, pin) - setContents("%s/RECORD_TIME" % dname, `recordTime`) - setContents("%s/EMAIL" % dname, email) + setContents("%s/PIN" % dname, pin) + setContents("%s/RECORD_TIME" % dname, `recordTime`) + setContents("%s/EMAIL" % dname, email) + + ulaw = map(lambda e: e+".ulaw.gz", ('welcome', 'beep', 'empty', 'nomoremessages', 'auth', 'authok', 'removed')) - ulaw = map(lambda e: e+".ulaw.gz", ('welcome', 'beep', 'empty', 'nomoremessages', 'auth', 'authok', 'removed')) + for f in ulaw: + os.symlink("%s/%s" % (ivamDefs.ulawDirectory, f), "%s/%s" % (dname, f)) - for f in ulaw + ['newmessage', 'README']: - os.symlink("%s/%s" % (ivamDefs.shareDirectory, f), "%s/%s" % (dname, f)) + os.symlink("%s/%s" % (ivamDefs.binDirectory, "ivam-newmessage"), "%s/%s" % (dname, "newmessage")) + os.symlink("%s/%s" % (ivamDefs.shareDirectory, "README.VoiceBox"), "%s/%s" % (dname, "README")) + + return dname + finally: + os.umask(u) |