| // Copyright 2022 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.mdns; |
| |
| using fuchsia.net; |
| |
| /// Identifies a host. Host names consist of one or more labels separated by |
| /// '.'s. A host name must not end with a '.'. Labels must each be 63 characters |
| /// or less (not including the separator) and are UTF-8-encoded. A complete host |
| /// name, including separators, must be 255 characters or less. |
| alias host_name = string:255; |
| |
| /// Identifies a (type of) service being published. Service names consist of |
| /// two labels, both terminated with a '.'. The first label must start with an |
| /// underscore and be 16 characters or less, including the underscore. The |
| /// second label must be either '_tcp' or '_udp'. Labels do not contain '.'s. |
| /// With underscores and terminators, that makes for a maximum of 22 characters. |
| /// Service names are UTF-8-encoded. |
| alias service_name = string:22; |
| |
| /// Identifies a specific instance of a service being published. Instance names |
| /// consist of a single label, which is at most 63 characters long and which |
| /// contains no '.'s. Instance names are UTF-8-encoded. |
| alias instance_name = string:63; |
| |
| /// Identifies a subtype of a service. Subtype names consist of a single label, |
| /// which is at most 63 characters long and which contains no '.'s. Subtype |
| /// names are UTF-8-encoded. |
| alias subtype_name = string:63; |
| |
| /// Provides description relating to a service instance. In typical use, TXT |
| /// strings consist of a key and value separated by '='. TXT strings must be |
| /// at most 255 characters long and are UTF-8-encoded. |
| @available(added=9) |
| alias txt_character_string = vector<uint8>:255; |
| |
| /// Specifies network media on which a service instance should be published. |
| type Media = strict bits : uint32 { |
| /// Specifies wired interfaces. |
| WIRED = 1; |
| |
| /// Specifies wireless interfaces. |
| WIRELESS = 2; |
| }; |
| |
| /// Specifies IP versions on which a service instance should be published. |
| type IpVersions = strict bits : uint32 { |
| /// Specifies IPv4. |
| V4 = 1; |
| |
| /// Specifies IPv6. |
| V6 = 2; |
| }; |
| |
| /// Describes a service instance. |
| type ServiceInstance = table { |
| /// The name of the service. |
| 1: service service_name; |
| |
| /// The name of the service instance. |
| 2: instance instance_name; |
| |
| /// IPv4 socket address for the service. May be empty. Deprecated: use `addresses`. |
| @available(deprecated=9) |
| @deprecated |
| 3: ipv4_endpoint fuchsia.net.Ipv4SocketAddress; |
| |
| /// IPv6 socket address for the service. May be empty. Deprecated: use `addresses`. |
| @available(deprecated=9) |
| @deprecated |
| 4: ipv6_endpoint fuchsia.net.Ipv6SocketAddress; |
| |
| /// Text strings describing the instance. Deprecated: use `text_strings`. |
| @available(deprecated=9) |
| @deprecated |
| 5: text vector<txt_string>:MAX_TEXT_STRINGS; |
| |
| /// The priority of the SRV resource record for this publication. See |
| /// [RFC6763](https://tools.ietf.org/html/rfc6763) for details. |
| 6: srv_priority uint16; |
| |
| /// The weight of the SRV resource record for this publication. See |
| /// [RFC6763](https://tools.ietf.org/html/rfc6763) for details. |
| 7: srv_weight uint16; |
| |
| /// The domain name of the target host. |
| 8: target host_name; |
| |
| /// The socket addresses for the service instance. |
| @available(added=9) |
| 9: addresses vector<fuchsia.net.SocketAddress>:MAX_ADDRESSES; |
| |
| /// Text strings describing the instance. |
| @available(added=9) |
| 10: text_strings vector<txt_character_string>:MAX_TEXT_STRINGS; |
| }; |
| |
| const MAX_TEXT_STRINGS uint32 = 256; |
| const MAX_ADDRESSES uint32 = 64; |
| const MAX_SUBTYPES uint32 = 256; |