Mercurial > hg > nginx
comparison src/core/ngx_inet.c @ 3270:7d1a04259e3f
ngx_parse_addr()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Mon, 02 Nov 2009 15:20:42 +0000 |
parents | f0d596e84634 |
children | 98f49b2bcae8 |
comparison
equal
deleted
inserted
replaced
3269:f0d596e84634 | 3270:7d1a04259e3f |
---|---|
414 | 414 |
415 return NGX_DONE; | 415 return NGX_DONE; |
416 } | 416 } |
417 | 417 |
418 | 418 |
419 ngx_addr_t * | |
420 ngx_parse_addr(ngx_pool_t *pool, ngx_str_t *addr) | |
421 { | |
422 size_t len; | |
423 in_addr_t inaddr; | |
424 ngx_uint_t family; | |
425 ngx_addr_t *a; | |
426 struct sockaddr_in *sin; | |
427 #if (NGX_HAVE_INET6) | |
428 struct in6_addr inaddr6; | |
429 struct sockaddr_in6 *sin6; | |
430 #endif | |
431 | |
432 inaddr = ngx_inet_addr(addr->data, addr->len); | |
433 | |
434 if (inaddr != INADDR_NONE) { | |
435 family = AF_INET; | |
436 len = sizeof(struct sockaddr_in); | |
437 | |
438 #if (NGX_HAVE_INET6) | |
439 } else if (ngx_inet6_addr(addr->data, addr->len, inaddr6.s6_addr) == NGX_OK) | |
440 { | |
441 family = AF_INET6; | |
442 len = sizeof(struct sockaddr_in6); | |
443 | |
444 #endif | |
445 } else { | |
446 return NULL; | |
447 } | |
448 | |
449 a = ngx_palloc(pool, sizeof(ngx_addr_t)); | |
450 if (a == NULL) { | |
451 return NULL; | |
452 } | |
453 | |
454 a->sockaddr = ngx_pcalloc(pool, len); | |
455 if (a->sockaddr == NULL) { | |
456 return NULL; | |
457 } | |
458 | |
459 a->sockaddr->sa_family = family; | |
460 a->socklen = len; | |
461 a->name = *addr; | |
462 | |
463 switch (family) { | |
464 | |
465 #if (NGX_HAVE_INET6) | |
466 case AF_INET6: | |
467 sin6 = (struct sockaddr_in6 *) a->sockaddr; | |
468 ngx_memcpy(sin6->sin6_addr.s6_addr, inaddr6.s6_addr, 16); | |
469 break; | |
470 #endif | |
471 | |
472 default: /* AF_INET */ | |
473 sin = (struct sockaddr_in *) a->sockaddr; | |
474 sin->sin_addr.s_addr = inaddr; | |
475 break; | |
476 } | |
477 | |
478 return a; | |
479 } | |
480 | |
481 | |
419 ngx_int_t | 482 ngx_int_t |
420 ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u) | 483 ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u) |
421 { | 484 { |
422 u_char *p; | 485 u_char *p; |
423 | 486 |