Skip to content

Commit

Permalink
ims_qos: bugfix for Rx register dialog callback
Browse files Browse the repository at this point in the history
- bugfix for Rx register dialog callback
- In some scenarios like parallel forking several INVITE with identical
  CALLID and FROMTAG sent to PCSCF which inserts dialogues for each INVITE.
- When 200OK is received in PCSCF the dialog callback must be registered
  for the respective dialog. Currently sometimes the wrong dialog is selected
  by searching with CALLID FROMTAG and TOTAG thus leading to problem
  no STR is sent at BYE.
- Fix is to pickup the right dialog before suspending the transaction during
  AAR/AAA processing and reuse this saved dialog.
  • Loading branch information
Peter Friedrich authored and henningw committed Mar 30, 2020
1 parent e2a1b96 commit 2768f8c
Show file tree
Hide file tree
Showing 3 changed files with 9 additions and 2 deletions.
7 changes: 7 additions & 0 deletions src/modules/ims_qos/ims_qos_mod.c
Expand Up @@ -1095,6 +1095,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");
Expand Down
3 changes: 1 addition & 2 deletions src/modules/ims_qos/rx_aar.c
Expand Up @@ -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 {
Expand Down
1 change: 1 addition & 0 deletions src/modules/ims_qos/rx_aar.h
Expand Up @@ -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 {
Expand Down

0 comments on commit 2768f8c

Please sign in to comment.