Hello,
a kind of (very brief) reference documentation which lists all
actions, conditions, parameters, and 'special variables', is in
doc/dsm/dsm_syntax.txt
doc/dsm/mods/Readme.mod_*.txt
Last I checked, it was complete in that sense that everything is at
least referenced.
e.g. from dsm_syntax.txt:
Variables controlling call flow
===============================
special variables:
connect_session "0" -> after the start event (initial
transition):
do not connect session to
media processor on start
-> after the invite event:
do not reply with 200 OK and do not
connect session to media processor
on start
enable_request_events "true" - run events on receiving a request
"false" - don't run events on receiveing
request
You are right it lacks proper documentation. There is a system
documentation forthcoming, but you are welcome to write anything from
a user perspective. Being very close in the code, it is often
difficult to change viewpoint.
Also, some real tutorials explaining how to accomplish different use
cases would be great.
Any further questions, please just ask.
Stefan
o Jayesh Nambiar on 08/17/2011 08:41 AM:
Hi Stefan,
Really appreciate your detailed reply. I will try all the suggestions
and work harder on getting this done. I sometimes feel like I am
running short of documentation. For eg, I dont know all the existing
variables that can be used, the functions that can be called under
different modules etc.
Like, I had to write set(connect_session) = 0 to not send the default
200 OK and play media in 183 Session progress. There could be other
similar useful functions which I am not aware of. Then there are set
of other variables like you mentioned #hdrs, #method, #type etc. Is
there any one place where I find a list of these variables like a
quick reference place or something.
Also if you point me to some different places where I find all these,
probably I can accumulate them and document it for other users.
Thanks again for all your help.
--- Jayesh
On Tue, Aug 16, 2011 at 7:51 PM, Stefan Sayer
<[email protected] <mailto:[email protected]>> wrote:
Hello Jayesh,
o Jayesh Nambiar on 08/12/2011 05:34 PM:
Hi All,
I have an implementation of Click2Dial in place which I wish to
migrate on SEMS platform. The idea is to learn basics before going
ahead with developing complicated applications. I have been
reading a
lot on DSMs and it looks very exciting script language. My
scenario is
yes, I like it for these kind of things, too. It's both simple
quickly create applications, but at the same time powerful enough
to control stuff in detail.
as follows:
1) There is a PHP-SIP application which first sends an INVITE
to SEMS.
The INVITE contains some extra-headers which I need to
preserve before
taking the call ahead in B2B mode. They are important for
billing :)
if the extra headers follow the P-App-Param format, just set
set_param_variables=yes
in dsm.conf, then you can access the parameters set there, e.g.
P-App-Param: billing_dest=123;billing_unit=__60
...
log(1, $billing_dest);
log(1, $billing_unit);
mysql.query(SELECT * FROM billing_items WHERE dest=$billing_dest);
if the headers look different, you can set
$enable_request_events=yes which makes you get sipRequest events -
then you can access all headers with the #hdrs parameter.
Alternatively, use mod_uri, and access the headers with
uri.getHeader(), e.g.
import(mod_uri);
transition "saving stuff" START - invite / {
uri.getHeader(P-Billing-Dest, billing_dest);
log(1, $billing_dest);
...
} -> ...
2) The Sems needs to execute a database query based on values
in the
extra-headers and based upon the resultset, need to route the call
ahead to a SIP Proxy in B2B mode.
I would actually handle the leg of the call from the PHP-SIP
application separately from the other legs.
You can simply create a new call (dlg.dialout()) for the first
leg, and communicate with the PHP-SIP-leg with events. There is
several examples, see e.g. doc/dsm/examples/b2b_connect___audio
3) Once this call gets connected, the PHP-SIP application sends a
REFER with REFER-TO uri as the second leg of the call.
set
$enable_request_events=yes
in the PHP-SIP leg and check for the sipRequest event:
transition "refer received" WAIT_REFER -
sipRequest(#method=="REFER") / {
... use #hdrs ...
... send event to other leg with postEvent(...) ...
} -> WAIT_CONNECT_LEG2;
4) SEMS should be able to handle this REFER by generating a
new INVITE
towards the proxy and sending BYE to the PHP-SIP application.
probably you want to send NOTIFYs after the BYE, thus I would not
stop the PHP-SIP DSM right there, but send BYE and then later send
notifys, and at the end stop that call with stop(false) :
transition "refer received" WAIT_REFER -
sipRequest(#method=="REFER") / {
... use #hdrs ...
... send event to other leg with postEvent(...) ...
dlg.bye();
} -> WAIT_CONNECT_LEG2;
...
transition "notifying" WAIT_CONNECT_LEG2 -
event(#type=="progress") / {
... send notify ...
} -> WAIT_CONNECT_LEG2;
transition "ended" WAIT_CONNECT_LEG2 - event(#type=="connected") / {
... send final notify ...
stop(false);
} -> END;
5) SEMS should also be playing a media file in 183 session
progress
which will be audible to the call on first leg, since the call
is now
Reffered. (Some media file like "Please wait while we connect
your call")
in the first leg? that one from PHP-SIP? you are setting up the
leg to the caller by sending INVITE there, so no possibility to
send 183.
otherwise, you can use dlg.acceptInvite(183, "Session Progress")
and then use normal things like playFile(progress.wav)
6) Once the call is connected, both legs of the call are actually
connected to each other.
Do you want to have the audio flow through SEMS? Then you can use
mod_conference, see e.g. b2b_connect_audio example.
or do you want to re-invite the legs so that the two ends are
connected directly, RTP-wise? then you can use the B2BUA, by using
B2B.connectCallee function (in the leg of the caller).
Questions:
1) Is this possible using the DSM as I think it is the most
flexible
way of configuring services in SEMS.
yes, I would use DSM as well. saves you a lot of code,
implementing the usual things, too. also, you have all advantages
like monitoring, online reload, etc.
2) I dont see any example of how to handle REFER method in DSM
language. Is it really possible to handle REFER easily and
then send
handle sipRequest events as explained above
183 with some media played in it to the first leg?
3) Is it possible to add extra headers while sending the INVITE on
behalf of the REFER method received?
depending on whether you want to do pure singaling B2BUA or
connecting audio; for B2BUA you would use B2B.clearHeaders()
B2B.addHeader(), B2B.setHeaders(); for two separate call legs, you
would use _hdrs to set the headers.
hth
Stefan
I am a newbie to SEMS but have worked a lot on Asterisk,
Opensips and
Kamailio. Any help or directions will be really appreciated.
Thanks in advance,
--- Jayesh
_________________________________________________
Sems mailing list
[email protected] <mailto:[email protected]>
http://lists.iptel.org/__mailman/listinfo/sems
<http://lists.iptel.org/mailman/listinfo/sems>
--
frafos.com <http://frafos.com>
--
frafos.com
_______________________________________________
Sems mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/sems