[Users] Re: get_redirects("*"), serialize_branches(0), next_branches() not working for me

Greg Fausak lgfausak at gmail.com
Mon Jun 5 16:46:08 CEST 2006


Bogdan,

I recompiled openser and reinstalled, it's working for
me now.  I think I hacked something up and caused it to break!

One thing I still am curious about.
I've got a domain name with an SRV record: ab5350.node-1.com, the
SRV (_sip._udp.ab5350.node-1.com) points to a single A record
proxy.ab5350.node-1.com.  When I make that the Contact in
the redirect I get this in the syslog:

Jun  5 09:39:51 www openser: DEBUG: mk_proxy: doing DNS lookup...
Jun  5 09:39:51 www openser: DEBUG:sip_resolvehost2: has port -> do A
record lookup!
Jun  5 09:39:51 www openser: ERROR: mk_proxy: could not resolve
hostname: "ab5350.node-1.com"
Jun  5 09:39:51 www openser: ERROR: uri2proxy: bad host name in URI
<sip:+12143357976 at ab5350.node-1.com:5060>
Jun  5 09:39:51 www openser: ERROR:tm:t_forward_nonack: failure to
add branches
Jun  5 09:39:51 www openser: ERROR:tm:w_t_relay: t_forward_nonack failed
Jun  5 09:39:51 www openser: DEBUG:tm:relay_reply: branch=0, save=0,
relay=0

My code does a next_branches() followed by t_relay().  I thought that
t_relay() did the necessary SRV lookups?

If I change my redirect to return proxy.ab5350.node-1.com in the Contact
list, everything works as expected.

-g


