11324Saxel.duch@nginx.com 21324Saxel.duch@nginx.com /* 31324Saxel.duch@nginx.com * Copyright (C) Axel Duch 41324Saxel.duch@nginx.com * Copyright (C) NGINX, Inc. 51324Saxel.duch@nginx.com */ 61324Saxel.duch@nginx.com 71324Saxel.duch@nginx.com #include <nxt_conf.h> 81324Saxel.duch@nginx.com 91324Saxel.duch@nginx.com #ifndef _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_ 101324Saxel.duch@nginx.com #define _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_ 111324Saxel.duch@nginx.com 121324Saxel.duch@nginx.com 131324Saxel.duch@nginx.com enum { 141324Saxel.duch@nginx.com NXT_HTTP_ROUTE_ADDR_ANY = 0, 151324Saxel.duch@nginx.com NXT_HTTP_ROUTE_ADDR_RANGE, 161324Saxel.duch@nginx.com NXT_HTTP_ROUTE_ADDR_EXACT, 171324Saxel.duch@nginx.com NXT_HTTP_ROUTE_ADDR_CIDR, 181324Saxel.duch@nginx.com }; 191324Saxel.duch@nginx.com 201324Saxel.duch@nginx.com 211324Saxel.duch@nginx.com enum { 221324Saxel.duch@nginx.com NXT_ADDR_PATTERN_PORT_ERROR = NXT_OK + 1, 231324Saxel.duch@nginx.com NXT_ADDR_PATTERN_CV_TYPE_ERROR, 241324Saxel.duch@nginx.com NXT_ADDR_PATTERN_LENGTH_ERROR, 251324Saxel.duch@nginx.com NXT_ADDR_PATTERN_FORMAT_ERROR, 261324Saxel.duch@nginx.com NXT_ADDR_PATTERN_RANGE_OVERLAP_ERROR, 271324Saxel.duch@nginx.com NXT_ADDR_PATTERN_CIDR_ERROR, 281324Saxel.duch@nginx.com NXT_ADDR_PATTERN_NO_IPv6_ERROR, 29*2161Salx.manpages@gmail.com NXT_ADDR_PATTERN_NO_UNIX_ERROR, 301324Saxel.duch@nginx.com }; 311324Saxel.duch@nginx.com 321324Saxel.duch@nginx.com 331324Saxel.duch@nginx.com typedef struct { 341324Saxel.duch@nginx.com in_addr_t start; 351324Saxel.duch@nginx.com in_addr_t end; 361324Saxel.duch@nginx.com } nxt_http_route_addr_range_t; 371324Saxel.duch@nginx.com 381324Saxel.duch@nginx.com 391324Saxel.duch@nginx.com #if (NXT_INET6) 401324Saxel.duch@nginx.com typedef struct { 411324Saxel.duch@nginx.com struct in6_addr start; 421324Saxel.duch@nginx.com struct in6_addr end; 431324Saxel.duch@nginx.com } nxt_http_route_in6_addr_range_t; 441324Saxel.duch@nginx.com #endif 451324Saxel.duch@nginx.com 461324Saxel.duch@nginx.com 471324Saxel.duch@nginx.com typedef struct { 481324Saxel.duch@nginx.com uint8_t match_type:2; 491324Saxel.duch@nginx.com uint8_t negative:1; 501324Saxel.duch@nginx.com uint8_t addr_family; 511324Saxel.duch@nginx.com 521324Saxel.duch@nginx.com struct { 531324Saxel.duch@nginx.com uint16_t start; 541324Saxel.duch@nginx.com uint16_t end; 551324Saxel.duch@nginx.com } port; 561324Saxel.duch@nginx.com } nxt_http_route_addr_base_t; 571324Saxel.duch@nginx.com 581324Saxel.duch@nginx.com 591324Saxel.duch@nginx.com typedef struct { 601324Saxel.duch@nginx.com nxt_http_route_addr_base_t base; 611324Saxel.duch@nginx.com 621324Saxel.duch@nginx.com union { 631324Saxel.duch@nginx.com nxt_http_route_addr_range_t v4; 641324Saxel.duch@nginx.com #if (NXT_INET6) 651324Saxel.duch@nginx.com nxt_http_route_in6_addr_range_t v6; 661324Saxel.duch@nginx.com #endif 671324Saxel.duch@nginx.com } addr; 681324Saxel.duch@nginx.com } nxt_http_route_addr_pattern_t; 691324Saxel.duch@nginx.com 701324Saxel.duch@nginx.com 711324Saxel.duch@nginx.com NXT_EXPORT nxt_int_t nxt_http_route_addr_pattern_parse(nxt_mp_t *mp, 721324Saxel.duch@nginx.com nxt_http_route_addr_pattern_t *pattern, nxt_conf_value_t *cv); 731324Saxel.duch@nginx.com 741324Saxel.duch@nginx.com #endif /* _NXT_HTTP_ROUTE_ADDR_H_INCLUDED_ */ 75