X-Git-Url: http://sjero.net/git/?p=linphone;a=blobdiff_plain;f=coreapi%2Fmisc.c;h=36fe7ae3f60ed8b7633d579d90eb730d93f9c20d;hp=5d4c0ebcc2d365915ece80841e5ac2c1f1e7b858;hb=bf3e43611778efc483999cacc470aed67fc6b83d;hpb=a3f10ccd2f494b834eb4f8dfc48cb3d1593f5dfd diff --git a/coreapi/misc.c b/coreapi/misc.c index 5d4c0ebc..36fe7ae3 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -1119,26 +1119,34 @@ static int get_local_ip_for_with_connect(int type, const char *dest, char *resul } int linphone_core_get_local_ip_for(int type, const char *dest, char *result){ + int err; strcpy(result,type==AF_INET ? "127.0.0.1" : "::1"); + + if (dest==NULL){ + if (type==AF_INET) + dest="87.98.157.38"; /*a public IP address*/ + else dest="2a00:1450:8002::68"; + } + err=get_local_ip_for_with_connect(type,dest,result); + if (err==0) return 0; + + /* if the connect method failed, which happens when no default route is set, + * try to find 'the' running interface with getifaddrs*/ + #ifdef HAVE_GETIFADDRS - if (dest==NULL) { - /*we use getifaddrs for lookup of default interface */ - int found_ifs; - - found_ifs=get_local_ip_with_getifaddrs(type,result,LINPHONE_IPADDR_SIZE); - if (found_ifs==1){ - return 0; - }else if (found_ifs<=0){ - /*absolutely no network on this machine */ - return -1; - } - } + + /*we use getifaddrs for lookup of default interface */ + int found_ifs; + + found_ifs=get_local_ip_with_getifaddrs(type,result,LINPHONE_IPADDR_SIZE); + if (found_ifs==1){ + return 0; + }else if (found_ifs<=0){ + /*absolutely no network on this machine */ + return -1; + } #endif - /*else use connect to find the best local ip address */ - if (type==AF_INET) - dest="87.98.157.38"; /*a public IP address*/ - else dest="2a00:1450:8002::68"; - return get_local_ip_for_with_connect(type,dest,result); + return 0; } #ifndef WIN32