INSTALL renamed.

git-svn-id: http://voip.null.ro/svn/yate@2047 acf43c95-373e-0410-b603-e72c3f656dc1
This commit is contained in:
maciej 2008-07-02 13:44:19 +00:00
parent f4e9518b1d
commit 9ef8616f9a
5 changed files with 0 additions and 284 deletions

View File

@ -1 +0,0 @@

View File

@ -1,46 +0,0 @@
#!/usr/bin/python
from twisted.internet import reactor, defer
from yaypm import TCPDispatcherFactory, embeddedStart
from yaypm.flow import go
import logging, yaypm.utils
logger = logging.getLogger('yaypm.examples')
def route(yate):
def on_route(route):
callid = route["id"]
route.ret(True, "dumb/")
def on_execute(execute):
yate.msg("call.answered",
{"id": execute["targetid"],
"targetid": execute["id"]}).enqueue()
logger.debug("Call %s answered." % callid)
def on_dtmf(dtmf):
logger.debug("Dtmf %s received." % dtmf["text"])
yate.msg("chan.masquerade",
{"message" : "chan.attach",
"id": dtmf["targetid"],
"source": "wave/play/./sounds/digits/pl/%s.gsm" % \
dtmf["text"]}).enqueue()
dtmfid = dtmf["id"]
yate.onwatch("chan.dtmf",
lambda m : m["id"] == dtmfid).addCallback(on_dtmf)
dtmf.ret(True)
dtmf = yate.onmsg("chan.dtmf",
lambda m : m["id"] == execute["id"])
dtmf.addCallback(on_dtmf)
execute = yate.onwatch("call.execute",
lambda m : m["id"] == callid)
execute.addCallback(on_execute)
yate.onmsg("call.route").addCallback(on_route)
yate.onmsg("call.route",
lambda m : m["called"] == "ivr").addCallback(on_route)
if __name__ in ["__main__", "__embedded_yaypm_module__"]:
logger.setLevel(logging.DEBUG)
yaypm.utils.setup(lambda yate: go(route(yate)))

View File

@ -1,52 +0,0 @@
#!/usr/bin/python
from twisted.internet import reactor, defer
from yaypm import TCPDispatcherFactory, AbandonedException
import logging, yaypm.utils
logger = logging.getLogger('yaypm.examples')
@defer.inlineCallbacks
def ivr(yate, callid):
try:
end = yate.onwatch("chan.hangup", lambda m : m["id"] == callid)
execute = yield yate.onwatch("call.execute",
lambda m : m["id"] == callid,
until = end)
targetid = execute["targetid"]
yate.msg("call.answered",
{"id": targetid,
"targetid": callid}).enqueue()
logger.debug("Call %s answered." % callid)
while True:
dtmf = yield yate.onmsg("chan.dtmf",
lambda m : m["id"] == callid,
end)
logger.debug("Dtmf %s received." % dtmf["text"])
yate.msg("chan.masquerade",
{"message" : "chan.attach",
"id": targetid,
"source": "wave/play/./sounds/digits/pl/%s.gsm" % \
dtmf["text"]}).enqueue()
dtmf.ret(True)
except AbandonedException, e:
logger.debug("Call %s abandoned." % callid)
@defer.inlineCallbacks
def route(yate):
while True:
route = yield yate.onmsg("call.route", lambda m : m["called"] == "ivr")
ivr(yate, route["id"])
route.ret(True, "dumb/")
if __name__ in ["__main__", "__embedded_yaypm_module__"]:
logger.setLevel(logging.DEBUG)
yaypm.utils.setup(lambda yate: route(yate))

View File

