[OpenSIPS-Users] Using b2bua top hiding plus dispatcher module
David Santiago
david.santiago at almiralabs.com
Mon Oct 18 17:25:34 CEST 2010
... the code explained in my previous email...
# Debugging mode:
debug=9
memlog=6
fork=yes
auto_aliases=no
log_stderror=no
disable_dns_blacklist=yes
listen=10.122.54.163:5060
# alias=OSIPS_REALM
#port=OSIPS_PORT
sip_warning=0
#server_header="SRV_SIGNATURE"
#user_agent_header="PP_USER_AGENT"
#mhomed=yes
#memlog=2
check_via=no
dns=off
rev_dns=off
children=8
disable_tcp=yes
log_facility=LOG_LOCAL0
# for more info: opensips -h
# ------------------ module loading ----------------------------------
mpath="/opt/opensipsnotls/lib/opensips/modules/"
#loadmodule "db_mysql.so"
#loadmodule "xlog.so"
loadmodule "textops.so"
loadmodule "maxfwd.so"
loadmodule "rr.so"
loadmodule "sl.so"
loadmodule "tm.so"
loadmodule "signaling.so"
loadmodule "b2b_entities.so"
loadmodule "b2b_logic.so"
loadmodule "usrloc.so"
loadmodule "registrar.so"
loadmodule "mi_fifo.so"
loadmodule "dispatcher.so"
loadmodule "uri.so"
# ----------------- setting module-specific parameters ---------------
modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
#modparam("usrloc", "db_url", "mysql://opensips:opensipsrw@localhost
/opensips")
#modparam("usrloc", "db_mode", 2)
modparam("tm", "pass_provisional_replies", 1)
modparam("dispatcher", "list_file",
"/opt/opensipsnotls/etc/opensips/dispatcher.list")
modparam("b2b_entities", "server_address", "sip:10.122.54.163:5060")
#modparam("b2b_logic", "script_scenario",
"/home/anca/work/opensips/modules/b2b_logic/scenario_script.xml")
#modparam("b2b_logic", "extern_scenario",
"/home/anca/work/opensips/modules/b2b_logic/scenario_extern.xml")
modparam("b2b_entities", "script_req_route", "b2b_request")
modparam("b2b_entities", "script_reply_route", "b2b_reply")
route[b2b_request] {
xlog("b2b_request ($ci)\n");
}
route[b2b_reply] {
xlog("b2b_reply ($ci)\n");
}
route {
xlog("mozaa - Here we go...");
if (!mf_process_maxfwd_header("10")) {
sl_send_reply("483","Too Many Hops");
exit;
};
if (msg:len >= 2380 ) {
sl_send_reply("513", "Message too big");
exit;
};
if (!method=="REGISTER")
record_route();
# subsequent messages withing a dialog should take the
# path determined by record-routing
if (loose_route()) {
# mark routing logic in request
xlog("mozaa - Is loose...");
append_hf("P-hint: rr-enforced\r\n");
route(1);
};
xlog("mozaa ft - [$ft]");
xlog("mozaa fu - [$fu]");
xlog("mozaa tt - [$tt]");
xlog("mozaa tu - [$tu]");
xlog("mozaa du - [$du]");
xlog("mozaa si - [$si]");
xlog("mozaa src_ip - [$src_ip]");
if(has_totag()) {
xlog("mozaa - has to tag");
}
if(is_method("INVITE") && !has_totag() &&
!(src_ip == "10.122.54.163" && src_port ==5060)) /* skip Invite
messages generated by the server*/
{
$var(to) = $tu;
$var(to) = $(var(to){s.substr,4,0});
$var(to) = $(var(to){s.select,0,@});
$var(proxy_public_addr) = $(var(to){s.select,1,@});
xlog("mozaa to - [$var(to)]");
xlog("mozaa contact - $hdr(Contact)");
$var(from) = $fu;
$var(from) = $(var(from){s.substr,4,0});
if($var(to)=="VOIP_PROVIDER_PHONE_NUMBER") {
xlog("mozaa x - SPAIN");
if (
subst('/^From:(.*)sip:[^@]*@[a-zA-Z0-9.]+(.*)$/From:\1sip:34$var(from)\2/ig')
) {
xlog("mozaa from modified!");
};
} else {
xlog("mozaa x - USA");
}
# ds_select_dst("1", "0");
xlog("mozaa - Launching top hiding scenario");
b2b_init_request("top hiding");
exit;
};
# route(1);
}
route[1] {
# send it out now; use stateful forwarding as it works reliably
# even for UDP2TCP
xlog("mozaa - In route 1");
if (!t_relay()) {
sl_reply_error();
};
exit;
}
local_route {
$var(to) = $tu;
$var(to) = $(var(to){s.substr,4,0});
$var(to) = $(var(to){s.select,0,@});
xlog("mozaa ft - local_route - [$ft]");
xlog("mozaa fu - local_route - [$fu]");
xlog("mozaa tt - local_route - [$tt]");
xlog("mozaa tu - local_route - [$tu]");
xlog("mozaa du - local_route - [$du]");
xlog("mozaa - local_route - to - [$var(to)]");
if (is_method("INVITE")) {
if($var(to)=="VOIP_PROVIDER_PHONE_NUMBER") {
xlog("mozaa x - local_route - SPAIN");
if (
subst('/^From:(.*)sip:[^@]*@[a-zA-Z0-9.]+(.*)$/From:\1sip:34$var(from)\2/ig')
) {
xlog("mozaa - local_route - from modified!");
};
append_hf("P-Preferred-Service: app1\r\n");
} else {
xlog("mozaa x - local_route - USA");
append_hf("P-Preferred-Service: app2\r\n");
}
## THIS IS WHERE I TRY TO ESTABLISH THE DESTINATION OF THE INVITE
REQUEST SENT BY THE B2BUA MODULE
## TO THE INTERNAL IP OF MY JAIN SLEE SERVER (THE CALLEE IN THE TOP
HIDING SCENARIO EXAMPLE)
xlog("mozaa - local_route - du before update = $du");
##ds_select_dst("1", "0");
##$du = "sip:10.253.22.143:5060";
rewriteuri("sip:10.253.22.143:5060");
xlog("mozaa - local_route - du after update = $du");
exit;
}
## if (is_method("BYE") ) {
## acc_log_request("internally generated BYE");
## }
}
On Mon, Oct 18, 2010 at 4:29 PM, David Santiago <
david.santiago at almiralabs.com> wrote:
> Hi again,
>
> I have made several changes to the script so that I can successfully add,
> for instance, a custom header to the INVITE request that the b2bua generates
> after receiving an external one. I'm doing it in a local_route block which
> is the supposed way to process an outgoing INVITE request that is going to
> be sent by the b2bua module, right?
>
> but.. I'm not being able to set the destination of such INVITE to the place
> I want. I have tried the following:
>
> - ds_select_dst() function: it works in the main route block, but it
> cannot be used in a local_route block.
> - modifying $du variable. I can successfully modify this variable, but
> it has no effect on where the INVITE is being sent to.
> - rewriteuri() function: same result as modifying $du variable.
>
> I need that outgoing INVITE to be sent to a specific host and port, but I
> do not see how to modify the current behaviour which is that the INVITE is
> being sent to the public ip address of the opensips server, which in turn
> generates a loop as that INVITE is processed by the b2bua and a new INVITE
> is sent out to that same address again.
>
>
> Regards,
> David
>
>
> On Thu, Oct 14, 2010 at 9:08 AM, Anca Vamanu <anca at opensips.org> wrote:
>
>> Hi David,
>>
>> The dispatcher is working right - just that if you use b2bua it doesn't
>> have no effect as it does not use the newly set $du. Since it is sent
>> again to your opensips you can do a filter after the source address of
>> the message and do processing needed for the Invite going out if the
>> source is itself.
>>
>> if (!has_totag() && is_method("INVITE") && !(src_ip=="MY_IP" &&
>> src_port=="MY_PORT")) {
>> b2b_init_request("top hiding");
>> exit;
>> }
>> ....
>> the rest of the changes needed.
>>
>> Anyhow, I should add using the $du as the outbound proxy for the newly
>> generated request on the features to implement list.
>>
>> Regards,
>> Anca
>>
>>
>> On 10/13/2010 12:19 PM, David Santiago wrote:
>> > I'll check it later, but the fact is that I have to solve first the
>> > problem that prevents the INVITEs generated by OpenSIPs to be sent to
>> > the internal jain slee server.
>> >
>> > I have confirmed that after the call to ds_select(), the value of $du
>> > points to such server (which has been obtained from the
>> > /opt/opensipsnotls/etc/opensips/dispatcher.list file), but the INVITEs
>> > are not sent there, but to the public IP address of the OpenSIPs
>> > server. Without the b2bua "setup", the dispatcher has been working
>> > fine in other tests I've made...
>> >
>> >
>> > Regards,
>> > David
>> >
>> > On Tue, Oct 12, 2010 at 11:22 AM, Anca Vamanu<anca at opensips.org>
>> wrote:
>> >
>> >> Hi David,
>> >>
>> >> The only thing that won't work as you like is the append_hf - it won't
>> >> work as you like since the b2bua module won't see that header. You need
>> >> to do that for the new request generated by the b2bua and put that code
>> >> in the local_route.
>> >>
>> >> Regards,
>> >>
>> >> --
>> >> Anca Vamanu
>> >> www.voice-system.ro
>> >>
>> >>
>> >>
>> >> On 10/11/2010 01:48 PM, David Santiago wrote:
>> >>
>> >>> Hi all,
>> >>>
>> >>> After cleaning up the initialization problems in the b2bua related
>> >>> modules I'm testing a configuration I want to use in order to enable
>> >>> the "top hiding" scenario, plus using the dispatcher module so I can
>> >>> configure the internal jain slee server that receives the requests
>> >>> from the opensips proxy, like this:
>> >>>
>> >>> VOIP PROVIDER<-------> OPENSIPS<-------> INTERNAL JAIN SLEE
>> SERVER
>> >>>
>> >>> I will write here the configuration I'm using, taken from the
>> >>> configuration example available, that results in the INVITEs received
>> >>> from the VOIP PROVIDER being sent by OPENSIPS to itself (to its public
>> >>> address, in particular), ad infinitum.
>> >>>
>> >>> The modparam("dispatcher", "list_file",
>> >>> "/opt/opensipsnotls/etc/opensips/dispatcher.list") entry points to the
>> >>> file required by the dispatcher module to determine the ip and port
>> >>> where the internal jain slee server is running. Furthermore, our
>> >>> service implementation requires the addition of the
>> >>> P-Preferred-Service header, which is done with append_hf().
>> >>>
>> >>> Any hint would be appreciated. Thanks in advance!
>> >>>
>> >>>
>> >>>
>> >>> # Debugging mode:
>> >>> debug=9
>> >>> memlog=6
>> >>> fork=yes
>> >>> auto_aliases=no
>> >>> log_stderror=no
>> >>>
>> >>> disable_dns_blacklist=yes
>> >>>
>> >>> listen=10.122.54.163:5060 # private opensips ip
>> >>> # alias=OSIPS_REALM
>> >>> #port=OSIPS_PORT
>> >>>
>> >>>
>> >>> sip_warning=0
>> >>> #server_header="SRV_SIGNATURE"
>> >>> #user_agent_header="PP_USER_AGENT"
>> >>>
>> >>> #mhomed=yes
>> >>> #memlog=2
>> >>> check_via=no
>> >>> dns=off
>> >>> rev_dns=off
>> >>> children=8
>> >>> disable_tcp=yes
>> >>> log_facility=LOG_LOCAL0
>> >>> # for more info: opensips -h
>> >>>
>> >>> # ------------------ module loading ----------------------------------
>> >>>
>> >>> mpath="/opt/opensipsnotls/lib/opensips/modules/"
>> >>>
>> >>> #loadmodule "db_mysql.so"
>> >>> #loadmodule "xlog.so"
>> >>> loadmodule "textops.so"
>> >>> loadmodule "maxfwd.so"
>> >>> loadmodule "rr.so"
>> >>> loadmodule "sl.so"
>> >>> loadmodule "tm.so"
>> >>> loadmodule "signaling.so"
>> >>> loadmodule "b2b_entities.so"
>> >>> loadmodule "b2b_logic.so"
>> >>> loadmodule "usrloc.so"
>> >>> loadmodule "registrar.so"
>> >>> loadmodule "mi_fifo.so"
>> >>> loadmodule "dispatcher.so"
>> >>>
>> >>> # ----------------- setting module-specific parameters ---------------
>> >>> modparam("mi_fifo", "fifo_name", "/tmp/opensips_fifo")
>> >>>
>> >>>
>> >>> #modparam("usrloc", "db_url", "mysql://opensips:opensipsrw@localhost
>> /opensips")
>> >>> #modparam("usrloc", "db_mode", 2)
>> >>>
>> >>> modparam("tm", "pass_provisional_replies", 1)
>> >>>
>> >>> modparam("dispatcher", "list_file",
>> >>> "/opt/opensipsnotls/etc/opensips/dispatcher.list")
>> >>>
>> >>> modparam("b2b_entities", "server_address",
>> >>> "sip:MY_OPENSIPS_PUBLIC_IP_GOES_HERE:5060")
>> >>>
>> >>>
>> >>> #modparam("b2b_logic", "script_scenario",
>> >>> "/home/anca/work/opensips/modules/b2b_logic/scenario_script.xml")
>> >>> #modparam("b2b_logic", "extern_scenario",
>> >>> "/home/anca/work/opensips/modules/b2b_logic/scenario_extern.xml")
>> >>> modparam("b2b_entities", "script_req_route", "b2b_request")
>> >>> modparam("b2b_entities", "script_reply_route", "b2b_reply")
>> >>>
>> >>> route[b2b_request] {
>> >>> xlog("b2b_request ($ci)\n");
>> >>> }
>> >>>
>> >>>
>> >>> route[b2b_reply] {
>> >>> xlog("b2b_reply ($ci)\n");
>> >>> }
>> >>>
>> >>>
>> >>> route {
>> >>>
>> >>> xlog("mozaa - Here we go...");
>> >>>
>> >>> if (!mf_process_maxfwd_header("10")) {
>> >>> sl_send_reply("483","Too Many Hops");
>> >>> exit;
>> >>> };
>> >>>
>> >>> if (msg:len>= 2380 ) {
>> >>> sl_send_reply("513", "Message too big");
>> >>> exit;
>> >>> };
>> >>>
>> >>> if (!method=="REGISTER")
>> >>> record_route();
>> >>>
>> >>> # subsequent messages withing a dialog should take the
>> >>> # path determined by record-routing
>> >>> if (loose_route()) {
>> >>> # mark routing logic in request
>> >>> append_hf("P-hint: rr-enforced\r\n");
>> >>> route(1);
>> >>> };
>> >>>
>> >>> if(is_method("INVITE")&& /* only for Invite messages from
>> bob*/
>> >>> !(src_ip == "10.122.54.163"&& src_port ==5060)) /* skip
>> >>> Invite messages generated by the server*/
>> >>> {
>> >>> # DO NOT call t_newtran() on this request -> it will result
>> in the
>> >>> transaction never being deleted
>> >>> ##b2b_init_request("prepaid", "sip:320 at opensips.org:5070",
>> >>> "sip:321 at opensips.org:5070");
>> >>>
>> >>> xlog("mozaa ft - [$ft]");
>> >>> xlog("mozaa fu - [$fu]");
>> >>> xlog("mozaa tt - [$tt]");
>> >>> xlog("mozaa tu - [$tu]");
>> >>> xlog("mozaa du - [$du]");
>> >>> xlog("mozaa si - [$si]");
>> >>>
>> >>> $var(to) = $tu;
>> >>> $var(to) = $(var(to){s.substr,4,0});
>> >>> $var(to) = $(var(to){s.select,0,@});
>> >>> $var(proxy_public_addr) = $(var(to){s.select,1,@});
>> >>>
>> >>> xlog("mozaa to - [$var(to)]");
>> >>>
>> >>> xlog("mozaa contact - $hdr(Contact)");
>> >>>
>> >>> $var(from) = $fu;
>> >>> $var(from) = $(var(from){s.substr,4,0});
>> >>>
>> >>>
>> if($var(to)=="THE_NUMBER_REGISTERED_IN_MY_VOIP_PROVIDER_GOES_HERE") {
>> >>> xlog("mozaa x - SPAIN");
>> >>> if (
>> >>>
>> subst('/^From:(.*)sip:[^@]*@[a-zA-Z0-9.]+(.*)$/From:\1sip:34$var(from)\2/ig')
>> >>> ) {
>> >>> xlog("mozaa from modified!");
>> >>> };
>> >>> append_hf("P-Preferred-Service:
>> OneService\r\n");
>> >>> } else {
>> >>> xlog("mozaa x - USA");
>> >>> append_hf("P-Preferred-Service:
>> AnotherService\r\n");
>> >>> }
>> >>>
>> >>> ds_select_dst("1", "0");
>> >>>
>> >>> xlog("mozaa - Launching top hiding scenario for du = $du");
>> >>>
>> >>> b2b_init_request("top hiding");
>> >>> exit;
>> >>> };
>> >>>
>> >>> if (!uri==myself) {
>> >>> # mark routing logic in request
>> >>> append_hf("P-hint: outbound\r\n");
>> >>> route(1);
>> >>> };
>> >>>
>> >>>
>> >>> if (uri==myself) {
>> >>>
>> >>> if (method=="REGISTER") {
>> >>> save("location");
>> >>> exit;
>> >>> };
>> >>>
>> >>> # native SIP destinations are handled using our USRLOC DB
>> >>> if (!lookup("location")) {
>> >>> sl_send_reply("404", "Not Found");
>> >>> exit;
>> >>> };
>> >>> append_hf("P-hint: usrloc applied\r\n");
>> >>> };
>> >>>
>> >>> route(1);
>> >>> }
>> >>>
>> >>>
>> >>> route[1] {
>> >>> # send it out now; use stateful forwarding as it works reliably
>> >>> # even for UDP2TCP
>> >>>
>> >>> if (!t_relay()) {
>> >>> sl_reply_error();
>> >>> };
>> >>> exit;
>> >>> }
>> >>>
>> >>> _______________________________________________
>> >>> Users mailing list
>> >>> Users at lists.opensips.org
>> >>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>> >>>
>> >>>
>> >> _______________________________________________
>> >> Users mailing list
>> >> Users at lists.opensips.org
>> >> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>> >>
>> >>
>> > _______________________________________________
>> > Users mailing list
>> > Users at lists.opensips.org
>> > http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>> >
>> >
>>
>>
>> --
>> Anca Vamanu
>> www.voice-system.ro
>>
>>
>> _______________________________________________
>> Users mailing list
>> Users at lists.opensips.org
>> http://lists.opensips.org/cgi-bin/mailman/listinfo/users
>>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.opensips.org/pipermail/users/attachments/20101018/f59b3132/attachment-0001.htm
More information about the Users
mailing list