Documentation ¶
Overview ¶
Package relay implements relay client/server interactive data structures, the Mesh Encrypted Routing Protocol.
Package relay is a generated GoMock package.
Index ¶
- Constants
- func NewClientTransporter(server protocol.RelayServer, credentials []byte, nodeDHKey noise.DHKey, ...) *clientTransporterImpl
- type Client
- type ClientCallback
- type ClientHandler
- type ClientTransporter
- type ClientTransporterState
- type Event
- type EventClientClosed
- type EventClientConnected
- type EventType
- type Manager
- func (m *Manager) AddServer(relayServer protocol.RelayServer)
- func (m *Manager) Events() <-chan Event
- func (m *Manager) PrimaryRelayServerClient() *Client
- func (m *Manager) PrimaryServerID() protocol.ServerID
- func (m *Manager) RelayServerClient(id protocol.ServerID) *Client
- func (m *Manager) SetCredential(credential []byte)
- func (m *Manager) SetPrimaryServerID(id protocol.ServerID)
- func (m *Manager) Stop()
- func (m *Manager) Tick(ctx context.Context)
- func (m *Manager) Update(ctx context.Context, relayServers []protocol.RelayServer)
- type MockSessionTransporter
- func (m *MockSessionTransporter) Cipher() noise.Cipher
- func (m *MockSessionTransporter) Close() error
- func (m *MockSessionTransporter) EXPECT() *MockSessionTransporterMockRecorder
- func (m *MockSessionTransporter) PublicKey() []byte
- func (m *MockSessionTransporter) Read(ctx context.Context)
- func (m *MockSessionTransporter) ReadQueue() <-chan codec.RawPacket
- func (m *MockSessionTransporter) SetCipher(cipher noise.Cipher)
- func (m *MockSessionTransporter) SetPublicKey(pk []byte)
- func (m *MockSessionTransporter) Write(ctx context.Context)
- func (m *MockSessionTransporter) WriteQueue() chan<- Packet
- type MockSessionTransporterMockRecorder
- func (mr *MockSessionTransporterMockRecorder) Cipher() *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) Close() *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) PublicKey() *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) Read(ctx interface{}) *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) ReadQueue() *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) SetCipher(cipher interface{}) *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) SetPublicKey(pk interface{}) *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) Write(ctx interface{}) *gomock.Call
- func (mr *MockSessionTransporterMockRecorder) WriteQueue() *gomock.Call
- type Packet
- type PacketCallback
- type PeerRouter
- type ReadResult
- type Server
- func (s *Server) Close() error
- func (s *Server) DHKey() noise.DHKey
- func (s *Server) ForeachSession(fn func(*Session))
- func (s *Server) Handler() SessionHandler
- func (s *Server) HeartbeatInterval() time.Duration
- func (s *Server) OnSessionClosed(ses *Session)
- func (s *Server) OnSessionHandshake(ses *Session)
- func (s *Server) RSAPublicKey() *rsa.PublicKey
- func (s *Server) Serve(ctx context.Context) error
- func (s *Server) Session(peerID protocol.PeerID) *Session
- func (s *Server) SetRSAPublicKey(key *rsa.PublicKey)
- type Session
- func (s *Session) Close() error
- func (s *Session) IsPrimary() bool
- func (s *Session) LifetimeHook() SessionLifetimeHook
- func (s *Session) PeerID() protocol.PeerID
- func (s *Session) Send(typ message.PacketType, msg proto.Message) error
- func (s *Session) Serve(ctx context.Context, wg *sync.WaitGroup)
- func (s *Session) SetHeartbeatAt(t time.Time)
- func (s *Session) SetIsPrimary(is bool)
- func (s *Session) SetPeerID(peerID protocol.PeerID)
- func (s *Session) SetState(state SessionState)
- func (s *Session) SetSyncAt(t time.Time)
- func (s *Session) SetUserID(userID protocol.UserID)
- func (s *Session) SetVAddress(addr net.IP)
- func (s *Session) State() SessionState
- func (s *Session) String() string
- func (s *Session) SyncAt() time.Time
- func (s *Session) UserID() protocol.UserID
- func (s *Session) VAddress() net.IP
- type SessionCallback
- type SessionHandler
- type SessionLifetimeHook
- type SessionManager
- type SessionState
- type SessionTransporter
- type WriteRequest
Constants ¶
const ( MaxPacketSize = 64 << 10 // ProtocolVersion is bumped whenever there's a wire-incompatible change. // * version 1: received packets have src addrs in frameRecvPacket at beginning ProtocolVersion = 1 )
MaxPacketSize is the maximum size of a packet sent over MERP. (This only includes the data bytes visible to nicesock, not including its on-wire framing overhead)
Variables ¶
This section is empty.
Functions ¶
func NewClientTransporter ¶
Types ¶
type Client ¶
type Client struct { ClientTransporter // contains filtered or unexported fields }
Client represents the relay server client which is used to interactive with relay server.
func NewClient ¶
func NewClient(transporter ClientTransporter) *Client
NewClient returns a new client instance.
func (*Client) Handler ¶
func (c *Client) Handler() ClientHandler
func (*Client) SetLatency ¶
type ClientCallback ¶
type ClientHandler ¶
type ClientHandler interface { On(typ message.PacketType, cb ClientCallback) Handle(s *Client, packet codec.RawPacket) error }
func NewClientHandler ¶
func NewClientHandler() ClientHandler
type ClientTransporter ¶
type ClientTransporter interface { RelayServer() protocol.RelayServer State() ClientTransporterState SetState(s ClientTransporterState) Cipher() noise.Cipher SetCipher(cipher noise.Cipher) SetHeartbeatInterval(interval time.Duration) SetIsPrimary(is bool) HandshakeState() *noise.HandshakeState ReadQueue() <-chan codec.RawPacket WriteQueue() chan<- Packet Connect(ctx context.Context) error Read(ctx context.Context) Write(ctx context.Context) Close() error }
ClientTransporter interface, together with clientTransporterImpl struct, is an abstraction of network IO so that the network behaviors could be mocked.
type ClientTransporterState ¶
type ClientTransporterState byte
const ( ClientTransporterStateInit ClientTransporterState = 0 ClientTransporterStateConnecting ClientTransporterState = 1 ClientTransporterStateConnected ClientTransporterState = 2 )
type EventClientClosed ¶
type EventClientClosed struct { RelayServer protocol.RelayServer Client *Client }
type EventClientConnected ¶
type EventClientConnected struct { RelayServer protocol.RelayServer Client *Client }
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager maintains the relay clients and keep heartbeat with the relay server. When a peer cannot connect to the remote peer, the lowest latency relay server will be used to relay the traffic.
func NewManager ¶
func NewManager(staticKey noise.DHKey, callback PacketCallback) *Manager
NewManager returns the relay manager
func (*Manager) AddServer ¶
func (m *Manager) AddServer(relayServer protocol.RelayServer)
func (*Manager) Events ¶
Events returns a channel which will track clients connected/closed event. Some events will be dropped if the channel is full.
func (*Manager) PrimaryRelayServerClient ¶
PrimaryRelayServerClient returns the primary relay server client of current node. A nil value will be returned if the primary relay server didn't connect.
func (*Manager) PrimaryServerID ¶
PrimaryServerID returns the primary relay server id.
func (*Manager) RelayServerClient ¶
RelayServerClient returns the relay server client corresponding server id. A nil value will be returned if the primary relay server didn't connect.
func (*Manager) SetCredential ¶
func (*Manager) SetPrimaryServerID ¶
SetPrimaryServerID sets the primary relay server id.
func (*Manager) Stop ¶
func (m *Manager) Stop()
Stop stops the relay manager and all the relay clients.
type MockSessionTransporter ¶
type MockSessionTransporter struct {
// contains filtered or unexported fields
}
MockSessionTransporter is a mock of SessionTransporter interface.
func NewMockSessionTransporter ¶
func NewMockSessionTransporter(ctrl *gomock.Controller) *MockSessionTransporter
NewMockSessionTransporter creates a new mock instance.
func (*MockSessionTransporter) Cipher ¶
func (m *MockSessionTransporter) Cipher() noise.Cipher
Cipher mocks base method.
func (*MockSessionTransporter) Close ¶
func (m *MockSessionTransporter) Close() error
Close mocks base method.
func (*MockSessionTransporter) EXPECT ¶
func (m *MockSessionTransporter) EXPECT() *MockSessionTransporterMockRecorder
EXPECT returns an object that allows the caller to indicate expected use.
func (*MockSessionTransporter) PublicKey ¶
func (m *MockSessionTransporter) PublicKey() []byte
PublicKey mocks base method.
func (*MockSessionTransporter) Read ¶
func (m *MockSessionTransporter) Read(ctx context.Context)
Read mocks base method.
func (*MockSessionTransporter) ReadQueue ¶
func (m *MockSessionTransporter) ReadQueue() <-chan codec.RawPacket
ReadQueue mocks base method.
func (*MockSessionTransporter) SetCipher ¶
func (m *MockSessionTransporter) SetCipher(cipher noise.Cipher)
SetCipher mocks base method.
func (*MockSessionTransporter) SetPublicKey ¶
func (m *MockSessionTransporter) SetPublicKey(pk []byte)
SetPublicKey mocks base method.
func (*MockSessionTransporter) Write ¶
func (m *MockSessionTransporter) Write(ctx context.Context)
Write mocks base method.
func (*MockSessionTransporter) WriteQueue ¶
func (m *MockSessionTransporter) WriteQueue() chan<- Packet
WriteQueue mocks base method.
type MockSessionTransporterMockRecorder ¶
type MockSessionTransporterMockRecorder struct {
// contains filtered or unexported fields
}
MockSessionTransporterMockRecorder is the mock recorder for MockSessionTransporter.
func (*MockSessionTransporterMockRecorder) Cipher ¶
func (mr *MockSessionTransporterMockRecorder) Cipher() *gomock.Call
Cipher indicates an expected call of Cipher.
func (*MockSessionTransporterMockRecorder) Close ¶
func (mr *MockSessionTransporterMockRecorder) Close() *gomock.Call
Close indicates an expected call of Close.
func (*MockSessionTransporterMockRecorder) PublicKey ¶
func (mr *MockSessionTransporterMockRecorder) PublicKey() *gomock.Call
PublicKey indicates an expected call of PublicKey.
func (*MockSessionTransporterMockRecorder) Read ¶
func (mr *MockSessionTransporterMockRecorder) Read(ctx interface{}) *gomock.Call
Read indicates an expected call of Read.
func (*MockSessionTransporterMockRecorder) ReadQueue ¶
func (mr *MockSessionTransporterMockRecorder) ReadQueue() *gomock.Call
ReadQueue indicates an expected call of ReadQueue.
func (*MockSessionTransporterMockRecorder) SetCipher ¶
func (mr *MockSessionTransporterMockRecorder) SetCipher(cipher interface{}) *gomock.Call
SetCipher indicates an expected call of SetCipher.
func (*MockSessionTransporterMockRecorder) SetPublicKey ¶
func (mr *MockSessionTransporterMockRecorder) SetPublicKey(pk interface{}) *gomock.Call
SetPublicKey indicates an expected call of SetPublicKey.
func (*MockSessionTransporterMockRecorder) Write ¶
func (mr *MockSessionTransporterMockRecorder) Write(ctx interface{}) *gomock.Call
Write indicates an expected call of Write.
func (*MockSessionTransporterMockRecorder) WriteQueue ¶
func (mr *MockSessionTransporterMockRecorder) WriteQueue() *gomock.Call
WriteQueue indicates an expected call of WriteQueue.
type PacketCallback ¶
type PacketCallback interface { // OnForward handles the messages forwarded by the relay server OnForward(s *Client, typ message.PacketType, msg proto.Message) error OnSyncPeer(s *Client, typ message.PacketType, msg proto.Message) error OnProbeResponse(s *Client, typ message.PacketType, msg proto.Message) error }
type PeerRouter ¶
type ReadResult ¶
type ReadResult struct {
// contains filtered or unexported fields
}
ReadResult is the type sent by runMERPClient to receiveIPv4 when a MERP packet is available.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server represents the relay server, which is used to accept connection incoming from pairmesh relay clients. The server only play the Session manager role: create/remove Session.
func NewServer ¶
func NewServer(addr string, heartbeatInterval time.Duration, dhKey noise.DHKey, publicKey *rsa.PublicKey) *Server
NewServer returns a new Server instance according to the serve vaddress and heartbeat interval.
func (*Server) ForeachSession ¶
func (*Server) Handler ¶
func (s *Server) Handler() SessionHandler
func (*Server) HeartbeatInterval ¶
HeartbeatInterval implements the SessionManager interface.
func (*Server) OnSessionClosed ¶
OnSessionClosed implements the SessionLifetimeHook interface
func (*Server) OnSessionHandshake ¶
OnSessionHandshake implements the SessionLifetimeHook interface
func (*Server) RSAPublicKey ¶
RSAPublicKey implements the handler.SessionManager interface
func (*Server) SetRSAPublicKey ¶
type Session ¶
type Session struct { SessionTransporter // contains filtered or unexported fields }
Session maintains the connection Session between relay server/client.
func (*Session) LifetimeHook ¶
func (s *Session) LifetimeHook() SessionLifetimeHook
func (*Session) SetHeartbeatAt ¶
func (*Session) SetIsPrimary ¶
func (*Session) SetState ¶
func (s *Session) SetState(state SessionState)
SetState sets the session state.
func (*Session) SetVAddress ¶
SetVAddress sets the virtual address allocated by portal service. The virtual address is coming from the credential which is encoded in handshake message and signed by portal service. So it cannot be counterfeit.
func (*Session) State ¶
func (s *Session) State() SessionState
State returns the current session state.
type SessionCallback ¶
type SessionHandler ¶
type SessionHandler interface { On(typ message.PacketType, cb SessionCallback) Handle(s *Session, packet codec.RawPacket) error }
func NewSessionHandler ¶
func NewSessionHandler(sm SessionManager) SessionHandler
type SessionLifetimeHook ¶
type SessionManager ¶
type SessionState ¶
type SessionState byte
const ( SessionStateInit SessionState = 0 SessionStateRunning SessionState = 1 )
type SessionTransporter ¶
type SessionTransporter interface { Cipher() noise.Cipher SetCipher(cipher noise.Cipher) ReadQueue() <-chan codec.RawPacket WriteQueue() chan<- Packet Read(ctx context.Context) Write(ctx context.Context) Close() error }
SessionTransporter interface, together with sessionTransporterImpl struct, is an abstraction of network IO so that the network behaviors could be mocked, and therefore the session and relay server could be better tested.
type WriteRequest ¶
type WriteRequest struct {
// contains filtered or unexported fields
}