Hi,
> I'm trying to build some doug app connected to asterisk and
> I'm fighting with a few obstacles.[...]
[...]
> With asterisk dtmfmode rfc2833
> - I get an exeption: can't decode format <PTMarker
telephone-event(dynamic)/8000/None at -4859fc74>
After some modifications it seems to move in the desired direction.
In shtoom/app/doug.py - incomingRTP I changed
- if packet.header.pt is PT_NTE:
+ if packet.header.ct is PT_NTE:
and I added to shtoom/doug/voiceapp.py quite
some things from shtoom/doug/leg.py regarding
the DTMF processing.
Now the ConferencingApp's announceFile aborts if
a DTMF event occurs.
My changes are more based on guesses than on knowledge ;-)
especially I'm uncertain if they follow Anthonys intentions,
therefore any advice would be appreciated!
Regards,
Frank
Index: shtoom/app/doug.py
===================================================================
--- shtoom/app/doug.py (Revision 1597)
+++ shtoom/app/doug.py (Arbeitskopie)
@@ -191,15 +191,15 @@
def incomingRTP(self, callcookie, packet):
from shtoom.rtp.formats import PT_NTE
v = self._voiceapps[callcookie]
- if packet.header.pt is PT_NTE:
+ if packet.header.ct is PT_NTE:
data = packet.data
key = ord(data[0])
start = (ord(data[1]) & 128) and True or False
if start:
- #print "start inbound dtmf", key
+ print "start inbound dtmf", key
v.va_startDTMFevent(nteMap[key], callcookie)
else:
- #print "stop inbound dtmf", key
+ print "stop inbound dtmf", key
v.va_stopDTMFevent(nteMap[key], callcookie)
return
try:
Index: shtoom/doug/voiceapp.py
===================================================================
--- shtoom/doug/voiceapp.py (Revision 1597)
+++ shtoom/doug/voiceapp.py (Arbeitskopie)
@@ -12,6 +12,7 @@
from shtoom.doug.events import TimeoutEvent, CallStartedEvent
from shtoom.doug.events import CallAnsweredEvent, CallRejectedEvent
from shtoom.doug.events import CallEndedEvent
+from shtoom.doug.events import DTMFReceivedEvent
#from shtoom.doug.exceptions import *
from shtoom.doug.statemachine import StateMachine
from twisted.internet import reactor
@@ -41,6 +42,9 @@
self.__appl = appl
self.__legs = OrderedDict()
self.__dict__.update(kwargs)
+ self.__currentDTMFKey = None
+ self.__collectedDTMFKeys = ''
+ self.__dtmfSingleMode = True
super(VoiceApp, self).__init__(defer, **kwargs)
def getDefaultLeg(self):
@@ -186,3 +190,28 @@
lambda k=key: self.__appl.startDTMF(cookie, k))
reactor.callLater(i+n*(duration+delay)+duration,
lambda k=key: self.__appl.stopDTMF(cookie, k))
+
+ def _inboundDTMFKeyPress(self, dtmf):
+ if self.__dtmfSingleMode:
+ self._triggerEvent(DTMFReceivedEvent(dtmf, self))
+ else:
+ self.__collectedDTMFKeys += dtmf
+ if dtmf in ('#', '*'):
+ dtmf, self.__collectedDTMFKeys = self.__collectedDTMFKeys, ''
+ self._triggerEvent(DTMFReceivedEvent(dtmf, self))
+
+ def va_startDTMFevent(self, dtmf, cookie=None):
+ c = self.__currentDTMFKey
+ if dtmf:
+ if c is not dtmf:
+ self.va_stopDTMFevent(c)
+ self.__currentDTMFKey = dtmf
+ self._inboundDTMFKeyPress(dtmf)
+ else:
+ # repeat
+ pass
+
+ def va_stopDTMFevent(self, dtmf, cookie=None):
+ # For now, I only care about dtmf start events
+ if dtmf == self.__currentDTMFKey:
+ self.__currentDTMFKey = None
_______________________________________________
Shtoom mailing list
[email protected]
http://mail.python.org/mailman/listinfo/shtoom