add: PROTO_UDP,
context: int send_sip_req(str* msg_type, str *msg, int client_fd){	char err_buf[256];	str to;	str from;	str hdrs;	str body;	int *pcbp;	char *p;	char *end;	int len;	int ret;	int err_ret;	int sip_error;	/* split the msg into from, to hdrs, body */	end = msg->s + msg->len;	p = msg->s;	/* get from len */	len = get_int_n2h( p, 4);	p = p + 4;	if ( p+len>end) {		LOG(L_ERR,"ERROR:extcmd:send_sip_req: FROM size to big (%d)\n",len);		push_reply_to_client(400,"extcmd: invalid FROM header",27,client_fd);		goto error;	}	/* get from body */	from.s = p;	from.len = len;	p += len;	DBG("DEBUG:extcmd:send_sip_req: from=%d<%.*s>\n",from.len,from.len,from.s);	/* get to len */	len = get_int_n2h( p, 4);	p = p + 4;	if ( p+len>end) {		LOG(L_ERR,"ERROR:extcmd:send_sip_req: TO size to big (%d)\n",len);		push_reply_to_client(400,"extcmd: invalid TO header",25,client_fd);		goto error;	}	/* get to body */	to.s = p;	to.len = len;	p += len;	DBG("DEBUG:extcmd:send_sip_req: to=%d<%.*s>\n",to.len,to.len,to.s);	/* get headers len */	len = get_int_n2h( p, 4);	p = p + 4;	if ( p+len>end) {		LOG(L_ERR,"ERROR:extcmd:send_sip_req: HDRS size to big (%d)\n",len);		push_reply_to_client(400,"extcmd: invalid HEADERS field",29,client_fd);		goto error;	}	/* get headers body */	hdrs.s = p;	hdrs.len = len;	p += len;	DBG("DEBUG:extcmd:send_sip_req: hdrs=%d<%.*s>\n",hdrs.len,hdrs.len,hdrs.s);	/* get body len */	len = get_int_n2h( p, 4);	p = p + 4;	if ( p+len>end) {		LOG(L_ERR,"ERROR:extcmd:send_sip_req: BODY size to big (%d)\n",len);		push_reply_to_client(400,"extcmd: invalid BODY field",26,client_fd);		goto error;	}	/* get body's body */	body.s = p;	body.len = len;	DBG("DEBUG:extcmd:send_sip_req: body=%d<%.*s>\n",body.len,body.len,body.s);	/* allocate the param in shm */	if( !(pcbp = (int*)shm_malloc(sizeof(int*))) ) {		LOG(L_ERR,"ERROR:extcmd:send_sip_req: no more shm mem free!!\n");		push_reply_to_client(500,"extcmd: no shm memory free",26,client_fd);		goto error;	}	*pcbp = client_fd;	/* send the message */	ret = tmb.t_uac_dlg(  msg_type,   /* request type */			0,                        /* Real destination */			&to,                      /* Request-URI */			&to,                      /* To */			&from,                    /* From */			0,                        /* To tag */			0,                        /* From tag */			0,                        /* CSeq */			0,                        /* Call-ID */			&hdrs,                    /* Additional headers including CRLF */			&body,                    /* Message body */			tuac_callback,           /* Callback function */			(void*)pcbp               /* Callback parameter */		);	if (ret<=0) {		err_ret=err2reason_phrase(ret, &sip_error, err_buf,				sizeof(err_buf), "EXTCMD" ) ;		if (err_ret > 0 )		{			push_reply_to_client( sip_error, err_buf, err_ret, client_fd);		} else {			push_reply_to_client(500,"EXTCMD unknown error\n",20,client_fd);		}	}	return 1;error:	return -1;}