rem: || (cseq->method_id!=METHOD_OTHER)?
add: || (cseq->method_id!=METHOD_OTHER && p_cell->uas.request)?
context: int t_reply_matching( struct sip_msg *p_msg , int *p_branch ){	struct cell*  p_cell;	int hash_index   = 0;	int entry_label  = 0;	int branch_id    = 0;	char  *hashi, *branchi, *p, *n;	int hashl, branchl;	int scan_space;	struct cseq_body *cseq;	char *loopi;	int loopl;	char *syni;	int synl;	/* make compiler warnings happy */	loopi=0;	loopl=0;	syni=0;	synl=0;	/* split the branch into pieces: loop_detection_check(ignored),	 hash_table_id, synonym_id, branch_id */	if (!(p_msg->via1 && p_msg->via1->branch && p_msg->via1->branch->value.s))		goto nomatch2;	/* we do RFC 3261 tid matching and want to see first if there is	 * magic cookie in branch */	if (p_msg->via1->branch->value.len<=MCOOKIE_LEN)		goto nomatch2;	if (memcmp(p_msg->via1->branch->value.s, MCOOKIE, MCOOKIE_LEN)!=0)		goto nomatch2;	p=p_msg->via1->branch->value.s+MCOOKIE_LEN;	scan_space=p_msg->via1->branch->value.len-MCOOKIE_LEN;	/* hash_id */	n=eat_token2_end( p, p+scan_space, BRANCH_SEPARATOR);	hashl=n-p;	scan_space-=hashl;	if (!hashl || scan_space<2 || *n!=BRANCH_SEPARATOR) goto nomatch2;	hashi=p;	p=n+1;scan_space--;	if (!syn_branch) {		/* md5 value */		n=eat_token2_end( p, p+scan_space, BRANCH_SEPARATOR );		loopl = n-p;		scan_space-= loopl;		if (n==p || scan_space<2 || *n!=BRANCH_SEPARATOR) 			goto nomatch2;		loopi=p;		p=n+1; scan_space--;	} else {		/* synonym id */		n=eat_token2_end( p, p+scan_space, BRANCH_SEPARATOR);		synl=n-p;		scan_space-=synl;		if (!synl || scan_space<2 || *n!=BRANCH_SEPARATOR) 			goto nomatch2;		syni=p;		p=n+1;scan_space--;	}	/* branch id  -  should exceed the scan_space */	n=eat_token_end( p, p+scan_space );	branchl=n-p;	if (!branchl ) goto nomatch2;	branchi=p;	/* sanity check */	if ((hash_index=reverse_hex2int(hashi, hashl))<0		||hash_index>=TABLE_ENTRIES		|| (branch_id=reverse_hex2int(branchi, branchl))<0		||branch_id>=MAX_BRANCHES		|| (syn_branch ? (entry_label=reverse_hex2int(syni, synl))<0 			: loopl!=MD5_LEN )	) {		DBG("DEBUG: t_reply_matching: poor reply labels %d label %d "			"branch %d\n",hash_index, entry_label, branch_id );		goto nomatch2;	}	DBG("DEBUG: t_reply_matching: hash %d label %d branch %d\n",		hash_index, entry_label, branch_id );	cseq = get_cseq(p_msg);	/* search the hash table list at entry 'hash_index'; lock the	   entry first */	LOCK_HASH(hash_index);	for (p_cell = get_tm_table()->entrys[hash_index].first_cell; p_cell; 		p_cell=p_cell->next_cell) {		/* first look if branch matches */		if (syn_branch) {			if (p_cell->label != entry_label) 				continue;		} else {			if ( memcmp(p_cell->md5, loopi,MD5_LEN)!=0)					continue;		}		/* sanity check ... too high branch ? */		if ( branch_id>=p_cell->nr_of_outgoings )			continue;		/* does method match ? (remember -- CANCELs have the same branch		   as canceled transactions) */		if (!( /* it's a local cancel */			(cseq->method_id==METHOD_CANCEL && is_invite(p_cell)				&& p_cell->uac[branch_id].local_cancel.buffer_len )			/* method match */			|| (cseq->method_id!=METHOD_OTHER)?				(cseq->method_id==REQ_LINE(p_cell->uas.request).method_value)				:(EQ_STRS(cseq->method,p_cell->method))		))			continue;		/* we passed all disqualifying factors .... the transaction has been		   matched !		*/		set_t(p_cell);		*p_branch = branch_id;		REF_UNSAFE( T );		UNLOCK_HASH(hash_index);		DBG("DEBUG: t_reply_matching: reply matched (T=%p)!\n",T);		/* if this is a 200 for INVITE, we will wish to store to-tags to be		 * able to distinguish retransmissions later and not to call 		 * TMCB_RESPONSE_OUT uselessly; we do it only if callbacks are		 * enabled -- except callback customers, nobody cares about 		 * retransmissions of multiple 200/INV or ACK/200s		 */		if (is_invite(p_cell) && p_msg->REPLY_STATUS>=200 		&& p_msg->REPLY_STATUS<300 		&& ( (!is_local(p_cell) &&				has_tran_tmcbs(p_cell,TMCB_RESPONSE_OUT|TMCB_E2EACK_IN) )			|| (is_local(p_cell)&&has_tran_tmcbs(p_cell,TMCB_LOCAL_COMPLETED))		)) {			if (parse_headers(p_msg, HDR_TO_F, 0)==-1) {				LOG(L_ERR, "ERROR: t_reply_matching: to parsing failed\n");			}		}		if (!is_local(p_cell)) {			run_trans_callbacks( TMCB_RESPONSE_IN, T, T->uas.request, p_msg,				p_msg->REPLY_STATUS);		}		return 1;	} /* for cycle */	/* nothing found */	UNLOCK_HASH(hash_index);	DBG("DEBUG: t_reply_matching: no matching transaction exists\n");nomatch2:	DBG("DEBUG: t_reply_matching: failure to match a transaction\n");	*p_branch = -1;	set_t(0);	return -1;}