rem: goto error;
add: goto error1;
context: int receive_msg(char* buf, unsigned int len){	struct sip_msg msg;	struct route_elem *re;	char * orig;	/* make a copy of the message */	orig=(char*) malloc(len);	if (orig==0){		DPrint("ERROR: memory allocation failure\n");		goto error;	}	memcpy(orig, buf, len);		if (parse_msg(buf,len, &msg)!=0){		goto error;	}		if (msg.first_line.type==SIP_REQUEST){		/* sanity checks */		if (msg.via1.error!=VIA_PARSE_OK){			/* no via, send back error ? */			goto skip;		}		/* check if neccesarry to add receive? */				/* find route */		re=route_match(  msg.first_line.u.request.method,						 msg.first_line.u.request.uri,						 &rlist					  );		if (re==0){			/* no route found, send back error msg? */			DPrint("WARNING: no route found!\n");			goto skip;		}		re->tx++;		/* send msg */		forward_request(orig, buf, len, &msg, re);		DPrint(" found route to: %s\n", re->host.h_name);	}else if (msg.first_line.type==SIP_REPLY){		/* sanity checks */		if (msg.via1.error!=VIA_PARSE_OK){			/* no via, send back error ? */			goto skip;		}		if (msg.via2.error!=VIA_PARSE_OK){			/* no second via => error? */			goto skip;		}		/* check if via1 == us */				/* send the msg */		forward_reply(orig, buf, len, &msg);		DPrint(" reply forwarded to %s:%d\n", 					msg.via2.host,					(unsigned short) msg.via2.port				);	}skip:	free(orig);	return 0;error:	return -1;}