blob: 635b19322fe7121c978092f7def43fa96a43b9eb [file] [log] [blame]
// Copyright 2017 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;
using zx;
/// 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(deprecated=9)
alias txt_string = string:255;
/// Discoverable protocol for resolving host names to IP addresses.
/// Deprecated: use HostNameResolver.
@available(deprecated=9)
@discoverable
closed protocol Resolver {
/// Gets the addresses for the specified host. `timeout` specifies how long
/// the service should wait before giving up when waiting for a response to
/// a resolution query. In typical use, a timeout of two or three seconds
/// is recommended.
///
/// A successful resolution may return one or both addresses. An
/// unsuccessful resolution is indicated when both addresses are null.
strict ResolveHostName(struct {
host host_name;
timeout zx.Duration;
}) -> (struct {
v4_address box<fuchsia.net.Ipv4Address>;
v6_address box<fuchsia.net.Ipv6Address>;
});
};
/// Discoverable protocol for finding service instances.
/// Deprecated: use ServiceInstanceSubscriber.
@available(deprecated=9)
@discoverable
closed protocol Subscriber {
/// Subscribes to a service. The subscription lasts until `subscriber` is
/// unbound.
strict SubscribeToService(resource struct {
service service_name;
subscriber client_end:ServiceSubscriber;
});
};
/// Client-implemented interface for subscribers. Method replies are used to
/// throttle traffic. The service won't necessarily wait for a reply before
/// calling another method.
@available(deprecated=9)
closed protocol ServiceSubscriber {
/// Notifies the subscriber that a service instance has been discovered.
strict OnInstanceDiscovered(struct {
instance ServiceInstance;
}) -> ();
/// Notifies the subscriber that addresses or text for a known service
/// instance have changed.
strict OnInstanceChanged(struct {
instance ServiceInstance;
}) -> ();
/// Notifies the subscriber that a known service instance has been lost.
strict OnInstanceLost(struct {
service service_name;
instance instance_name;
}) -> ();
/// Notifies the subscriber that a PTR query has been sent.
strict OnQuery(struct {
resource_type ResourceType;
}) -> ();
};
/// Discoverable protocol for publishing service instances.
/// Deprecated: use ServiceInstancePublisher.
@available(deprecated=9)
@discoverable
closed protocol Publisher {
/// Publishes a service instance. `publication_responder` is consulted via its
/// `OnPublication` method for initial announcements and to answer queries.
/// The service is published until the `publication_responder` channel closes. In
/// addition to announcements and queries for the service type, all queries
/// for subtypes are answered subject to filtering through the responder.
/// `perform_probe` indicates whether a probe for a conflicting instance
/// should be performed before publishing the instance. This value should
/// be `true` unless the instance name is known to be unique.
///
/// If a service with the same service and instance names is already published, the
/// old publication will be terminated, and the responder channel for the old
/// publication will be closed.
strict PublishServiceInstance(resource struct {
service service_name;
instance instance_name;
media Media;
perform_probe bool;
publication_responder client_end:PublicationResponder;
}) -> () error Error;
};
/// Client-supplied publication responder interface.
@available(deprecated=9)
closed protocol PublicationResponder {
/// Provides instance information for initial announcements and query
/// responses relating to the service instance specified in
/// `ServiceInstancePublisher.PublishServiceInstance`. If the publication relates to a
/// subtype of the service, `subtype` contains the subtype, otherwise
/// it is null. If `publication` is null, no announcement or response is
/// transmitted. Strings in `text` are transmitted in the TXT record.
strict OnPublication(struct {
publication_cause PublicationCause;
subtype subtype_name:optional;
source_addresses vector<fuchsia.net.IpAddress>:MAX_ADDRESSES;
}) -> (struct {
publication box<Publication>;
});
/// Sets the subtypes for the service instance. The specified subtypes will
/// be announced subject to filtering through the responder. The initial
/// subtype collection is empty.
strict -> SetSubtypes(struct {
subtypes vector<subtype_name>:MAX_SUBTYPES;
});
/// Initiates reannouncement of the service instance due to a change in the
/// instance's port number or text strings. All announcements are filtered
/// through `OnPublication`, which replies with the new port and text
/// values.
strict -> Reannounce();
};
/// Describes the cause of a publication.
@available(deprecated=9)
type PublicationCause = strict enum : uint32 {
/// Indicates the publication is part of an initial announcement.
ANNOUNCEMENT = 1;
/// Indicates the publication is in response to a question that requests a
/// multicast response.
QUERY_MULTICAST_RESPONSE = 2;
/// Indicates the publication is in response to a question that requests a
/// unicast response.
QUERY_UNICAST_RESPONSE = 3;
};
/// Describes an initial instance announcement or query response. In typical
/// use, the default SRV priority, SRV weight and TTL values should be used. TTL
/// values are rounded down to the nearest second. TTL values less than one
/// second are not permitted and will result in the `PublicationResponder`
/// channel being closed.
@available(deprecated=9)
type Publication = struct {
/// The port at which the service instance is addressable.
port uint16;
/// Text strings describing the instance.
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.
@allow_deprecated_struct_defaults
srv_priority uint16 = DEFAULT_SRV_PRIORITY;
/// The weight of the SRV resource record for this publication. See
/// [RFC6763](https://tools.ietf.org/html/rfc6763) for details.
@allow_deprecated_struct_defaults
srv_weight uint16 = DEFAULT_SRV_WEIGHT;
/// Time-to-live for PTR resource records.
@allow_deprecated_struct_defaults
ptr_ttl zx.Duration = DEFAULT_PTR_TTL;
/// Time-to-live for SRV resource records.
@allow_deprecated_struct_defaults
srv_ttl zx.Duration = DEFAULT_SRV_TTL;
/// Time-to-live for TXT resource records.
@allow_deprecated_struct_defaults
txt_ttl zx.Duration = DEFAULT_TXT_TTL;
};
@available(deprecated=9)
const DEFAULT_SRV_PRIORITY uint16 = 0;
@available(deprecated=9)
const DEFAULT_SRV_WEIGHT uint16 = 0;
@available(deprecated=9)
const DEFAULT_PTR_TTL zx.Duration = 120000000000; // 2 minutes
@available(deprecated=9)
const DEFAULT_SRV_TTL zx.Duration = 120000000000; // 2 minutes
@available(deprecated=9)
const DEFAULT_TXT_TTL zx.Duration = 4500000000000; // 75 minutes
/// Error values for instance publishing.
@available(deprecated=9)
type Error = strict enum : uint32 {
/// The specified service name is invalid.
INVALID_SERVICE_NAME = 1;
/// The specified instance name is invalid.
INVALID_INSTANCE_NAME = 2;
/// The specified service instance is already being published by another
/// host on the subnet. This result occurs when an initial probe discovers
/// a conflicting instance.
ALREADY_PUBLISHED_ON_SUBNET = 4;
// The specified `Media` value is invalid.
INVALID_MEDIA = 5;
};