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