| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- package rpc
-
- import (
- "bytes"
-
- "github.com/juju/errors"
- )
-
- // HandshakeResponse defines data structure which is used for storage of
- // handshake response.
- 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(req *HandshakeRequest) 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, errors.New("Incorrect handshake response length")
- }
-
- return &HandshakeResponse{
- Type: data[:4],
- Flags: data[4:8],
- SenderPID: data[8:20],
- PeerPID: data[20:],
- }, nil
- }
|