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]>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]
>> http://lists.iptel.org/**mailman/listinfo/sems<http://lists.iptel.org/mailman/listinfo/sems>
>>
>
>
> --
> frafos.com
>
_______________________________________________
Sems mailing list
[email protected]
http://lists.iptel.org/mailman/listinfo/sems

Reply via email to