| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253 |
- package rpc
-
- import (
- "bytes"
- "errors"
- "fmt"
- )
-
- type HandshakeResponse struct {
- Type []byte
- Flags []byte
- SenderPID []byte
- PeerPID []byte
- }
-
- // Bytes returns a serialized handshake response.
- func (r *HandshakeResponse) Bytes() []byte {
- buf := &bytes.Buffer{}
-
- buf.Write(r.Type) // nolint: gosec
- buf.Write(r.Flags) // nolint: gosec
- buf.Write(r.SenderPID) // nolint: gosec
- buf.Write(r.PeerPID) // nolint: gosec
-
- return buf.Bytes()
- }
-
- // Valid checks that handshake response compliments request.
- func (r *HandshakeResponse) Valid() error {
- if !bytes.Equal(r.Type, TagHandshake) {
- return errors.New("Unexpected handshake tag")
- }
- if !bytes.Equal(r.PeerPID, HandshakeSenderPID) {
- return errors.New("Incorrect sender PID")
- }
-
- return nil
- }
-
- // NewHandshakeResponse constructs new handshake response from the given
- // data.
- func NewHandshakeResponse(data []byte) (*HandshakeResponse, error) {
- if len(data) != 32 {
- return nil, fmt.Errorf("Incorrect handshake response length %d", len(data))
- }
-
- return &HandshakeResponse{
- Type: data[:4],
- Flags: data[4:8],
- SenderPID: data[8:20],
- PeerPID: data[20:],
- }, nil
- }
|