21 AFW_URI_OCTET_INVALID,
24 AFW_URI_OCTET_INVALID,
27 AFW_URI_OCTET_INVALID,
30 AFW_URI_OCTET_INVALID,
33 AFW_URI_OCTET_INVALID,
36 AFW_URI_OCTET_INVALID,
39 AFW_URI_OCTET_INVALID,
42 AFW_URI_OCTET_INVALID,
45 AFW_URI_OCTET_INVALID,
48 AFW_URI_OCTET_INVALID,
51 AFW_URI_OCTET_INVALID,
54 AFW_URI_OCTET_INVALID,
57 AFW_URI_OCTET_INVALID,
60 AFW_URI_OCTET_INVALID,
63 AFW_URI_OCTET_INVALID,
66 AFW_URI_OCTET_INVALID,
70 AFW_URI_OCTET_INVALID,
73 AFW_URI_OCTET_INVALID,
76 AFW_URI_OCTET_INVALID,
79 AFW_URI_OCTET_INVALID,
82 AFW_URI_OCTET_INVALID,
85 AFW_URI_OCTET_INVALID,
88 AFW_URI_OCTET_INVALID,
91 AFW_URI_OCTET_INVALID,
94 AFW_URI_OCTET_INVALID,
97 AFW_URI_OCTET_INVALID,
100 AFW_URI_OCTET_INVALID,
103 AFW_URI_OCTET_INVALID,
106 AFW_URI_OCTET_INVALID,
109 AFW_URI_OCTET_INVALID,
112 AFW_URI_OCTET_INVALID,
115 AFW_URI_OCTET_INVALID,
118 AFW_URI_OCTET_INVALID,
121 AFW_URI_OCTET_SUB_DELIM |
127 AFW_URI_OCTET_INVALID,
130 AFW_URI_OCTET_GEN_DELIM |
134 AFW_URI_OCTET_SUB_DELIM |
138 AFW_URI_OCTET_PERCENT,
141 AFW_URI_OCTET_SUB_DELIM |
145 AFW_URI_OCTET_SUB_DELIM |
151 AFW_URI_OCTET_SUB_DELIM |
156 AFW_URI_OCTET_SUB_DELIM |
161 AFW_URI_OCTET_SUB_DELIM |
167 AFW_URI_OCTET_SUB_DELIM |
172 AFW_URI_OCTET_SUB_DELIM |
176 AFW_URI_OCTET_UNRESERVED |
177 AFW_URI_OCTET_MINUS |
183 AFW_URI_OCTET_UNRESERVED |
184 AFW_URI_OCTET_PERIOD |
190 AFW_URI_OCTET_GEN_DELIM |
191 AFW_URI_OCTET_SLASH |
195 AFW_URI_OCTET_UNRESERVED |
196 AFW_URI_OCTET_DIGIT |
197 AFW_URI_OCTET_HEXDIGIT |
203 AFW_URI_OCTET_UNRESERVED |
204 AFW_URI_OCTET_DIGIT |
205 AFW_URI_OCTET_HEXDIGIT |
211 AFW_URI_OCTET_UNRESERVED |
212 AFW_URI_OCTET_DIGIT |
213 AFW_URI_OCTET_HEXDIGIT |
219 AFW_URI_OCTET_UNRESERVED |
220 AFW_URI_OCTET_DIGIT |
221 AFW_URI_OCTET_HEXDIGIT |
227 AFW_URI_OCTET_UNRESERVED |
228 AFW_URI_OCTET_DIGIT |
229 AFW_URI_OCTET_HEXDIGIT |
235 AFW_URI_OCTET_UNRESERVED |
236 AFW_URI_OCTET_DIGIT |
237 AFW_URI_OCTET_HEXDIGIT |
243 AFW_URI_OCTET_UNRESERVED |
244 AFW_URI_OCTET_DIGIT |
245 AFW_URI_OCTET_HEXDIGIT |
251 AFW_URI_OCTET_UNRESERVED |
252 AFW_URI_OCTET_DIGIT |
253 AFW_URI_OCTET_HEXDIGIT |
259 AFW_URI_OCTET_UNRESERVED |
260 AFW_URI_OCTET_DIGIT |
261 AFW_URI_OCTET_HEXDIGIT |
267 AFW_URI_OCTET_UNRESERVED |
268 AFW_URI_OCTET_DIGIT |
269 AFW_URI_OCTET_HEXDIGIT |
275 AFW_URI_OCTET_GEN_DELIM |
276 AFW_URI_OCTET_COLON |
280 AFW_URI_OCTET_SUB_DELIM |
284 AFW_URI_OCTET_INVALID,
287 AFW_URI_OCTET_SUB_DELIM,
290 AFW_URI_OCTET_INVALID,
293 AFW_URI_OCTET_GEN_DELIM |
294 AFW_URI_OCTET_QUESTION |
299 AFW_URI_OCTET_GEN_DELIM |
304 AFW_URI_OCTET_UNRESERVED |
305 AFW_URI_OCTET_ALPHA_UPPER |
306 AFW_URI_OCTET_HEXDIGIT |
312 AFW_URI_OCTET_UNRESERVED |
313 AFW_URI_OCTET_ALPHA_UPPER |
314 AFW_URI_OCTET_HEXDIGIT |
320 AFW_URI_OCTET_UNRESERVED |
321 AFW_URI_OCTET_ALPHA_UPPER |
322 AFW_URI_OCTET_HEXDIGIT |
328 AFW_URI_OCTET_UNRESERVED |
329 AFW_URI_OCTET_ALPHA_UPPER |
330 AFW_URI_OCTET_HEXDIGIT |
336 AFW_URI_OCTET_UNRESERVED |
337 AFW_URI_OCTET_ALPHA_UPPER |
338 AFW_URI_OCTET_HEXDIGIT |
344 AFW_URI_OCTET_UNRESERVED |
345 AFW_URI_OCTET_ALPHA_UPPER |
346 AFW_URI_OCTET_HEXDIGIT |
352 AFW_URI_OCTET_UNRESERVED |
353 AFW_URI_OCTET_ALPHA_UPPER |
359 AFW_URI_OCTET_UNRESERVED |
360 AFW_URI_OCTET_ALPHA_UPPER |
366 AFW_URI_OCTET_UNRESERVED |
367 AFW_URI_OCTET_ALPHA_UPPER |
373 AFW_URI_OCTET_UNRESERVED |
374 AFW_URI_OCTET_ALPHA_UPPER |
380 AFW_URI_OCTET_UNRESERVED |
381 AFW_URI_OCTET_ALPHA_UPPER |
387 AFW_URI_OCTET_UNRESERVED |
388 AFW_URI_OCTET_ALPHA_UPPER |
394 AFW_URI_OCTET_UNRESERVED |
395 AFW_URI_OCTET_ALPHA_UPPER |
401 AFW_URI_OCTET_UNRESERVED |
402 AFW_URI_OCTET_ALPHA_UPPER |
408 AFW_URI_OCTET_UNRESERVED |
409 AFW_URI_OCTET_ALPHA_UPPER |
416 AFW_URI_OCTET_UNRESERVED |
417 AFW_URI_OCTET_ALPHA_UPPER |
423 AFW_URI_OCTET_UNRESERVED |
424 AFW_URI_OCTET_ALPHA_UPPER |
430 AFW_URI_OCTET_UNRESERVED |
431 AFW_URI_OCTET_ALPHA_UPPER |
437 AFW_URI_OCTET_UNRESERVED |
438 AFW_URI_OCTET_ALPHA_UPPER |
444 AFW_URI_OCTET_UNRESERVED |
445 AFW_URI_OCTET_ALPHA_UPPER |
451 AFW_URI_OCTET_UNRESERVED |
452 AFW_URI_OCTET_ALPHA_UPPER |
458 AFW_URI_OCTET_UNRESERVED |
459 AFW_URI_OCTET_ALPHA_UPPER |
465 AFW_URI_OCTET_UNRESERVED |
466 AFW_URI_OCTET_ALPHA_UPPER |
472 AFW_URI_OCTET_UNRESERVED |
473 AFW_URI_OCTET_ALPHA_UPPER |
479 AFW_URI_OCTET_UNRESERVED |
480 AFW_URI_OCTET_ALPHA_UPPER |
486 AFW_URI_OCTET_UNRESERVED |
487 AFW_URI_OCTET_ALPHA_UPPER |
493 AFW_URI_OCTET_GEN_DELIM,
496 AFW_URI_OCTET_INVALID,
499 AFW_URI_OCTET_GEN_DELIM,
502 AFW_URI_OCTET_INVALID,
505 AFW_URI_OCTET_UNRESERVED |
512 AFW_URI_OCTET_INVALID,
515 AFW_URI_OCTET_UNRESERVED |
516 AFW_URI_OCTET_ALPHA_LOWER |
517 AFW_URI_OCTET_HEXDIGIT |
523 AFW_URI_OCTET_UNRESERVED |
524 AFW_URI_OCTET_ALPHA_LOWER |
525 AFW_URI_OCTET_HEXDIGIT |
531 AFW_URI_OCTET_UNRESERVED |
532 AFW_URI_OCTET_ALPHA_LOWER |
533 AFW_URI_OCTET_HEXDIGIT |
539 AFW_URI_OCTET_UNRESERVED |
540 AFW_URI_OCTET_ALPHA_LOWER |
541 AFW_URI_OCTET_HEXDIGIT |
547 AFW_URI_OCTET_UNRESERVED |
548 AFW_URI_OCTET_ALPHA_LOWER |
549 AFW_URI_OCTET_HEXDIGIT |
555 AFW_URI_OCTET_UNRESERVED |
556 AFW_URI_OCTET_ALPHA_LOWER |
557 AFW_URI_OCTET_HEXDIGIT |
563 AFW_URI_OCTET_UNRESERVED |
564 AFW_URI_OCTET_ALPHA_LOWER |
570 AFW_URI_OCTET_UNRESERVED |
571 AFW_URI_OCTET_ALPHA_LOWER |
577 AFW_URI_OCTET_UNRESERVED |
578 AFW_URI_OCTET_ALPHA_LOWER |
584 AFW_URI_OCTET_UNRESERVED |
585 AFW_URI_OCTET_ALPHA_LOWER |
591 AFW_URI_OCTET_UNRESERVED |
592 AFW_URI_OCTET_ALPHA_LOWER |
598 AFW_URI_OCTET_UNRESERVED |
599 AFW_URI_OCTET_ALPHA_LOWER |
605 AFW_URI_OCTET_UNRESERVED |
606 AFW_URI_OCTET_ALPHA_LOWER |
612 AFW_URI_OCTET_UNRESERVED |
613 AFW_URI_OCTET_ALPHA_LOWER |
619 AFW_URI_OCTET_UNRESERVED |
620 AFW_URI_OCTET_ALPHA_LOWER |
627 AFW_URI_OCTET_UNRESERVED |
628 AFW_URI_OCTET_ALPHA_LOWER |
634 AFW_URI_OCTET_UNRESERVED |
635 AFW_URI_OCTET_ALPHA_LOWER |
641 AFW_URI_OCTET_UNRESERVED |
642 AFW_URI_OCTET_ALPHA_LOWER |
648 AFW_URI_OCTET_UNRESERVED |
649 AFW_URI_OCTET_ALPHA_LOWER |
655 AFW_URI_OCTET_UNRESERVED |
656 AFW_URI_OCTET_ALPHA_LOWER |
662 AFW_URI_OCTET_UNRESERVED |
663 AFW_URI_OCTET_ALPHA_LOWER |
669 AFW_URI_OCTET_UNRESERVED |
670 AFW_URI_OCTET_ALPHA_LOWER |
676 AFW_URI_OCTET_UNRESERVED |
677 AFW_URI_OCTET_ALPHA_LOWER |
683 AFW_URI_OCTET_UNRESERVED |
684 AFW_URI_OCTET_ALPHA_LOWER |
690 AFW_URI_OCTET_UNRESERVED |
691 AFW_URI_OCTET_ALPHA_LOWER |
697 AFW_URI_OCTET_UNRESERVED |
698 AFW_URI_OCTET_ALPHA_LOWER |
704 AFW_URI_OCTET_INVALID,
707 AFW_URI_OCTET_INVALID,
710 AFW_URI_OCTET_INVALID,
713 AFW_URI_OCTET_UNRESERVED |
719 AFW_URI_OCTET_INVALID
732 impl_state_hier_part_begin,
733 impl_state_hier_part_slash1,
734 impl_state_hier_part_slash2,
735 impl_state_scheme_begin,
737 impl_state_authority_begin,
738 impl_state_authority_determine,
739 impl_state_authority_userinfo_begin,
740 impl_state_authority_userinfo,
741 impl_state_authority_host_begin,
742 impl_state_authority_reg_name,
743 impl_state_authority_host_v4,
744 impl_state_authority_host_v6,
745 impl_state_authority_optional_port,
746 impl_state_authority_port,
747 impl_state_path_begin,
749 impl_state_query_begin,
753 impl_segment_parameter_begin,
754 impl_segment_parameter_value_begin,
755 impl_state_fragment_begin,
772 end = c + string->len;
827 if (!
string || string->len == 0) {
828 return &afw_s_a_empty_string;
835 if (len == string->len) {
845 end = c +
string->len;
937 if (len > s_len)
return -1;
940 end = c + string->len;
975 if (len > s_len)
return -1;
1010 decoded->ptr, decoded->size, p, xctx))
1013 "Only URIs that can be decoded to NFC Unicode are supported",
1034 decoded->ptr, decoded->size, p, xctx))
1037 "Only URIs that can be decoded to NFC Unicode are supported",
1063 for (percent_count = 0, c = s, end = c + len;
1066 if (*c ==
'%') percent_count++;
1069 if (percent_count == 0 || len == 0) {
1075 result->size = decoded_len = len - 2 * percent_count;
1079 for (c = s; decoded_len > 0; decoded_len--) {
1112 for (percent_count = 0, c = encoded->s, end = c + encoded->len;
1115 if (*c ==
'%') percent_count++;
1118 if (percent_count == 0 || encoded->len == 0) {
1123 result->size = len = encoded->len - 2 * percent_count;
1127 for (c = encoded->s; len > 0; len--) {
1154 parser->end = (
const afw_octet_t *)uri->s + uri->len;
1186 self->reuse =
false;
1190 if (self->c == self->end) {
1192 self->token.s = NULL;
1193 self->token.len = 0;
1194 self->is_reserved =
true;
1206 self->token.len = 1;
1207 self->is_reserved =
true;
1212 self->is_reserved =
false;
1214 if (*self->c ==
'.' && self->consider_period_a_token) {
1215 self->token.len = 1;
1220 for (is_encoded =
false;
self->c !=
self->end; (
self->c)++) {
1221 if (*self->c ==
'%') {
1222 if (self->c + 2 > self->end) {
1236 if (*self->c ==
'.' && self->consider_period_a_token)
1246 self->token.len =
self->c - (
const afw_octet_t *)self->token.s;
1249 self->token.s = decoded->s;
1250 self->token.len = decoded->len;
1259 (
int)(self->c - (
const afw_octet_t *)self->uri->s));
1281 impl_component_len(
const afw_utf8_t *component)
1288 for (len = 0, s = (
const afw_octet_t *)component->s,
1289 end = s + component->len;
1293 if (s + 2 > end)
goto error;
1295 if (x1 == 255)
goto error;
1297 if (x2 == 255)
goto error;
1337 end = c + component->len;
1379 impl_set_normalized_uri(
1387 if (parsed->path_parsed) {
1388 parsed->normalized_uri.s = parsed->path_parsed->normalized_path.s;
1389 parsed->normalized_uri.len = parsed->path_parsed->normalized_path.len;
1395 if (parsed->scheme.len != 0) {
1396 len += parsed->scheme.len + 1 ;
1399 if (parsed->userinfo || parsed->host || parsed->port.len != 0) {
1401 if (parsed->userinfo) {
1402 len += parsed->userinfo->len + 1 ;
1405 len += parsed->host->len;
1407 if (parsed->port.len != 0) {
1413 if (parsed->original_path.len != 0) {
1414 len += impl_component_len(&parsed->original_path);
1417 if (parsed->original_query.len != 0) {
1418 len += impl_component_len(&parsed->original_query) + 1 ;
1421 if (parsed->original_fragment.len != 0) {
1422 len += impl_component_len(&parsed->original_fragment) + 1 ;
1427 parsed->normalized_uri.len = len;
1429 if (parsed->scheme.len != 0) {
1430 memcpy(s, parsed->scheme.s, parsed->scheme.len);
1431 s += parsed->scheme.len;
1435 if (parsed->userinfo || parsed->host || parsed->port.len != 0) {
1438 if (parsed->userinfo) {
1439 memcpy(s, parsed->userinfo->s, parsed->userinfo->len);
1440 s += parsed->userinfo->len;
1444 memcpy(s, parsed->host->s, parsed->host->len);
1445 s += parsed->host->len;
1447 if (parsed->port.len != 0) {
1449 memcpy(s, parsed->port.s, parsed->port.len);
1450 s += parsed->port.len;
1454 if (parsed->original_path.len != 0) {
1455 s += impl_component_encode(s, &parsed->original_path);
1457 if (parsed->original_query.len != 0) {
1459 s += impl_component_encode(s, &parsed->original_query);
1461 if (parsed->original_fragment.len != 0) {
1463 s += impl_component_encode(s, &parsed->original_fragment);
1485 if (!uri || uri->len == 0) {
1487 "afw_uri_parse() requires a uri.",
1498 state = impl_state_initial,
1503 state != impl_state_end;
1520 else if (*c ==
'%') {
1521 if (c + 3 > end)
goto error;
1523 if (x1 < 0)
goto error;
1525 if (x2 < 0)
goto error;
1526 type = AFW_URI_OCTET_PCT_ENCODED;
1533 if (!type)
goto error;
1541 case impl_state_initial:
1546 state = impl_state_hier_part_begin;
1556 state = impl_state_scheme_begin;
1563 state = impl_state_hier_part_begin;
1571 case impl_state_scheme_begin:
1577 state = impl_state_scheme;
1581 case impl_state_scheme:
1584 parsed->scheme.len = c - (
const afw_octet_t *)parsed->scheme.s;
1587 state = impl_state_hier_part_begin;
1596 case impl_state_hier_part_begin:
1599 state = impl_state_end;
1607 state = impl_state_hier_part_slash1;
1611 state = impl_state_path_begin;
1615 case impl_state_hier_part_slash1:
1619 state = impl_state_path_begin;
1625 state = impl_state_authority_begin;
1630 state = impl_state_path_begin;
1634 case impl_state_authority_begin:
1636 if (c == end)
goto error;
1639 state = impl_state_authority_determine;
1642 case impl_state_authority_determine:
1645 state = (c != end && *c ==
'@')
1646 ? impl_state_authority_userinfo_begin
1647 : impl_state_authority_host_begin;
1648 c = (
const afw_octet_t *)parsed->original_authority.s;
1656 case impl_state_authority_userinfo_begin:
1659 state = impl_state_authority_userinfo;
1662 case impl_state_authority_userinfo:
1665 parsed->original_userinfo.len =
1666 c - (
const afw_octet_t *)parsed->original_userinfo.s;
1670 state = impl_state_authority_host_begin;
1679 case impl_state_authority_host_begin:
1682 state = impl_state_end;
1690 state = impl_state_authority_host_v6;
1696 state = impl_state_authority_host_v4;
1700 state = impl_state_authority_reg_name;
1703 case impl_state_authority_reg_name:
1705 if (c == end || *c ==
'/' || *c ==
':') {
1706 parsed->original_host.len =
1712 : impl_state_authority_optional_port;
1720 case impl_state_authority_host_v4:
1722 if (c == end || *c ==
'/' || *c ==
':') {
1723 parsed->original_host.len =
1725 parsed->host = &parsed->original_host;
1726 state = impl_state_authority_optional_port;
1735 case impl_state_authority_host_v6:
1737 if (c == end)
goto error;
1740 parsed->original_host.len =
1741 c - (
const afw_octet_t *)parsed->original_host.s + 1;
1742 parsed->host = &parsed->original_host;
1744 state = impl_state_authority_optional_port;
1753 case impl_state_authority_optional_port:
1756 state = impl_state_end;
1763 state = impl_state_authority_port;
1767 state = impl_state_path_begin;
1771 case impl_state_authority_port:
1776 if (c != end && *c !=
'/')
goto error;
1777 state = impl_state_path_begin;
1785 case impl_state_path_begin:
1788 state = impl_state_end;
1793 state = impl_state_path;
1796 case impl_state_path:
1798 if (c == end || *c ==
'?' || *c ==
'#') {
1799 parsed->original_path.len =
1802 state = impl_state_end;
1806 ? impl_state_query_begin
1807 : impl_state_fragment_begin;
1816 case impl_state_query_begin:
1819 state = impl_state_query;
1822 case impl_state_query:
1824 if (c == end || *c ==
'#') {
1825 parsed->original_query.len =
1826 c - (
const afw_octet_t *)parsed->original_query.s;
1828 state = impl_state_end;
1831 state = impl_state_fragment_begin;
1843 case impl_state_fragment_begin:
1846 state = impl_state_fragment;
1849 case impl_state_fragment:
1852 parsed->original_fragment.len =
1853 c - (
const afw_octet_t *)parsed->original_fragment.s;
1854 state = impl_state_end;
1869 if (is_value_path &&
1870 parsed->scheme.len == 0 &&
1871 parsed->original_authority.len == 0 &&
1872 parsed->original_query.len == 0 &&
1873 parsed->original_fragment.len == 0 &&
1874 parsed->original_path.len != 0)
1877 &parsed->original_path, parsed->current_path, NULL,
1881 impl_set_normalized_uri(parsed, p, xctx);
1907 if (parsed->original_uri) {
1909 &afw_s_originalURI, parsed->original_uri, xctx);
1912 if (parsed->normalized_uri.len > 0) {
1914 &afw_s_normalizedURI, &parsed->normalized_uri, xctx);
1917 if (parsed->scheme.len > 0) {
1919 &afw_s_scheme, &parsed->scheme, xctx);
1922 if (parsed->original_hier_part.len > 0) {
1924 &afw_s_originalHierPart, &parsed->original_hier_part, xctx);
1927 if (parsed->original_authority.len > 0) {
1929 &afw_s_originalAuthority, &parsed->original_authority, xctx);
1932 if (parsed->authority) {
1934 &afw_s_authority, parsed->authority, xctx);
1937 if (parsed->original_userinfo.len > 0) {
1939 &afw_s_originalUserinfo, &parsed->original_userinfo, xctx);
1942 if (parsed->userinfo) {
1944 &afw_s_userinfo, parsed->userinfo, xctx);
1947 if (parsed->original_host.len > 0) {
1949 &afw_s_originalHost, &parsed->original_host, xctx);
1954 &afw_s_host, parsed->host, xctx);
1957 if (parsed->port.len > 0) {
1959 &afw_s_port, &parsed->port, xctx);
1962 if (parsed->original_path.len > 0) {
1964 &afw_s_originalPath, &parsed->original_path, xctx);
1967 if (parsed->original_path.len > 0) {
1975 if (!parser.token.s)
break;
1980 &afw_s_pathTokens, list, xctx);
1983 if (parsed->original_query.len > 0) {
1985 &afw_s_originalQuery, &parsed->original_query, xctx);
1988 if (parsed->original_query.len > 0) {
1996 if (!parser.token.s)
break;
2001 &afw_s_queryTokens, list, xctx);
2004 if (parsed->original_fragment.len > 0) {
2006 &afw_s_originalFragment, &parsed->original_fragment, xctx);
2009 if (parsed->original_fragment.len > 0) {
2017 if (!parser.token.s)
break;
2022 &afw_s_fragmentTokens, list, xctx);
2025 if (parsed->path_parsed) {
2027 parsed->path_parsed, p, xctx);
2029 &afw_s_valuePath,
object, xctx);
2048 parsed =
afw_uri_parse(uri, is_value_path, current_path, p, xctx);
2064 self->consider_period_a_token = consider_period_a_token;
2076 if (parsed1->scheme.len != parsed2->scheme.len ||
2077 (parsed1->scheme.len != 0 &&
2083 if (parsed1->userinfo) {
2084 if (!parsed2->userinfo ||
2091 if (parsed2->userinfo)
goto not_equal;
2094 if (parsed1->host) {
2095 if (!parsed2->host ||
2102 if (parsed2->host)
goto not_equal;
2105 if (parsed1->port.len != parsed2->port.len ||
2106 (parsed1->port.len != 0 &&
2113 if (parsed1->path_parsed) {
2114 if (!parsed2->path_parsed ||
2116 parsed1->path_parsed, parsed2->path_parsed, xctx))
2122 if (parsed2->path_parsed)
goto not_equal;
2124 if (parsed1->original_path.len != parsed2->original_path.len ||
2125 (parsed1->original_path.len != 0 &&
2126 !
afw_utf8_equal(&parsed1->original_path, &parsed2->original_path)))
2154 parsed1 =
afw_uri_parse(uri1, is_value_path, NULL, p, xctx);
2155 parsed2 =
afw_uri_parse(uri2, is_value_path, current_path2, p, xctx);
2170 if (AFW_URI_OCTET_MASK_IS_BITWISE_NOT & mask) {
2171 result = (type & ~mask) == 0;
2175 result = (type & mask) != 0;
AFW_DEFINE(const afw_object_t *)
#define AFW_DECLARE(type)
Declare a public afw function.
#define AFW_DEFINE_CONST_DATA(type)
Define a public afw variable.
Adaptive Framework Core Internal.
afw_ascii_encode_hex_digit(afw_octet_t octet)
Encode ascii hex digit.
afw_ascii_decode_hex_digit(afw_octet_t octet)
Decode ascii hex digit.
afw_object_set_property_as_list(const afw_object_t *object, const afw_utf8_t *property_name, const afw_list_t *internal, afw_xctx_t *xctx)
Set property function for data type list values.
afw_object_set_property_as_object(const afw_object_t *object, const afw_utf8_t *property_name, const afw_object_t *internal, afw_xctx_t *xctx)
Set property function for data type object values.
afw_value_create_string(const afw_utf8_t *internal, const afw_pool_t *p, afw_xctx_t *xctx)
Create function for unmanaged data type string value.
afw_data_type_string
Data type struct for string.
afw_object_set_property_as_string(const afw_object_t *object, const afw_utf8_t *property_name, const afw_utf8_t *internal, afw_xctx_t *xctx)
Set property function for data type string values.
#define AFW_UTF8_FMT_ARG(A_STRING)
Convenience Macro for use with AFW_UTF8_FMT to specify arg.
#define AFW_UTF8_FMT
Format string specifier used for afw_utf8_t.
char afw_utf8_octet_t
8 bits of utf-8 codepoint.
apr_size_t afw_size_t
size_t.
unsigned char afw_octet_t
8 bits (unsigned).
#define AFW_THROW_ERROR_FZ(code, xctx, format_z,...)
Macro used to set error and 0 rv in xctx and throw it.
#define AFW_THROW_ERROR_Z(code, message_z, xctx)
Macro used to set error and 0 rv in xctx and throw it.
afw_list_add_value(const afw_list_t *instance, const afw_value_t *value, afw_xctx_t *xctx)
Call method add_value of interface afw_list_setter.
#define afw_list_of_create(data_type, p, xctx)
Create an list of a specific data type in memory.
afw_object_path_parse(const afw_utf8_t *path, const afw_utf8_t *current_path, const afw_object_options_t *default_options, const afw_pool_t *p, afw_xctx_t *xctx)
Parse an object value path in specific pool.
afw_object_path_parsed_to_object(const afw_object_path_parsed_t *parsed, const afw_pool_t *p, afw_xctx_t *xctx)
Turn a parsed path into an object representation.
afw_object_path_parsed_are_equivalent(const afw_object_path_parsed_t *parsed1, const afw_object_path_parsed_t *parsed2, afw_xctx_t *xctx)
Determine if two parsed paths are equivalent.
#define afw_object_create_managed(p, xctx)
Create an empty entity object in its own pool.
#define afw_pool_malloc(instance, size, xctx)
Call method malloc of interface afw_pool.
#define afw_pool_calloc_type(instance, type, xctx)
Macro to allocate cleared memory to hold type in pool.
#define afw_pool_malloc_type(instance, type, xctx)
Macro to allocate uncleared memory to hold type in pool.
afw_uri_to_object(const afw_utf8_t *uri, afw_boolean_t is_value_path, const afw_utf8_t *current_path, const afw_pool_t *p, afw_xctx_t *xctx)
Turn a URI into an object representation.
#define AFW_URI_OCTET_ENCODE_COMPONENT_VALUE
encode except A-Z a-z 0-9 - _ . ! ~ * '
afw_uri_are_equivalent(const afw_utf8_t *uri1, const afw_utf8_t *uri2, afw_boolean_t is_value_path, const afw_utf8_t *current_path2, const afw_pool_t *p, afw_xctx_t *xctx)
Determine if two URIs are equivalent.
#define AFW_URI_OCTET_ENCODE_URI
encode except A-Z a-z 0-9 ; , / ? : @ & = + $ - _ . ! ~ * ' ( ) #
afw_uri_parse_next_token(const afw_uri_parser_t *parser, afw_xctx_t *xctx)
Parse next token.
afw_uri_decode_create(const afw_utf8_octet_t *s, afw_size_t len, const afw_pool_t *p, afw_xctx_t *xctx)
Create a URI decoded string.
#define AFW_URI_OCTET_ENCODE_COMPONENT
encode except A-Z a-z 0-9 - _ . ! ~ * ' ( )
afw_uri_parser_initialize(afw_uri_parser_t *parser, const afw_utf8_t *uri, const afw_pool_t *p, afw_xctx_t *xctx)
Initialize a parser in specific pool.
afw_uri_parse_reuse_token(const afw_uri_parser_t *parser, afw_xctx_t *xctx)
Cause next call afw_uri_parse_get_next_token() to return current token.
afw_uri_decode_to_raw_create(const afw_utf8_octet_t *s, afw_size_t len, const afw_pool_t *p, afw_xctx_t *xctx)
Decode URI encoded string to raw.
afw_uri_parse(const afw_utf8_t *uri, afw_boolean_t is_value_path, const afw_utf8_t *current_path, const afw_pool_t *p, afw_xctx_t *xctx)
Parse a URI in specific pool.
afw_size_t afw_uri_encode_len(const afw_utf8_t *string, afw_uri_octet_type_t mask, afw_xctx_t *xctx)
The length needed to URI encode a string.
afw_uri_encode_create(const afw_utf8_octet_t *s, afw_size_t len, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx)
Create a URI encode a string.
afw_uri_encode_raw(const afw_memory_t *raw, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx)
URI encode raw.
afw_uri_parsed_to_object(const afw_uri_parsed_t *parsed, const afw_pool_t *p, afw_xctx_t *xctx)
Turn a parsed URI into an object representation.
afw_uri_decode_to_raw(const afw_utf8_t *encoded, const afw_pool_t *p, afw_xctx_t *xctx)
Decode a URI encoded string to raw.
afw_uri_encode(const afw_utf8_t *string, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx)
URI encode a string.
afw_uri_parser_create(const afw_utf8_t *uri, const afw_pool_t *p, afw_xctx_t *xctx)
Create and initialize a parser in specific pool.
afw_uri_encode_raw_to_preallocated(afw_utf8_octet_t *s, afw_size_t s_len, const afw_memory_t *raw, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx)
URI encode from raw using supplied afw_utf8_t.
afw_uri_octet_test(afw_octet_t octet, afw_uri_octet_type_t mask)
Test uri octet type mask.
afw_uri_decode(const afw_utf8_t *encoded, const afw_pool_t *p, afw_xctx_t *xctx)
Decode a URI encoded string.
afw_uint32_t afw_uri_octet_type_t
Token type typedef.
afw_uri_parse_set_consider_period_a_token(const afw_uri_parser_t *parser, afw_boolean_t consider_period_a_token, afw_xctx_t *xctx)
Set consider_period_a_token flag.
afw_uri_encode_raw_len(const afw_memory_t *raw, afw_uri_octet_type_t mask, afw_xctx_t *xctx)
The length needed to URI encode raw.
#define AFW_URI_OCTET_IS(type, mask)
Test uri octet type using mask.
afw_uri_parsed_are_equivalent(const afw_uri_parsed_t *parsed1, const afw_uri_parsed_t *parsed2, afw_xctx_t *xctx)
Determine if two parsed URIs are equivalent.
afw_uri_encode_to_preallocated(afw_utf8_octet_t *s, afw_size_t s_len, const afw_utf8_t *string, afw_uri_octet_type_t mask, const afw_pool_t *p, afw_xctx_t *xctx)
URI encode a string using supplied afw_utf8_t.
afw_uri_octet_type[256]
Token type table indexed by afw_octet_t ( 0 - 255 ).
#define afw_utf8_is_nfc(s, len, p, xctx)
Determine if series of bytes is NFC normalized utf-8.
afw_boolean_t afw_utf8_equal(const afw_utf8_t *s1, const afw_utf8_t *s2)
Check to see if a string equals another string.
const afw_utf8_t * afw_utf8_clone(const afw_utf8_t *string, const afw_pool_t *p, afw_xctx_t *xctx)
Clone a utf-8 string into a specific pool.
#define afw_utf8_create(s, len, p, xctx)
Create utf-8 string without copy unless necessary in pool specified.
Interface afw_list public struct.
Struct for memory pointer and size.
Interface afw_object public struct.
Interface afw_pool public struct.
Typedef for parsed URI returned from afw_uri_parse().
NFC normalized UTF-8 string.
Interface afw_value public struct.
Interface afw_xctx public struct.