def acceptCall(self, call): from shtoom.doug.leg import Leg log.msg("acceptCall dialog is %r"%(call.dialog), system='doug') calltype = call.dialog.getDirection() if call.cookie is None: cookie = self.getCookie() else: cookie = call.cookie self._calls[cookie] = call d = self._createRTP(cookie, call.getLocalSIPAddress()[0], call.getSTUNState()) if calltype == 'outbound': # Outbound call, trigger the callback immediately d.addCallback(lambda x: cookie) elif calltype == 'inbound': # Otherwise we chain callbacks self.initVoiceapp(cookie) d.addErrback(lambda x: self.rejectedCall(cookie, x)) ad = defer.Deferred() inbound = Leg(cookie, call.dialog) inbound.incomingCall(ad) self._voiceapps[cookie].va_callstart(inbound) d.addCallback(lambda x, ad=ad: ad) else: raise ValueError, "unknown call type %s"%(calltype) d.addErrback(self.bong) return d
def acceptCall(self, call): from shtoom.doug.leg import Leg log.msg("acceptCall dialog is %r" % (call.dialog), system='doug') calltype = call.dialog.getDirection() if call.cookie is None: cookie = self.getCookie() else: cookie = call.cookie self._calls[cookie] = call d = self._createRTP(cookie, call.getLocalSIPAddress()[0], call.getSTUNState()) if calltype == 'outbound': # Outbound call, trigger the callback immediately d.addCallback(lambda x: cookie) elif calltype == 'inbound': # Otherwise we chain callbacks self.initVoiceapp(cookie) d.addErrback(lambda x: self.rejectedCall(cookie, x)) ad = defer.Deferred() inbound = Leg(cookie, call.dialog) inbound.incomingCall(ad) self._voiceapps[cookie].va_callstart(inbound) d.addCallback(lambda x, ad=ad: ad) else: raise ValueError("unknown call type %s" % (calltype)) d.addErrback(self.bong) return d
def test_legConstructor(self): from shtoom.sip import Dialog ae = self.assertEqual d = Dialog() cookie = 'NCookie' l = Leg(cookie, d) ae(l.getCookie(), cookie) ae(l.getDialog(), d) l.setCookie('foo') ae(l.getCookie(), 'foo') # We should be connected to silence at this point class Foo: def handle_media_sample(self, sample, tester=self): tester.fail("WRONG. We should be hearing silence, but we received this sample: %s" % (sample,)) l.set_handler(Foo())
def test_legConstructor(self): from shtoom.sip import Dialog ae = self.assertEquals d = Dialog() cookie = 'NCookie' l = Leg(cookie, d) ae(l.getCookie(), cookie) ae(l.getDialog(), d) l.setCookie('foo') ae(l.getCookie(), 'foo') # We should be connected to silence at this point class Foo: def handle_media_sample(self, sample, tester=self): tester.fail("WRONG. We should be hearing silence, but we received this sample: %s" % (sample,)) l.set_handler(Foo())
def test_legCallSetup(self): from shtoom.sip import Dialog ae = self.assertEquals d = Dialog() cookie = 'NCookie' class A: res = None def good(self, res): self.res = res def bad(self, err): self.res = err l = Leg(cookie, d) a = A() d = defer.Deferred() d.addCallbacks(a.good, a.bad) l.incomingCall(d) ae(a.res, None) l.answerCall(voiceapp=None) twisted.trial.util.wait(d) ae(a.res, cookie) l.rejectCall(Exception('because')) twisted.trial.util.wait(d) ae(a.res, cookie) l = Leg(cookie, d) a = A() d = defer.Deferred() d.addCallbacks(a.good, a.bad) l.incomingCall(d) ae(a.res, None) # XXX should be an exception l.rejectCall(Exception('because')) twisted.trial.util.wait(d) # rejectCall triggers an errback, so we get # Failure(DefaultException(reason)) ae(a.res.value.args, ('because',))
def test_legCallSetup(self): from shtoom.sip import Dialog ae = self.assertEquals d = Dialog() cookie = 'NCookie' class A: res = None def good(self, res): self.res = res def bad(self, err): self.res = err l = Leg(cookie, d) a = A() d = defer.Deferred() d.addCallbacks(a.good, a.bad) l.incomingCall(d) ae(a.res, None) l.answerCall(voiceapp=None) twisted.trial.util.wait(d) ae(a.res, cookie) l.rejectCall(Exception('because')) twisted.trial.util.wait(d) ae(a.res, cookie) l = Leg(cookie, d) a = A() d = defer.Deferred() d.addCallbacks(a.good, a.bad) l.incomingCall(d) ae(a.res, None) # XXX should be an exception l.rejectCall(Exception('because')) twisted.trial.util.wait(d) # rejectCall triggers an errback, so we get # Failure(DefaultException(reason)) ae(a.res.value.args, ('because', ))
def placeCall(self, toURI, fromURI=None): from shtoom.doug.leg import Leg nleg = Leg(cookie=None, dialog=None, voiceapp=self) self.__appl.placeCall(self.__cookie, nleg, toURI, fromURI)