protocol

package
v0.10.0-beta1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 27, 2014 License: MIT Imports: 19 Imported by: 0

Documentation

Overview

Package protocol implements the Block Exchange Protocol.

Index

Constants

View Source
const (
	FlagDeleted    uint32 = 1 << 12
	FlagInvalid           = 1 << 13
	FlagDirectory         = 1 << 14
	FlagNoPermBits        = 1 << 15
)
View Source
const (
	FlagShareTrusted  uint32 = 1 << 0
	FlagShareReadOnly        = 1 << 1
	FlagIntroducer           = 1 << 2
	FlagShareBits            = 0x000000ff
)
View Source
const (
	BlockSize = 128 * 1024
)

Variables

View Source
var (
	ErrClusterHash = fmt.Errorf("configuration error: mismatched cluster hash")
	ErrClosed      = errors.New("connection closed")
)
View Source
var LocalNodeID = NodeID{0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff}

Functions

func HasPermissionBits

func HasPermissionBits(bits uint32) bool

func IsDeleted

func IsDeleted(bits uint32) bool

func IsDirectory

func IsDirectory(bits uint32) bool

func IsInvalid

func IsInvalid(bits uint32) bool

func TotalInOut

func TotalInOut() (uint64, uint64)

Types

type BlockInfo

type BlockInfo struct {
	Offset int64 // noencode (cache only)
	Size   uint32
	Hash   []byte // max:64
}

func (BlockInfo) AppendXDR

func (o BlockInfo) AppendXDR(bs []byte) []byte

func (*BlockInfo) DecodeXDR

func (o *BlockInfo) DecodeXDR(r io.Reader) error

func (BlockInfo) EncodeXDR

func (o BlockInfo) EncodeXDR(w io.Writer) (int, error)

func (BlockInfo) MarshalXDR

func (o BlockInfo) MarshalXDR() []byte

func (BlockInfo) String

func (b BlockInfo) String() string

func (*BlockInfo) UnmarshalXDR

func (o *BlockInfo) UnmarshalXDR(bs []byte) error

type CloseMessage

type CloseMessage struct {
	Reason string // max:1024
}

func (CloseMessage) AppendXDR

func (o CloseMessage) AppendXDR(bs []byte) []byte

func (*CloseMessage) DecodeXDR

func (o *CloseMessage) DecodeXDR(r io.Reader) error

func (CloseMessage) EncodeXDR

func (o CloseMessage) EncodeXDR(w io.Writer) (int, error)

func (CloseMessage) MarshalXDR

func (o CloseMessage) MarshalXDR() []byte

func (*CloseMessage) UnmarshalXDR

func (o *CloseMessage) UnmarshalXDR(bs []byte) error

type ClusterConfigMessage

type ClusterConfigMessage struct {
	ClientName    string       // max:64
	ClientVersion string       // max:64
	Repositories  []Repository // max:64
	Options       []Option     // max:64
}

func (ClusterConfigMessage) AppendXDR

func (o ClusterConfigMessage) AppendXDR(bs []byte) []byte

func (*ClusterConfigMessage) DecodeXDR

func (o *ClusterConfigMessage) DecodeXDR(r io.Reader) error

func (ClusterConfigMessage) EncodeXDR

func (o ClusterConfigMessage) EncodeXDR(w io.Writer) (int, error)

func (*ClusterConfigMessage) GetOption

func (o *ClusterConfigMessage) GetOption(key string) string

func (ClusterConfigMessage) MarshalXDR

func (o ClusterConfigMessage) MarshalXDR() []byte

func (*ClusterConfigMessage) UnmarshalXDR

func (o *ClusterConfigMessage) UnmarshalXDR(bs []byte) error

type Connection

type Connection interface {
	ID() NodeID
	Name() string
	Index(repo string, files []FileInfo) error
	IndexUpdate(repo string, files []FileInfo) error
	Request(repo string, name string, offset int64, size int) ([]byte, error)
	ClusterConfig(config ClusterConfigMessage)
	Statistics() Statistics
}

func NewConnection

func NewConnection(nodeID NodeID, reader io.Reader, writer io.Writer, receiver Model, name string, compress bool) Connection

type EmptyMessage

