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