mirror of
https://gitlab.linphone.org/BC/public/linphone-iphone.git
synced 2026-01-22 13:48:09 +00:00
allow setting of a nat address as hostname
This commit is contained in:
parent
e6a00efa5a
commit
ec3144465a
5 changed files with 43 additions and 11 deletions
|
|
@ -41,7 +41,7 @@ static const char *liblinphone_version=LIBLINPHONE_VERSION;
|
|||
static void set_network_reachable(LinphoneCore* lc,bool_t isReachable, time_t curtime);
|
||||
|
||||
#include "enum.h"
|
||||
|
||||
const char *linphone_core_get_nat_address_resolved(LinphoneCore *lc);
|
||||
void linphone_core_get_local_ip(LinphoneCore *lc, const char *dest, char *result);
|
||||
static void toggle_video_preview(LinphoneCore *lc, bool_t val);
|
||||
|
||||
|
|
@ -358,6 +358,7 @@ static void net_config_read (LinphoneCore *lc)
|
|||
const char *tmpstr;
|
||||
LpConfig *config=lc->config;
|
||||
|
||||
lc->net_conf.nat_address_ip = NULL;
|
||||
tmp=lp_config_get_int(config,"net","download_bw",0);
|
||||
linphone_core_set_download_bandwidth(lc,tmp);
|
||||
tmp=lp_config_get_int(config,"net","upload_bw",0);
|
||||
|
|
@ -1080,9 +1081,10 @@ int linphone_core_set_primary_contact(LinphoneCore *lc, const char *contact)
|
|||
|
||||
/*result must be an array of chars at least LINPHONE_IPADDR_SIZE */
|
||||
void linphone_core_get_local_ip(LinphoneCore *lc, const char *dest, char *result){
|
||||
const char *ip;
|
||||
if (linphone_core_get_firewall_policy(lc)==LinphonePolicyUseNatAddress
|
||||
&& linphone_core_get_nat_address(lc)!=NULL){
|
||||
strncpy(result,linphone_core_get_nat_address(lc),LINPHONE_IPADDR_SIZE);
|
||||
&& (ip=linphone_core_get_nat_address_resolved(lc))!=NULL){
|
||||
strncpy(result,ip,LINPHONE_IPADDR_SIZE);
|
||||
return;
|
||||
}
|
||||
if (linphone_core_get_local_ip_for(lc->sip_conf.ipv6_enabled ? AF_INET6 : AF_INET,dest,result)==0)
|
||||
|
|
@ -1894,7 +1896,7 @@ static char *get_fixed_contact(LinphoneCore *lc, LinphoneCall *call , LinphonePr
|
|||
if (linphone_core_get_firewall_policy(lc)==LinphonePolicyUseNatAddress){
|
||||
ctt=linphone_core_get_primary_contact_parsed(lc);
|
||||
return ms_strdup_printf("sip:%s@%s",linphone_address_get_username(ctt),
|
||||
linphone_core_get_nat_address(lc));
|
||||
linphone_core_get_nat_address_resolved(lc));
|
||||
}
|
||||
|
||||
/* if already choosed, don't change it */
|
||||
|
|
@ -3092,11 +3094,34 @@ void linphone_core_set_nat_address(LinphoneCore *lc, const char *addr)
|
|||
if (lc->sip_conf.contact) update_primary_contact(lc);
|
||||
}
|
||||
|
||||
const char *linphone_core_get_nat_address(const LinphoneCore *lc)
|
||||
{
|
||||
const char *linphone_core_get_nat_address(const LinphoneCore *lc) {
|
||||
return lc->net_conf.nat_address;
|
||||
}
|
||||
|
||||
const char *linphone_core_get_nat_address_resolved(LinphoneCore *lc)
|
||||
{
|
||||
struct sockaddr_storage ss;
|
||||
socklen_t ss_len;
|
||||
int error;
|
||||
char ipstring [INET6_ADDRSTRLEN];
|
||||
|
||||
if (parse_hostname_to_addr (lc->net_conf.nat_address, &ss, &ss_len)<0) {
|
||||
return lc->net_conf.nat_address;
|
||||
}
|
||||
|
||||
error = getnameinfo((struct sockaddr *)&ss, ss_len,
|
||||
ipstring, sizeof(ipstring), NULL, 0, NI_NUMERICHOST);
|
||||
if (error) {
|
||||
return lc->net_conf.nat_address;
|
||||
}
|
||||
|
||||
if (lc->net_conf.nat_address_ip!=NULL){
|
||||
ms_free(lc->net_conf.nat_address_ip);
|
||||
}
|
||||
lc->net_conf.nat_address_ip = ms_strdup (ipstring);
|
||||
return lc->net_conf.nat_address_ip;
|
||||
}
|
||||
|
||||
void linphone_core_set_firewall_policy(LinphoneCore *lc, LinphoneFirewallPolicy pol){
|
||||
lc->net_conf.firewall_policy=pol;
|
||||
if (lc->sip_conf.contact) update_primary_contact(lc);
|
||||
|
|
@ -3715,6 +3740,9 @@ void net_config_uninit(LinphoneCore *lc)
|
|||
lp_config_set_string(lc->config,"net","nat_address",config->nat_address);
|
||||
ms_free(lc->net_conf.nat_address);
|
||||
}
|
||||
if (lc->net_conf.nat_address_ip !=NULL){
|
||||
ms_free(lc->net_conf.nat_address_ip);
|
||||
}
|
||||
lp_config_set_int(lc->config,"net","firewall_policy",config->firewall_policy);
|
||||
lp_config_set_int(lc->config,"net","mtu",config->mtu);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -994,6 +994,9 @@ LinphoneGlobalState linphone_core_get_global_state(const LinphoneCore *lc);
|
|||
* @ingroup proxies
|
||||
*/
|
||||
void linphone_core_refresh_registers(LinphoneCore* lc);
|
||||
|
||||
int parse_hostname_to_addr(const char *server, struct sockaddr_storage *ss, socklen_t *socklen);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -396,7 +396,7 @@ static int sendStunRequest(int sock, const struct sockaddr *server, socklen_t ad
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int parse_stun_server_addr(const char *server, struct sockaddr_storage *ss, socklen_t *socklen){
|
||||
int parse_hostname_to_addr(const char *server, struct sockaddr_storage *ss, socklen_t *socklen){
|
||||
struct addrinfo hints,*res=NULL;
|
||||
int ret;
|
||||
const char *port;
|
||||
|
|
@ -466,7 +466,7 @@ void linphone_core_run_stun_tests(LinphoneCore *lc, LinphoneCall *call){
|
|||
ac=&call->localdesc->streams[0].candidates[0];
|
||||
vc=&call->localdesc->streams[1].candidates[0];
|
||||
|
||||
if (parse_stun_server_addr(server,&ss,&ss_len)<0){
|
||||
if (parse_hostname_to_addr(server,&ss,&ss_len)<0){
|
||||
ms_error("Fail to parser stun server address: %s",server);
|
||||
return;
|
||||
}
|
||||
|
|
@ -596,7 +596,7 @@ int linphone_core_wake_up_possible_already_running_instance(
|
|||
socklen_t sslen;
|
||||
char tmp[100];
|
||||
snprintf(tmp,sizeof(tmp),"127.0.0.1:%i",port);
|
||||
if (parse_stun_server_addr(tmp,&ss,&sslen)==0){
|
||||
if (parse_hostname_to_addr(tmp,&ss,&sslen)==0){
|
||||
int locport=57123;
|
||||
ortp_socket_t sock=create_socket(locport);
|
||||
if (sock<0) sock=create_socket(++locport);
|
||||
|
|
|
|||
|
|
@ -311,7 +311,8 @@ typedef struct rtp_config
|
|||
|
||||
typedef struct net_config
|
||||
{
|
||||
char *nat_address;
|
||||
char *nat_address; /* may be IP or host name */
|
||||
char *nat_address_ip; /* ip translated from nat_address */
|
||||
char *stun_server;
|
||||
char *relay;
|
||||
int download_bw;
|
||||
|
|
|
|||
|
|
@ -1 +1 @@
|
|||
Subproject commit 39a3f4ddd4a0f60cdd563fdef1d1b7d6e04d140d
|
||||
Subproject commit f5aeb6f365a85888c1049c346af6f7912cc4f4f1
|
||||
Loading…
Add table
Reference in a new issue