@ -9007,10 +9007,7 @@ static int get_destination(struct sip_pvt *p, struct sip_request *oreq)
return - 1 ;
}
/*! \brief Lock interface 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
/*! \brief Lock interface lock and find matching pvt lock
*/
static struct sip_pvt * get_sip_pvt_byid_locked ( const char * callid , const char * totag , const char * fromtag )
{
@ -9025,7 +9022,6 @@ static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *t
for ( sip_pvt_ptr = iflist ; 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 */
ast_mutex_lock ( & sip_pvt_ptr - > lock ) ;
@ -9034,8 +9030,21 @@ 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 & & ( strcmp ( fromtag , sip_pvt_ptr - > theirtag ) | | ( ! ast_strlen_zero ( totag ) & & strcmp ( totag , ourtag ) ) ) )
match = 0 ;
if ( pedanticsipchecking ) {
const char * pvt_fromtag , * pvt_totag ;
if ( ast_test_flag ( & sip_pvt_ptr - > flags [ 1 ] , SIP_PAGE2_OUTGOING_CALL ) ) {
/* 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 ( ! match ) {
ast_mutex_unlock ( & sip_pvt_ptr - > lock ) ;
@ -9044,7 +9053,7 @@ static struct sip_pvt *get_sip_pvt_byid_locked(const char *callid, const char *t
if ( option_debug > 3 & & totag )
ast_log ( LOG_DEBUG , " Matched %s call - their tag is %s Our tag is %s \n " ,
ast_test_flag ( & sip_pvt_ptr - > flags [ 0] , SIP_OUTGOING ) ? " OUTGOING " : " INCOMING " ,
ast_test_flag ( & sip_pvt_ptr - > flags [ 1] , SIP_PAGE2_OUTGOING_CALL ) ? " OUTGOING " : " INCOMING " ,
sip_pvt_ptr - > theirtag , sip_pvt_ptr - > tag ) ;
/* deadlock avoidance... */