From d8d86bd0fa848451db0dd5c1785701f30f089617 Mon Sep 17 00:00:00 2001 From: mmichelson Date: Wed, 27 Aug 2008 20:15:29 +0000 Subject: Revert commit 140302. Should not be merging changes like that into a release-candidate branch git-svn-id: http://svn.digium.com/svn/asterisk/branches/1.6.0@140304 f38db490-d61c-443f-a65b-d21fe96a405b --- channels/chan_sip.c | 26 +++++++++----------------- 1 file changed, 9 insertions(+), 17 deletions(-) (limited to 'channels') diff --git a/channels/chan_sip.c b/channels/chan_sip.c index d474ec297..d10bc5a00 100644 --- a/channels/chan_sip.c +++ b/channels/chan_sip.c @@ -10794,13 +10794,17 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq) return -1; } -/*! \brief Lock dialog lock and find matching pvt lock +/*! \brief Lock dialog lock and find matching pvt lock + - Their tag is fromtag, our tag is to-tag + - This means that in some transactions, totag needs to be their tag :-) + depending upon the direction Returns a reference, remember to release it when done XXX */ static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *totag, const char *fromtag) { struct sip_pvt *sip_pvt_ptr; + if (totag) ast_debug(4, "Looking for callid %s (fromtag %s totag %s)\n", callid, fromtag ? fromtag : "", totag ? totag : ""); @@ -10809,6 +10813,7 @@ static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *t for (sip_pvt_ptr = dialoglist; sip_pvt_ptr; sip_pvt_ptr = sip_pvt_ptr->next) { if (!strcmp(sip_pvt_ptr->callid, callid)) { int match = 1; + char *ourtag = sip_pvt_ptr->tag; /* Go ahead and lock it (and its owner) before returning */ sip_pvt_lock(sip_pvt_ptr); @@ -10817,21 +10822,8 @@ static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *t (With a forking SIP proxy, several call legs share the call id, but have different tags) */ - if (pedanticsipchecking) { - const char *pvt_fromtag, *pvt_totag; - - if (sip_pvt_ptr->outgoing_call == TRUE) { - /* Outgoing call tags : from is "our", to is "their" */ - pvt_fromtag = sip_pvt_ptr->tag ; - pvt_totag = sip_pvt_ptr->theirtag ; - } else { - /* Incoming call tags : from is "their", to is "our" */ - pvt_fromtag = sip_pvt_ptr->theirtag ; - pvt_totag = sip_pvt_ptr->tag ; - } - if (ast_strlen_zero(fromtag) || strcmp(fromtag, pvt_fromtag) || (!ast_strlen_zero(totag) && strcmp(totag, pvt_totag))) - match = 0; - } + if (pedanticsipchecking && (strcmp(fromtag, sip_pvt_ptr->theirtag) || (!ast_strlen_zero(totag) && strcmp(totag, ourtag)))) + match = 0; if (!match) { sip_pvt_unlock(sip_pvt_ptr); @@ -10840,7 +10832,7 @@ static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *t if (totag) ast_debug(4, "Matched %s call - their tag is %s Our tag is %s\n", - sip_pvt_ptr->outgoing_call == TRUE ? "OUTGOING": "INCOMING", + ast_test_flag(&sip_pvt_ptr->flags[0], SIP_OUTGOING) ? "OUTGOING": "INCOMING", sip_pvt_ptr->theirtag, sip_pvt_ptr->tag); /* deadlock avoidance... */ -- cgit v1.2.3