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