Mercurial > pidgin
comparison src/network.c @ 11195:3aeb85cc9cda
[gaim-migrate @ 13319]
*** empty log message ***
committer: Tailor Script <tailor@pidgin.im>
| author | Adam Warrington <awarring> |
|---|---|
| date | Sun, 07 Aug 2005 17:54:19 +0000 |
| parents | 50224ac8184d |
| children | ff728e84d59a |
comparison
equal
deleted
inserted
replaced
| 11194:4c1f45ac00e9 | 11195:3aeb85cc9cda |
|---|---|
| 27 | 27 |
| 28 #include "debug.h" | 28 #include "debug.h" |
| 29 #include "account.h" | 29 #include "account.h" |
| 30 #include "network.h" | 30 #include "network.h" |
| 31 #include "prefs.h" | 31 #include "prefs.h" |
| 32 #include "upnp.h" | |
| 32 | 33 |
| 33 const unsigned char * | 34 const unsigned char * |
| 34 gaim_network_ip_atoi(const char *ip) | 35 gaim_network_ip_atoi(const char *ip) |
| 35 { | 36 { |
| 36 static unsigned char ret[4]; | 37 static unsigned char ret[4]; |
| 132 | 133 |
| 133 const char * | 134 const char * |
| 134 gaim_network_get_my_ip(int fd) | 135 gaim_network_get_my_ip(int fd) |
| 135 { | 136 { |
| 136 const char *ip = NULL; | 137 const char *ip = NULL; |
| 138 const char *controlURL = NULL; | |
| 137 | 139 |
| 138 /* Check if the user specified an IP manually */ | 140 /* Check if the user specified an IP manually */ |
| 139 if (!gaim_prefs_get_bool("/core/network/auto_ip")) { | 141 if (!gaim_prefs_get_bool("/core/network/auto_ip")) { |
| 140 ip = gaim_network_get_public_ip(); | 142 ip = gaim_network_get_public_ip(); |
| 141 if (ip != NULL) | 143 if (ip != NULL) |
| 142 return ip; | 144 return ip; |
| 143 } | 145 } |
| 144 | 146 |
| 147 /* attempt to get the ip from a NAT device */ | |
| 148 if ((controlURL = gaim_upnp_discover()) != NULL) { | |
| 149 ip = gaim_upnp_get_public_ip(controlURL); | |
| 150 if (ip != NULL) | |
| 151 return ip; | |
| 152 } | |
| 153 | |
| 145 /* Just fetch the IP of the local system */ | 154 /* Just fetch the IP of the local system */ |
| 146 return gaim_network_get_local_system_ip(fd); | 155 return gaim_network_get_local_system_ip(fd); |
| 147 } | 156 } |
| 148 | 157 |
| 149 static int | 158 static int |
| 150 gaim_network_do_listen(unsigned short port) | 159 gaim_network_do_listen(unsigned short port) |
| 151 { | 160 { |
| 152 int listenfd = -1; | 161 int listenfd = -1; |
| 153 const int on = 1; | 162 const int on = 1; |
| 163 const char *controlURL = NULL; | |
| 154 #if HAVE_GETADDRINFO | 164 #if HAVE_GETADDRINFO |
| 155 int errnum; | 165 int errnum; |
| 156 struct addrinfo hints, *res, *next; | 166 struct addrinfo hints, *res, *next; |
| 157 char serv[6]; | 167 char serv[6]; |
| 158 | 168 |
| 164 hints.ai_flags = AI_PASSIVE; | 174 hints.ai_flags = AI_PASSIVE; |
| 165 hints.ai_family = AF_UNSPEC; | 175 hints.ai_family = AF_UNSPEC; |
| 166 hints.ai_socktype = SOCK_STREAM; | 176 hints.ai_socktype = SOCK_STREAM; |
| 167 errnum = getaddrinfo(NULL /* any IP */, serv, &hints, &res); | 177 errnum = getaddrinfo(NULL /* any IP */, serv, &hints, &res); |
| 168 if (errnum != 0) { | 178 if (errnum != 0) { |
| 169 #ifndef _WIN32 | |
| 170 gaim_debug_warning("network", "getaddrinfo: %s\n", gai_strerror(errnum)); | 179 gaim_debug_warning("network", "getaddrinfo: %s\n", gai_strerror(errnum)); |
| 171 if (errnum == EAI_SYSTEM) | 180 if (errnum == EAI_SYSTEM) |
| 172 gaim_debug_warning("network", "getaddrinfo: system error: %s\n", strerror(errno)); | 181 gaim_debug_warning("network", "getaddrinfo: system error: %s\n", strerror(errno)); |
| 173 #else | |
| 174 gaim_debug_warning("network", "getaddrinfo: Error Code = %d\n", errnum); | |
| 175 #endif | |
| 176 return -1; | 182 return -1; |
| 177 } | 183 } |
| 178 | 184 |
| 179 /* | 185 /* |
| 180 * Go through the list of addresses and attempt to listen on | 186 * Go through the list of addresses and attempt to listen on |
| 223 close(listenfd); | 229 close(listenfd); |
| 224 return -1; | 230 return -1; |
| 225 } | 231 } |
| 226 fcntl(listenfd, F_SETFL, O_NONBLOCK); | 232 fcntl(listenfd, F_SETFL, O_NONBLOCK); |
| 227 | 233 |
| 234 if((controlURL = gaim_upnp_discover()) != NULL) { | |
| 235 if(!gaim_upnp_set_port_mapping(controlURL, port, "TCP")) { | |
| 236 gaim_upnp_remove_port_mapping(controlURL, port, "TCP"); | |
| 237 gaim_upnp_set_port_mapping(controlURL, port, "TCP"); | |
| 238 } | |
| 239 } | |
| 240 | |
| 228 gaim_debug_info("network", "Listening on port: %hu\n", gaim_network_get_port_from_fd(listenfd)); | 241 gaim_debug_info("network", "Listening on port: %hu\n", gaim_network_get_port_from_fd(listenfd)); |
| 229 return listenfd; | 242 return listenfd; |
| 230 } | 243 } |
| 231 | 244 |
| 232 int | 245 int |
| 277 } | 290 } |
| 278 | 291 |
| 279 void | 292 void |
| 280 gaim_network_init(void) | 293 gaim_network_init(void) |
| 281 { | 294 { |
| 282 gaim_debug_register_category("network"); | |
| 283 | |
| 284 gaim_prefs_add_none ("/core/network"); | 295 gaim_prefs_add_none ("/core/network"); |
| 285 gaim_prefs_add_bool ("/core/network/auto_ip", TRUE); | 296 gaim_prefs_add_bool ("/core/network/auto_ip", TRUE); |
| 286 gaim_prefs_add_string("/core/network/public_ip", ""); | 297 gaim_prefs_add_string("/core/network/public_ip", ""); |
| 287 gaim_prefs_add_bool ("/core/network/ports_range_use", FALSE); | 298 gaim_prefs_add_bool ("/core/network/ports_range_use", FALSE); |
| 288 gaim_prefs_add_int ("/core/network/ports_range_start", 1024); | 299 gaim_prefs_add_int ("/core/network/ports_range_start", 1024); |
