Remove gmakeisms from the modmake.rules module makefile include
Remove the MODNAME def from all the in tree Makefiles
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@4628 d0543943-73ff-0310-b7d9-9358b9ac24b2
This updates mod_portaudio to use the new v19 api and also contains
major behavioural changes. This initial check-in should be tested to find
any obscure use cases that lead to crashes etc...
All of the old api interface commands are now depricated and any attempt to
use them should cause a polite warning asking you to try the new single "pa" command.
New Features:
*) Mulitiple calls with hold/call switching.
*) Inbound calls can play a ring file on specified device. (global and per call)
*) Optional hold music for backgrounded calls. (global and per call)
Example dialplan usage:
<extension name="2000">
<condition field="destination_number" expression="^2000$">
<!--if the next 3 lines are omitted the defaults will be used from portaudio.conf-->
<action application="set" data="pa_ring_file=/sounds/myring.wav"/>
<action application="set" data="pa_hold_file=/sounds/myhold.wav"/>
<action application="set" data="export_vars=pa_ring_file,pa_hold_file"/>
<action application="bridge" data="portaudio"/>
</condition>
</extension>
Example API interface usage:
call extension 1000
> pa call 1000
call extension 1001 putting the other call on hold
> pa call 1001
swap the calls between hold and active
> pa switch
view the current calls
> pa list
forground the call with id 1
> pa switch 1
background all calls
> pa switch none
send a dtmf string (1234) to the current call
> pa dtmf 1234
answer the oldest unanswered inbound call
> pa answer
answer the call with id 1
> pa answer 1
hangup the active call
> pa hangup
hangup the call with id 1
> pa hangup 1
get device info
> pa dump
print usage summary
> pa help
USAGE:
--------------------------------------------------------------------------------
pa help
pa dump
pa call <dest> [<dialplan> <cid_name> <cid_num> <rate>]
pa answer [<call_id>]
pa hangup [<call_id>]
pa list
pa switch [<call_id>|none]
pa_dtmf <digit string>
--------------------------------------------------------------------------------
The source of the portaudio v19 library will also be checked in for the
sake of the build system.
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3981 d0543943-73ff-0310-b7d9-9358b9ac24b2
BTW, forget what I said yesterday RE: the strftime app I was at McDonalds, how can I concentrate there eh?
see below....
The Definitive Guide To XML Dialplan:
The "dialplan" section of the freeswitch.xml meta document may contain several contexts
<?xml version="1.0"?>
<document type="freeswitch/xml">
<section name="dialplan" description="Regex/XML Dialplan">
<!-- the default context is a safe start -->
<context name="default">
<!-- one or more extension tags -->
</context>
<!-- more optional contexts -->
</section>
</document>
The important thing to remember is that the dialplan is parsed once when the call
hits the dialplan parser in the RING state. With one pass across the XML the result
will be a complete list of instructions installed into the channel based on
parsed <action> or <anti-action> tags.
Those accustomed to Asterisk may expect the call to follow the dialplan by executing the
applications as it parses them allowing data obtained from one action to influence the next action.
This not the case with the exception being the %{api func} {api arg} field type where an pluggable api call from
a module may be executed as the parsing occurs but this is meant to be used to draw realtime info such as
date and time or other quickly accessible information and shold *not* be abused.
The anatomy of an <extension> tag.
Legend:
Text wrapped in [] indicates optional and is not part of the actual code.
a '|' inside [] indicates mutiple possible values and also is not part of the code.
Text wrapped in {} indicates it's a description of the parameter in place of the param itself.
<extension name="{exten_name}" [continue="[true|false]"]>
continue=true means even if an extension executes to continue
parsing the next extension too
The {exten_name} above may anything but if it's
an exact match with the destination number the parser will leap to this extension
to begin the searching that does not mean it will execute the extension.
Searching will either begin at the first extension in the context or at the point
the the parser has jumped to in the case described above.
Each condition is parsed in turn first taking the 'field' param.
The parser will apply the perl regular expression to each 'field' param encountered.
If the expression matches, it will parse each existing <action> tag in turn and add
the data from the <application> tags to the channels todo list.
If a matched expression contains any data wrapped in () the variables
$1,$2..$N will be valid and expanded in any of 'data' params from the subsequent action tags.
If the expression does NOT match, it will parse each <anti-action> tag in turn and add
the data from the <application> tags to the channels todo list.
*NOTE* since there was no match the () feature is not availabe in anti-actions
The 'break' param indicates how to behave in relation to matching:
*) 'on-true' - stop searching conditions after the first successful match.
*) 'on-false' - stop searching after the first unsuccessful match.
*) 'always' - stop at this conditon regardless of a match or non-match.
*) 'never' - continue searching regardless of a match or non-match.
<condition field="[{field name}|${variable name}|%{api func} {api arg}]" expression="{expression}" break="[on-true|on-false|always|never]">
<action application="{app name}" data="{app arg}"/>
<anti-action application="{app name}" data="{app arg}"/>
</condition>
<!-- any number of condition tags may follow where the same rules apply -->
</extension>
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@2167 d0543943-73ff-0310-b7d9-9358b9ac24b2