mirror of
https://git.freebsd.org/ports.git
synced 2025-06-07 05:40:30 -04:00
- Patch for libosip2-2.2.x PR: ports/79720 Submitted by: Frank W. Josellis <frank@dynamical-systems.org> (maintainer)
145 lines
5.2 KiB
C
145 lines
5.2 KiB
C
--- src/register.c.orig Sat Jan 8 11:05:12 2005
|
|
+++ src/register.c Sat Apr 9 16:16:48 2005
|
|
@@ -35,7 +35,7 @@
|
|
#include "siproxd.h"
|
|
#include "log.h"
|
|
|
|
-static char const ident[]="$Id: register.c,v 1.46 2005/01/08 10:05:12 hb9xar Exp $";
|
|
+static char const ident[]="$Id: register.c,v 1.50 2005/04/03 20:55:30 hb9xar Exp $";
|
|
|
|
/* configuration storage */
|
|
extern struct siproxd_config configuration;
|
|
@@ -255,7 +255,7 @@
|
|
*/
|
|
if (expires > 0) {
|
|
/*
|
|
- * First make sure, we have a prober Contact header:
|
|
+ * First make sure, we have a proper Contact header:
|
|
* - url
|
|
* - url -> hostname
|
|
*
|
|
@@ -367,57 +367,56 @@
|
|
strlen(configuration.masked_host.string[j])+1);
|
|
strcpy(urlmap[i].masq_url->host, configuration.masked_host.string[j]);
|
|
}
|
|
-
|
|
+ } else { /* if new entry */
|
|
+ /* This is an existing entry */
|
|
/*
|
|
- * for transparent proxying: force device to be masqueraded
|
|
- * as with the outbound IP
|
|
+ * Some phones (like BudgeTones *may* dynamically grab a SIP port
|
|
+ * so we might want to update the true_url and reg_url each time
|
|
+ * we get an REGISTER
|
|
*/
|
|
- if (force_lcl_masq) {
|
|
- struct in_addr addr;
|
|
- char *addrstr;
|
|
-
|
|
- if (get_ip_by_ifname(configuration.outbound_if, &addr) !=
|
|
- STS_SUCCESS) {
|
|
- ERROR("can't find outbound interface %s - configuration error?",
|
|
- configuration.outbound_if);
|
|
- return STS_FAILURE;
|
|
- }
|
|
-
|
|
- /* host part */
|
|
- addrstr = utils_inet_ntoa(addr);
|
|
- DEBUGC(DBCLASS_REG,"masquerading UA %s@%s local %s@%s",
|
|
- (url1_contact->username) ? url1_contact->username : "*NULL*",
|
|
- (url1_contact->host) ? url1_contact->host : "*NULL*",
|
|
- (url1_contact->username) ? url1_contact->username : "*NULL*",
|
|
- addrstr);
|
|
- urlmap[i].masq_url->host=realloc(urlmap[i].masq_url->host,
|
|
- strlen(addrstr)+1);
|
|
- strcpy(urlmap[i].masq_url->host, addrstr);
|
|
|
|
- /* port number if required */
|
|
- if (configuration.sip_listen_port != SIP_PORT) {
|
|
- urlmap[i].masq_url->port=realloc(urlmap[i].masq_url->port, 16);
|
|
- sprintf(urlmap[i].masq_url->port, "%i",
|
|
- configuration.sip_listen_port);
|
|
- }
|
|
- }
|
|
-
|
|
- } else { /* if new entry */
|
|
- /*
|
|
- * Some phones (like BudgeTones *may* dynamically grab a SIP port
|
|
- * so we might want to update the true_url and reg_url each time
|
|
- * we get an REGISTER
|
|
- */
|
|
- /* Contact: field */
|
|
+ /* Contact: field (true_url) */
|
|
osip_uri_free(urlmap[i].true_url);
|
|
osip_uri_clone( ((osip_contact_t*)
|
|
(ticket->sipmsg->contacts->node->element))->url,
|
|
- &urlmap[i].true_url);
|
|
- /* To: field */
|
|
+ &urlmap[i].true_url);
|
|
+ /* To: field (reg_url) */
|
|
osip_uri_free(urlmap[i].reg_url);
|
|
osip_uri_clone( ticket->sipmsg->to->url,
|
|
- &urlmap[i].reg_url);
|
|
+ &urlmap[i].reg_url);
|
|
}
|
|
+
|
|
+ /*
|
|
+ * for proxying: force device to be masqueraded
|
|
+ * as with the outbound IP (masq_url)
|
|
+ */
|
|
+ if (force_lcl_masq) {
|
|
+ struct in_addr addr;
|
|
+ char *addrstr;
|
|
+
|
|
+ if (get_interface_ip(IF_OUTBOUND, &addr) != STS_SUCCESS) {
|
|
+ return STS_FAILURE;
|
|
+ }
|
|
+
|
|
+ /* host part */
|
|
+ addrstr = utils_inet_ntoa(addr);
|
|
+ DEBUGC(DBCLASS_REG,"masquerading UA %s@%s local %s@%s",
|
|
+ (url1_contact->username) ? url1_contact->username : "*NULL*",
|
|
+ (url1_contact->host) ? url1_contact->host : "*NULL*",
|
|
+ (url1_contact->username) ? url1_contact->username : "*NULL*",
|
|
+ addrstr);
|
|
+ urlmap[i].masq_url->host=realloc(urlmap[i].masq_url->host,
|
|
+ strlen(addrstr)+1);
|
|
+ strcpy(urlmap[i].masq_url->host, addrstr);
|
|
+
|
|
+ /* port number if required */
|
|
+ if (configuration.sip_listen_port != SIP_PORT) {
|
|
+ urlmap[i].masq_url->port=realloc(urlmap[i].masq_url->port, 16);
|
|
+ sprintf(urlmap[i].masq_url->port, "%i",
|
|
+ configuration.sip_listen_port);
|
|
+ }
|
|
+ }
|
|
+
|
|
/* give some safety margin for the next update */
|
|
if (expires > 0) expires+=30;
|
|
|
|
@@ -495,6 +494,7 @@
|
|
osip_via_t *via;
|
|
int port;
|
|
char *buffer;
|
|
+ int buflen;
|
|
struct in_addr addr;
|
|
osip_header_t *expires_hdr;
|
|
|
|
@@ -550,7 +550,7 @@
|
|
}
|
|
}
|
|
|
|
- sts = osip_message_to_str(response, &buffer);
|
|
+ sts = osip_message_to_str(response, &buffer, &buflen);
|
|
if (sts != 0) {
|
|
ERROR("register_response: msg_2char failed");
|
|
return STS_FAILURE;
|
|
@@ -563,7 +563,7 @@
|
|
port=configuration.sip_listen_port;
|
|
}
|
|
|
|
- sipsock_send(addr, port, ticket->protocol, buffer, strlen(buffer));
|
|
+ sipsock_send(addr, port, ticket->protocol, buffer, buflen);
|
|
|
|
/* free the resources */
|
|
osip_message_free(response);
|