On 6/5/06, Bogdan-Andrei Iancu <bogdan at voice-system.ro> wrote:
> yes - get_redirects("*") loads the contacts from 3xx reply into branches
> (as for parallel forking) ; serialize_branches(0) converts the branches
> into AVPs for serial forking ; next_branches() gets the first AVP for
> serial forking and push it as branch.
>
> the message from next_branches() says all AVPs fro serial branches were
> consumed - or none was present from the beginning.
>
> regards,
> Bogdan
>
> Greg Fausak wrote:
>
> > Bogdan,
> >
> > Thanks,
> >
> > I thought the serialize_branches(0) loaded up the AVP?
> >
> > -g
> >
> >
> > On 6/5/06, Bogdan-Andrei Iancu <bogdan at voice-system.ro> wrote:
> >
> >> Hi Greg,
> >>
> >> message "DEBUG:next_branches: no AVPs -- we are done!" is generated by
> >> next_branches() function if no AVP is found to get a new branch.
> >>
> >> in debug mode you may see what branches are loaded into AVPS by
> >> serialize_branches(). Also you may use avp_print() to see what are the
> >> current AVPs.
> >>
> >> regards,
> >> bogdan
> >>
> >>
> >> Greg Fausak wrote:
> >>
> >> > Reply to my own message!
> >> >
> >> > I've been working on this all weekend.
> >> > Had an issue with a firewall which was blocking redirect
> >> > packets, that cleared up a bunch.
> >> >
> >> > Now, I have the get_redirects("*") working, serialize_branches(0) is
> >> > working (kinda, it says it has
> >> > nothing to do because all data has the same
> >> > q value), and I see a debug message when I call next_branches() which
> >> > says
> >> > DEBUG:next_branches: no AVPs -- we are done!
> >> >
> >> > My ser.cfg file is below. How do I get rid of 'no AVPs' error? I
> >> > thought the
> >> > domain modparam would activate them?
> >> >
> >> > -g
> >> > # 1 "config.pre"
> >> > # 32 "config.pre"
> >> > # 1 "/usr/local/etc/ser/include/opensererror.pre" 1
> >> > # 33 "config.pre" 2
> >> > # 140 "config.pre"
> >> > mpath="/usr/local/lib/openser/modules"
> >> >
> >> > loadmodule "sl.so"
> >> > loadmodule "tm.so"
> >> > loadmodule "rr.so"
> >> > loadmodule "maxfwd.so"
> >> > loadmodule "textops.so"
> >> > loadmodule "xlog.so"
> >> > loadmodule "dbtext.so"
> >> > loadmodule "domain.so"
> >> > loadmodule "uac_redirect.so"
> >> >
> >> >
> >> > log_stderror=no
> >> > log_facility=LOG_LOCAL5
> >> > listen=12.46.104.47
> >> > port=5060
> >> > children=4
> >> > disable_tcp=yes
> >> > dns_try_ipv6=no
> >> > server_signature=no
> >> > sip_warning=0
> >> >
> >> > alias="redirect.node-1.com"
> >> > alias="proxy.redirect.node-1.com"
> >> > alias="12.46.104.47"
> >> >
> >> > fifo="/tmp/ser_fifo/proxy"
> >> >
> >> > modparam("tm","fr_inv_timer",180)
> >> > modparam("domain", "db_url", "dbtext:///var/openserdb")
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > route
> >> > {
> >> >
> >> >
> >> >
> >> >
> >> > if (!mf_process_maxfwd_header("13")) {
> >> > xlog("L_WARN","redirect.node-1.com-483: time_t=$Ts ^LINE=184
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=Too many hops"); sl_send_reply("483", "Too many
> >> > hops"); return; };
> >> >
> >> > xlog("L_WARN","redirect.node-1.com-REDIRECTOR: time_t=$Ts ^LINE=186
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=Starting");
> >> >
> >> > if(loose_route()) { xlog("L_WARN","redirect.node-1.com-LOOSE:
> >> > time_t=$Ts ^LINE=188 ^FILE=config.pre ^call_id=$ci ^cseq=$cs
> >> > ^contact=$ct ^from=$fu ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm
> >> > ^ruri=$ru ^messageid=$mi^remark=Doing it"); record_route(); t_relay();
> >> > return; };
> >> >
> >> > xlog("L_WARN","redirect.node-1.com-REDIRECTOR: time_t=$Ts ^LINE=190
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=Starting");
> >> >
> >> > if(!uri==myself) { xlog("L_WARN","redirect.node-1.com-NOTUS:
> >> > time_t=$Ts ^LINE=192 ^FILE=config.pre ^call_id=$ci ^cseq=$cs
> >> > ^contact=$ct ^from=$fu ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm
> >> > ^ruri=$ru ^messageid=$mi^remark=forward packet"); record_route();
> >> > t_relay(); return; };
> >> >
> >> > xlog("L_WARN","redirect.node-1.com-REDIRECTOR: time_t=$Ts ^LINE=194
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=Starting");
> >> >
> >> >
> >> >
> >> >
> >> > if(src_ip==12.46.104.62)
> >> > {
> >> > � xlog("L_INFO","redirect.node-1.com-OUTBOUNDCALL: time_t=$Ts
> >> > ^LINE=201 ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct
> >> > ^from=$fu ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=OUT");
> >> > � if(is_method("INVITE"))
> >> > � {
> >> > �� xlog("L_WARN","redirect.node-1.com-OUTBOUNDCALL: time_t=$Ts
> >> > ^LINE=204 ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct
> >> > ^from=$fu ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=OUT");
> >> >
> >> > �� t_on_failure("3");
> >> >
> >> > �� record_route();
> >> >
> >> > �� rewritehostport("198.212.169.6:5060");
> >> >
> >> > �� if(!t_relay())
> >> > �� {
> >> > � � sl_reply_error();
> >> > �� }
> >> > �� return;
> >> > � }
> >> > }
> >> >
> >> >
> >> >
> >> >
> >> >
> >> > xlog("L_WARN","redirect.node-1.com-404: time_t=$Ts ^LINE=224
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=no route found"); sl_send_reply("404", "no route
> >> > found"); return;
> >> > }
> >> > # 235 "config.pre"
> >> > failure_route[3]
> >> > {
> >> > xlog("L_WARN","redirect.node-1.com-FAILUREROUTE: time_t=$Ts ^LINE=237
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=here we are");
> >> >
> >> > if(t_check_status("3[0-9][0-9]"))
> >> > {
> >> > � xlog("L_WARN","redirect.node-1.com-FAILUREROUTE: time_t=$Ts
> >> > ^LINE=241 ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct
> >> > ^from=$fu ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=status is 3xx");
> >> > � get_redirects("*");
> >> > � serialize_branches(0);
> >> > }
> >> > next_branches();
> >> > � xlog("L_WARN","redirect.node-1.com-FAILUREROUTE: time_t=$Ts
> >> > ^LINE=246 ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct
> >> > ^from=$fu ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=next branch");
> >> > � t_on_failure("3");
> >> > � t_relay();
> >> > � return;
> >> > xlog("L_WARN","redirect.node-1.com-FAILUREROUTE: time_t=$Ts ^LINE=250
> >> > ^FILE=config.pre ^call_id=$ci ^cseq=$cs ^contact=$ct ^from=$fu
> >> > ^fromtag=$ft ^to=$tu ^totag=$tt ^method=$rm ^ruri=$ru
> >> > ^messageid=$mi^remark=no branches left");
> >> > t_reply("404", "No branches left");
> >> > }
> >> >
> >> >
> >> >
> >> > On 6/3/06, Greg Fausak <lgfausak at gmail.com> wrote:
> >> >
> >> >> I'm trying to play around with the current cvs head but can't get
> >> it to
> >> >> work. I wonder if somebody could give me a hint!
> >> >>
> >> >>
> >> >> I built a redirect server:
> >> >> It basically does:
> >> >>
> >> >> rewritehost("ab5350.node-1.com");
> >> >> sl_send_reply("302", "Redirect");
> >> >>
> >> >> I forward to the redirect server setting up a failure block:
> >> >>
> >> >> if(is_method("INVITE"))
> >> >> {
> >> >> _QLOG(L_INFO, OUTBOUNDCALL, OUT);
> >> >>
> >> >> t_on_failure("3");
> >> >>
> >> >> record_route();
> >> >> setflag(1);
> >> >> setflag(2);
> >> >>
> >> >> rewritehostport(_QSTR
> >> >> (REDIRECTOBGATEWAYIP:REDIRECTOBGATEWAYPORT));
> >> >>
> >> >> if(!t_relay())
> >> >> {
> >> >> sl_reply_error();
> >> >> }
> >> >> }
> >> >>
> >> >> The response below comes back from my redirect server:
> >> >>
> >> >> SIP/2.0 302 Redirect
> >> >> Via: SIP/2.0/UDP 12.46.104.47;branch=z9hG4bKa86.09801851.0
> >> >> Via: SIP/2.0/UDP 12.46.104.62:5061;branch=z9hG4bKa86.191c2c81.0
> >> >> Via: SIP/2.0/UDP 12.46.104.59;branch=z9hG4bKa86.dafc0771.0
> >> >> Via: SIP/2.0/UDP 71.252.176.37:5060;branch=z9hG4bK-d0702751
> >> >> From: +19722200434 <sip:+19722200434 at var-2.com>;tag=3a553a2b9373c699
> >> >> To:
> >> <sip:2143357976 at var-2.com>;tag=5531b0101f56e37a4889ece4b0eb40fa.417f
> >> >> Call-ID: f27483a5-50532031 at 71.252.176.37
> >> >> CSeq: 101 INVITE
> >> >> Contact: sip:+12143357976 at ab5350.node-1.com:5060
> >> >> Content-Length: 0
> >> >>
> >> >> My failure_route block picks up the routing:
> >> >>
> >> >> failure_route[3]
> >> >> {
> >> >> _QLOG(L_WARN, FAILUREROUTE, here we are);
> >> >>
> >> >> if(status =~ "3[0-9][0-9]")
> >> >> {
> >> >> _QLOG(L_WARN, FAILUREROUTE, status is 3xx);
> >> >> get_redirects("*");
> >> >> serialize_branches(0);
> >> >> }
> >> >> if(next_branches())
> >> >> {
> >> >> _QLOG(L_WARN, FAILUREROUTE, next branch);
> >> >> t_on_failure("3");
> >> >> t_relay();
> >> >> }
> >> >> _QLOG(L_WARN, FAILUREROUTE, no branches left);
> >> >> if(!t_reply("404", "Not Found"))
> >> >> {
> >> >> _QLOG(L_WARN, FAILUREROUTE, Error);
> >> >> }
> >> >> }
> >> >>
> >> >> My syslog shows QLOG messages.
> >> >> I see the 'status is 3xx' message, which shows the
> >> >> next command to be get_redirects("*");
> >> >>
> >> >> The next output I see in my syslog is 'no branches left', which
> >> >> indicates that the
> >> >> serialize_branches(0) and next_branches() aren't working as I
> >> expected.
> >> >>
> >> >> I've also tried getting rid of the serialize_branches and
> >> >> next_branches and just
> >> >> doing a t_relay() after the get_redirects(), that doesn't work
> >> either.
> >> >>
> >> >> Since I'm trying to simulate the redirect server, and the redirect
> >> >> client, I'm sure I
> >> >> got one of them wrong. Can somebody give me a hint?
> >> >>
> >> >> Thanks!
> >> >>
> >> >> -g
> >> >>
> >> >>
> >> >>
> >> >> --
> >> >> Greg Fausak
> >> >> greg at thursday.com
> >> >>
> >> >
> >> >
> >> >------------------------------------------------------------------------
> >>
> >> >
> >> >_______________________________________________
> >> >Users mailing list
> >> >Users at openser.org
> >> >http://openser.org/cgi-bin/mailman/listinfo/users
> >> >
> >> >
> >>
> >>
> >
> >
>
>


-- 
Greg Fausak
greg at thursday.com


More information about the Users mailing list