type EmptyMessage struct{}

func (EmptyMessage) AppendXDR

func (o EmptyMessage) AppendXDR(bs []byte) []byte

func (*EmptyMessage) DecodeXDR

func (o *EmptyMessage) DecodeXDR(r io.Reader) error

func (EmptyMessage) EncodeXDR

func (o EmptyMessage) EncodeXDR(w io.Writer) (int, error)

func (EmptyMessage) MarshalXDR

func (o EmptyMessage) MarshalXDR() []byte

func (*EmptyMessage) UnmarshalXDR

func (o *EmptyMessage) UnmarshalXDR(bs []byte) error

type FileInfo

type FileInfo struct {
	Name         string // max:8192
	Flags        uint32
	Modified     int64
	Version      uint64
	LocalVersion uint64
	Blocks       []BlockInfo
}

func (FileInfo) AppendXDR

func (o FileInfo) AppendXDR(bs []byte) []byte

func (*FileInfo) DecodeXDR

func (o *FileInfo) DecodeXDR(r io.Reader) error

func (FileInfo) EncodeXDR

func (o FileInfo) EncodeXDR(w io.Writer) (int, error)

func (FileInfo) IsDeleted

func (f FileInfo) IsDeleted() bool

func (FileInfo) IsInvalid

func (f FileInfo) IsInvalid() bool

func (FileInfo) MarshalXDR

func (o FileInfo) MarshalXDR() []byte

func (FileInfo) Size

func (f FileInfo) Size() (bytes int64)

func (FileInfo) String

func (f FileInfo) String() string

func (*FileInfo) UnmarshalXDR

func (o *FileInfo) UnmarshalXDR(bs []byte) error

type FileInfoTruncated

type FileInfoTruncated struct {
	Name         string // max:8192
	Flags        uint32
	Modified     int64
	Version      uint64
	LocalVersion uint64
	NumBlocks    uint32
}

Used for unmarshalling a FileInfo structure but skipping the actual block list

func (FileInfoTruncated) AppendXDR

func (o FileInfoTruncated) AppendXDR(bs []byte) []byte

func (*FileInfoTruncated) DecodeXDR

func (o *FileInfoTruncated) DecodeXDR(r io.Reader) error

func (FileInfoTruncated) EncodeXDR

func (o FileInfoTruncated) EncodeXDR(w io.Writer) (int, error)

func (FileInfoTruncated) IsDeleted

func (f FileInfoTruncated) IsDeleted() bool

func (FileInfoTruncated) IsInvalid

func (f FileInfoTruncated) IsInvalid() bool

func (FileInfoTruncated) MarshalXDR

func (o FileInfoTruncated) MarshalXDR() []byte

func (FileInfoTruncated) Size

func (f FileInfoTruncated) Size() int64

Returns a statistical guess on the size, not the exact figure

func (*FileInfoTruncated) UnmarshalXDR

func (o *FileInfoTruncated) UnmarshalXDR(bs []byte) error

type FileIntf

type FileIntf interface {
	Size() int64
	IsDeleted() bool
	IsInvalid() bool
}

type IndexMessage

type IndexMessage struct {
	Repository string // max:64
	Files      []FileInfo
}

func (IndexMessage) AppendXDR

func (o IndexMessage) AppendXDR(bs []byte) []byte

func (*IndexMessage) DecodeXDR

func (o *IndexMessage) DecodeXDR(r io.Reader) error

func (IndexMessage) EncodeXDR

func (o IndexMessage) EncodeXDR(w io.Writer) (int, error)

func (IndexMessage) MarshalXDR

func (o IndexMessage) MarshalXDR() []byte

func (*IndexMessage) UnmarshalXDR

func (o *IndexMessage) UnmarshalXDR(bs []byte) error

type Model

type Model interface {
	// An index was received from the peer node
	Index(nodeID NodeID, repo string, files []FileInfo)
	// An index update was received from the peer node
	IndexUpdate(nodeID NodeID, repo string, files []FileInfo)
	// A request was made by the peer node
	Request(nodeID NodeID, repo string, name string, offset int64, size int) ([]byte, error)
	// A cluster configuration message was received
	ClusterConfig(nodeID NodeID, config ClusterConfigMessage)
	// The peer node closed the connection
	Close(nodeID NodeID, err error)
}