@ -1,185 +0,0 @@
#!/usr/bin/python
"""
pbx.py
Copyright (C) 2005 Maciek Kaminski
Very poor man's pbx.
"""
from yaypm import TCPDispatcherFactory, AbandonedException
from yaypm.utils import sleep, XOR, ConsoleFormatter
from yaypm.flow import go, getResult
from twisted.internet import reactor
import logging, yaypm, time
logger = logging.getLogger('pbx')
def blind_transfer(yate, callid, targetid, transferto, returnto):
try:
yate.msg(
"chan.masquerade",
{"message" : "call.execute",
"id": targetid, "callto": transferto}).enqueue()
end = yate.onmsg(
"chan.hangup",
lambda m : m["id"] == targetid,
autoreturn = True)
notanswered = yate.onmsg(
"chan.disconnected",
lambda m : m["id"] == targetid,
until = end)
answered = yate.onwatch(
"call.answered",
lambda m : m["targetid"] == targetid,
until = end)
yield XOR(answered, notanswered)
what, m = getResult()
if what == 0:
logger.debug("Blind transfer to: %s done" % transferto)
m.ret(False)
return
else:
logger.debug(
"Blind transfer to: %s failed. Returning to %s" % \
(transferto, returnto))
route = yate.msg("call.route",
{"called": returnto},
until = end)
yield route.dispatch()
if not getResult():
logger.debug("Can't return to: %s" % returnto)
m.ret(False)
return
yate.msg("chan.masquerade",
{"message" : "call.execute",
"id": m["id"],
"callto": route.getRetValue(),
"called": returnto}).enqueue()
yate.ret(m, True)
except AbandonedException, e:
logger.debug(
"Blind transfer to: %s failed. Peer has disconnected" % \
transferto)
def supervised_transfer(yate, callid, targetid, transferto, returnto):
pass
def pbx(yate, callid, targetid, callto, called):
# Pbx function provides dtmf interface to pbx functions
logger.debug("Pbx for %s, %s started" % (callto, callid))
try:
# run until hangup:
end = yate.onwatch(
"chan.hangup",
lambda m : m["id"] ==callid)
while True:
last_time = time.time()
ext = ""
while True:
yield yate.onmsg(
"chan.dtmf",
lambda m : m["id"] == callid,
end,
autoreturn = True)
getResult()
text = dtmf["text"]
dtmf.ret(False)
current_time = time.time()
if last_time - current_time > 3:
ext = text
else:
# * or # initializes transfer
if text in ["#", "*"]:
break
else:
ext += text
# Let routing module resolve the extension
route = yate.msg("call.route",
{"called": ext})
yield route.dispatch()
if not getResult():
# Abandon transfer in case of bad extension
logger.debug(
"Can't route extension: %s. Abandoning transfer." % ext)
continue
else:
print route
ext = route.getRetValue()
if(text in ["*"]):
logger.debug(
"doing supervised transfer on %s to %s." % (callid, ext))
go(supervised_transfer(yate, callid, targetid, ext, called))
break
else:
logger.debug(
"Blind transfer on %s to %s." % (callid, ext))
go(blind_transfer(
yate, callid, targetid, ext, called))
logger.debug("Pbx for %s finished" % callid)
except AbandonedException, e:
logger.debug("Pbx for %s abandoned" % callid)
def main(yate, called):
# Main function will start pbx function for connections comming to a
# given extension.
logger.debug("Watching for calls to: %s" % called)
while True:
# Notice that message watches have to be used here to get
# call.execute attributes after message is handled:
yield yate.onwatch("call.execute", lambda m : m["called"] == called)
execute = getResult()
end = yate.onwatch(
"chan.hangup",
lambda m : m["id"] == execute["targetid"])
answered = yate.onwatch(
"call.answered",
lambda m : m["id"] == execute["targetid"] , end)
answered.addCallbacks(
lambda m, yate, callto: go(pbx(yate, m["id"], m["targetid"], callto, called)),
lambda m: None,
[yate, execute["callto"]])
if __name__ == '__main__':
hdlr = logging.StreamHandler()
formatter = ConsoleFormatter('%(name)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
yaypm.logger.addHandler(hdlr)
#yaypm.logger.setLevel(logging.DEBUG)
yaypm.flow.logger_flow.setLevel(logging.DEBUG)
#yaypm.logger_messages.setLevel(logging.DEBUG)
yaypm.logger_messages.setLevel(logging.INFO)
logger.setLevel(logging.DEBUG)
logger.addHandler(hdlr)
f = TCPDispatcherFactory(lambda yate: go(main(yate, "maciejka")))
reactor.connectTCP("localhost", 5039, f)
reactor.run()