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

Reply via email to