protocol

package
v0.10.20 Latest Latest
Warning

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

Go to latest
Published: Jan 13, 2015 License: MIT, GPL-3.0 Imports: 20 Imported by: 0

README

The BEPv1 Protocol

Latest Build API Documentation MIT License

This is the protocol implementation used by Syncthing.

License

MIT

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
	FlagSymlink                     = 1 << 16
	FlagSymlinkMissingTarget        = 1 << 17

	SymlinkTypeMask = FlagDirectory | FlagSymlinkMissingTarget
)
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 LocalDeviceID = DeviceID{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 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, error)

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, error)

func (BlockInfo) MustMarshalXDR

func (o BlockInfo) MustMarshalXDR() []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
	Code   uint32
}

func (CloseMessage) AppendXDR

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

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, error)

func (CloseMessage) MustMarshalXDR

func (o CloseMessage) MustMarshalXDR() []byte

func (*CloseMessage) UnmarshalXDR

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

type ClusterConfigMessage

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

func (ClusterConfigMessage) AppendXDR

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

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, error)

func (ClusterConfigMessage) MustMarshalXDR

func (o ClusterConfigMessage) MustMarshalXDR() []byte

func (*ClusterConfigMessage) UnmarshalXDR

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

type Connection

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

func NewConnection

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

type Device

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

func (Device) AppendXDR

func (o Device) AppendXDR(bs []byte) ([]byte, error)

func (*Device) DecodeXDR

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

func (Device) EncodeXDR

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

func (Device) MarshalXDR

func (o Device) MarshalXDR() ([]byte, error)

func (Device) MustMarshalXDR

func (o Device) MustMarshalXDR() []byte

func (*Device) UnmarshalXDR

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

type DeviceID

type DeviceID [32]byte

func DeviceIDFromBytes

func DeviceIDFromBytes(bs []byte) DeviceID

func DeviceIDFromString

func DeviceIDFromString(s string) (DeviceID, error)

func NewDeviceID

func NewDeviceID(rawCert []byte) DeviceID

NewDeviceID generates a new device ID from the raw bytes of a certificate

func (DeviceID) Compare

func (n DeviceID) Compare(other DeviceID) int

func (DeviceID) Equals

func (n DeviceID) Equals(other DeviceID) bool

func (DeviceID) GoString

func (n DeviceID) GoString() string

func (*DeviceID) MarshalText

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

func (DeviceID) String

func (n DeviceID) String() string

String returns the canonical string representation of the device ID

func (*DeviceID) UnmarshalText

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

type EmptyMessage

type EmptyMessage struct{}

func (EmptyMessage) AppendXDR

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

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, error)

func (EmptyMessage) MustMarshalXDR

func (o EmptyMessage) MustMarshalXDR() []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, error)

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) HasPermissionBits

func (f FileInfo) HasPermissionBits() bool

func (FileInfo) IsDeleted

func (f FileInfo) IsDeleted() bool

func (FileInfo) IsDirectory

func (f FileInfo) IsDirectory() bool

func (FileInfo) IsInvalid

func (f FileInfo) IsInvalid() bool
func (f FileInfo) IsSymlink() bool

func (FileInfo) MarshalXDR

func (o FileInfo) MarshalXDR() ([]byte, error)

func (FileInfo) MustMarshalXDR

func (o FileInfo) MustMarshalXDR() []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 Folder

type Folder struct {
	ID      string // max:64
	Devices []Device
}

func (Folder) AppendXDR

func (o Folder) AppendXDR(bs []byte) ([]byte, error)

func (*Folder) DecodeXDR

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

func (Folder) EncodeXDR

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

func (Folder) MarshalXDR

func (o Folder) MarshalXDR() ([]byte, error)

func (Folder) MustMarshalXDR

func (o Folder) MustMarshalXDR() []byte

func (*Folder) UnmarshalXDR

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

type IndexMessage

type IndexMessage struct {
	Folder  string // max:64
	Files   []FileInfo
	Flags   uint32
	Options []Option // max:64
}

func (IndexMessage) AppendXDR

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

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, error)

func (IndexMessage) MustMarshalXDR

func (o IndexMessage) MustMarshalXDR() []byte

func (*IndexMessage) UnmarshalXDR

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

type Model

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

type Option

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

func (Option) AppendXDR

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

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, error)

func (Option) MustMarshalXDR

func (o Option) MustMarshalXDR() []byte

func (*Option) UnmarshalXDR

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

type RequestMessage

type RequestMessage struct {
	Folder  string // max:64
	Name    string // max:8192
	Offset  uint64
	Size    uint32
	Hash    []byte // max:64
	Flags   uint32
	Options []Option // max:64
}

func (RequestMessage) AppendXDR

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

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, error)

func (RequestMessage) MustMarshalXDR

func (o RequestMessage) MustMarshalXDR() []byte

func (*RequestMessage) UnmarshalXDR

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

type ResponseMessage

type ResponseMessage struct {
	Data  []byte
	Error uint32
}

func (ResponseMessage) AppendXDR

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

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, error)

func (ResponseMessage) MustMarshalXDR

func (o ResponseMessage) MustMarshalXDR() []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