diff --git a/third-party/pjproject/patches/0024-fork-dialog-183-early-media.patch b/third-party/pjproject/patches/0024-fork-dialog-183-early-media.patch new file mode 100644 index 0000000000000000000000000000000000000000..385aa2dc804a20630adb2fba668b51f995cecd8a --- /dev/null +++ b/third-party/pjproject/patches/0024-fork-dialog-183-early-media.patch @@ -0,0 +1,60 @@ +From 1ac54b7eb7504f23470f3536f06c201fa1dc9e22 Mon Sep 17 00:00:00 2001 +From: Lukasz Kotasa <lukasz.kotasa@genexis.eu> +Date: Wed, 28 May 2025 14:24:37 +0200 +Subject: [PATCH] fork dialog 183 early media + +--- + pjsip/src/pjsip/sip_ua_layer.c | 26 +++++++++++++++++++++++--- + 1 file changed, 23 insertions(+), 3 deletions(-) + +diff --git a/pjsip/src/pjsip/sip_ua_layer.c b/pjsip/src/pjsip/sip_ua_layer.c +index e6a7eaa..1f32367 100644 +--- a/pjsip/src/pjsip/sip_ua_layer.c ++++ b/pjsip/src/pjsip/sip_ua_layer.c +@@ -751,6 +751,18 @@ retry_on_deadlock: + return PJ_TRUE; + } + ++pjsip_dialog* dlg_fork(pjsip_dialog *dlg, pjsip_rx_data *res) ++{ ++ pjsip_dialog *forked_dlg; ++ pj_status_t status; ++ ++ /* Create forked dialog */ ++ status = pjsip_dlg_fork(dlg, res, &forked_dlg); ++ if (status != PJ_SUCCESS) ++ return NULL; ++ ++ return forked_dlg; ++} + + /* On rx response notification. + */ +@@ -900,13 +912,21 @@ retry_on_deadlock: + return PJ_TRUE; + } + } else { +- dlg = dlg_set->dlg_list.next; +- +- PJ_LOG(4,(THIS_FILE, ++ if (st_code != 183){ ++ dlg = dlg_set->dlg_list.next; ++ PJ_LOG(4,(THIS_FILE, + "Unhandled forked %s from %s:%d, response will be " + "handed over to the first dialog", + pjsip_rx_data_get_info(rdata), + rdata->pkt_info.src_name, rdata->pkt_info.src_port)); ++ } else { ++ // received forked 183 response, create forked dialog ++ dlg = dlg_fork(dlg_set->dlg_list.next, rdata); ++ if (!dlg) { ++ PJ_LOG(4, (THIS_FILE, "Forking dialog for 183 response failed")); ++ dlg = dlg_set->dlg_list.next; ++ } ++ } + } + + } else if (dlg == (pjsip_dialog*)&dlg_set->dlg_list) { +-- +2.43.0 +