nxt_http_route_addr.c (1343:8cc299d14325) nxt_http_route_addr.c (1935:ba08638c3259)
1
2/*
3 * Copyright (C) Axel Duch
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8#include <nxt_http_route_addr.h>
9
10
1
2/*
3 * Copyright (C) Axel Duch
4 * Copyright (C) NGINX, Inc.
5 */
6
7#include <nxt_main.h>
8#include <nxt_http_route_addr.h>
9
10
11static nxt_bool_t nxt_str_looks_like_ipv6(const nxt_str_t *str);
12#if (NXT_INET6)
13static nxt_bool_t nxt_valid_ipv6_blocks(u_char *c, size_t len);
14#endif
15
16
17nxt_int_t
18nxt_http_route_addr_pattern_parse(nxt_mp_t *mp,
19 nxt_http_route_addr_pattern_t *pattern, nxt_conf_value_t *cv)

--- 32 unchanged lines hidden (view full) ---

52 port.start = addr.start + 2;
53 port.length = addr.length - 2;
54 base->addr_family = AF_UNSPEC;
55 base->match_type = NXT_HTTP_ROUTE_ADDR_ANY;
56
57 goto parse_port;
58 }
59
11#if (NXT_INET6)
12static nxt_bool_t nxt_valid_ipv6_blocks(u_char *c, size_t len);
13#endif
14
15
16nxt_int_t
17nxt_http_route_addr_pattern_parse(nxt_mp_t *mp,
18 nxt_http_route_addr_pattern_t *pattern, nxt_conf_value_t *cv)

--- 32 unchanged lines hidden (view full) ---

51 port.start = addr.start + 2;
52 port.length = addr.length - 2;
53 base->addr_family = AF_UNSPEC;
54 base->match_type = NXT_HTTP_ROUTE_ADDR_ANY;
55
56 goto parse_port;
57 }
58
60 if (nxt_str_looks_like_ipv6(&addr)) {
59 if (nxt_inet6_probe(&addr)) {
61#if (NXT_INET6)
62 u_char *end;
63 uint8_t i;
64 nxt_int_t len;
65 nxt_http_route_in6_addr_range_t *inet6;
66
67 base->addr_family = AF_INET6;
68

--- 230 unchanged lines hidden (view full) ---

299 base->port.start = ret;
300 base->port.end = ret;
301 }
302
303 return NXT_OK;
304}
305
306
60#if (NXT_INET6)
61 u_char *end;
62 uint8_t i;
63 nxt_int_t len;
64 nxt_http_route_in6_addr_range_t *inet6;
65
66 base->addr_family = AF_INET6;
67

--- 230 unchanged lines hidden (view full) ---

298 base->port.start = ret;
299 base->port.end = ret;
300 }
301
302 return NXT_OK;
303}
304
305
307static nxt_bool_t
308nxt_str_looks_like_ipv6(const nxt_str_t *str)
309{
310 u_char *colon, *end;
311
312 colon = nxt_memchr(str->start, ':', str->length);
313
314 if (colon != NULL) {
315 end = str->start + str->length;
316 colon = nxt_memchr(colon + 1, ':', end - (colon + 1));
317 }
318
319 return (colon != NULL);
320}
321
322
323#if (NXT_INET6)
324
325static nxt_bool_t
326nxt_valid_ipv6_blocks(u_char *c, size_t len)
327{
328 u_char *end;
329 nxt_uint_t colon_gap;
330

--- 23 unchanged lines hidden ---
306#if (NXT_INET6)
307
308static nxt_bool_t
309nxt_valid_ipv6_blocks(u_char *c, size_t len)
310{
311 u_char *end;
312 nxt_uint_t colon_gap;
313

--- 23 unchanged lines hidden ---