comparison libpurple/nat-pmp.c @ 25415:584063555949

Remove trailing whitespace
author Mark Doliner <mark@kingant.net>
date Mon, 26 Jan 2009 06:44:00 +0000
parents b175f6441bba
children 75654d6b2b4d e45fe73b47e3
comparison
equal deleted inserted replaced
25414:7fc110f70662 25415:584063555949
124 { 124 {
125 int i; 125 int i;
126 126
127 for (i = 0; i < RTAX_MAX; i++) 127 for (i = 0; i < RTAX_MAX; i++)
128 { 128 {
129 if (bitmask & (1 << i)) 129 if (bitmask & (1 << i))
130 { 130 {
131 addrs[i] = sa; 131 addrs[i] = sa;
132 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN 132 #ifdef HAVE_STRUCT_SOCKADDR_SA_LEN
133 sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa); 133 sa = (struct sockaddr *)(ROUNDUP(sa->sa_len) + (char *)sa);
134 #else 134 #else
137 #ifdef AF_INET6 137 #ifdef AF_INET6
138 else if (sa->sa_family == AF_INET6) 138 else if (sa->sa_family == AF_INET6)
139 sa = (struct sockaddr*)(sizeof(struct sockaddr_in6) + (char *)sa); 139 sa = (struct sockaddr*)(sizeof(struct sockaddr_in6) + (char *)sa);
140 #endif 140 #endif
141 #endif 141 #endif
142 } 142 }
143 else 143 else
144 { 144 {
145 addrs[i] = NULL; 145 addrs[i] = NULL;
146 } 146 }
147 } 147 }
190 mib[3] = 0; /* address family - 0 for all addres families */ 190 mib[3] = 0; /* address family - 0 for all addres families */
191 mib[4] = NET_RT_DUMP; 191 mib[4] = NET_RT_DUMP;
192 mib[5] = 0; 192 mib[5] = 0;
193 193
194 /* Determine the buffer side needed to get the full routing table */ 194 /* Determine the buffer side needed to get the full routing table */
195 if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0) 195 if (sysctl(mib, 6, NULL, &needed, NULL, 0) < 0)
196 { 196 {
197 purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump estimate\n"); 197 purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump estimate\n");
198 return NULL; 198 return NULL;
199 } 199 }
200 200
203 purple_debug_warning("nat-pmp", "Failed to malloc %i\n", needed); 203 purple_debug_warning("nat-pmp", "Failed to malloc %i\n", needed);
204 return NULL; 204 return NULL;
205 } 205 }
206 206
207 /* Read the routing table into buf */ 207 /* Read the routing table into buf */
208 if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0) 208 if (sysctl(mib, 6, buf, &needed, NULL, 0) < 0)
209 { 209 {
210 purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump\n"); 210 purple_debug_warning("nat-pmp", "sysctl: net.route.0.0.dump\n");
211 return NULL; 211 return NULL;
212 } 212 }
213 213
214 lim = buf + needed; 214 lim = buf + needed;
215 215
216 for (next = buf; next < lim; next += rtm->rtm_msglen) 216 for (next = buf; next < lim; next += rtm->rtm_msglen)
217 { 217 {
218 rtm = (struct rt_msghdr *)next; 218 rtm = (struct rt_msghdr *)next;
219 sa = (struct sockaddr *)(rtm + 1); 219 sa = (struct sockaddr *)(rtm + 1);
220 220
221 if (sa->sa_family == AF_INET) 221 if (sa->sa_family == AF_INET)
222 { 222 {
223 sin = (struct sockaddr_in*) sa; 223 sin = (struct sockaddr_in*) sa;
224 224
225 if ((rtm->rtm_flags & RTF_GATEWAY) && sin->sin_addr.s_addr == INADDR_ANY) 225 if ((rtm->rtm_flags & RTF_GATEWAY) && sin->sin_addr.s_addr == INADDR_ANY)
226 { 226 {
238 238
239 if (rtm->rtm_addrs & RTA_NETMASK) 239 if (rtm->rtm_addrs & RTA_NETMASK)
240 memcpy(&mask, rti_info[RTAX_NETMASK], sizeof(mask)); 240 memcpy(&mask, rti_info[RTAX_NETMASK], sizeof(mask));
241 241
242 if (rtm->rtm_addrs & RTA_GATEWAY && 242 if (rtm->rtm_addrs & RTA_GATEWAY &&
243 is_default_route(&addr, &mask)) 243 is_default_route(&addr, &mask))
244 { 244 {
245 if (rti_info[RTAX_GATEWAY]) { 245 if (rti_info[RTAX_GATEWAY]) {
246 struct sockaddr_in *rti_sin = (struct sockaddr_in *)rti_info[RTAX_GATEWAY]; 246 struct sockaddr_in *rti_sin = (struct sockaddr_in *)rti_info[RTAX_GATEWAY];
247 sin = g_new0(struct sockaddr_in, 1); 247 sin = g_new0(struct sockaddr_in, 1);
248 sin->sin_family = rti_sin->sin_family; 248 sin->sin_family = rti_sin->sin_family;
261 261
262 return (found ? sin : NULL); 262 return (found ? sin : NULL);
263 } 263 }
264 264
265 /*! 265 /*!
266 * purple_pmp_get_public_ip() will return the publicly facing IP address of the 266 * purple_pmp_get_public_ip() will return the publicly facing IP address of the
267 * default NAT gateway. The function will return NULL if: 267 * default NAT gateway. The function will return NULL if:
268 * - The gateway doesn't support NAT-PMP 268 * - The gateway doesn't support NAT-PMP
269 * - The gateway errors in some other spectacular fashion 269 * - The gateway errors in some other spectacular fashion
270 */ 270 */
271 char * 271 char *
276 socklen_t len; 276 socklen_t len;
277 277
278 PurplePmpIpRequest req; 278 PurplePmpIpRequest req;
279 PurplePmpIpResponse resp; 279 PurplePmpIpResponse resp;
280 int sendfd; 280 int sendfd;
281 281
282 if (pmp_info.status == PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER) 282 if (pmp_info.status == PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER)
283 return NULL; 283 return NULL;
284 284
285 if ((pmp_info.status == PURPLE_PMP_STATUS_DISCOVERED) && (pmp_info.publicip != NULL)) 285 if ((pmp_info.status == PURPLE_PMP_STATUS_DISCOVERED) && (pmp_info.publicip != NULL))
286 { 286 {
287 #ifdef PMP_DEBUG 287 #ifdef PMP_DEBUG
288 purple_debug_info("nat-pmp", "Returning cached publicip %s\n",pmp_info.publicip); 288 purple_debug_info("nat-pmp", "Returning cached publicip %s\n",pmp_info.publicip);
289 #endif 289 #endif
316 req.opcode = 0; 316 req.opcode = 0;
317 317
318 /* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time. 318 /* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time.
319 * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds. 319 * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds.
320 * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes). 320 * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes).
321 * 321 *
322 * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present. 322 * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present.
323 */ 323 */
324 #ifdef PMP_DEBUG 324 #ifdef PMP_DEBUG
325 purple_debug_info("nat-pmp", "Attempting to retrieve the public ip address for the NAT device at: %s\n", inet_ntoa(gateway->sin_addr)); 325 purple_debug_info("nat-pmp", "Attempting to retrieve the public ip address for the NAT device at: %s\n", inet_ntoa(gateway->sin_addr));
326 purple_debug_info("nat-pmp", "\tTimeout: %ds %dus\n", req_timeout.tv_sec, req_timeout.tv_usec); 326 purple_debug_info("nat-pmp", "\tTimeout: %ds %dus\n", req_timeout.tv_sec, req_timeout.tv_usec);
327 #endif 327 #endif
328 328
329 /* TODO: Non-blocking! */ 329 /* TODO: Non-blocking! */
330 330
331 if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0) 331 if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0)
332 { 332 {
333 purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", g_strerror(errno)); 333 purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", g_strerror(errno));
334 g_free(gateway); 334 g_free(gateway);
335 pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER; 335 pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER;
368 return NULL; 368 return NULL;
369 } 369 }
370 370
371 if (!publicsockaddr) { 371 if (!publicsockaddr) {
372 g_free(gateway); 372 g_free(gateway);
373 373
374 pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER; 374 pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER;
375 return NULL; 375 return NULL;
376 } 376 }
377 377
378 #ifdef PMP_DEBUG 378 #ifdef PMP_DEBUG
435 req.lifetime = htonl(lifetime); 435 req.lifetime = htonl(lifetime);
436 436
437 /* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time. 437 /* The NAT-PMP spec says we should attempt to contact the gateway 9 times, doubling the time we wait each time.
438 * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds. 438 * Even starting with a timeout of 0.1 seconds, that means that we have a total waiting of 204.6 seconds.
439 * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes). 439 * With the recommended timeout of 0.25 seconds, we're talking 511.5 seconds (8.5 minutes).
440 * 440 *
441 * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present. 441 * This seems really silly... if this were nonblocking, a couple retries might be in order, but it's not at present.
442 * XXX Make this nonblocking. 442 * XXX Make this nonblocking.
443 * XXX This code looks like the pmp_get_public_ip() code. Can it be consolidated? 443 * XXX This code looks like the pmp_get_public_ip() code. Can it be consolidated?
444 */ 444 */
445 #ifdef PMP_DEBUG 445 #ifdef PMP_DEBUG