Hi Federico, were the received ack and cancel captured automatically in the old version when sip trace was set for invite? There were many changes in the past years, but I remember that the flag was mainly for outgoing requests and matching replies of the transaction for which the flag was set. For incoming requests sip_trace() function had to be used.
Based on your remark, I think that trace_tm_neg_ack_in() should not check if the trace-is-off(). It should be set when trace-is-on and that's it for the transaction. Feel free to clarify (or propose) the wanted behaviour and then we can work together to have it as expected. I used sip trace lately for tracing all traffic (trace_mode=1), no longer doing any filtering for transactions/dialogs. Cheers, Daniel On 31.03.20 09:09, Federico Cabiddu wrote: > Hi all, > I've been recently testing 5.3.x/master siptrace module, in particular > the new trace mode "t" vs the legacy flag + sip_trace() mode and I've > found some issues with the handling of CANCEL. Specifically, I've > tested the following scenarios: > 1) sip_trace_mode("t") on the initial INVITE only: received ACK for > negative replies not captured > 2) sip_trace_mode("t") on the initial INVITE and on neg ACK: received > ACK captured twice > 3) setflag and sip_trace() on the initial INVITE only: received CANCEL > and ACK not captured (outgoing yes) > 4) setflag and sip_trace() on the initial INVITE and ACK: received > CANCEL not captured, received ACK captured twice > 5) setflag and sip_trace() for each message (legacy): received CANCEL > and 200 captured twice, received ACK captured twice > > Digging into the module's code the "culprit" looks to be trace_is_off > function > (https://github.com/kamailio/kamailio/blob/2768f8ce1cf6da242674e7e40c8e76eb6c630f6b/src/modules/siptrace/siptrace.c#L66) > and the places where it is called. > E.g.: for the case 1), when a negative reply is > received, trace_tm_neg_ack_in is called, which calls inside > trace_is_off > (https://github.com/kamailio/kamailio/blob/2768f8ce1cf6da242674e7e40c8e76eb6c630f6b/src/modules/siptrace/siptrace.c#L1661), > which cannot be true unless the ACK has been marked for capture in the > script, in which case it will be capture twice (case 2). The same > applies to the CANCEL for case 3), in trace_onreq_out (callback > for TMCB_E2ECANCEL_IN) trace_is_off because the incoming message is > not flagged. Case 3) should theoretically behave like case 1) > according to > commit > https://github.com/kamailio/kamailio/commit/40e09d8625184f19ff5666a2848cbb8c6212db26. > > I'm not really sure if (and how) modify the trace_is_off function or > not calling it in specific cases. E.g.: why calling it > in trace_tm_neg_ack_in? This callback is set when we explicity want to > trace a transaction, so why checking inside if tracing is on? Maybe > I'm missing something, but I think that probably the different > behaviors of the modes should be better specified/decided. > > Best regards, > > Federico > > _______________________________________________ > Kamailio (SER) - Development Mailing List > sr-dev@lists.kamailio.org > https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev -- Daniel-Constantin Mierla -- www.asipto.com www.twitter.com/miconda -- www.linkedin.com/in/miconda
_______________________________________________ Kamailio (SER) - Development Mailing List sr-dev@lists.kamailio.org https://lists.kamailio.org/cgi-bin/mailman/listinfo/sr-dev