Hello everyone,
According to the routing flow set in kamailio.cfg
# handle retransmissions
if(t_precheck_trans()) {
t_check_trans();
exit;
}
t_check_trans();
After I traced the flow it seems that SUBSCRIBE message failed on
t_check_trans()
and stopped there.
I add some logs to keep tracing this function and found that:
int t_check_trans(struct sip_msg* msg) { struct cell* t; int branch; int
ret; /* already processing a T */ if(is_route_type(FAILURE_ROUTE) ||
is_route_type(BRANCH_ROUTE) || is_route_type(BRANCH_FAILURE_ROUTE) ||
is_route_type(TM_ONREPLY_ROUTE)) { return 1; } if
(msg->first_line.type==SIP_REPLY) { branch = 0; ret = (t_check_msg( msg ,
&branch)==1) ? 1 : -1; tm_ctx_set_branch_index(branch); return ret; } else
if (msg->REQ_METHOD==METHOD_CANCEL) { return w_t_lookup_cancel(msg, 0, 0);
} else { switch(t_check_msg(msg, 0)){ case -2: /* possible e2e ack */
return 1; case 1: /* found */ t=get_t(); if (msg->REQ_METHOD==METHOD_ACK){
/* ack to neg. reply or ack to local trans. => process it and end the
script */ /* FIXME: there's no way to distinguish here between acks to
local trans. and neg. acks */ if (unlikely(has_tran_tmcbs(t,
TMCB_ACK_NEG_IN))) run_trans_callbacks(TMCB_ACK_NEG_IN, t, msg, 0,
msg->REQ_METHOD); t_release_transaction(t); } else { /* is a retransmission
*/ if (unlikely(has_tran_tmcbs(t, TMCB_REQ_RETR_IN)))
run_trans_callbacks(TMCB_REQ_RETR_IN, t, msg, 0, msg->REQ_METHOD);
t_retransmit_reply(t); } /* no need for UNREF(t); set_t(0) - the
end-of-script t_unref callback will take care of them */ return 0; /* exit
from the script */ <---------------------------- THE POINT !! } /* not
found or error */ } return -1; }
If the line "return 0; /* exit from the script */" was changed to "return
1; /* exit from the script */" , it works ---- means that the configuration
script can keep being proceeded now.
Any suggestions?