From 58d0daaffab281ca40458fd7612f0dd31bc95274 Mon Sep 17 00:00:00 2001 From: Carsten Bock Date: Tue, 14 Jul 2015 16:03:56 +0200 Subject: [PATCH] dialog_ng: Minor fixes for termianting calls --- modules/dialog_ng/dlg_hash.c | 22 ++++++++++++++++------ modules/dialog_ng/dlg_req_within.c | 6 ++++-- 2 files changed, 20 insertions(+), 8 deletions(-) diff --git a/modules/dialog_ng/dlg_hash.c b/modules/dialog_ng/dlg_hash.c index ed722791762..3a28a0b6f8e 100644 --- a/modules/dialog_ng/dlg_hash.c +++ b/modules/dialog_ng/dlg_hash.c @@ -697,51 +697,61 @@ int dlg_update_cseq(struct dlg_cell * dlg, unsigned int leg, str *cseq, str *to_ //compare the to_tag passed parameter to all the dlg_out to_tag entry of the dlg parameter (There could be multiple) while (dlg_out) { + LM_DBG("Searching out dialog with to_tag '%.*s' (looking for '%.*s')\n", dlg_out->to_tag.len, dlg_out->to_tag.s, to_tag->len, to_tag->s); if (dlg_out->to_tag.len == to_tag->len && memcmp(dlg_out->to_tag.s, to_tag->s, dlg_out->to_tag.len) == 0) { //this parameter matches we have found the dlg_out to update the cseq if (leg == DLG_CALLER_LEG) { + LM_DBG("Update Caller\n"); //update caller cseq if (dlg_out->caller_cseq.s) { - if (dlg_out->caller_cseq.len < cseq->len) { + if (dlg_out->caller_cseq.len != cseq->len) { shm_free(dlg_out->caller_cseq.s); dlg_out->caller_cseq.s = (char*) shm_malloc(cseq->len); if (dlg_out->caller_cseq.s == NULL) goto error; dlg_out->caller_cseq.len = cseq->len; - memcpy(dlg_out->caller_cseq.s, cseq->s, cseq->len); } + LM_DBG("Updating CSeq...\n"); + memcpy(dlg_out->caller_cseq.s, cseq->s, cseq->len); + LM_DBG("CSeq is now '%.*s' (%p)\n", dlg_out->caller_cseq.len, dlg_out->caller_cseq.s, dlg_out->caller_cseq.s); } else { dlg_out->caller_cseq.s = (char*) shm_malloc(cseq->len); if (dlg_out->caller_cseq.s == NULL) goto error; dlg_out->caller_cseq.len = cseq->len; + LM_DBG("Updating CSeq...\n"); memcpy(dlg_out->caller_cseq.s, cseq->s, cseq->len); + LM_DBG("CSeq is now '%.*s' (%p)\n", dlg_out->caller_cseq.len, dlg_out->caller_cseq.s, dlg_out->caller_cseq.s); } - } else if (leg == DLG_CALLEE_LEG) { + LM_DBG("Update Callee\n"); //update callee cseq if (dlg_out->callee_cseq.s) { - if (dlg_out->callee_cseq.len < cseq->len) { + if (dlg_out->callee_cseq.len != cseq->len) { shm_free(dlg_out->callee_cseq.s); dlg_out->callee_cseq.s = (char*) shm_malloc(cseq->len); if (dlg_out->callee_cseq.s == NULL) goto error; dlg_out->callee_cseq.len = cseq->len; - memcpy(dlg_out->callee_cseq.s, cseq->s, cseq->len); } + LM_DBG("Updating CSeq...\n"); + memcpy(dlg_out->callee_cseq.s, cseq->s, cseq->len); + LM_DBG("CSeq is now '%.*s' (%p)\n", dlg_out->caller_cseq.len, dlg_out->caller_cseq.s, dlg_out->caller_cseq.s); } else { dlg_out->callee_cseq.s = (char*) shm_malloc(cseq->len); if (dlg_out->callee_cseq.s == NULL) goto error; dlg_out->callee_cseq.len = cseq->len; + + LM_DBG("Updating CSeq...\n"); memcpy(dlg_out->callee_cseq.s, cseq->s, cseq->len); + LM_DBG("CSeq is now '%.*s' (%p)\n", dlg_out->caller_cseq.len, dlg_out->caller_cseq.s, dlg_out->caller_cseq.s); } - } } dlg_out = dlg_out->next; diff --git a/modules/dialog_ng/dlg_req_within.c b/modules/dialog_ng/dlg_req_within.c index 68fdb2a727e..06ce0cbfccf 100644 --- a/modules/dialog_ng/dlg_req_within.c +++ b/modules/dialog_ng/dlg_req_within.c @@ -94,7 +94,7 @@ dlg_t * build_dlg_t(struct dlg_cell * cell, int dir) { memset(td, 0, sizeof (dlg_t)); if (dir == DLG_CALLER_LEG) { - cseq = cell->first_req_cseq; + cseq = dlg_out->callee_cseq; route_set = cell->caller_route_set; contact = cell->caller_contact; td->rem_uri = cell->from_uri; @@ -103,7 +103,7 @@ dlg_t * build_dlg_t(struct dlg_cell * cell, int dir) { td->id.loc_tag = dlg_out->to_tag; td->send_sock = cell->caller_bind_addr; } else { - cseq = dlg_out->callee_cseq; + cseq = dlg_out->caller_cseq; route_set = dlg_out->callee_route_set; contact = dlg_out->callee_contact; td->rem_uri = dlg_out->to_uri; @@ -122,6 +122,8 @@ dlg_t * build_dlg_t(struct dlg_cell * cell, int dir) { td->loc_seq.value = loc_seq; td->loc_seq.is_set = 1; + LM_DBG("CSeq is '%.*s' (%i)\n", cseq.len, cseq.s, loc_seq); + /*route set*/ if (route_set.s && route_set.len) {