[Serusers] problems with ACKs and BYEs
Jorge Crichigno
jcrichigno at conexion.com.py
Fri Jun 17 21:29:52 CEST 2005
Hi Klaus,
Thanks a lot! You are right! The behavior of the Lucent Gw is as you
said, and the problem was solved. Thanks again!
Jorge
El vie, 17-06-2005 a las 03:20, Klaus Darilion escribió:
> Hi!
>
> Maybe the Lucent GW is a strict router (RFC 2534). Strict routers will
> put the next hop in the request URI, and the final destination into the
> last Route: header.
>
> Using loose_route should take care of this.
>
> if (loose_route()) {
> ... do some authentication stuff ...
> xlog("...loose_route() processed");
> t_relay;
> break;
> }
>
> regards,
> klaus
>
> Jorge Crichigno wrote:
> > Hi all,
> >
> > I have a problem with in the following scenario:
> >
> > Lucent GW SER IPPhone
> > IP: 1.2.3.4 IP:5.6.7.8 IP:8.9.5.5
> >
> > INVITE-->
> > <-- 100
> > INVITE-->
> > <--100
> > <--180
> > <--180
> > <--200
> > <--200
> > ACK-->(Request-Uri = sip:5.6.7.8:5060) <-- PROBLEM HERE
> >
> >
> > The problem arises only with the Lucent Gateway, because it sends the
> > ACK with the Request-Uri as showed above (Request-Uri has the IP and
> > port of the SER). I also found the same problem with BYEs. I attach the
> > ser.cfg at this mail.
> >
> > I think this is a bug of Lucent, because I expected that Request-Uri
> > of the ACKs should equal to the contact uri of the 200 message sent by
> > the ipphone. The same for BYEs. Could some one clarify me that?
> >
> > Thanks in advance !!!
> >
> >
> >
> >
> >
> >
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> >
> > debug=5 # debug level (cmd line: -dddddddddd)
> > fork=yes
> > log_stderror=yes # (cmd line: -E)
> >
> >
> > check_via=no # (cmd. line: -v)
> > dns=no # (cmd. line: -r)
> > rev_dns=no # (cmd. line: -R)
> > port=5060
> > children=20
> > fifo="/tmp/ser_fifo"
> > listen=5.6.7.8
> > alias = "mydomain.com"
> >
> > # ---------------------------------------------------------------------------
> > loadmodule "/usr/local/lib/ser/modules/mysql.so" # needed for domain.so
> > loadmodule "/usr/local/lib/ser/modules/registrar.so"
> > loadmodule "/usr/local/lib/ser/modules/dbtext.so" # necesario para domain.so
> > loadmodule "/usr/local/lib/ser/modules/usrloc.so"
> > loadmodule "/usr/local/lib/ser/modules/domain.so" # necesario para mediaproxy.so (is_from_local)
> > loadmodule "/usr/local/lib/ser/modules/mediaproxy.so"
> >
> > loadmodule "/usr/local/lib/ser/modules/rr.so"
> > loadmodule "/usr/local/lib/ser/modules/sl.so" # stateless
> > loadmodule "/usr/local/lib/ser/modules/tm.so" # statefull
> > loadmodule "/usr/local/lib/ser/modules/acc.so"
> > loadmodule "/usr/local/lib/ser/modules/maxfwd.so"
> > loadmodule "/usr/local/lib/ser/modules/textops.so"
> > loadmodule "/usr/local/lib/ser/modules/auth.so" # needed for xml_socket
> > loadmodule "/usr/local/lib/ser/modules/xml_socket.so" # our module
> >
> > # ---------------------------------------------------------------------------
> > modparam("usrloc", "db_mode", 0)
> > modparam("domain", "db_mode", 0)
> > #modparam("domain", "db_url", "mysql://serro:47serro11@216.55.240.66/ser")
> > modparam("domain", "db_url", "mysql://serro:47serro11@localhost/ser")
> > #Default value is "mysql://serro:47serro11@localhost/ser"
> > modparam("mediaproxy", "natping_interval", 60)
> > # unix socket to send commands to proxy dispatcher
> > modparam("mediaproxy", "mediaproxy_socket", "/var/run/proxydispatcher.sock")
> > modparam("registrar","nat_flag",2)
> > modparam("rr", "enable_full_lr", 1)
> > #modparam("rr", "enable_double_rr", 0)
> > modparam("tm", "fr_timer", 50)
> > modparam("tm", "fr_inv_timer", 50)
> > # ---------------------------------------------------------------------------
> >
> > route{
> >
> > if (!mf_process_maxfwd_header("10")) {
> > sl_send_reply("483","Too Many Hops");
> > break;
> > };
> >
> > if (msg:len >= max_len ) {
> > sl_send_reply("513", "Message too big");
> > break;
> > };
> >
> > # NAT control
> > if (client_nat_test("3")) {
> > setflag(2);
> > force_rport();
> > fix_contact();
> > };
> >
> > if (method=="REGISTER") {
> > route(1);
> > break;
> > };
> >
> > if (method == "INVITE"){
> > route(2);
> > break;
> > };
> >
> > if (method == "BYE"){
> > route(3);
> > break;
> > };
> >
> > route(4);
> >
> > }
> >
> >
> > #--------------------------------------------------------------------------------------
> > # Aqui se procesan los REGISTERs - REGISTERs here
> > #--------------------------------------------------------------------------------------
> > route[1]{
> >
> > if (xml_www_authorize_register("")) { # challenge - response auth
> > www_challenge("", "0");
> > break;
> > };
> > consume_credentials();
> > sl_send_reply("200", "Ok");
> > }
> >
> > #--------------------------------------------------------------------------------------
> > # Aqui se procesan los INVITEs - INVITEs here
> > #--------------------------------------------------------------------------------------
> > route[2]{
> > t_on_reply("1");
> > sl_send_reply("100"," Trying");
> >
> > if (t_lookup_request()){
> > log(1, "route[2]: Transaction already in progress\n");
> > break;
> > };
> >
> >
> > if (!xml_www_authorize_invite("")) { # chanllenge - response auth - load msg->new_uri
> > www_challenge("", "0");
> > break;
> > };
> > consume_credentials();
> >
> > record_route();
> > # use_media_proxy();
> > log(1, "routing the invite...\n");
> > if (!t_relay()){
> > sl_reply_error();
> > # end_media_session();
> > break;
> > };
> >
> >
> > }
> >
> > #--------------------------------------------------------------------------------------
> > # Aqui se procesan los BYEs - BYEs here
> > #--------------------------------------------------------------------------------------
> > route[3]{
> > t_on_reply("1"); # p/ q en los reply tb cambiemos contact
> >
> > if (t_lookup_request()){
> > sl_send_reply("100", "Trying");
> > log(1, "route[3]: Transaction already in progress\n");
> > break;
> > };
> > #end_media_session();
> > xml_acc(); # accounting
> > if (!t_relay()) {
> > sl_reply_error();
> > break;
> > };
> > }
> > #--------------------------------------------------------------------------------------
> > # Aqui se procesan los metodos que no son INVITEs ni BYEs, i.e., ACKs & CANCELs
> > #--------------------------------------------------------------------------------------
> > route[4]{
> >
> > xml_acc();
> >
> > if (!t_relay()) {
> >
> > sl_reply_error();
> > break;
> > };
> >
> > }
> >
> > # Cuando hay NAT, en la respuesta 200 (OK) del telefono destino se debe cambiar el campo
> > # contact este uri (el del campo contact) sera usado en las siguientes transacciones
> > #--------------------------------------------------------------------------------------
> > # Aqui se procesan los replies: 1xx, 200, 4xx, etc -
> > #--------------------------------------------------------------------------------------
> >
> > onreply_route[1] {
> >
> > xml_acc();
> >
> > if (status=~"(183)|(2[0-9][0-9])") {
> > if (client_nat_test("1")) {
> > fix_contact();
> > };
> > };
> >
> >
> > }
> >
> >
> >
> > ------------------------------------------------------------------------
> >
> > _______________________________________________
> > Serusers mailing list
> > serusers at lists.iptel.org
> > http://lists.iptel.org/mailman/listinfo/serusers
More information about the sr-users
mailing list