Skip to content

Commit ae45416

Browse files
assertion when the ACK response is recognized as a merged request (pjsip#4203)
1 parent 1d3f3af commit ae45416

File tree

1 file changed

+23
-7
lines changed

1 file changed

+23
-7
lines changed

pjsip/src/pjsua-lib/pjsua_core.c

Lines changed: 23 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -667,15 +667,31 @@ static pj_bool_t mod_pjsua_on_rx_request(pjsip_rx_data *rdata)
667667
pj_bool_t processed = PJ_FALSE;
668668

669669
#if PJSUA_DETECT_MERGED_REQUESTS
670-
if (pjsip_tsx_detect_merged_requests(rdata)) {
671-
PJ_LOG(4, (THIS_FILE, "Merged request detected"));
670+
pjsip_transaction *tsx;
671+
if ((tsx = pjsip_tsx_detect_merged_requests(rdata)) != NULL) {
672672

673-
/* Respond with 482 (Loop Detected) */
674-
pjsip_endpt_respond(pjsua_var.endpt, NULL, rdata,
675-
PJSIP_SC_LOOP_DETECTED, NULL,
676-
NULL, NULL, NULL);
673+
pjsip_dialog *dlg = pjsip_tsx_get_dlg(tsx);
677674

678-
return PJ_TRUE;
675+
PJ_LOG(4, (THIS_FILE, "Merged request detected (%s) (%s): %s from %s:%d",
676+
dlg ? dlg->obj_name : "-no-dlg-",
677+
tsx->obj_name,
678+
pjsip_rx_data_get_info(rdata),
679+
rdata->pkt_info.src_name,
680+
rdata->pkt_info.src_port));
681+
682+
/* Don't respond to ACK, even if it looks like a merged request
683+
* Let it be "dropped/unhandled by any modules"
684+
*/
685+
if (pjsip_method_cmp(&rdata->msg_info.msg->line.req.method,
686+
&pjsip_ack_method) == 0) {
687+
return PJ_FALSE;
688+
} else {
689+
/* Respond with 482 (Loop Detected) */
690+
pjsip_endpt_respond(pjsua_var.endpt, NULL, rdata,
691+
PJSIP_SC_LOOP_DETECTED, NULL,
692+
NULL, NULL, NULL);
693+
return PJ_TRUE;
694+
}
679695
}
680696
#endif
681697

0 commit comments

Comments
 (0)