Help me, kamailio step-bros, i'm stuck!

Im trying to build logic, where if target client was not located on this node - 
message is forwarded to the next node, until sip message make full circle, and 
it will be handled  by its 'X-Visited-Nodes' header and fire 404 if no one 
consumed it. (I can see that check is buggy, but i will fix this later so don't 
pay much attention to it)

Im blocked by t_relay() behaviour, which is ignore destination selected by 
ds_select_dst;
Instead of forwarding message, it comes on the same node again and again

>>>> my dispatcher config

 927 route[DISPATCH] {
 928     $var(destination_found) = 0;
 929     $var(checked_nodes) = "";  # Keep track of locally checked nodes
 930     $var(loop_behaviour) = 0;
 931
 932     # Initialize X-Visited-Nodes if it doesn't exist
 933     if ($hdrc(X-Visited-Nodes) == 0) {
 934         append_hf_value("X-Visited-Nodes", "");  # Initialize the header 
in the message
 935     }
 936
 937     xlog("X-Visited-Nodes: $hdr(X-Visited-Nodes)");
 938     append_hf_value("X-Visited-Nodes", "$du");
 939     # Round-robin dispatching on gateways group '1'
 940     while (ds_select_dst("1", "4") && $var(loop_behaviour) != 2) {
 941         $var(loop_behaviour) = 0;
 942         # Get the current proposed destination
 943         $var(current_dest) = $du;
 944
 945         # 1. Skip if the proposed destination is self
 946         if ($var(loop_behaviour) == 0 && $var(current_dest) =~ ".*" + $Ri 
+ ".*") {
 947             xlog("Skipping self destination <$var(current_dest)>\n");
 948             ds_mark_dst();  # Mark this node globally only because it's 
"self"
 949             $var(loop_behaviour) = 1; #continue
 950         }
 951
 952         # 2. Check if we've made a full circle
 953         if ($var(loop_behaviour) == 0 && $var(checked_nodes) =~ "^" + 
$var(current_dest) + ".*") {
 954             xlog("All nodes checked, no valid destination found\n");
 955             send_reply("404", "No user found, no new destination 
available");
 956             exit;
 957         }
 958
 959         # 3. Check if the node is already in X-Visited-Nodes
 960         if ($var(loop_behaviour) == 0 && $hdr(X-Visited-Nodes) =~ ".*" + 
$var(current_dest) + ".*") {
 961             xlog("Node <$var(current_dest)> already in X-Visited-Nodes\n");
 962             $var(checked_nodes) = $var(checked_nodes) + "," + 
$var(current_dest);
 963             $var(loop_behaviour) = 1; #continue
 964         }
 965
 966         if($var(loop_behaviour) == 0){
 974         xlog("DISPATCHER: selected reqURI: <$ru> ; destURI: <$du> via 
<$var(current_dest)> (attrs: $xavp(_dsdst_=>attrs))\n");
 975         $var(destination_found) = 1;
 976         $var(loop_behaviour) = 2;  # Exit the loop as a valid destination 
is found
 977         }
 978     }
 979
 980     # If a destination is found, relay the message
 981     if ($var(destination_found)) {
 987          if (!t_relay()) {
 988                  sl_reply_error();
 989          }
 990         exit;
 991     } else {
 992      return(-1);
 993     }
 994 }

>>>> INVITE message trace (every line was trimmed to not garbage this message 
>>>> with irrelevant info like process name or timestamp)
i have enabled config trace mode, so my invite message inside dispatcher route 
looks like this. And on my other node, there is not a trace of invite message

 {1 22 INV CmLZ} <script>: Lookup for 02222 failed - no such client on this 
node <--- Trying to call user, which is not registered on this node, so 
location route returns fail and message should go on another node
 {1 22 INV CmLZ} trace(): request_route=[LOCATION] 
c=[/etc/kamailio/kamailio.cfg] l=845 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[LOCATION] 
c=[/etc/kamailio/kamailio.cfg] l=842 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[LOCATION] 
c=[/etc/kamailio/kamailio.cfg] l=843 a=2 n=return
 {1 22 INV CmLZ} trace(): request_route=[DEFAULT_ROUTE] 
c=[/etc/kamailio/kamailio.cfg] l=653 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DEFAULT_ROUTE] 
c=[/etc/kamailio/kamailio.cfg] l=650 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DEFAULT_ROUTE] 
c=[/etc/kamailio/kamailio.cfg] l=645 a=5 n=route
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=928 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=929 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=930 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=937 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=934 a=26 n=append_hf_value
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=937 a=25 n=xlog
 {1 22 INV CmLZ} <script>: X-Visited-Nodes: <null>
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=938 a=26 n=append_hf_value
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=978 a=23 n=while
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=940 a=26 n=ds_select_dst
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=941 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=943 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=953 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=960 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=966 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=978 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=974 a=25 n=xlog
 {1 22 INV CmLZ} <script>: DISPATCHER: selected reqURI: 
