blob: 0871a0f4447fdab68ca657d50951a62b8720d864 [file] [log] [blame]
// Copyright 2018 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
module network.mojom;
import "services/network/public/mojom/ip_address.mojom";
// An mDNS responder is created for each Mojo binding and it manages the
// name-address maps created through the interface. The name-address maps are
// isolated among different responders, so that the creation and the removal
// of a name for an address is specific to the given responder. When the Mojo
// pipe is closed, all name-address maps created through the interface are
// removed by the responder and the responder is destroyed afterwards. For a
// given responder, all created names are reference counted, and each
// CreateNameForAddress call and RemoveNameForAddress call respectively
// increases and decreases the reference count for existing names.
//
// This interface is intended to be safe to use from renderer processes.
interface MdnsResponder {
// Creates and returns a new name for the address if there is no name mapped
// to it by this responder, and initializes the reference count of this name
// to one. Otherwise the existing name mapped to the given address is returned
// and its reference count is incremented by one. Since the name-address maps
// are specific to the given responder, there could be separated names for the
// same address. After a new name is mapped to an address, an mDNS response to
// announce the ownership of this name is scheduled to send to the mDNS
// multicast group over all interfaces, with a TTL for the name set to 120
// seconds (see RFC 6762, Section 10). Returns true in
// |announcement_scheduled| if the schedule is done on all interfaces after
// rate limiting, and false otherwise. The responder will also start to
// respond to queries for the created name until its reference count is
// decremented to zero.
CreateNameForAddress(IPAddress address)
=> (string name, bool announcement_scheduled);
// Decrements the reference count of the mapped name of the given address, if
// there is a map created previously via CreateNameForAddress; removes the
// association between the address and its mapped name and returns true in
// |removed| if the decremented reference count reaches zero. Otherwise no
// operation is done and false is returned in |removed|. If the association
// between the address and its mapped name is removed, an mDNS response to
// renounce the ownership of this name is scheduled to send to the mDNS
// multicast group over all interfaces, by setting a zero TTL. Returns true in
// |goodbye_scheduled| if the schedule is done on all interfaces after rate
// limiting, and false otherwise. The responder will also stop responding to
// queries for the removed name. Note that this does not impact separated
// names mapped to the same address by other responders.
RemoveNameForAddress(IPAddress address)
=> (bool removed, bool goodbye_scheduled);
};