[commit] r11473 - freeswitch/trunk/scripts/contrib/Phil/pylons
Author: Phil Date: Fri Jan 23 17:08:59 2009 New Revision: 11473 Log: pylons controllers for FS Added: freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchcdr.py freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchdialplan.py freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchdirectory.py Added: freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchcdr.py ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchcdr.py Fri Jan 23 17:08:59 2009 @@ -0,0 +1,60 @@ +import logging + +from freeswitch.lib.base import * + + +import xml +from xml.sax.handler import ContentHandler + + +log = logging.getLogger(__name__) + + +class FreeswitchcdrController(BaseController): + + + # simple method to display the uuid of a call that got terminated + def cdr(self): + + next = 0 + uuid = [] + + try: + cdr = request.POST.getone('cdr') + # needs to be casted to a string as the unicode string can't be parsed correctly by the sax parser + cdr = str(cdr) + + cdrHandler = CDR_XML_Handler() + xml.sax.parseString(cdr, cdrHandler) + uuid = cdrHandler.uuid + print uuid + + + except KeyError, e: + print e + return + + + + +class CDR_XML_Handler(ContentHandler): + + def __init__(self): + self.uuid = [] + self.uuidString = "" + self.isUuidElement = 0 + + def startElement(self, name, attrs): + + if name == 'uuid': + self.isUuidElement = 1 + uuidString = "" + + def characters(self, ch): + if self.isUuidElement == 1: + self.uuidString += ch + + def endElement(self, name): + if name == 'uuid': + self.isUuidElement= 0 + self.uuid.append(self.uuidString) Added: freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchdialplan.py ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchdialplan.py Fri Jan 23 17:08:59 2009 @@ -0,0 +1,154 @@ +import logging + +from freeswitch.lib.base import * + + + +log = logging.getLogger(__name__) + +class FreeswitchdialplanController(BaseController): + + + + + # needs to be checked what's the best return string when an error occures + error = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''</section>\n'''\ + '''</document>''' + + + + # the name forward is a bit confusing as it is actually a FS bridge + # the next two methods allow you to forward a single call to n number of outbound calls + def forwardCreate(self, number, gateway, forwardString): + if forwardString != '': + forwardString = forwardString + ',' + + return forwardString + '''sofia/gateway/%s/%s''' % (gateway, number) + + + + def forwardFinishCreate(self, didNumber, forwardString): + return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''<context name="public">\n'''\ + '''<extension name="extension%s">\n'''\ + '''<condition field="destination_number" expression="^(%s)$">\n'''\ + '''<action application="bridge" data="%s"/>\n'''\ + '''</condition>\n'''\ + '''</extension>\n'''\ + '''</context>\n'''\ + '''</section>\n'''\ + '''</document>\n''' % (didNumber, didNumber, forwardString) + + + # bridge one inbound call with a single outbound call + def bridge(self, didNumber, outboundNumber, gateway): + + return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''<context name="public">\n'''\ + '''<extension name="extension%s">\n'''\ + '''<condition field="destination_number" expression="^(%s)$">\n'''\ + '''<action application="bridge" data="sofia/gateway/%s/%s"/>\n'''\ + '''</condition>\n'''\ + '''</extension>\n'''\ + '''</context>\n'''\ + '''</section>\n'''\ + '''</document>\n''' % (didNumber, didNumber, gateway, outboundNumber) + + + + def voicemail(self, didNumber, mailbox_id): + + return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''<context name="public">\n'''\ + '''<extension name="voicemail%s">\n'''\ + '''<condition field="destination_number" expression="^(%s)$">\n'''\ + '''<action application="voicemail" data="default $${domain} %s"/>\n'''\ + '''</condition>\n'''\ + '''</extension>\n'''\ + '''</context>\n'''\ + '''</section>\n'''\ + '''</document>''' % (didNumber, didNumber, mailbox_id) + + def checkVoicemail(self, didNumber, mailbox_id): + + return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''<context name="public">\n'''\ + '''<extension name="voicemail%s">\n'''\ + '''<condition field="destination_number" expression="^(%s)$">\n'''\ + '''<action application="voicemail" data="check default $${domain} %s"/>\n'''\ + '''</condition>\n'''\ + '''</extension>\n'''\ + '''</context>\n'''\ + '''</section>\n'''\ + '''</document>''' % (didNumber, didNumber, mailbox_id) + + + # if you hungup the call before it has been answered a busy is issued + def busy(self, didNumber): + return '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''<context name="public">\n'''\ + '''<extension name="extension%s">\n'''\ + '''<condition field="destination_number" expression="^(%s)$">\n'''\ + '''<action application="hungup" data=""/>\n'''\ + '''</condition>\n'''\ + '''</extension>\n'''\ + '''</context>\n'''\ + '''</section>\n'''\ + '''</document>\n''' % (destinationNumber, didNumber) + + + + + def dialplan(self): + + action = "voicemail" + + # replace with your sofia gateway + gateway = 'sipgate2' + + # replace with phone numbers + forwards = ['the did number extension - gateway', 'the number to forward to'] + + # that is the username of the mailbox + mailbox_id = 'test' + + + didNumber = str(request.POST.getone('Caller-Destination-Number')) + + + # ------------------------------------------------------------ Forward ------------------------------------------------------- + # if the action is forward, we forward to all numbers in forwards + if action == "forward": + + forwardString = '' + for f in forwards: + forwardString = self.forwardCreate(f, gateway, forwardString) + + return self.forwardFinishCreate(didNumber, forwardString) + + + + elif action == "checkVoicemail": + + return self.checkVoicemail(didNumber, mailbox_id) + + + + elif action == "voicemail": + + return self.voicemail(didNumber, mailbox_id) + + Added: freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchdirectory.py ============================================================================== --- (empty file) +++ freeswitch/trunk/scripts/contrib/Phil/pylons/freeswitchdirectory.py Fri Jan 23 17:08:59 2009 @@ -0,0 +1,67 @@ +import logging + +from freeswitch.lib.base import * + + + + +log = logging.getLogger(__name__) + +class FreeswitchdirectoryController(BaseController): + + bootReply = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="directory" description="arbitrary stuff here">\n'''\ + '''</section>\n'''\ + '''</document>''' + + error = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="dialplan" description="RE Dial Plan For FreeSwitch">\n'''\ + '''</section>\n'''\ + '''</document>''' + + def user(self, didNumber, domain, mailbox_id): + test = '''<?xml version="1.0" encoding="UTF-8" standalone="no"?>\n'''\ + '''<document type="freeswitch/xml">\n'''\ + '''<section name="directory" description="arbitrary stuff here">\n'''\ + '''<domain name="%s">\n'''\ + '''<groups>\n'''\ + '''<group name="default">\n'''\ + '''<users>\n'''\ + '''<user id="%s" mailbox="%s">\n'''\ + '''<params>\n'''\ + '''<param name="password" value="1234"/>\n'''\ + '''<param name="vm-password" value="0000"/>\n'''\ + '''</params>\n'''\ + '''<variables>\n'''\ + '''<variable name="accountcode" value="%s"/>\n'''\ + '''<variable name="user_context" value="default"/>\n'''\ + '''<variable name="vm_extension" value="%s"/>\n'''\ + '''<variable name="max_calls" value="1"/>\n'''\ + '''<variable name="fail_over" value="415"/>\n'''\ + '''<variable name="cringback" value="us-ring"/>\n'''\ + '''</variables>\n'''\ + '''</user>\n'''\ + '''</users>\n'''\ + '''</group>\n'''\ + '''</groups>\n'''\ + '''</domain>\n'''\ + '''</section>\n'''\ + '''</document>''' % (domain, mailbox_id, mailbox_id, mailbox_id, mailbox_id) + + return test + + + # a very simple reply that creates a user for the voicemail. + def directory(self): + + try: + return self.user(request.POST.getone('mailbox'), request.POST.getone('domain'), request.POST.getone('user')) + + except KeyError, e: + pass + + return self.bootReply + +
participants (1)
-
FreeSWITCH SVN