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)