<sip:02...@kamailio-nlb-test-40f4f509064551a6.elb.eu-west-1.amazonaws.com> ; 
destURI: <sip:10.197.200.228:5060> via <sip:10.197.200.228:5060> (attrs: 
<null>)  <--- destination uri is correct, message should be sent to next 
kamailio node isn't it?
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=975 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=976 a=63 n=assign
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=940 a=26 n=ds_select_dst
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=993 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=990 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=987 a=24 n=t_relay  <-- should relay to $dU 
destination
 {1 22 INV CmLZ} tm [t_lookup.c:1868]: t_newtran(): msg (0x7d0ad3775368) 
id=28/25950 global id=28/25950 T start=(nil)
 {1 22 INV CmLZ} tm [t_lookup.c:781]: t_lookup_request(): start searching: 
hash=9408, isACK=0
 {1 22 INV CmLZ} tm [t_lookup.c:499]: matching_3261(): RFC3261 transaction 
matching failed - via branch [z9hG4bK.YP1EiC6qX]
 {1 22 INV CmLZ} tm [t_lookup.c:981]: t_lookup_request(): no transaction found
 {1 22 INV CmLZ} tm [h_table.c:532]: tm_xdata_swap(): copy X/AVPs from msg 
context to txdata
 {1 22 INV CmLZ} tm [t_hooks.c:301]: run_reqin_callbacks_internal(): 
trans=0x7d0acdbf1168, callback type 1, id 0 entered
 {1 22 INV CmLZ} tm [h_table.c:551]: tm_xdata_swap(): restore X/AVPs msg 
context from txdata
 {1 22 INV CmLZ} tm [h_table.c:415]: build_cell(): created new cell 
0x7d0acdbf1168
 {1 22 INV CmLZ} tm [t_funcs.c:339]: t_relay_to(): new INVITE
 {1 22 INV CmLZ} tm [t_reply.c:634]: _reply_light(): reply sent out - 
buf=0x7d0ad3755d98: SIP/2.0 100 trying -... shmem=0x7d0acdbf4b10: SIP/2.0 100 
trying -
 {1 22 INV CmLZ} tm [t_reply.c:645]: _reply_light(): finished
 {1 22 INV CmLZ} tm [t_funcs.c:386]: t_relay_to(): new transaction forwarded
 
 {1 22 INV CmLZ} trace(): request_route=[DISPATCH] 
c=[/etc/kamailio/kamailio.cfg] l=990 a=2 n=exit     <--- same invite appears on 
this node instead of being forwarded to next kamailio node
 {1 22 INV CmLZ} trace(): request_route=[DEFAULT_ROUTE] 
c=[/etc/kamailio/kamailio.cfg] l=585 a=5 n=route
 {1 22 INV CmLZ} trace(): request_route=[REQINIT] 
c=[/etc/kamailio/kamailio.cfg] l=699 a=67 n=set_rpl_no_connect
 {1 22 INV CmLZ} trace(): request_route=[REQINIT] 
c=[/etc/kamailio/kamailio.cfg] l=702 a=55 n=force_rport
 {1 22 INV CmLZ} trace(): request_route=[REQINIT] 
c=[/etc/kamailio/kamailio.cfg] l=727 a=16 n=if
 {1 22 INV CmLZ} trace(): request_route=[REQINIT] 
c=[/etc/kamailio/kamailio.cfg] l=732 a=16 n=if
_______________________________________________
Kamailio - Development Mailing List -- sr-dev@lists.kamailio.org
To unsubscribe send an email to sr-dev-le...@lists.kamailio.org
Important: keep the mailing list in the recipients, do not reply only to the 
sender!

Reply via email to