xref: /aosp_15_r20/external/cronet/url/url_canon_ip.h (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1*6777b538SAndroid Build Coastguard Worker // Copyright 2013 The Chromium Authors
2*6777b538SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*6777b538SAndroid Build Coastguard Worker // found in the LICENSE file.
4*6777b538SAndroid Build Coastguard Worker 
5*6777b538SAndroid Build Coastguard Worker #ifndef URL_URL_CANON_IP_H_
6*6777b538SAndroid Build Coastguard Worker #define URL_URL_CANON_IP_H_
7*6777b538SAndroid Build Coastguard Worker 
8*6777b538SAndroid Build Coastguard Worker #include "base/component_export.h"
9*6777b538SAndroid Build Coastguard Worker #include "url/third_party/mozilla/url_parse.h"
10*6777b538SAndroid Build Coastguard Worker #include "url/url_canon.h"
11*6777b538SAndroid Build Coastguard Worker 
12*6777b538SAndroid Build Coastguard Worker namespace url {
13*6777b538SAndroid Build Coastguard Worker 
14*6777b538SAndroid Build Coastguard Worker // Writes the given IPv4 address to |output|.
15*6777b538SAndroid Build Coastguard Worker COMPONENT_EXPORT(URL)
16*6777b538SAndroid Build Coastguard Worker void AppendIPv4Address(const unsigned char address[4], CanonOutput* output);
17*6777b538SAndroid Build Coastguard Worker 
18*6777b538SAndroid Build Coastguard Worker // Writes the given IPv6 address to |output|.
19*6777b538SAndroid Build Coastguard Worker COMPONENT_EXPORT(URL)
20*6777b538SAndroid Build Coastguard Worker void AppendIPv6Address(const unsigned char address[16], CanonOutput* output);
21*6777b538SAndroid Build Coastguard Worker 
22*6777b538SAndroid Build Coastguard Worker // Converts an IPv4 address to a 32-bit number (network byte order).
23*6777b538SAndroid Build Coastguard Worker //
24*6777b538SAndroid Build Coastguard Worker // Possible return values:
25*6777b538SAndroid Build Coastguard Worker //   IPV4    - IPv4 address was successfully parsed.
26*6777b538SAndroid Build Coastguard Worker //   BROKEN  - Input was formatted like an IPv4 address, but overflow occurred
27*6777b538SAndroid Build Coastguard Worker //             during parsing.
28*6777b538SAndroid Build Coastguard Worker //   NEUTRAL - Input couldn't possibly be interpreted as an IPv4 address.
29*6777b538SAndroid Build Coastguard Worker //             It might be an IPv6 address, or a hostname.
30*6777b538SAndroid Build Coastguard Worker //
31*6777b538SAndroid Build Coastguard Worker // On success, |num_ipv4_components| will be populated with the number of
32*6777b538SAndroid Build Coastguard Worker // components in the IPv4 address.
33*6777b538SAndroid Build Coastguard Worker COMPONENT_EXPORT(URL)
34*6777b538SAndroid Build Coastguard Worker CanonHostInfo::Family IPv4AddressToNumber(const char* spec,
35*6777b538SAndroid Build Coastguard Worker                                           const Component& host,
36*6777b538SAndroid Build Coastguard Worker                                           unsigned char address[4],
37*6777b538SAndroid Build Coastguard Worker                                           int* num_ipv4_components);
38*6777b538SAndroid Build Coastguard Worker COMPONENT_EXPORT(URL)
39*6777b538SAndroid Build Coastguard Worker CanonHostInfo::Family IPv4AddressToNumber(const char16_t* spec,
40*6777b538SAndroid Build Coastguard Worker                                           const Component& host,
41*6777b538SAndroid Build Coastguard Worker                                           unsigned char address[4],
42*6777b538SAndroid Build Coastguard Worker                                           int* num_ipv4_components);
43*6777b538SAndroid Build Coastguard Worker 
44*6777b538SAndroid Build Coastguard Worker // Converts an IPv6 address to a 128-bit number (network byte order), returning
45*6777b538SAndroid Build Coastguard Worker // true on success. False means that the input was not a valid IPv6 address.
46*6777b538SAndroid Build Coastguard Worker //
47*6777b538SAndroid Build Coastguard Worker // NOTE that |host| is expected to be surrounded by square brackets.
48*6777b538SAndroid Build Coastguard Worker // i.e. "[::1]" rather than "::1".
49*6777b538SAndroid Build Coastguard Worker COMPONENT_EXPORT(URL)
50*6777b538SAndroid Build Coastguard Worker bool IPv6AddressToNumber(const char* spec,
51*6777b538SAndroid Build Coastguard Worker                          const Component& host,
52*6777b538SAndroid Build Coastguard Worker                          unsigned char address[16]);
53*6777b538SAndroid Build Coastguard Worker COMPONENT_EXPORT(URL)
54*6777b538SAndroid Build Coastguard Worker bool IPv6AddressToNumber(const char16_t* spec,
55*6777b538SAndroid Build Coastguard Worker                          const Component& host,
56*6777b538SAndroid Build Coastguard Worker                          unsigned char address[16]);
57*6777b538SAndroid Build Coastguard Worker 
58*6777b538SAndroid Build Coastguard Worker }  // namespace url
59*6777b538SAndroid Build Coastguard Worker 
60*6777b538SAndroid Build Coastguard Worker #endif  // URL_URL_CANON_IP_H_
61