blob: 7784014aec4d73d24671e592436eaffcc08f6192 [file] [log] [blame]
// Copyright 2019 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
library fuchsia.net;
struct IpAddressInfo {
/// All of the IPv4 addresses for the requested hostname.
vector<Ipv4Address> ipv4_addrs;
/// All of the IPv6 addresses for the requested hostname.
vector<Ipv6Address> ipv6_addrs;
/// The canonical name of the requested hostname (usually the DNS CNAME record, if one exists).
string? canonical_name;
};
enum LookupError {
/// No result was found for this query.
NOT_FOUND = 1;
/// The lookup failed, but may succeed at a later time. For instance, the
/// network or DNS server may be unreachable.
TRANSIENT = 2;
/// The lookup failed due to an invalid argument (for instance, the hostname was not encoded
/// correctly, or was too long).
INVALID_ARGS = 3;
/// The lookup failed due to an internal error.
INTERNAL_ERROR = 4;
};
table LookupIpOptions {
/// If the lookup should return IPv4 addresses.
/// Defaults to true.
1: bool v4_addrs;
/// If the lookup should return IPv6 addresses.
/// Defaults to true.
2: bool v6_addrs;
/// If the lookup should return a canonical_name, if one exists.
/// Defaults to false.
3: bool cname_lookup;
};
[Discoverable]
protocol NameLookup {
/// Look up a list of IP addresses by hostname.
///
/// If |hostname| is an Internationalized Domain Name, it must be encoded as per RFC 3490.
LookupIp(string hostname, LookupIpOptions options) -> (IpAddressInfo addr) error LookupError;
/// Look up a hostname by IP address.
LookupHostname(IpAddress addr) -> (string hostname) error LookupError;
};