|  | // Copyright 2020 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.weave; | 
|  |  | 
|  | using fuchsia.net as net; | 
|  |  | 
|  | /// The maximum number of HostPorts that Weave can return in a HostPortList, as | 
|  | /// weave indexes HostPortLists by a uint8. | 
|  | const uint32 MAX_HOST_PORTS = 256; | 
|  | /// The largest supported size of a QR code encoded in string format may be. | 
|  | const uint32 MAX_QR_CODE_SIZE = 256; | 
|  |  | 
|  | /// An endpoint ID used for identifying which service endpoints are of interest when | 
|  | /// looking up endpoints in the Weave Service Directory. | 
|  | using ServiceEndpointId = uint64; | 
|  |  | 
|  | /// Current state of pairing/provisioning. At the point of a completely unprovisioned | 
|  | /// or factory reset device, all states will be `false`. Outside of an explicit | 
|  | /// ResetConfig call or factory reset, the provisioning states will only transition | 
|  | /// from `false` to `true` as Weave profiles are provisioned. | 
|  | table PairingState { | 
|  | /// Has Weave been fully provisioned? This implies that all provisioning | 
|  | /// has been completed as expected as specified in the configuration. | 
|  | 1: bool is_weave_fully_provisioned; | 
|  | /// Has WiFi been provisioned? Defaults to false. | 
|  | 2: bool is_wlan_provisioned; | 
|  | /// Has Thread been provisioned? Defaults to false. | 
|  | 3: bool is_thread_provisioned; | 
|  | /// Has the fabric been provisioned? Defaults to false. | 
|  | 4: bool is_fabric_provisioned; | 
|  | /// Has the service been provisioned? Defaults to false. | 
|  | 5: bool is_service_provisioned; | 
|  | }; | 
|  |  | 
|  | /// ResetConfig flags. | 
|  | bits ResetConfigFlags : uint32 { | 
|  | /// Reset network configuration information. | 
|  | NETWORK_CONFIG = 0x0001; | 
|  | /// Reset fabric configuration information. | 
|  | FABRIC_CONFIG = 0x0002; | 
|  | /// Reset service configuration information. | 
|  | SERVICE_CONFIG = 0x0004; | 
|  | /// Reset device operational credentials. | 
|  | OPERATIONAL_CREDENTIALS = 0x0008; | 
|  | }; | 
|  |  | 
|  | /// Reset all device configuration information. | 
|  | const uint32 RESET_CONFIG_ALL = 0x00FF; | 
|  |  | 
|  | /// QR Code data for pairing. | 
|  | struct QrCode { | 
|  | /// QR code data in string format, supplying this string in a QR | 
|  | /// code should be sufficient for pairing. | 
|  | string:MAX_QR_CODE_SIZE data; | 
|  | }; | 
|  |  | 
|  | /// Representation of a host either in the form of a hostname or IP address. | 
|  | union Host { | 
|  | 1: string:net.MAX_HOSTNAME_SIZE hostname; | 
|  | 2: net.IpAddress ip_address; | 
|  | }; | 
|  |  | 
|  | /// A tuple of host and port to represent a connectable endpoint. | 
|  | struct HostPort { | 
|  | Host host; | 
|  | uint16 port; | 
|  | }; | 
|  |  | 
|  | /// Watches for changes in Weave Service Directory entries for a particular endpoint | 
|  | /// ID. The endpoint ID is specified in, and this protocol retrieved from | 
|  | /// [`fuchsia.weave/Stack.GetServiceDirectoryWatcher`]. | 
|  | protocol SvcDirectoryWatcher { | 
|  | /// Returns a vector of HostPorts for the watched endpoint ID. | 
|  | /// | 
|  | /// First call returns the current list of HostPorts or blocks until the list | 
|  | /// is available from the service. Subsequent calls will block until a new | 
|  | /// ServiceDirectory lookup is made and will return the list associated with | 
|  | /// the watched endpoint ID, which may or may not be the same as prior values. | 
|  | /// | 
|  | /// Calling WatchServiceDirectory when a previous call is still pending will | 
|  | /// cause the channel to be closed with `ZX_ERR_BAD_STATE`. | 
|  | WatchServiceDirectory() -> (vector<HostPort>:MAX_HOST_PORTS host_port_list); | 
|  | }; | 
|  |  | 
|  | /// Watches for changes in pairing state in Weave. Retrieved from | 
|  | /// [`fuchsia.weave/Stack.GetPairingStateWatcher`]. | 
|  | protocol PairingStateWatcher { | 
|  | /// Returns the state of pairing. | 
|  | /// | 
|  | /// First call returns the current pairing state or blocks until the pairing | 
|  | /// state is available. Subsequent calls will block until the pairing state | 
|  | /// changes. | 
|  | /// | 
|  | /// Calling WatchPairingState when a previous call is still pending will cause | 
|  | /// the channel to be closed with `ZX_ERR_BAD_STATE`. | 
|  | WatchPairingState() -> (PairingState state); | 
|  | }; | 
|  |  | 
|  | /// Calls and services available from WeaveStack. These calls are designed to | 
|  | /// wrap the Weave adaptation and provide information or capabilities to Weave | 
|  | /// applications or components that are interested in information that Weave | 
|  | /// exposes. | 
|  | [Discoverable] | 
|  | protocol Stack { | 
|  | /// Returns a PairingStateWatcher to watch for changes in pairing state. | 
|  | GetPairingStateWatcher(request<PairingStateWatcher> watcher); | 
|  | /// Returns a SvcDirectoryWatcher to watch changes in the Weave service | 
|  | /// directory for a particular endpoint. | 
|  | GetSvcDirectoryWatcher(ServiceEndpointId endpoint_id, | 
|  | request<SvcDirectoryWatcher> watcher); | 
|  | /// Returns a QR code that can be used in the pairing process. | 
|  | GetQrCode() -> (QrCode qr_code) error ErrorCode; | 
|  | /// Reset the Weave configuration. | 
|  | ResetConfig(ResetConfigFlags flags) -> () error ErrorCode; | 
|  | }; |