src/core/ngx_inet.h - nginx-1.7.10

Data types defined

Macros defined

Source code


  1. /*
  2. * Copyright (C) Igor Sysoev
  3. * Copyright (C) Nginx, Inc.
  4. */


  5. #ifndef _NGX_INET_H_INCLUDED_
  6. #define _NGX_INET_H_INCLUDED_


  7. #include <ngx_config.h>
  8. #include <ngx_core.h>


  9. /*
  10. * TODO: autoconfigure NGX_SOCKADDRLEN and NGX_SOCKADDR_STRLEN as
  11. *       sizeof(struct sockaddr_storage)
  12. *       sizeof(struct sockaddr_un)
  13. *       sizeof(struct sockaddr_in6)
  14. *       sizeof(struct sockaddr_in)
  15. */

  16. #define NGX_INET_ADDRSTRLEN   (sizeof("255.255.255.255") - 1)
  17. #define NGX_INET6_ADDRSTRLEN                                                 \
  18.     (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") - 1)
  19. #define NGX_UNIX_ADDRSTRLEN                                                  \
  20.     (sizeof(struct sockaddr_un) - offsetof(struct sockaddr_un, sun_path))

  21. #if (NGX_HAVE_UNIX_DOMAIN)
  22. #define NGX_SOCKADDR_STRLEN   (sizeof("unix:") - 1 + NGX_UNIX_ADDRSTRLEN)
  23. #else
  24. #define NGX_SOCKADDR_STRLEN   (NGX_INET6_ADDRSTRLEN + sizeof("[]:65535") - 1)
  25. #endif

  26. #if (NGX_HAVE_UNIX_DOMAIN)
  27. #define NGX_SOCKADDRLEN       sizeof(struct sockaddr_un)
  28. #else
  29. #define NGX_SOCKADDRLEN       512
  30. #endif


  31. typedef struct {
  32.     in_addr_t                 addr;
  33.     in_addr_t                 mask;
  34. } ngx_in_cidr_t;


  35. #if (NGX_HAVE_INET6)

  36. typedef struct {
  37.     struct in6_addr           addr;
  38.     struct in6_addr           mask;
  39. } ngx_in6_cidr_t;

  40. #endif


  41. typedef struct {
  42.     ngx_uint_t                family;
  43.     union {
  44.         ngx_in_cidr_t         in;
  45. #if (NGX_HAVE_INET6)
  46.         ngx_in6_cidr_t        in6;
  47. #endif
  48.     } u;
  49. } ngx_cidr_t;


  50. typedef struct {
  51.     struct sockaddr          *sockaddr;
  52.     socklen_t                 socklen;
  53.     ngx_str_t                 name;
  54. } ngx_addr_t;


  55. typedef struct {
  56.     ngx_str_t                 url;
  57.     ngx_str_t                 host;
  58.     ngx_str_t                 port_text;
  59.     ngx_str_t                 uri;

  60.     in_port_t                 port;
  61.     in_port_t                 default_port;
  62.     int                       family;

  63.     unsigned                  listen:1;
  64.     unsigned                  uri_part:1;
  65.     unsigned                  no_resolve:1;
  66.     unsigned                  one_addr:1/* compatibility */

  67.     unsigned                  no_port:1;
  68.     unsigned                  wildcard:1;

  69.     socklen_t                 socklen;
  70.     u_char                    sockaddr[NGX_SOCKADDRLEN];

  71.     ngx_addr_t               *addrs;
  72.     ngx_uint_t                naddrs;

  73.     char                     *err;
  74. } ngx_url_t;


  75. in_addr_t ngx_inet_addr(u_char *text, size_t len);
  76. #if (NGX_HAVE_INET6)
  77. ngx_int_t ngx_inet6_addr(u_char *p, size_t len, u_char *addr);
  78. size_t ngx_inet6_ntop(u_char *p, u_char *text, size_t len);
  79. #endif
  80. size_t ngx_sock_ntop(struct sockaddr *sa, socklen_t socklen, u_char *text,
  81.     size_t len, ngx_uint_t port);
  82. size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
  83. ngx_int_t ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr);
  84. ngx_int_t ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
  85.     size_t len);
  86. ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
  87. ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
  88. ngx_int_t ngx_cmp_sockaddr(struct sockaddr *sa1, socklen_t slen1,
  89.     struct sockaddr *sa2, socklen_t slen2, ngx_uint_t cmp_port);


  90. #endif /* _NGX_INET_H_INCLUDED_ */