123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- /*
- * Copyright 2011 Google Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- #ifndef DOMAIN_REGISTRY_DOMAIN_REGISTRY_H_
- #define DOMAIN_REGISTRY_DOMAIN_REGISTRY_H_
- #include <stdlib.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- /*
- * Call once at program startup to enable domain registry
- * search. Calls to GetRegistryLength will crash if this is not
- * called.
- */
- void InitializeDomainRegistry(void);
- /*
- * Finds the length in bytes of the registrar portion of the host in
- * the given hostname. Returns 0 if the hostname is invalid or has no
- * host (e.g. a file: URL). Returns 0 if the hostname has multiple
- * trailing dots. If no matching rule is found in the effective-TLD
- * data, returns 0. Internationalized domain names (IDNs) must be
- * converted to punycode first. Non-ASCII hostnames or hostnames
- * longer than 127 bytes will return 0. It is an error to pass in an
- * IP address (either IPv4 or IPv6) and the return value in this case
- * is undefined.
- *
- * Examples:
- * www.google.com -> 3 (com)
- * WWW.gOoGlE.cOm -> 3 (com, case insensitive)
- * ..google.com -> 3 (com)
- * google.com. -> 4 (com)
- * a.b.co.uk -> 5 (co.uk)
- * a.b.co..uk -> 0 (multiple dots in registry)
- * C: -> 0 (no host)
- * google.com.. -> 0 (multiple trailing dots)
- * bar -> 0 (no subcomponents)
- * co.uk -> 5 (co.uk)
- * foo.bar -> 0 (not a valid top-level registry)
- * foo.臺灣 -> 0 (not converted to punycode)
- * foo.xn--nnx388a -> 11 (punycode representation of 臺灣)
- * 192.168.0.1 -> ? (IP address, retval undefined)
- */
- size_t GetRegistryLength(const char* hostname);
- /*
- * Like GetRegistryLength, but allows unknown registries as well. If
- * the hostname is part of a known registry, the return value will be
- * identical to that of GetRegistryLength. If the hostname is not part
- * of a known registry (e.g. foo.bar) then the return value will
- * assume that the rootmost hostname-part is the registry. It is an
- * error to pass in an IP address (either IPv4 or IPv6) and the return
- * value in this case is undefined.
- *
- * Examples:
- * foo.bar -> 3 (bar)
- * bar -> 0 (host is a registry)
- * www.google.com -> 3 (com)
- * com -> 0 (host is a registry)
- * co.uk -> 0 (host is a registry)
- * foo.臺灣 -> 0 (not converted to punycode)
- * foo.xn--nnx388a -> 11 (punycode representation of 臺灣)
- * 192.168.0.1 -> ? (IP address, retval undefined)
- */
- size_t GetRegistryLengthAllowUnknownRegistries(const char* hostname);
- /*
- * Override the assertion handler by providing a custom assert handler
- * implementation. The assertion handler will be invoked when an
- * internal assertion fails. This is usually indicative of a fatal
- * error and execution should not be allowed to continue. The default
- * implementation logs the assertion information to stderr and invokes
- * abort(). The parameter "file" is the filename where the assertion
- * was triggered. "line_number" is the line number in that
- * file. "cond_str" is the string representation of the assertion that
- * failed.
- */
- typedef void (*DomainRegistryAssertHandler)(
- const char* file, int line_number, const char* cond_str);
- void SetDomainRegistryAssertHandler(DomainRegistryAssertHandler handler);
- #ifdef __cplusplus
- } /* extern "C" */
- #endif
- #endif /* DOMAIN_REGISTRY_DOMAIN_REGISTRY_H_ */
|