| // 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. |
| |
| package vine |
| |
| error ( |
| InvalidAddress(address string) {"en": "invalid vine address {address}, address must be of the form 'network/address/tag'"} |
| AddressNotReachable(address string) {"en": "address {address} not reachable"} |
| NoRegisteredProtocol(protocol string) {"en": "no registered protocol {protocol}"} |
| CantAcceptFromTag(tag string) {"en": "can't accept connection from tag {tag}"} |
| ) |
| |
| // Vine is the interface to a vine service that can dynamically change the network |
| // behavior of connection's on the vine service's process. |
| type Vine interface { |
| // SetBehaviors sets the policy that the accepting vine service's process |
| // will use on connections. |
| // behaviors is a map from server tag to the desired connection behavior. |
| // For example, |
| // client.SetBehaviors(map[PeerKey]PeerBehavior{PeerKey{"foo", "bar"}, PeerBehavior{Reachable: false}}) |
| // will cause all vine protocol dial calls from "foo" to "bar" to fail. |
| SetBehaviors(behaviors map[PeerKey]PeerBehavior) error |
| } |
| |
| // PeerKey is a key that represents a connection from a Dialer tag to an Acceptor tag. |
| type PeerKey struct{ |
| Dialer string |
| Acceptor string |
| } |
| |
| // PeerBehavior specifies characteristics of a connection. |
| type PeerBehavior struct { |
| // Reachable specifies whether the outgoing or incoming connection can be |
| // dialed or accepted. |
| // TODO(suharshs): Make this a user defined error which vine will return instead of a bool. |
| Reachable bool |
| // Discoverable specifies whether the Dialer can advertise a discovery packet |
| // to the Acceptor. This is useful for emulating neighborhoods. |
| // TODO(suharshs): Discoverable should always be bidirectional. It is unrealistic for |
| // A to discover B, but not vice versa. |
| Discoverable bool |
| } |