diff --git a/src/modules/ims_qos/ims_qos_mod.c b/src/modules/ims_qos/ims_qos_mod.c index 6f68b39be17..11a2e30df52 100644 --- a/src/modules/ims_qos/ims_qos_mod.c +++ b/src/modules/ims_qos/ims_qos_mod.c @@ -1085,6 +1085,13 @@ static int w_rx_aar(struct sip_msg *msg, char *route, char* dir, char *c_id, int saved_t_data->aar_update = 1; //this is an update aar - we set this so on async_aar we know this is an update and act accordingly } + dlg = dlgb.get_dlg(msg); + if (!dlg) { + LM_ERR("Unable to find dialog and cannot do Rx without it\n"); + goto error; + } + saved_t_data->dlg = dlg; + LM_DBG("Suspending SIP TM transaction\n"); if (tmb.t_suspend(msg, &saved_t_data->tindex, &saved_t_data->tlabel) != 0) { LM_ERR("failed to suspend the TM processing\n"); diff --git a/src/modules/ims_qos/rx_aar.c b/src/modules/ims_qos/rx_aar.c index 684f3a75c59..3fa9633fb59 100644 --- a/src/modules/ims_qos/rx_aar.c +++ b/src/modules/ims_qos/rx_aar.c @@ -176,8 +176,7 @@ void async_aar_callback(int is_timeout, void *param, AAAMessage *aaa, long elaps passed_rx_session_id->len = 0; STR_SHM_DUP(*passed_rx_session_id, aaa->sessionId->data, "cb_passed_rx_session_id"); LM_DBG("passed rx session id [%.*s]", passed_rx_session_id->len, passed_rx_session_id->s); - - dlgb.register_dlgcb_nodlg(&data->callid, &data->ftag, &data->ttag, DLGCB_TERMINATED | DLGCB_DESTROY | DLGCB_EXPIRED | DLGCB_RESPONSE_WITHIN | DLGCB_CONFIRMED | DLGCB_FAILED, callback_dialog, (void*) (passed_rx_session_id), free_dialog_data); + dlgb.register_dlgcb_nodlg( data->dlg, DLGCB_TERMINATED | DLGCB_DESTROY | DLGCB_EXPIRED | DLGCB_RESPONSE_WITHIN | DLGCB_CONFIRMED | DLGCB_FAILED, callback_dialog, (void*) (passed_rx_session_id), free_dialog_data); } result = CSCF_RETURN_TRUE; } else { diff --git a/src/modules/ims_qos/rx_aar.h b/src/modules/ims_qos/rx_aar.h index f12def162fe..596e0726c6d 100644 --- a/src/modules/ims_qos/rx_aar.h +++ b/src/modules/ims_qos/rx_aar.h @@ -72,6 +72,7 @@ typedef struct saved_transaction { str ftag; str ttag; unsigned int aar_update; + struct dlg_cell* dlg; } saved_transaction_t; typedef struct saved_transaction_local {