Documentation ¶
Index ¶
- Constants
- Variables
- func PacketHash(data []byte) []byte
- type Handler
- type HandlerFunc
- type MType
- type Message
- type NetConn
- type Protocol
- type Sender
- type Server
- func (s *Server) Close()
- func (s *Server) IsExpectedReply(fromIP net.IP, fromID identity.ID, msg Message) bool
- func (s *Server) Local() *peer.Local
- func (s *Server) LocalAddr() *net.UDPAddr
- func (s *Server) Send(toAddr *net.UDPAddr, data []byte)
- func (s *Server) SendExpectingReply(toAddr *net.UDPAddr, toID identity.ID, data []byte, replyType MType, ...) <-chan error
Constants ¶
const ( // MaxPacketSize specifies the maximum allowed size of packets. // Packets larger than this will be cut and thus treated as invalid. MaxPacketSize = 1280 )
const ( // ResponseTimeout specifies the time limit after which a response must have been received. ResponseTimeout = 500 * time.Millisecond )
Variables ¶
var ( // ErrTimeout is returned when an expected response was not received in time. ErrTimeout = errors.New("response timeout") // ErrClosed means that the server was shut down before a response could be received. ErrClosed = errors.New("socket closed") // ErrNoMessage is returned when the package did not contain any data. ErrNoMessage = errors.New("packet does not contain a message") // ErrInvalidMessage means that no handler could process the received message. ErrInvalidMessage = errors.New("invalid message") )
Functions ¶
Types ¶
type Handler ¶
type Handler interface { // HandleMessage is called for each incoming message. // It returns true, if that particular message type can be processed by the current Handler. HandleMessage(s *Server, fromAddr *net.UDPAddr, from *identity.Identity, data []byte) (bool, error) }
A Handler reacts to an incoming message.
type HandlerFunc ¶
The HandlerFunc type is an adapter to allow the use of ordinary functions as Server handlers. If f is a function with the appropriate signature, HandlerFunc(f) is a Handler that calls f.
type Message ¶
type Message interface { proto.Message // Type returns the type of the corresponding message as an enum. Type() MType }
Message extends the proto.testMessage interface with additional type.
type NetConn ¶
type NetConn interface { // Close closes the connection. Close() error // LocalAddr returns the local network address. LocalAddr() net.Addr // ReadFromUDP acts like ReadFrom but returns a UDPAddr. ReadFromUDP([]byte) (int, *net.UDPAddr, error) // WriteToUDP acts like WriteTo but takes a UDPAddr. WriteToUDP([]byte, *net.UDPAddr) (int, error) }
NetConn defines the interface required for a connection.
type Protocol ¶
type Protocol struct {
Sender Sender // interface to send own requests
}
Protocol provides a basis for server protocols handling incoming messages.
func (*Protocol) IsExpired ¶
IsExpired checks whether the given UNIX time stamp is too far in the past.
func (*Protocol) SendExpectingReply ¶
func (p *Protocol) SendExpectingReply(dstAddr *net.UDPAddr, toID identity.ID, data []byte, replyType MType, callback func(Message) bool) <-chan error
SendExpectingReply sends request data to a peer and expects a response of the given type. On an incoming matching request the callback is executed to perform additional verification steps.
type Sender ¶
type Sender interface { Send(toAddr *net.UDPAddr, data []byte) SendExpectingReply(toAddr *net.UDPAddr, toID identity.ID, data []byte, replyType MType, callback func(Message) bool) <-chan error }
The Sender interface specifies common method required to send requests.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server offers the functionality to start a server that handles requests and responses from peers.
func Serve ¶
Serve starts a new peer server using the given transport layer for communication. Sent data is signed using the identity of the local peer, received data with a valid peer signature is handled according to the provided Handler.
func (*Server) IsExpectedReply ¶
IsExpectedReply checks whether the given testMessage matches an expected reply added with SendExpectingReply.
func (*Server) SendExpectingReply ¶
func (s *Server) SendExpectingReply(toAddr *net.UDPAddr, toID identity.ID, data []byte, replyType MType, callback func(Message) bool) <-chan error
SendExpectingReply sends a message to the given address and tells the Server to expect a reply message with the given specifications. If eventually nil is returned, a matching message was received.