Mercurial > pidgin
comparison src/network.c @ 13129:d0ae6489a0fb
[gaim-migrate @ 15491]
Remove some sillyness when attempting to autodetect our IP address
committer: Tailor Script <tailor@pidgin.im>
| author | Mark Doliner <mark@kingant.net> |
|---|---|
| date | Mon, 06 Feb 2006 04:20:30 +0000 |
| parents | a85c8c11bfab |
| children | 66268ae5b94a |
comparison
equal
deleted
inserted
replaced
| 13128:8adf78fc630c | 13129:d0ae6489a0fb |
|---|---|
| 74 } | 74 } |
| 75 | 75 |
| 76 const char * | 76 const char * |
| 77 gaim_network_get_public_ip(void) | 77 gaim_network_get_public_ip(void) |
| 78 { | 78 { |
| 79 const char *ip; | 79 return gaim_prefs_get_string("/core/network/public_ip"); |
| 80 GaimStunNatDiscovery *stun; | |
| 81 | |
| 82 ip = gaim_prefs_get_string("/core/network/public_ip"); | |
| 83 | |
| 84 if (ip == NULL || *ip == '\0') { | |
| 85 /* Check if STUN discovery was already done */ | |
| 86 stun = gaim_stun_discover(NULL); | |
| 87 if (stun != NULL && stun->status == GAIM_STUN_STATUS_DISCOVERED) | |
| 88 return stun->publicip; | |
| 89 return NULL; | |
| 90 } | |
| 91 | |
| 92 return ip; | |
| 93 } | 80 } |
| 94 | 81 |
| 95 static const char * | 82 static const char * |
| 96 gaim_network_get_local_ip_from_fd(int fd) | 83 gaim_network_get_local_ip_from_fd(int fd) |
| 97 { | 84 { |
| 127 tmp = gaim_network_get_local_ip_from_fd(fd); | 114 tmp = gaim_network_get_local_ip_from_fd(fd); |
| 128 | 115 |
| 129 if (tmp) | 116 if (tmp) |
| 130 return tmp; | 117 return tmp; |
| 131 | 118 |
| 119 /* TODO: Make this avoid using localhost/127.0.0.1 */ | |
| 132 if (gethostname(localhost, 128) < 0) | 120 if (gethostname(localhost, 128) < 0) |
| 133 return NULL; | 121 return NULL; |
| 134 | 122 |
| 135 if ((host = gethostbyname(localhost)) == NULL) | 123 if ((host = gethostbyname(localhost)) == NULL) |
| 136 return NULL; | 124 return NULL; |
| 154 GaimStunNatDiscovery *stun; | 142 GaimStunNatDiscovery *stun; |
| 155 | 143 |
| 156 /* Check if the user specified an IP manually */ | 144 /* Check if the user specified an IP manually */ |
| 157 if (!gaim_prefs_get_bool("/core/network/auto_ip")) { | 145 if (!gaim_prefs_get_bool("/core/network/auto_ip")) { |
| 158 ip = gaim_network_get_public_ip(); | 146 ip = gaim_network_get_public_ip(); |
| 159 if (ip != NULL) | 147 if ((ip != NULL) && (*ip != '\0')) |
| 160 return ip; | 148 return ip; |
| 161 } | 149 } |
| 162 | 150 |
| 163 if (ip == NULL || *ip == '\0') { | 151 /* Check if STUN discovery was already done */ |
| 164 /* Check if STUN discovery was already done */ | 152 stun = gaim_stun_discover(NULL); |
| 165 stun = gaim_stun_discover(NULL); | 153 if ((stun != NULL) && (stun->status == GAIM_STUN_STATUS_DISCOVERED)) |
| 166 if (stun != NULL && stun->status == GAIM_STUN_STATUS_DISCOVERED) | 154 return stun->publicip; |
| 167 return stun->publicip; | 155 |
| 168 | 156 /* Attempt to get the IP from a NAT device using UPnP */ |
| 169 /* attempt to get the ip from a NAT device */ | 157 ip = gaim_upnp_get_public_ip(); |
| 170 ip = gaim_upnp_get_public_ip(); | 158 if (ip != NULL) |
| 171 | 159 return ip; |
| 172 if (ip != NULL) | |
| 173 return ip; | |
| 174 } | |
| 175 | 160 |
| 176 /* Just fetch the IP of the local system */ | 161 /* Just fetch the IP of the local system */ |
| 177 return gaim_network_get_local_system_ip(fd); | 162 return gaim_network_get_local_system_ip(fd); |
| 178 } | 163 } |
| 179 | 164 |
