add: PROTO_UDP,
context: int send_sip_msg_request(str *to, str *from_user, str *body){	str msg_type = { "MESSAGE", 7};	str from;	str hdrs;	int foo;	char *p;	from.s = hdrs.s = 0;	from.len = hdrs.len = 0;	/* From header */	from.len = 6 /*"<sip:+"*/ +  from_user->len/*user*/ + 1/*"@"*/		+ domain.len /*host*/ + 1 /*">"*/ ;	from.s = (char*)pkg_malloc(from.len);	if (!from.s)		goto error;	p=from.s;	append_str(p,"<sip:+",6);	append_str(p,from_user->s,from_user->len);	*(p++)='@';	append_str(p,domain.s,domain.len);	*(p++)='>';	/* hdrs = Contact header + Content-type */	/* length */	hdrs.len = CONTENT_TYPE_HDR_LEN + CRLF_LEN;	if (use_contact)		hdrs.len += 15 /*"Contact: <sip:+"*/ + from_user->len/*user*/ +			1/*"@"*/ + domain.len/*host*/ + 1 /*">"*/ + CRLF_LEN;	hdrs.s = (char*)pkg_malloc(hdrs.len);	if (!hdrs.s)		goto error;	p=hdrs.s;	append_str(p,CONTENT_TYPE_HDR,CONTENT_TYPE_HDR_LEN);	append_str(p,CRLF,CRLF_LEN);	if (use_contact) {		append_str(p,"Contact: <sip:+",15);		append_str(p,from_user->s,from_user->len);		*(p++)='@';		append_str(p,domain.s,domain.len);		append_str(p,">"CRLF,1+CRLF_LEN);	}	/* sending the request */	foo = 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 */			0,                        /* Callback function */			0                         /* Callback parameter */		);	if (from.s) pkg_free(from.s);	if (hdrs.s) pkg_free(hdrs.s);	return foo;error:	LOG(L_ERR,"ERROR:sms_build_and_send_sip: no free pkg memory!\n");	if (from.s) pkg_free(from.s);	if (hdrs.s) pkg_free(hdrs.s);	return -1;}