| // Copyright 2015 The Vanadium 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 discovery; |
| |
| // Copied from v.io/v23/discovery/types.vdl |
| struct Service { |
| // The universal unique identifier of a service instance. |
| // If this is not specified, a random 128 bit (16 byte) UUID will be used. |
| string? InstanceId; |
| // Optional name of the service instance. |
| string? InstanceName; |
| // The interface that the service implements. |
| // E.g., 'v.io/v23/services/vtrace.Store'. |
| string InterfaceName; |
| // The service attributes. |
| // E.g., {'resolution': '1024x768'}. |
| map<string, string>? Attrs; |
| // The addresses that the service is served on. |
| // E.g., '/host:port/a/b/c'. |
| array<string> Addrs; |
| }; |
| |
| struct Error { |
| string id; |
| int32 action; |
| string msg; |
| }; |
| |
| // Advertiser provides methods to do Vanadium Advertising. |
| interface Advertiser { |
| // Advertise advertises the service to be discovered by "Scanner" implementations. |
| // visibility is used to limit the principals that can see the advertisement. An |
| // empty set means that there are no restrictions on visibility (i.e, equivalent |
| // to []security.BlessingPattern{security.AllPrincipals}). |
| // |
| // It is an error to have simultaneously active advertisements for two identical |
| // instances (service.InstanceUuid). |
| Advertise(Service service, array<string>? visibility) => (uint32 Handle, string instanceId, Error? Err); |
| |
| // Stop Stops the advertisement associated with the given handle. |
| Stop(uint32 h) => (Error? Err); |
| }; |
| |
| // Scanner provides methods to scan for Vanadium advertisements. |
| interface Scanner { |
| // Scan scans for services matching the query passed and calls ScanHandler with updates. |
| // |
| // The query is a WHERE expression of syncQL query against scanned services, where |
| // keys are InstanceUuids and values are Service. |
| // |
| // Examples |
| // |
| // v.InstanceName = "v.io/i" |
| // v.InstanceName = "v.io/i" AND v.Attrs["a"] = "v" |
| // v.Attrs["a"] = "v1" OR v.Attrs["a"] = "v2" |
| // |
| // SyncQL tutorial at: |
| // https://github.com/vanadium/docs/blob/master/tutorials/syncql-tutorial.md |
| Scan(string query, ScanHandler scanHandler) => (uint32 Handle, Error? Err); |
| |
| // StopScan stops the scanner associated weith the given handle. |
| Stop(uint32 h) => (Error? Err); |
| }; |
| |
| // ScanHandler is used to pass updates about Services that are found/lost during |
| // the scan. |
| interface ScanHandler { |
| // Found will be called when a Service is found. |
| Found(Service service); |
| |
| // Lost will be called when a service is lost. |
| Lost(string instanceId); |
| }; |