comparison src/network.c @ 11391:d3755a7ddd82

[gaim-migrate @ 13620] *** empty log message *** committer: Tailor Script <tailor@pidgin.im>
author Adam Warrington <awarring>
date Wed, 31 Aug 2005 18:50:38 +0000
parents 7d7dd22215ec
children 8caea199b018
comparison
equal deleted inserted replaced
11390:869cef00a947 11391:d3755a7ddd82
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 "stun.h"
33 #include "upnp.h" 32 #include "upnp.h"
33
34 34
35 const unsigned char * 35 const unsigned char *
36 gaim_network_ip_atoi(const char *ip) 36 gaim_network_ip_atoi(const char *ip)
37 { 37 {
38 static unsigned char ret[4]; 38 static unsigned char ret[4];
66 66
67 const char * 67 const char *
68 gaim_network_get_public_ip(void) 68 gaim_network_get_public_ip(void)
69 { 69 {
70 const char *ip; 70 const char *ip;
71 struct stun_nattype *stun; 71
72
73 ip = gaim_prefs_get_string("/core/network/public_ip"); 72 ip = gaim_prefs_get_string("/core/network/public_ip");
74 73
75 if (ip == NULL || *ip == '\0') { 74 if (ip == NULL || *ip == '\0')
76 /* Check if STUN discovery was already done */ 75 return NULL;
77 stun = gaim_stun_discover(NULL);
78 if(stun && stun->status>1)
79 return stun->publicip;
80 return NULL;
81 }
82 76
83 return ip; 77 return ip;
84 } 78 }
85 79
86 static const char * 80 static const char *
140 134
141 const char * 135 const char *
142 gaim_network_get_my_ip(int fd) 136 gaim_network_get_my_ip(int fd)
143 { 137 {
144 const char *ip = NULL; 138 const char *ip = NULL;
145 char *controlURL = NULL; 139 GaimUPnPControlInfo* controlInfo = NULL;
146 140
147 /* Check if the user specified an IP manually */ 141 /* Check if the user specified an IP manually */
148 if (!gaim_prefs_get_bool("/core/network/auto_ip")) { 142 if (!gaim_prefs_get_bool("/core/network/auto_ip")) {
149 ip = gaim_network_get_public_ip(); 143 ip = gaim_network_get_public_ip();
150 if (ip != NULL) 144 if (ip != NULL)
151 return ip; 145 return ip;
152 } 146 }
153 147
154 /* attempt to get the ip from a NAT device */ 148 /* attempt to get the ip from a NAT device */
155 if ((controlURL = gaim_upnp_discover()) != NULL) { 149 if ((controlInfo = gaim_upnp_discover()) != NULL) {
156 ip = gaim_upnp_get_public_ip(controlURL); 150 ip = gaim_upnp_get_public_ip(controlInfo);
157 free(controlURL); 151 g_free(controlInfo->controlURL);
158 if (ip != NULL) 152 g_free(controlInfo->serviceType);
153 g_free(controlInfo);
154 if (ip != NULL) {
159 return ip; 155 return ip;
156 }
160 } 157 }
161 158
162 /* Just fetch the IP of the local system */ 159 /* Just fetch the IP of the local system */
163 return gaim_network_get_local_system_ip(fd); 160 return gaim_network_get_local_system_ip(fd);
164 } 161 }
165 162
163
166 static int 164 static int
167 gaim_network_do_listen(unsigned short port) 165 gaim_network_do_listen(unsigned short port)
168 { 166 {
169 int listenfd = -1; 167 int listenfd = -1;
170 const int on = 1; 168 const int on = 1;
171 char *controlURL = NULL; 169 GaimUPnPControlInfo* controlInfo = NULL;
172 #if HAVE_GETADDRINFO 170 #if HAVE_GETADDRINFO
173 int errnum; 171 int errnum;
174 struct addrinfo hints, *res, *next; 172 struct addrinfo hints, *res, *next;
175 char serv[6]; 173 char serv[6];
176 174
241 close(listenfd); 239 close(listenfd);
242 return -1; 240 return -1;
243 } 241 }
244 fcntl(listenfd, F_SETFL, O_NONBLOCK); 242 fcntl(listenfd, F_SETFL, O_NONBLOCK);
245 243
246 if((controlURL = gaim_upnp_discover()) != NULL) { 244 if((controlInfo = gaim_upnp_discover()) != NULL) {
247 if(!gaim_upnp_set_port_mapping(controlURL, gaim_network_get_port_from_fd(listenfd), "TCP")) { 245 if(!gaim_upnp_set_port_mapping(controlInfo,
248 gaim_upnp_remove_port_mapping(controlURL, gaim_network_get_port_from_fd(listenfd), "TCP"); 246 gaim_network_get_port_from_fd(listenfd),
249 gaim_upnp_set_port_mapping(controlURL, gaim_network_get_port_from_fd(listenfd), "TCP"); 247 "TCP")) {
250 } 248 gaim_upnp_remove_port_mapping(controlInfo,
251 free(controlURL); 249 gaim_network_get_port_from_fd(listenfd), "TCP");
250 gaim_upnp_set_port_mapping(controlInfo,
251 gaim_network_get_port_from_fd(listenfd), "TCP");
252
253 }
254 g_free(controlInfo->serviceType);
255 g_free(controlInfo->controlURL);
256 g_free(controlInfo);
252 } 257 }
253 258
254 gaim_debug_info("network", "Listening on port: %hu\n", gaim_network_get_port_from_fd(listenfd)); 259 gaim_debug_info("network", "Listening on port: %hu\n", gaim_network_get_port_from_fd(listenfd));
255 return listenfd; 260 return listenfd;
256 } 261 }