From b8ab9fcccd442e9e9ac887a7dc16b690213a6e28 Mon Sep 17 00:00:00 2001 From: Daniel-Constantin Mierla Date: Tue, 4 Jul 2017 11:11:41 +0200 Subject: [PATCH] dialog: lookup kemi engine for event route execution --- src/modules/dialog/dlg_handlers.c | 17 ++++++++++++----- src/modules/dialog/dlg_profile.c | 10 ++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/src/modules/dialog/dlg_handlers.c b/src/modules/dialog/dlg_handlers.c index eb5d41ceac9..c4218be50ab 100644 --- a/src/modules/dialog/dlg_handlers.c +++ b/src/modules/dialog/dlg_handlers.c @@ -1550,6 +1550,7 @@ void dlg_ontimeout(struct dlg_tl *tl) if(dlg->toroute>0) { run_top_route(main_rt.rlist[dlg->toroute], fmsg, 0); } else { + keng = sr_kemi_eng_get(); if(keng!=NULL) { evname.s = "dialog:timeout"; evname.len = sizeof("dialog:timeout") - 1; @@ -1703,22 +1704,28 @@ int dlg_run_event_route(dlg_cell_t *dlg, sip_msg_t *msg, int ostate, int nstate) if(dlg_event_callback.s==NULL || dlg_event_callback.len<=0) { if(nstate==DLG_STATE_CONFIRMED_NA) { rt = dlg_event_rt[DLG_EVENTRT_START]; + } else if(nstate==DLG_STATE_DELETED) { + if(ostate==DLG_STATE_CONFIRMED || ostate==DLG_STATE_CONFIRMED_NA) { + rt = dlg_event_rt[DLG_EVENTRT_END]; + } else if(ostate==DLG_STATE_UNCONFIRMED || ostate==DLG_STATE_EARLY) { + rt = dlg_event_rt[DLG_EVENTRT_FAILED]; + } + } + if(rt==-1 || event_rt.rlist[rt]==NULL) + return 0; + } else { + if(nstate==DLG_STATE_CONFIRMED_NA) { evname.s = "dialog:start"; evname.len = sizeof("dialog:start") - 1; } else if(nstate==DLG_STATE_DELETED) { if(ostate==DLG_STATE_CONFIRMED || ostate==DLG_STATE_CONFIRMED_NA) { - rt = dlg_event_rt[DLG_EVENTRT_END]; evname.s = "dialog:end"; evname.len = sizeof("dialog:end") - 1; } else if(ostate==DLG_STATE_UNCONFIRMED || ostate==DLG_STATE_EARLY) { evname.s = "dialog:failed"; evname.len = sizeof("dialog:failed") - 1; - rt = dlg_event_rt[DLG_EVENTRT_FAILED]; } } - if(rt==-1 || event_rt.rlist[rt]==NULL) - return 0; - } else { keng = sr_kemi_eng_get(); if(keng==NULL) { LM_DBG("event callback (%s) set, but no cfg engine\n", diff --git a/src/modules/dialog/dlg_profile.c b/src/modules/dialog/dlg_profile.c index e58dbad83d6..3576f68036d 100644 --- a/src/modules/dialog/dlg_profile.c +++ b/src/modules/dialog/dlg_profile.c @@ -594,8 +594,14 @@ int set_dlg_profile(struct sip_msg *msg, str *value, struct dlg_profile_table *p linker->hash_linker.value.len = value->len; } sruid_next_safe(&_dlg_profile_sruid); - strcpy(linker->hash_linker.puid, _dlg_profile_sruid.uid.s); - linker->hash_linker.puid_len = _dlg_profile_sruid.uid.len; + if(_dlg_profile_sruid.uid.lenhash_linker.puid, _dlg_profile_sruid.uid.s); + linker->hash_linker.puid_len = _dlg_profile_sruid.uid.len; + } else { + LM_ERR("sruid size is too large\n"); + shm_free(linker); + goto error; + } if (dlg!=NULL) { /* add linker directly to the dialog and profile */