rem: branch_ret=add_uac( t, p_msg, GET_RURI(p_msg), GET_NEXT_HOP(p_msg),
add: current_uri = *GET_RURI(p_msg); branch_ret=add_uac( t, p_msg, &current_uri, GET_NEXT_HOP(p_msg),
context: int t_forward_nonack( struct cell *t, struct sip_msg* p_msg , 	struct proxy_l * proxy, int proto){	str backup_uri;	int branch_ret, lowest_ret;	str current_uri;	branch_bm_t  added_branches;	int i, q;	struct cell *t_invite;	int success_branch;	int try_new;	str dst_uri;	struct socket_info *bk_sock;	int bk_flags;	/* make -Wall happy */	current_uri.s=0;	set_kr(REQ_FWDED);	if (p_msg->REQ_METHOD==METHOD_CANCEL) {		t_invite=t_lookupOriginalT(  p_msg );		if (t_invite!=T_NULL_CELL) {			e2e_cancel( p_msg, t, t_invite );			UNREF(t_invite);			return 1;		}	}	/* backup current uri, sock and flags ... add_uac changes it */	backup_uri = p_msg->new_uri;	bk_sock = p_msg->force_send_socket;	bk_flags = p_msg->flags;	/* if no more specific error code is known, use this */	lowest_ret=E_BUG;	/* branches added */	added_branches=0;	/* branch to begin with */	t->first_branch=t->nr_of_outgoings;	/* on first-time forwarding, use current uri, later only what	   is in additional branches (which may be continuously refilled)	*/	if (t->first_branch==0) {		try_new=1;		branch_ret=add_uac( t, p_msg, GET_RURI(p_msg), GET_NEXT_HOP(p_msg),			proxy, proto );		if (branch_ret>=0)			added_branches |= 1<<branch_ret;		else			lowest_ret=branch_ret;	} else try_new=0;	init_branch_iterator();	while((current_uri.s=next_branch( &current_uri.len, &q,	&dst_uri.s, &dst_uri.len, &p_msg->force_send_socket))) {		try_new++;		branch_ret=add_uac( t, p_msg, &current_uri, 				(dst_uri.len) ? (&dst_uri) : &current_uri, 				proxy, proto);		/* pick some of the errors in case things go wrong;		   note that picking lowest error is just as good as		   any other algorithm which picks any other negative		   branch result */		if (branch_ret>=0) 			added_branches |= 1<<branch_ret;		else			lowest_ret=branch_ret;	}	/* consume processed branches */	clear_branches();	/* restore original stuff */	p_msg->new_uri=backup_uri;	p_msg->parsed_uri_ok = 0;/* just to be sure; add_uac may parse other uris*/	p_msg->force_send_socket = bk_sock;	p_msg->flags = bk_flags;	/* update on_branch, if modified */	t->on_branch = get_on_branch();	/* don't forget to clear all branches processed so far */	/* things went wrong ... no new branch has been fwd-ed at all */	if (added_branches==0) {		if (try_new==0) {			LOG(L_ERR, "ERROR: t_forward_nonack: no branched for forwarding\n");			return -1;		}		LOG(L_ERR, "ERROR: t_forward_nonack: failure to add branches\n");		return lowest_ret;	}	/* send them out now */	success_branch=0;	for (i=t->first_branch; i<t->nr_of_outgoings; i++) {		if (added_branches & (1<<i)) {			if (SEND_BUFFER( &t->uac[i].request)==-1) {				LOG(L_ERR, "ERROR: t_forward_nonack: sending request failed\n");				if (proxy) { proxy->errors++; proxy->ok=0; }			} else {				success_branch++;			}			start_retr( &t->uac[i].request );		}	}	if (success_branch<=0) {		ser_error=E_SEND;		return -1;	}	return 1;}