rem: struct cell* t;
context: int register_tmcb( struct sip_msg* p_msg, int types, transaction_cb f,																void *param ){	struct cell* t;	struct tmcb_head_list *cb_list;	/* are the callback types valid?... */	if ( types<0 || types>=TMCB_MAX ) {		LOG(L_CRIT, "BUG:tm:register_tmcb: invalid callback types: mask=%d\n",			types);		return E_BUG;	}	/* we don't register null functions */	if (f==0) {		LOG(L_CRIT, "BUG:tm:register_tmcb: null callback function\n");		return E_BUG;	}	if (types&TMCB_REQUEST_IN) {		if (types!=TMCB_REQUEST_IN) {			LOG(L_CRIT, "BUG:tm:register_tmcb: callback type TMCB_REQUEST_IN "				"can't be register along with types\n");			return E_BUG;		}		cb_list = req_in_tmcb_hl;	} else {		/* look for the transaction */		if ( t_check(p_msg,0)!=1 ){			LOG(L_CRIT,"BUG:tm:register_tmcb: no transaction found\n");			return E_BUG;		}		if ( (t=get_t())==0 ) {			LOG(L_CRIT,"BUG:tm:register_tmcb: transaction found is NULL\n");			return E_BUG;		}		cb_list = &(t->tmcb_hl);	}	return insert_tmcb( cb_list, types, f, param );}