From 3c6b3ecbe14162d810286bac8f8aec87a5567e6f Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Wed, 12 Jul 2017 14:53:59 +0200 Subject: [PATCH] dialog: new parameters - early_timeout and noack_timeout - early_timeout - set the interval in seconds after which the dialogs in early state (not answered yet) are destroyed. Default value is 300. - noack_timeout - set the interval in seconds after which the dialogs that were answered with 200ok but didn't receive the ACK are marked for termination (lifetime set to 10 more seconds). Default value 60. --- src/modules/dialog/dialog.c | 6 +++++- src/modules/dialog/dlg_hash.c | 9 +++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/modules/dialog/dialog.c b/src/modules/dialog/dialog.c index 9f90e07a0b2..37b5dedde7d 100644 --- a/src/modules/dialog/dialog.c +++ b/src/modules/dialog/dialog.c @@ -107,6 +107,8 @@ int dlg_wait_ack = 1; static int dlg_timer_procs = 0; static int _dlg_track_cseq_updates = 0; int dlg_ka_failed_limit = 1; +int dlg_early_timeout = 300; +int dlg_noack_timeout = 60; int dlg_enable_dmq = 0; @@ -301,7 +303,9 @@ static param_export_t mod_params[]={ { "db_skip_load", INT_PARAM, &db_skip_load }, { "ka_failed_limit", INT_PARAM, &dlg_ka_failed_limit }, { "enable_dmq", INT_PARAM, &dlg_enable_dmq }, - {"event_callback", PARAM_STR, &dlg_event_callback }, + { "event_callback", PARAM_STR, &dlg_event_callback }, + { "early_timeout", PARAM_INT, &dlg_early_timeout }, + { "noack_timeout", PARAM_INT, &dlg_noack_timeout }, { 0,0,0 } }; diff --git a/src/modules/dialog/dlg_hash.c b/src/modules/dialog/dlg_hash.c index 8c5c7a6acb2..e9b0af65ea9 100644 --- a/src/modules/dialog/dlg_hash.c +++ b/src/modules/dialog/dlg_hash.c @@ -48,6 +48,9 @@ extern int dlg_ka_interval; extern int dlg_enable_dmq; +extern int dlg_early_timeout; +extern int dlg_noack_timeout; + /*! global dialog table */ struct dlg_table *d_table = 0; @@ -229,14 +232,16 @@ int dlg_clean_run(ticks_t ti) while (dlg) { tdlg = dlg; dlg = dlg->next; - if(tdlg->state==DLG_STATE_UNCONFIRMED && tdlg->init_tsstate==DLG_STATE_UNCONFIRMED + && tdlg->init_tsref); unlink_unsafe_dlg(&d_table->entries[i], tdlg); destroy_dlg(tdlg); } - if(tdlg->state==DLG_STATE_CONFIRMED_NA && tdlg->start_tsstate==DLG_STATE_CONFIRMED_NA + && tdlg->start_tstl, 10)<0) { LM_ERR("failed to update dialog lifetime in long non-ack state\n"); }