@@ -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