Use our own infrastructure for finding out the local node's externally visible host name.
This commit is contained in:
parent
160b7cb5e3
commit
c798f73093
1 changed files with 15 additions and 7 deletions
|
@ -84,12 +84,14 @@ char *get_my_hostname() {
|
||||||
|
|
||||||
// If that doesn't work, guess externally visible hostname
|
// If that doesn't work, guess externally visible hostname
|
||||||
fprintf(stderr, "Trying to discover externally visible hostname...\n");
|
fprintf(stderr, "Trying to discover externally visible hostname...\n");
|
||||||
struct addrinfo *ai = str2addrinfo("ifconfig.me", "80", SOCK_STREAM);
|
struct addrinfo *ai = str2addrinfo("tinc-vpn.org", "80", SOCK_STREAM);
|
||||||
static const char request[] = "GET /host HTTP/1.0\r\n\r\n";
|
struct addrinfo *aip = ai;
|
||||||
if(ai) {
|
static const char request[] = "GET http://tinc-vpn.org/host.cgi HTTP/1.0\r\n\r\n";
|
||||||
int s = socket(ai->ai_family, ai->ai_socktype, ai->ai_protocol);
|
|
||||||
|
while(aip) {
|
||||||
|
int s = socket(aip->ai_family, aip->ai_socktype, aip->ai_protocol);
|
||||||
if(s >= 0) {
|
if(s >= 0) {
|
||||||
if(connect(s, ai->ai_addr, ai->ai_addrlen)) {
|
if(connect(s, aip->ai_addr, aip->ai_addrlen)) {
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
s = -1;
|
s = -1;
|
||||||
}
|
}
|
||||||
|
@ -106,14 +108,20 @@ char *get_my_hostname() {
|
||||||
hostname = xstrdup(p + 1);
|
hostname = xstrdup(p + 1);
|
||||||
}
|
}
|
||||||
closesocket(s);
|
closesocket(s);
|
||||||
|
if(hostname)
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
aip = aip->ai_next;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if(ai)
|
||||||
freeaddrinfo(ai);
|
freeaddrinfo(ai);
|
||||||
}
|
|
||||||
|
|
||||||
// Check that the hostname is reasonable
|
// Check that the hostname is reasonable
|
||||||
if(hostname) {
|
if(hostname) {
|
||||||
for(char *p = hostname; *p; p++) {
|
for(char *p = hostname; *p; p++) {
|
||||||
if(isalnum(*p) || *p == '-' || *p == '.')
|
if(isalnum(*p) || *p == '-' || *p == '.' || *p == ':')
|
||||||
continue;
|
continue;
|
||||||
// If not, forget it.
|
// If not, forget it.
|
||||||
free(hostname);
|
free(hostname);
|
||||||
|
|
Loading…
Reference in a new issue