type Node

type Node struct {
	ID              []byte // max:32
	Flags           uint32
	MaxLocalVersion uint64
}

func (Node) AppendXDR

func (o Node) AppendXDR(bs []byte) []byte

func (*Node) DecodeXDR

func (o *Node) DecodeXDR(r io.Reader) error

func (Node) EncodeXDR

func (o Node) EncodeXDR(w io.Writer) (int, error)

func (Node) MarshalXDR

func (o Node) MarshalXDR() []byte

func (*Node) UnmarshalXDR

func (o *Node) UnmarshalXDR(bs []byte) error

type NodeID

type NodeID [32]byte

func NewNodeID

func NewNodeID(rawCert []byte) NodeID

NewNodeID generates a new node ID from the raw bytes of a certificate

func NodeIDFromBytes

func NodeIDFromBytes(bs []byte) NodeID

func NodeIDFromString

func NodeIDFromString(s string) (NodeID, error)

func (NodeID) Compare

func (n NodeID) Compare(other NodeID) int

func (NodeID) Equals

func (n NodeID) Equals(other NodeID) bool

func (NodeID) GoString

func (n NodeID) GoString() string

func (*NodeID) MarshalText

func (n *NodeID) MarshalText() ([]byte, error)

func (NodeID) String

func (n NodeID) String() string

String returns the canonical string representation of the node ID

func (*NodeID) UnmarshalText

func (n *NodeID) UnmarshalText(bs []byte) error

type Option

type Option struct {
	Key   string // max:64
	Value string // max:1024
}

func (Option) AppendXDR

func (o Option) AppendXDR(bs []byte) []byte

func (*Option) DecodeXDR

func (o *Option) DecodeXDR(r io.Reader) error

func (Option) EncodeXDR

func (o Option) EncodeXDR(w io.Writer) (int, error)

func (Option) MarshalXDR

func (o Option) MarshalXDR() []byte

func (*Option) UnmarshalXDR

func (o *Option) UnmarshalXDR(bs []byte) error

type Repository

type Repository struct {
	ID    string // max:64
	Nodes []Node // max:64
}

func (Repository) AppendXDR

func (o Repository) AppendXDR(bs []byte) []byte

func (*Repository) DecodeXDR

func (o *Repository) DecodeXDR(r io.Reader) error

func (Repository) EncodeXDR

func (o Repository) EncodeXDR(w io.Writer) (int, error)

func (Repository) MarshalXDR

func (o Repository) MarshalXDR() []byte

func (*Repository) UnmarshalXDR

func (o *Repository) UnmarshalXDR(bs []byte) error

type RequestMessage

type RequestMessage struct {
	Repository string // max:64
	Name       string // max:8192
	Offset     uint64
	Size       uint32
}

func (RequestMessage) AppendXDR

func (o RequestMessage) AppendXDR(bs []byte) []byte

func (*RequestMessage) DecodeXDR

func (o *RequestMessage) DecodeXDR(r io.Reader) error

func (RequestMessage) EncodeXDR

func (o RequestMessage) EncodeXDR(w io.Writer) (int, error)

func (RequestMessage) MarshalXDR

func (o RequestMessage) MarshalXDR() []byte

func (*RequestMessage) UnmarshalXDR

func (o *RequestMessage) UnmarshalXDR(bs []byte) error

type ResponseMessage

type ResponseMessage struct {
	Data []byte
}

func (ResponseMessage) AppendXDR

func (o ResponseMessage) AppendXDR(bs []byte) []byte

func (*ResponseMessage) DecodeXDR

func (o *ResponseMessage) DecodeXDR(r io.Reader) error

func (ResponseMessage) EncodeXDR

func (o ResponseMessage) EncodeXDR(w io.Writer) (int, error)

func (ResponseMessage) MarshalXDR

func (o ResponseMessage) MarshalXDR() []byte

func (*ResponseMessage) UnmarshalXDR

func (o *ResponseMessage) UnmarshalXDR(bs []byte) error

type Statistics

type Statistics struct {
	At            time.Time
	InBytesTotal  uint64
	OutBytesTotal uint64
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL