Documentation
¶
Overview ¶
Package protocol implements the Block Exchange Protocol.
Index ¶
- Constants
- Variables
- func BlockSize(fileSize int64) int
- func BlocksHash(bs []BlockInfo) []byte
- func DecryptBytes(data []byte, key *[keySize]byte) ([]byte, error)
- func FileKey(filename string, folderKey *[keySize]byte) *[keySize]byte
- func IsEncryptedParent(pathComponents []string) bool
- func IsVersionMismatch(err error) bool
- func KeyFromPassword(folderID, password string) *[keySize]byte
- func ModTimeEqual(a, b time.Time, modTimeWindow time.Duration) bool
- func PasswordToken(folderID, password string) []byte
- func PermsEqual(a, b uint32) bool
- func TotalInOut() (int64, int64)
- func VectorHash(v Vector) []byte
- func WinsConflict(f, other FileIntf) bool
- type BlockInfo
- func (*BlockInfo) Descriptor() ([]byte, []int)
- func (b BlockInfo) IsEmpty() bool
- func (m *BlockInfo) Marshal() (dAtA []byte, err error)
- func (m *BlockInfo) MarshalTo(dAtA []byte) (int, error)
- func (m *BlockInfo) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*BlockInfo) ProtoMessage()
- func (m *BlockInfo) ProtoSize() (n int)
- func (m *BlockInfo) Reset()
- func (b BlockInfo) String() string
- func (m *BlockInfo) Unmarshal(dAtA []byte) error
- func (m *BlockInfo) XXX_DiscardUnknown()
- func (m *BlockInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *BlockInfo) XXX_Merge(src proto.Message)
- func (m *BlockInfo) XXX_Size() int
- func (m *BlockInfo) XXX_Unmarshal(b []byte) error
- type Close
- func (*Close) Descriptor() ([]byte, []int)
- func (m *Close) Marshal() (dAtA []byte, err error)
- func (m *Close) MarshalTo(dAtA []byte) (int, error)
- func (m *Close) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Close) ProtoMessage()
- func (m *Close) ProtoSize() (n int)
- func (m *Close) Reset()
- func (m *Close) String() string
- func (m *Close) Unmarshal(dAtA []byte) error
- func (m *Close) XXX_DiscardUnknown()
- func (m *Close) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Close) XXX_Merge(src proto.Message)
- func (m *Close) XXX_Size() int
- func (m *Close) XXX_Unmarshal(b []byte) error
- type ClusterConfig
- func (*ClusterConfig) Descriptor() ([]byte, []int)
- func (m *ClusterConfig) Marshal() (dAtA []byte, err error)
- func (m *ClusterConfig) MarshalTo(dAtA []byte) (int, error)
- func (m *ClusterConfig) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*ClusterConfig) ProtoMessage()
- func (m *ClusterConfig) ProtoSize() (n int)
- func (m *ClusterConfig) Reset()
- func (m *ClusterConfig) String() string
- func (m *ClusterConfig) Unmarshal(dAtA []byte) error
- func (m *ClusterConfig) XXX_DiscardUnknown()
- func (m *ClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *ClusterConfig) XXX_Merge(src proto.Message)
- func (m *ClusterConfig) XXX_Size() int
- func (m *ClusterConfig) XXX_Unmarshal(b []byte) error
- type Compression
- type Connection
- type ConnectionInfo
- type Counter
- func (*Counter) Descriptor() ([]byte, []int)
- func (m *Counter) Marshal() (dAtA []byte, err error)
- func (m *Counter) MarshalTo(dAtA []byte) (int, error)
- func (m *Counter) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Counter) ProtoMessage()
- func (m *Counter) ProtoSize() (n int)
- func (m *Counter) Reset()
- func (m *Counter) String() string
- func (m *Counter) Unmarshal(dAtA []byte) error
- func (m *Counter) XXX_DiscardUnknown()
- func (m *Counter) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Counter) XXX_Merge(src proto.Message)
- func (m *Counter) XXX_Size() int
- func (m *Counter) XXX_Unmarshal(b []byte) error
- type Device
- func (*Device) Descriptor() ([]byte, []int)
- func (m *Device) Marshal() (dAtA []byte, err error)
- func (m *Device) MarshalTo(dAtA []byte) (int, error)
- func (m *Device) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Device) ProtoMessage()
- func (m *Device) ProtoSize() (n int)
- func (m *Device) Reset()
- func (m *Device) String() string
- func (m *Device) Unmarshal(dAtA []byte) error
- func (m *Device) XXX_DiscardUnknown()
- func (m *Device) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Device) XXX_Merge(src proto.Message)
- func (m *Device) XXX_Size() int
- func (m *Device) XXX_Unmarshal(b []byte) error
- type DeviceID
- func (n DeviceID) Compare(other DeviceID) int
- func (n DeviceID) Equals(other DeviceID) bool
- func (n DeviceID) GoString() string
- func (n DeviceID) MarshalText() ([]byte, error)
- func (n *DeviceID) MarshalTo(bs []byte) (int, error)
- func (*DeviceID) ProtoSize() int
- func (n DeviceID) Short() ShortID
- func (n DeviceID) String() string
- func (n *DeviceID) Unmarshal(bs []byte) error
- func (n *DeviceID) UnmarshalText(bs []byte) error
- type DownloadProgress
- func (*DownloadProgress) Descriptor() ([]byte, []int)
- func (m *DownloadProgress) Marshal() (dAtA []byte, err error)
- func (m *DownloadProgress) MarshalTo(dAtA []byte) (int, error)
- func (m *DownloadProgress) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*DownloadProgress) ProtoMessage()
- func (m *DownloadProgress) ProtoSize() (n int)
- func (m *DownloadProgress) Reset()
- func (m *DownloadProgress) String() string
- func (m *DownloadProgress) Unmarshal(dAtA []byte) error
- func (m *DownloadProgress) XXX_DiscardUnknown()
- func (m *DownloadProgress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *DownloadProgress) XXX_Merge(src proto.Message)
- func (m *DownloadProgress) XXX_Size() int
- func (m *DownloadProgress) XXX_Unmarshal(b []byte) error
- type ErrorCode
- type FileDownloadProgressUpdate
- func (*FileDownloadProgressUpdate) Descriptor() ([]byte, []int)
- func (m *FileDownloadProgressUpdate) Marshal() (dAtA []byte, err error)
- func (m *FileDownloadProgressUpdate) MarshalTo(dAtA []byte) (int, error)
- func (m *FileDownloadProgressUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*FileDownloadProgressUpdate) ProtoMessage()
- func (m *FileDownloadProgressUpdate) ProtoSize() (n int)
- func (m *FileDownloadProgressUpdate) Reset()
- func (m *FileDownloadProgressUpdate) String() string
- func (m *FileDownloadProgressUpdate) Unmarshal(dAtA []byte) error
- func (m *FileDownloadProgressUpdate) XXX_DiscardUnknown()
- func (m *FileDownloadProgressUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *FileDownloadProgressUpdate) XXX_Merge(src proto.Message)
- func (m *FileDownloadProgressUpdate) XXX_Size() int
- func (m *FileDownloadProgressUpdate) XXX_Unmarshal(b []byte) error
- type FileDownloadProgressUpdateType
- type FileInfo
- func (f FileInfo) BlockSize() int
- func (f FileInfo) BlocksEqual(other FileInfo) bool
- func (*FileInfo) Descriptor() ([]byte, []int)
- func (f FileInfo) FileLocalFlags() uint32
- func (f FileInfo) FileModifiedBy() ShortID
- func (f FileInfo) FileName() string
- func (f FileInfo) FilePermissions() uint32
- func (f FileInfo) FileSize() int64
- func (f FileInfo) FileType() FileInfoType
- func (f FileInfo) FileVersion() Vector
- func (f FileInfo) HasPermissionBits() bool
- func (f FileInfo) IsDeleted() bool
- func (f FileInfo) IsDirectory() bool
- func (f FileInfo) IsEquivalent(other FileInfo, modTimeWindow time.Duration) bool
- func (f FileInfo) IsEquivalentOptional(other FileInfo, comp FileInfoComparison) bool
- func (f FileInfo) IsIgnored() bool
- func (f FileInfo) IsInvalid() bool
- func (f FileInfo) IsReceiveOnlyChanged() bool
- func (f FileInfo) IsSymlink() bool
- func (f FileInfo) IsUnsupported() bool
- func (m *FileInfo) Marshal() (dAtA []byte, err error)
- func (m *FileInfo) MarshalTo(dAtA []byte) (int, error)
- func (m *FileInfo) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (f FileInfo) ModTime() time.Time
- func (f FileInfo) MustRescan() bool
- func (*FileInfo) ProtoMessage()
- func (m *FileInfo) ProtoSize() (n int)
- func (m *FileInfo) Reset()
- func (f FileInfo) SequenceNo() int64
- func (f *FileInfo) SetDeleted(by ShortID)
- func (f *FileInfo) SetIgnored()
- func (f *FileInfo) SetMustRescan()
- func (f *FileInfo) SetUnsupported()
- func (f FileInfo) ShouldConflict() bool
- func (f FileInfo) String() string
- func (m *FileInfo) Unmarshal(dAtA []byte) error
- func (m *FileInfo) XXX_DiscardUnknown()
- func (m *FileInfo) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *FileInfo) XXX_Merge(src proto.Message)
- func (m *FileInfo) XXX_Size() int
- func (m *FileInfo) XXX_Unmarshal(b []byte) error
- type FileInfoComparison
- type FileInfoType
- type FileIntf
- type Folder
- func (f Folder) Description() string
- func (*Folder) Descriptor() ([]byte, []int)
- func (m *Folder) Marshal() (dAtA []byte, err error)
- func (m *Folder) MarshalTo(dAtA []byte) (int, error)
- func (m *Folder) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Folder) ProtoMessage()
- func (m *Folder) ProtoSize() (n int)
- func (m *Folder) Reset()
- func (m *Folder) String() string
- func (m *Folder) Unmarshal(dAtA []byte) error
- func (m *Folder) XXX_DiscardUnknown()
- func (m *Folder) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Folder) XXX_Merge(src proto.Message)
- func (m *Folder) XXX_Size() int
- func (m *Folder) XXX_Unmarshal(b []byte) error
- type Header
- func (*Header) Descriptor() ([]byte, []int)
- func (m *Header) Marshal() (dAtA []byte, err error)
- func (m *Header) MarshalTo(dAtA []byte) (int, error)
- func (m *Header) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Header) ProtoMessage()
- func (m *Header) ProtoSize() (n int)
- func (m *Header) Reset()
- func (m *Header) String() string
- func (m *Header) Unmarshal(dAtA []byte) error
- func (m *Header) XXX_DiscardUnknown()
- func (m *Header) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Header) XXX_Merge(src proto.Message)
- func (m *Header) XXX_Size() int
- func (m *Header) XXX_Unmarshal(b []byte) error
- type Hello
- func (*Hello) Descriptor() ([]byte, []int)
- func (Hello) Magic() uint32
- func (m *Hello) Marshal() (dAtA []byte, err error)
- func (m *Hello) MarshalTo(dAtA []byte) (int, error)
- func (m *Hello) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Hello) ProtoMessage()
- func (m *Hello) ProtoSize() (n int)
- func (m *Hello) Reset()
- func (m *Hello) String() string
- func (m *Hello) Unmarshal(dAtA []byte) error
- func (m *Hello) XXX_DiscardUnknown()
- func (m *Hello) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Hello) XXX_Merge(src proto.Message)
- func (m *Hello) XXX_Size() int
- func (m *Hello) XXX_Unmarshal(b []byte) error
- type HelloIntf
- type Index
- func (*Index) Descriptor() ([]byte, []int)
- func (m *Index) Marshal() (dAtA []byte, err error)
- func (m *Index) MarshalTo(dAtA []byte) (int, error)
- func (m *Index) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Index) ProtoMessage()
- func (m *Index) ProtoSize() (n int)
- func (m *Index) Reset()
- func (m *Index) String() string
- func (m *Index) Unmarshal(dAtA []byte) error
- func (m *Index) XXX_DiscardUnknown()
- func (m *Index) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Index) XXX_Merge(src proto.Message)
- func (m *Index) XXX_Size() int
- func (m *Index) XXX_Unmarshal(b []byte) error
- type IndexID
- type IndexUpdate
- func (*IndexUpdate) Descriptor() ([]byte, []int)
- func (m *IndexUpdate) Marshal() (dAtA []byte, err error)
- func (m *IndexUpdate) MarshalTo(dAtA []byte) (int, error)
- func (m *IndexUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*IndexUpdate) ProtoMessage()
- func (m *IndexUpdate) ProtoSize() (n int)
- func (m *IndexUpdate) Reset()
- func (m *IndexUpdate) String() string
- func (m *IndexUpdate) Unmarshal(dAtA []byte) error
- func (m *IndexUpdate) XXX_DiscardUnknown()
- func (m *IndexUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *IndexUpdate) XXX_Merge(src proto.Message)
- func (m *IndexUpdate) XXX_Size() int
- func (m *IndexUpdate) XXX_Unmarshal(b []byte) error
- type MessageCompression
- type MessageType
- type Model
- type Ordering
- type Ping
- func (*Ping) Descriptor() ([]byte, []int)
- func (m *Ping) Marshal() (dAtA []byte, err error)
- func (m *Ping) MarshalTo(dAtA []byte) (int, error)
- func (m *Ping) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Ping) ProtoMessage()
- func (m *Ping) ProtoSize() (n int)
- func (m *Ping) Reset()
- func (m *Ping) String() string
- func (m *Ping) Unmarshal(dAtA []byte) error
- func (m *Ping) XXX_DiscardUnknown()
- func (m *Ping) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Ping) XXX_Merge(src proto.Message)
- func (m *Ping) XXX_Size() int
- func (m *Ping) XXX_Unmarshal(b []byte) error
- type PlatformData
- func (*PlatformData) Descriptor() ([]byte, []int)
- func (m *PlatformData) Marshal() (dAtA []byte, err error)
- func (m *PlatformData) MarshalTo(dAtA []byte) (int, error)
- func (m *PlatformData) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*PlatformData) ProtoMessage()
- func (m *PlatformData) ProtoSize() (n int)
- func (m *PlatformData) Reset()
- func (m *PlatformData) String() string
- func (m *PlatformData) Unmarshal(dAtA []byte) error
- func (m *PlatformData) XXX_DiscardUnknown()
- func (m *PlatformData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *PlatformData) XXX_Merge(src proto.Message)
- func (m *PlatformData) XXX_Size() int
- func (m *PlatformData) XXX_Unmarshal(b []byte) error
- type Request
- func (*Request) Descriptor() ([]byte, []int)
- func (m *Request) Marshal() (dAtA []byte, err error)
- func (m *Request) MarshalTo(dAtA []byte) (int, error)
- func (m *Request) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Request) ProtoMessage()
- func (m *Request) ProtoSize() (n int)
- func (m *Request) Reset()
- func (m *Request) String() string
- func (m *Request) Unmarshal(dAtA []byte) error
- func (m *Request) XXX_DiscardUnknown()
- func (m *Request) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Request) XXX_Merge(src proto.Message)
- func (m *Request) XXX_Size() int
- func (m *Request) XXX_Unmarshal(b []byte) error
- type RequestResponse
- type Response
- func (*Response) Descriptor() ([]byte, []int)
- func (m *Response) Marshal() (dAtA []byte, err error)
- func (m *Response) MarshalTo(dAtA []byte) (int, error)
- func (m *Response) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*Response) ProtoMessage()
- func (m *Response) ProtoSize() (n int)
- func (m *Response) Reset()
- func (m *Response) String() string
- func (m *Response) Unmarshal(dAtA []byte) error
- func (m *Response) XXX_DiscardUnknown()
- func (m *Response) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Response) XXX_Merge(src proto.Message)
- func (m *Response) XXX_Size() int
- func (m *Response) XXX_Unmarshal(b []byte) error
- type ShortID
- type Statistics
- type TestNewDeviceID
- func (*TestNewDeviceID) Descriptor() ([]byte, []int)
- func (m *TestNewDeviceID) Marshal() (dAtA []byte, err error)
- func (m *TestNewDeviceID) MarshalTo(dAtA []byte) (int, error)
- func (m *TestNewDeviceID) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*TestNewDeviceID) ProtoMessage()
- func (m *TestNewDeviceID) ProtoSize() (n int)
- func (m *TestNewDeviceID) Reset()
- func (m *TestNewDeviceID) String() string
- func (m *TestNewDeviceID) Unmarshal(dAtA []byte) error
- func (m *TestNewDeviceID) XXX_DiscardUnknown()
- func (m *TestNewDeviceID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *TestNewDeviceID) XXX_Merge(src proto.Message)
- func (m *TestNewDeviceID) XXX_Size() int
- func (m *TestNewDeviceID) XXX_Unmarshal(b []byte) error
- type TestOldDeviceID
- func (*TestOldDeviceID) Descriptor() ([]byte, []int)
- func (m *TestOldDeviceID) Marshal() (dAtA []byte, err error)
- func (m *TestOldDeviceID) MarshalTo(dAtA []byte) (int, error)
- func (m *TestOldDeviceID) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*TestOldDeviceID) ProtoMessage()
- func (m *TestOldDeviceID) ProtoSize() (n int)
- func (m *TestOldDeviceID) Reset()
- func (m *TestOldDeviceID) String() string
- func (m *TestOldDeviceID) Unmarshal(dAtA []byte) error
- func (m *TestOldDeviceID) XXX_DiscardUnknown()
- func (m *TestOldDeviceID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *TestOldDeviceID) XXX_Merge(src proto.Message)
- func (m *TestOldDeviceID) XXX_Size() int
- func (m *TestOldDeviceID) XXX_Unmarshal(b []byte) error
- type UnixData
- func (*UnixData) Descriptor() ([]byte, []int)
- func (m *UnixData) Marshal() (dAtA []byte, err error)
- func (m *UnixData) MarshalTo(dAtA []byte) (int, error)
- func (m *UnixData) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*UnixData) ProtoMessage()
- func (m *UnixData) ProtoSize() (n int)
- func (m *UnixData) Reset()
- func (m *UnixData) String() string
- func (m *UnixData) Unmarshal(dAtA []byte) error
- func (m *UnixData) XXX_DiscardUnknown()
- func (m *UnixData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *UnixData) XXX_Merge(src proto.Message)
- func (m *UnixData) XXX_Size() int
- func (m *UnixData) XXX_Unmarshal(b []byte) error
- type Vector
- func (v Vector) Compare(b Vector) Ordering
- func (v Vector) Concurrent(b Vector) bool
- func (v Vector) Copy() Vector
- func (v Vector) Counter(id ShortID) uint64
- func (*Vector) Descriptor() ([]byte, []int)
- func (v Vector) DropOthers(id ShortID) Vector
- func (v Vector) Equal(b Vector) bool
- func (v Vector) GreaterEqual(b Vector) bool
- func (v Vector) IsEmpty() bool
- func (v Vector) LesserEqual(b Vector) bool
- func (m *Vector) Marshal() (dAtA []byte, err error)
- func (m *Vector) MarshalTo(dAtA []byte) (int, error)
- func (m *Vector) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (v Vector) Merge(b Vector) Vector
- func (*Vector) ProtoMessage()
- func (m *Vector) ProtoSize() (n int)
- func (m *Vector) Reset()
- func (m *Vector) String() string
- func (m *Vector) Unmarshal(dAtA []byte) error
- func (v Vector) Update(id ShortID) Vector
- func (m *Vector) XXX_DiscardUnknown()
- func (m *Vector) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *Vector) XXX_Merge(src proto.Message)
- func (m *Vector) XXX_Size() int
- func (m *Vector) XXX_Unmarshal(b []byte) error
- type WindowsData
- func (*WindowsData) Descriptor() ([]byte, []int)
- func (m *WindowsData) Marshal() (dAtA []byte, err error)
- func (m *WindowsData) MarshalTo(dAtA []byte) (int, error)
- func (m *WindowsData) MarshalToSizedBuffer(dAtA []byte) (int, error)
- func (*WindowsData) ProtoMessage()
- func (m *WindowsData) ProtoSize() (n int)
- func (m *WindowsData) Reset()
- func (m *WindowsData) String() string
- func (m *WindowsData) Unmarshal(dAtA []byte) error
- func (m *WindowsData) XXX_DiscardUnknown()
- func (m *WindowsData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
- func (m *WindowsData) XXX_Merge(src proto.Message)
- func (m *WindowsData) XXX_Size() int
- func (m *WindowsData) XXX_Unmarshal(b []byte) error
Constants ¶
const ( SyntheticDirectorySize = 128 HelloMessageMagic uint32 = 0x2EA7D90B Version13HelloMagic uint32 = 0x9F79BC40 // old )
const ( // Shifts KiB = 10 MiB = 20 GiB = 30 )
const ( // MaxMessageLen is the largest message size allowed on the wire. (500 MB) MaxMessageLen = 500 * 1000 * 1000 // MinBlockSize is the minimum block size allowed MinBlockSize = 128 << KiB // MaxBlockSize is the maximum block size allowed MaxBlockSize = 16 << MiB // DesiredPerFileBlocks is the number of blocks we aim for per file DesiredPerFileBlocks = 2000 )
const ( FlagLocalUnsupported = 1 << 0 // The kind is unsupported, e.g. symlinks on Windows FlagLocalIgnored = 1 << 1 // Matches local ignore patterns FlagLocalMustRescan = 1 << 2 // Doesn't match content on disk, must be rechecked fully FlagLocalReceiveOnly = 1 << 3 // Change detected on receive only folder // Flags that should result in the Invalid bit on outgoing updates LocalInvalidFlags = FlagLocalUnsupported | FlagLocalIgnored | FlagLocalMustRescan | FlagLocalReceiveOnly // Flags that should result in a file being in conflict with its // successor, due to us not having an up to date picture of its state on // disk. LocalConflictFlags = FlagLocalUnsupported | FlagLocalIgnored | FlagLocalReceiveOnly LocalAllFlags = FlagLocalUnsupported | FlagLocalIgnored | FlagLocalMustRescan | FlagLocalReceiveOnly )
FileInfo.LocalFlags flags
const ( // PingSendInterval is how often we make sure to send a message, by // triggering pings if necessary. PingSendInterval = 90 * time.Second // ReceiveTimeout is the longest we'll wait for a message from the other // side before closing the connection. ReceiveTimeout = 300 * time.Second )
const DeviceIDLength = 32
Variables ¶
var ( ErrInvalidLengthBep = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowBep = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupBep = fmt.Errorf("proto: unexpected end of group") )
var ( LocalDeviceID = repeatedDeviceID(0xff) GlobalDeviceID = repeatedDeviceID(0xf8) EmptyDeviceID = DeviceID{} )
var ( ErrInvalidLengthDeviceidTest = fmt.Errorf("proto: negative length found during unmarshaling") ErrIntOverflowDeviceidTest = fmt.Errorf("proto: integer overflow") ErrUnexpectedEndOfGroupDeviceidTest = fmt.Errorf("proto: unexpected end of group") )
var ( ErrGeneric = errors.New("generic error") ErrNoSuchFile = errors.New("no such file") ErrInvalid = errors.New("file is invalid") )
var ( // ErrTooOldVersion is returned by ExchangeHello when the other side // speaks an older, incompatible version of the protocol. ErrTooOldVersion = errors.New("the remote device speaks an older version of the protocol not compatible with this version") // ErrUnknownMagic is returned by ExchangeHellow when the other side // speaks something entirely unknown. ErrUnknownMagic = errors.New("the remote device speaks an unknown (newer?) version of the protocol") )
var ( ErrClosed = errors.New("connection closed") ErrTimeout = errors.New("read timeout") )
var BlockSizes []int
BlockSizes is the list of valid block sizes, from min to max
var BufferPool bufferPool
Global pool to get buffers from. Requires Blocksizes to be initialised, therefore it is initialized in the same init() as BlockSizes
var CloseTimeout = 10 * time.Second
CloseTimeout is the longest we'll wait when trying to send the close message before just closing the connection. Should not be modified in production code, just for testing.
var Compression_name = map[int32]string{
0: "COMPRESSION_METADATA",
1: "COMPRESSION_NEVER",
2: "COMPRESSION_ALWAYS",
}
var Compression_value = map[string]int32{
"COMPRESSION_METADATA": 0,
"COMPRESSION_NEVER": 1,
"COMPRESSION_ALWAYS": 2,
}
var ErrorCode_name = map[int32]string{
0: "ERROR_CODE_NO_ERROR",
1: "ERROR_CODE_GENERIC",
2: "ERROR_CODE_NO_SUCH_FILE",
3: "ERROR_CODE_INVALID_FILE",
}
var ErrorCode_value = map[string]int32{
"ERROR_CODE_NO_ERROR": 0,
"ERROR_CODE_GENERIC": 1,
"ERROR_CODE_NO_SUCH_FILE": 2,
"ERROR_CODE_INVALID_FILE": 3,
}
var FileDownloadProgressUpdateType_name = map[int32]string{
0: "FILE_DOWNLOAD_PROGRESS_UPDATE_TYPE_APPEND",
1: "FILE_DOWNLOAD_PROGRESS_UPDATE_TYPE_FORGET",
}
var FileDownloadProgressUpdateType_value = map[string]int32{
"FILE_DOWNLOAD_PROGRESS_UPDATE_TYPE_APPEND": 0,
"FILE_DOWNLOAD_PROGRESS_UPDATE_TYPE_FORGET": 1,
}
var FileInfoType_name = map[int32]string{
0: "FILE_INFO_TYPE_FILE",
1: "FILE_INFO_TYPE_DIRECTORY",
2: "FILE_INFO_TYPE_SYMLINK_FILE",
3: "FILE_INFO_TYPE_SYMLINK_DIRECTORY",
4: "FILE_INFO_TYPE_SYMLINK",
}
var FileInfoType_value = map[string]int32{
"FILE_INFO_TYPE_FILE": 0,
"FILE_INFO_TYPE_DIRECTORY": 1,
"FILE_INFO_TYPE_SYMLINK_FILE": 2,
"FILE_INFO_TYPE_SYMLINK_DIRECTORY": 3,
"FILE_INFO_TYPE_SYMLINK": 4,
}
var MessageCompression_name = map[int32]string{
0: "MESSAGE_COMPRESSION_NONE",
1: "MESSAGE_COMPRESSION_LZ4",
}
var MessageCompression_value = map[string]int32{
"MESSAGE_COMPRESSION_NONE": 0,
"MESSAGE_COMPRESSION_LZ4": 1,
}
var MessageType_name = map[int32]string{
0: "MESSAGE_TYPE_CLUSTER_CONFIG",
1: "MESSAGE_TYPE_INDEX",
2: "MESSAGE_TYPE_INDEX_UPDATE",
3: "MESSAGE_TYPE_REQUEST",
4: "MESSAGE_TYPE_RESPONSE",
5: "MESSAGE_TYPE_DOWNLOAD_PROGRESS",
6: "MESSAGE_TYPE_PING",
7: "MESSAGE_TYPE_CLOSE",
}
var MessageType_value = map[string]int32{
"MESSAGE_TYPE_CLUSTER_CONFIG": 0,
"MESSAGE_TYPE_INDEX": 1,
"MESSAGE_TYPE_INDEX_UPDATE": 2,
"MESSAGE_TYPE_REQUEST": 3,
"MESSAGE_TYPE_RESPONSE": 4,
"MESSAGE_TYPE_DOWNLOAD_PROGRESS": 5,
"MESSAGE_TYPE_PING": 6,
"MESSAGE_TYPE_CLOSE": 7,
}
Functions ¶
func BlocksHash ¶
func DecryptBytes ¶
DecryptBytes returns the decrypted bytes, or an error if decryption failed.
func IsEncryptedParent ¶
IsEncryptedParent returns true if the path points at a parent directory of encrypted data, i.e. is not a "real" directory. This is determined by checking for a sentinel string in the path.
func IsVersionMismatch ¶
IsVersionMismatch returns true if the error is a reliable indication of a version mismatch that we might want to alert the user about.
func KeyFromPassword ¶
KeyFromPassword uses key derivation to generate a stronger key from a probably weak password.
func PasswordToken ¶
func PermsEqual ¶
func TotalInOut ¶
func VectorHash ¶
func WinsConflict ¶
WinsConflict returns true if "f" is the one to choose when it is in conflict with "other".
Types ¶
type BlockInfo ¶
type BlockInfo struct { Hash []byte `protobuf:"bytes,3,opt,name=hash,proto3" json:"hash" xml:"hash"` Offset int64 `protobuf:"varint,1,opt,name=offset,proto3" json:"offset" xml:"offset"` Size int `protobuf:"varint,2,opt,name=size,proto3,casttype=int" json:"size" xml:"size"` WeakHash uint32 `protobuf:"varint,4,opt,name=weak_hash,json=weakHash,proto3" json:"weakHash" xml:"weakHash"` }
func (*BlockInfo) Descriptor ¶
func (*BlockInfo) MarshalToSizedBuffer ¶
func (*BlockInfo) ProtoMessage ¶
func (*BlockInfo) ProtoMessage()
func (*BlockInfo) XXX_DiscardUnknown ¶
func (m *BlockInfo) XXX_DiscardUnknown()
func (*BlockInfo) XXX_Marshal ¶
func (*BlockInfo) XXX_Unmarshal ¶
type Close ¶
type Close struct {
Reason string `protobuf:"bytes,1,opt,name=reason,proto3" json:"reason" xml:"reason"`
}
func (*Close) Descriptor ¶
func (*Close) ProtoMessage ¶
func (*Close) ProtoMessage()
func (*Close) XXX_DiscardUnknown ¶
func (m *Close) XXX_DiscardUnknown()
func (*Close) XXX_Marshal ¶
func (*Close) XXX_Unmarshal ¶
type ClusterConfig ¶
type ClusterConfig struct {
Folders []Folder `protobuf:"bytes,1,rep,name=folders,proto3" json:"folders" xml:"folder"`
}
func (*ClusterConfig) Descriptor ¶
func (*ClusterConfig) Descriptor() ([]byte, []int)
func (*ClusterConfig) Marshal ¶
func (m *ClusterConfig) Marshal() (dAtA []byte, err error)
func (*ClusterConfig) MarshalToSizedBuffer ¶
func (m *ClusterConfig) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*ClusterConfig) ProtoMessage ¶
func (*ClusterConfig) ProtoMessage()
func (*ClusterConfig) ProtoSize ¶
func (m *ClusterConfig) ProtoSize() (n int)
func (*ClusterConfig) Reset ¶
func (m *ClusterConfig) Reset()
func (*ClusterConfig) String ¶
func (m *ClusterConfig) String() string
func (*ClusterConfig) Unmarshal ¶
func (m *ClusterConfig) Unmarshal(dAtA []byte) error
func (*ClusterConfig) XXX_DiscardUnknown ¶
func (m *ClusterConfig) XXX_DiscardUnknown()
func (*ClusterConfig) XXX_Marshal ¶
func (m *ClusterConfig) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*ClusterConfig) XXX_Merge ¶
func (m *ClusterConfig) XXX_Merge(src proto.Message)
func (*ClusterConfig) XXX_Size ¶
func (m *ClusterConfig) XXX_Size() int
func (*ClusterConfig) XXX_Unmarshal ¶
func (m *ClusterConfig) XXX_Unmarshal(b []byte) error
type Compression ¶
type Compression int32
const ( CompressionMetadata Compression = 0 CompressionNever Compression = 1 CompressionAlways Compression = 2 )
func (Compression) EnumDescriptor ¶
func (Compression) EnumDescriptor() ([]byte, []int)
func (Compression) GoString ¶
func (c Compression) GoString() string
func (Compression) MarshalText ¶
func (c Compression) MarshalText() ([]byte, error)
func (Compression) String ¶
func (x Compression) String() string
func (*Compression) UnmarshalText ¶
func (c *Compression) UnmarshalText(bs []byte) error
type Connection ¶
type Connection interface { Start() SetFolderPasswords(passwords map[string]string) Close(err error) ID() DeviceID Index(ctx context.Context, folder string, files []FileInfo) error IndexUpdate(ctx context.Context, folder string, files []FileInfo) error Request(ctx context.Context, folder string, name string, blockNo int, offset int64, size int, hash []byte, weakHash uint32, fromTemporary bool) ([]byte, error) ClusterConfig(config ClusterConfig) DownloadProgress(ctx context.Context, folder string, updates []FileDownloadProgressUpdate) Statistics() Statistics Closed() <-chan struct{} ConnectionInfo }
func NewConnection ¶
func NewConnection(deviceID DeviceID, reader io.Reader, writer io.Writer, closer io.Closer, receiver Model, connInfo ConnectionInfo, compress Compression, passwords map[string]string) Connection
type ConnectionInfo ¶
type Counter ¶
type Counter struct { ID ShortID `protobuf:"varint,1,opt,name=id,proto3,customtype=ShortID" json:"id" xml:"id"` Value uint64 `protobuf:"varint,2,opt,name=value,proto3" json:"value" xml:"value"` }
func (*Counter) Descriptor ¶
func (*Counter) MarshalToSizedBuffer ¶
func (*Counter) ProtoMessage ¶
func (*Counter) ProtoMessage()
func (*Counter) XXX_DiscardUnknown ¶
func (m *Counter) XXX_DiscardUnknown()
func (*Counter) XXX_Marshal ¶
func (*Counter) XXX_Unmarshal ¶
type Device ¶
type Device struct { ID DeviceID `protobuf:"bytes,1,opt,name=id,proto3,customtype=DeviceID" json:"id" xml:"id"` Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name" xml:"name"` Addresses []string `protobuf:"bytes,3,rep,name=addresses,proto3" json:"addresses" xml:"address"` Compression Compression `protobuf:"varint,4,opt,name=compression,proto3,enum=protocol.Compression" json:"compression" xml:"compression"` CertName string `protobuf:"bytes,5,opt,name=cert_name,json=certName,proto3" json:"certName" xml:"certName"` MaxSequence int64 `protobuf:"varint,6,opt,name=max_sequence,json=maxSequence,proto3" json:"maxSequence" xml:"maxSequence"` Introducer bool `protobuf:"varint,7,opt,name=introducer,proto3" json:"introducer" xml:"introducer"` IndexID IndexID `protobuf:"varint,8,opt,name=index_id,json=indexId,proto3,customtype=IndexID" json:"indexId" xml:"indexId"` SkipIntroductionRemovals bool `` /* 155-byte string literal not displayed */ EncryptionPasswordToken []byte `` /* 151-byte string literal not displayed */ }
func (*Device) Descriptor ¶
func (*Device) MarshalToSizedBuffer ¶
func (*Device) ProtoMessage ¶
func (*Device) ProtoMessage()
func (*Device) XXX_DiscardUnknown ¶
func (m *Device) XXX_DiscardUnknown()
func (*Device) XXX_Marshal ¶
func (*Device) XXX_Unmarshal ¶
type DeviceID ¶
type DeviceID [DeviceIDLength]byte
func DeviceIDFromBytes ¶
func DeviceIDFromString ¶
func NewDeviceID ¶
NewDeviceID generates a new device ID from the raw bytes of a certificate
func (DeviceID) MarshalText ¶
func (*DeviceID) UnmarshalText ¶
type DownloadProgress ¶
type DownloadProgress struct { Folder string `protobuf:"bytes,1,opt,name=folder,proto3" json:"folder" xml:"folder"` Updates []FileDownloadProgressUpdate `protobuf:"bytes,2,rep,name=updates,proto3" json:"updates" xml:"update"` }
func (*DownloadProgress) Descriptor ¶
func (*DownloadProgress) Descriptor() ([]byte, []int)
func (*DownloadProgress) Marshal ¶
func (m *DownloadProgress) Marshal() (dAtA []byte, err error)
func (*DownloadProgress) MarshalToSizedBuffer ¶
func (m *DownloadProgress) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*DownloadProgress) ProtoMessage ¶
func (*DownloadProgress) ProtoMessage()
func (*DownloadProgress) ProtoSize ¶
func (m *DownloadProgress) ProtoSize() (n int)
func (*DownloadProgress) Reset ¶
func (m *DownloadProgress) Reset()
func (*DownloadProgress) String ¶
func (m *DownloadProgress) String() string
func (*DownloadProgress) Unmarshal ¶
func (m *DownloadProgress) Unmarshal(dAtA []byte) error
func (*DownloadProgress) XXX_DiscardUnknown ¶
func (m *DownloadProgress) XXX_DiscardUnknown()
func (*DownloadProgress) XXX_Marshal ¶
func (m *DownloadProgress) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*DownloadProgress) XXX_Merge ¶
func (m *DownloadProgress) XXX_Merge(src proto.Message)
func (*DownloadProgress) XXX_Size ¶
func (m *DownloadProgress) XXX_Size() int
func (*DownloadProgress) XXX_Unmarshal ¶
func (m *DownloadProgress) XXX_Unmarshal(b []byte) error
type FileDownloadProgressUpdate ¶
type FileDownloadProgressUpdate struct { UpdateType FileDownloadProgressUpdateType `` /* 143-byte string literal not displayed */ Name string `protobuf:"bytes,2,opt,name=name,proto3" json:"name" xml:"name"` Version Vector `protobuf:"bytes,3,opt,name=version,proto3" json:"version" xml:"version"` BlockIndexes []int `protobuf:"varint,4,rep,name=block_indexes,json=blockIndexes,proto3,casttype=int" json:"blockIndexes" xml:"blockIndexe"` BlockSize int `protobuf:"varint,5,opt,name=block_size,json=blockSize,proto3,casttype=int" json:"blockSize" xml:"blockSize"` }
func (*FileDownloadProgressUpdate) Descriptor ¶
func (*FileDownloadProgressUpdate) Descriptor() ([]byte, []int)
func (*FileDownloadProgressUpdate) Marshal ¶
func (m *FileDownloadProgressUpdate) Marshal() (dAtA []byte, err error)
func (*FileDownloadProgressUpdate) MarshalTo ¶
func (m *FileDownloadProgressUpdate) MarshalTo(dAtA []byte) (int, error)
func (*FileDownloadProgressUpdate) MarshalToSizedBuffer ¶
func (m *FileDownloadProgressUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*FileDownloadProgressUpdate) ProtoMessage ¶
func (*FileDownloadProgressUpdate) ProtoMessage()
func (*FileDownloadProgressUpdate) ProtoSize ¶
func (m *FileDownloadProgressUpdate) ProtoSize() (n int)
func (*FileDownloadProgressUpdate) Reset ¶
func (m *FileDownloadProgressUpdate) Reset()
func (*FileDownloadProgressUpdate) String ¶
func (m *FileDownloadProgressUpdate) String() string
func (*FileDownloadProgressUpdate) Unmarshal ¶
func (m *FileDownloadProgressUpdate) Unmarshal(dAtA []byte) error
func (*FileDownloadProgressUpdate) XXX_DiscardUnknown ¶
func (m *FileDownloadProgressUpdate) XXX_DiscardUnknown()
func (*FileDownloadProgressUpdate) XXX_Marshal ¶
func (m *FileDownloadProgressUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*FileDownloadProgressUpdate) XXX_Merge ¶
func (m *FileDownloadProgressUpdate) XXX_Merge(src proto.Message)
func (*FileDownloadProgressUpdate) XXX_Size ¶
func (m *FileDownloadProgressUpdate) XXX_Size() int
func (*FileDownloadProgressUpdate) XXX_Unmarshal ¶
func (m *FileDownloadProgressUpdate) XXX_Unmarshal(b []byte) error
type FileDownloadProgressUpdateType ¶
type FileDownloadProgressUpdateType int32
const ( FileDownloadProgressUpdateTypeAppend FileDownloadProgressUpdateType = 0 FileDownloadProgressUpdateTypeForget FileDownloadProgressUpdateType = 1 )
func (FileDownloadProgressUpdateType) EnumDescriptor ¶
func (FileDownloadProgressUpdateType) EnumDescriptor() ([]byte, []int)
func (FileDownloadProgressUpdateType) String ¶
func (x FileDownloadProgressUpdateType) String() string
type FileInfo ¶
type FileInfo struct { Name string `protobuf:"bytes,1,opt,name=name,proto3" json:"name" xml:"name"` Size int64 `protobuf:"varint,3,opt,name=size,proto3" json:"size" xml:"size"` ModifiedS int64 `protobuf:"varint,5,opt,name=modified_s,json=modifiedS,proto3" json:"modifiedS" xml:"modifiedS"` ModifiedBy ShortID `protobuf:"varint,12,opt,name=modified_by,json=modifiedBy,proto3,customtype=ShortID" json:"modifiedBy" xml:"modifiedBy"` Version Vector `protobuf:"bytes,9,opt,name=version,proto3" json:"version" xml:"version"` Sequence int64 `protobuf:"varint,10,opt,name=sequence,proto3" json:"sequence" xml:"sequence"` Blocks []BlockInfo `protobuf:"bytes,16,rep,name=blocks,proto3" json:"blocks" xml:"block"` SymlinkTarget string `protobuf:"bytes,17,opt,name=symlink_target,json=symlinkTarget,proto3" json:"symlinkTarget" xml:"symlinkTarget"` BlocksHash []byte `protobuf:"bytes,18,opt,name=blocks_hash,json=blocksHash,proto3" json:"blocksHash" xml:"blocksHash"` Encrypted []byte `protobuf:"bytes,19,opt,name=encrypted,proto3" json:"encrypted" xml:"encrypted"` Type FileInfoType `protobuf:"varint,2,opt,name=type,proto3,enum=protocol.FileInfoType" json:"type" xml:"type"` Permissions uint32 `protobuf:"varint,4,opt,name=permissions,proto3" json:"permissions" xml:"permissions"` ModifiedNs int `protobuf:"varint,11,opt,name=modified_ns,json=modifiedNs,proto3,casttype=int" json:"modifiedNs" xml:"modifiedNs"` RawBlockSize int `protobuf:"varint,13,opt,name=block_size,json=blockSize,proto3,casttype=int" json:"blockSize" xml:"blockSize"` Platform PlatformData `protobuf:"bytes,14,opt,name=platform,proto3" json:"platform" xml:"platform"` // The local_flags fields stores flags that are relevant to the local // host only. It is not part of the protocol, doesn't get sent or // received (we make sure to zero it), nonetheless we need it on our // struct and to be able to serialize it to/from the database. LocalFlags uint32 `protobuf:"varint,1000,opt,name=local_flags,json=localFlags,proto3" json:"localFlags" xml:"localFlags"` // The version_hash is an implementation detail and not part of the wire // format. VersionHash []byte `protobuf:"bytes,1001,opt,name=version_hash,json=versionHash,proto3" json:"versionHash" xml:"versionHash"` Deleted bool `protobuf:"varint,6,opt,name=deleted,proto3" json:"deleted" xml:"deleted"` RawInvalid bool `protobuf:"varint,7,opt,name=invalid,proto3" json:"invalid" xml:"invalid"` NoPermissions bool `protobuf:"varint,8,opt,name=no_permissions,json=noPermissions,proto3" json:"noPermissions" xml:"noPermissions"` }
func DecryptFileInfo ¶
DecryptFileInfo extracts the encrypted portion of a FileInfo, decrypts it and returns that.
func (FileInfo) BlocksEqual ¶
BlocksEqual returns true when the two files have identical block lists.
func (*FileInfo) Descriptor ¶
func (FileInfo) FileLocalFlags ¶
func (FileInfo) FileModifiedBy ¶
func (FileInfo) FilePermissions ¶
func (FileInfo) FileType ¶
func (f FileInfo) FileType() FileInfoType
func (FileInfo) FileVersion ¶
func (FileInfo) HasPermissionBits ¶
func (FileInfo) IsDirectory ¶
func (FileInfo) IsEquivalent ¶
func (FileInfo) IsEquivalentOptional ¶
func (f FileInfo) IsEquivalentOptional(other FileInfo, comp FileInfoComparison) bool
func (FileInfo) IsReceiveOnlyChanged ¶
func (FileInfo) IsUnsupported ¶
func (*FileInfo) MarshalToSizedBuffer ¶
func (FileInfo) MustRescan ¶
func (*FileInfo) ProtoMessage ¶
func (*FileInfo) ProtoMessage()
func (FileInfo) SequenceNo ¶
func (*FileInfo) SetDeleted ¶
func (*FileInfo) SetIgnored ¶
func (f *FileInfo) SetIgnored()
func (*FileInfo) SetMustRescan ¶
func (f *FileInfo) SetMustRescan()
func (*FileInfo) SetUnsupported ¶
func (f *FileInfo) SetUnsupported()
func (FileInfo) ShouldConflict ¶
func (*FileInfo) XXX_DiscardUnknown ¶
func (m *FileInfo) XXX_DiscardUnknown()
func (*FileInfo) XXX_Marshal ¶
func (*FileInfo) XXX_Unmarshal ¶
type FileInfoComparison ¶
type FileInfoType ¶
type FileInfoType int32
const ( FileInfoTypeFile FileInfoType = 0 FileInfoTypeDirectory FileInfoType = 1 FileInfoTypeSymlinkFile FileInfoType = 2 // Deprecated: Do not use. FileInfoTypeSymlinkDirectory FileInfoType = 3 // Deprecated: Do not use. FileInfoTypeSymlink FileInfoType = 4 )
func (FileInfoType) EnumDescriptor ¶
func (FileInfoType) EnumDescriptor() ([]byte, []int)
func (*FileInfoType) MarshalJSON ¶
func (x *FileInfoType) MarshalJSON() ([]byte, error)
func (FileInfoType) String ¶
func (x FileInfoType) String() string
func (*FileInfoType) UnmarshalJSON ¶
func (x *FileInfoType) UnmarshalJSON(data []byte) error
type FileIntf ¶
type FileIntf interface { FileSize() int64 FileName() string FileLocalFlags() uint32 IsDeleted() bool IsInvalid() bool IsIgnored() bool IsUnsupported() bool MustRescan() bool IsReceiveOnlyChanged() bool IsDirectory() bool IsSymlink() bool ShouldConflict() bool HasPermissionBits() bool SequenceNo() int64 BlockSize() int FileVersion() Vector FileType() FileInfoType FilePermissions() uint32 FileModifiedBy() ShortID ModTime() time.Time }
FileIntf is the set of methods implemented by both FileInfo and db.FileInfoTruncated.
type Folder ¶
type Folder struct { ID string `protobuf:"bytes,1,opt,name=id,proto3" json:"id" xml:"id"` Label string `protobuf:"bytes,2,opt,name=label,proto3" json:"label" xml:"label"` ReadOnly bool `protobuf:"varint,3,opt,name=read_only,json=readOnly,proto3" json:"readOnly" xml:"readOnly"` IgnorePermissions bool `` /* 126-byte string literal not displayed */ IgnoreDelete bool `protobuf:"varint,5,opt,name=ignore_delete,json=ignoreDelete,proto3" json:"ignoreDelete" xml:"ignoreDelete"` DisableTempIndexes bool `` /* 131-byte string literal not displayed */ Paused bool `protobuf:"varint,7,opt,name=paused,proto3" json:"paused" xml:"paused"` Devices []Device `protobuf:"bytes,16,rep,name=devices,proto3" json:"devices" xml:"device"` }
func (Folder) Description ¶
func (*Folder) Descriptor ¶
func (*Folder) MarshalToSizedBuffer ¶
func (*Folder) ProtoMessage ¶
func (*Folder) ProtoMessage()
func (*Folder) XXX_DiscardUnknown ¶
func (m *Folder) XXX_DiscardUnknown()
func (*Folder) XXX_Marshal ¶
func (*Folder) XXX_Unmarshal ¶
type Header ¶
type Header struct { Type MessageType `protobuf:"varint,1,opt,name=type,proto3,enum=protocol.MessageType" json:"type" xml:"type"` Compression MessageCompression `protobuf:"varint,2,opt,name=compression,proto3,enum=protocol.MessageCompression" json:"compression" xml:"compression"` }
func (*Header) Descriptor ¶
func (*Header) MarshalToSizedBuffer ¶
func (*Header) ProtoMessage ¶
func (*Header) ProtoMessage()
func (*Header) XXX_DiscardUnknown ¶
func (m *Header) XXX_DiscardUnknown()
func (*Header) XXX_Marshal ¶
func (*Header) XXX_Unmarshal ¶
type Hello ¶
type Hello struct { DeviceName string `protobuf:"bytes,1,opt,name=device_name,json=deviceName,proto3" json:"deviceName" xml:"deviceName"` ClientName string `protobuf:"bytes,2,opt,name=client_name,json=clientName,proto3" json:"clientName" xml:"clientName"` ClientVersion string `protobuf:"bytes,3,opt,name=client_version,json=clientVersion,proto3" json:"clientVersion" xml:"clientVersion"` }
func ExchangeHello ¶
func ExchangeHello(c io.ReadWriter, h HelloIntf) (Hello, error)
func (*Hello) Descriptor ¶
func (*Hello) ProtoMessage ¶
func (*Hello) ProtoMessage()
func (*Hello) XXX_DiscardUnknown ¶
func (m *Hello) XXX_DiscardUnknown()
func (*Hello) XXX_Marshal ¶
func (*Hello) XXX_Unmarshal ¶
type HelloIntf ¶
The HelloIntf interface is implemented by the version specific hello message. It knows its magic number and how to serialize itself to a byte buffer.
type Index ¶
type Index struct { Folder string `protobuf:"bytes,1,opt,name=folder,proto3" json:"folder" xml:"folder"` Files []FileInfo `protobuf:"bytes,2,rep,name=files,proto3" json:"files" xml:"file"` }
func (*Index) Descriptor ¶
func (*Index) ProtoMessage ¶
func (*Index) ProtoMessage()
func (*Index) XXX_DiscardUnknown ¶
func (m *Index) XXX_DiscardUnknown()
func (*Index) XXX_Marshal ¶
func (*Index) XXX_Unmarshal ¶
type IndexUpdate ¶
type IndexUpdate struct { Folder string `protobuf:"bytes,1,opt,name=folder,proto3" json:"folder" xml:"folder"` Files []FileInfo `protobuf:"bytes,2,rep,name=files,proto3" json:"files" xml:"file"` }
func (*IndexUpdate) Descriptor ¶
func (*IndexUpdate) Descriptor() ([]byte, []int)
func (*IndexUpdate) Marshal ¶
func (m *IndexUpdate) Marshal() (dAtA []byte, err error)
func (*IndexUpdate) MarshalToSizedBuffer ¶
func (m *IndexUpdate) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*IndexUpdate) ProtoMessage ¶
func (*IndexUpdate) ProtoMessage()
func (*IndexUpdate) ProtoSize ¶
func (m *IndexUpdate) ProtoSize() (n int)
func (*IndexUpdate) Reset ¶
func (m *IndexUpdate) Reset()
func (*IndexUpdate) String ¶
func (m *IndexUpdate) String() string
func (*IndexUpdate) Unmarshal ¶
func (m *IndexUpdate) Unmarshal(dAtA []byte) error
func (*IndexUpdate) XXX_DiscardUnknown ¶
func (m *IndexUpdate) XXX_DiscardUnknown()
func (*IndexUpdate) XXX_Marshal ¶
func (m *IndexUpdate) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*IndexUpdate) XXX_Merge ¶
func (m *IndexUpdate) XXX_Merge(src proto.Message)
func (*IndexUpdate) XXX_Size ¶
func (m *IndexUpdate) XXX_Size() int
func (*IndexUpdate) XXX_Unmarshal ¶
func (m *IndexUpdate) XXX_Unmarshal(b []byte) error
type MessageCompression ¶
type MessageCompression int32
const ( MessageCompressionNone MessageCompression = 0 MessageCompressionLZ4 MessageCompression = 1 )
func (MessageCompression) EnumDescriptor ¶
func (MessageCompression) EnumDescriptor() ([]byte, []int)
func (MessageCompression) String ¶
func (x MessageCompression) String() string
type MessageType ¶
type MessageType int32
const ( MessageTypeClusterConfig MessageType = 0 MessageTypeIndex MessageType = 1 MessageTypeIndexUpdate MessageType = 2 MessageTypeRequest MessageType = 3 MessageTypeResponse MessageType = 4 MessageTypeDownloadProgress MessageType = 5 MessageTypePing MessageType = 6 MessageTypeClose MessageType = 7 )
func (MessageType) EnumDescriptor ¶
func (MessageType) EnumDescriptor() ([]byte, []int)
func (MessageType) String ¶
func (x MessageType) String() string
type Model ¶
type Model interface { // An index was received from the peer device Index(deviceID DeviceID, folder string, files []FileInfo) error // An index update was received from the peer device IndexUpdate(deviceID DeviceID, folder string, files []FileInfo) error // A request was made by the peer device Request(deviceID DeviceID, folder, name string, blockNo, size int32, offset int64, hash []byte, weakHash uint32, fromTemporary bool) (RequestResponse, error) // A cluster configuration message was received ClusterConfig(deviceID DeviceID, config ClusterConfig) error // The peer device closed the connection or an error occurred Closed(device DeviceID, err error) // The peer device sent progress updates for the files it is currently downloading DownloadProgress(deviceID DeviceID, folder string, updates []FileDownloadProgressUpdate) error }
type Ping ¶
type Ping struct { }
func (*Ping) Descriptor ¶
func (*Ping) ProtoMessage ¶
func (*Ping) ProtoMessage()
func (*Ping) XXX_DiscardUnknown ¶
func (m *Ping) XXX_DiscardUnknown()
func (*Ping) XXX_Unmarshal ¶
type PlatformData ¶
type PlatformData struct { Unix *UnixData `protobuf:"bytes,1,opt,name=unix,proto3" json:"unix" xml:"unix"` Windows *WindowsData `protobuf:"bytes,2,opt,name=windows,proto3" json:"windows" xml:"windows"` }
func (*PlatformData) Descriptor ¶
func (*PlatformData) Descriptor() ([]byte, []int)
func (*PlatformData) Marshal ¶
func (m *PlatformData) Marshal() (dAtA []byte, err error)
func (*PlatformData) MarshalToSizedBuffer ¶
func (m *PlatformData) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*PlatformData) ProtoMessage ¶
func (*PlatformData) ProtoMessage()
func (*PlatformData) ProtoSize ¶
func (m *PlatformData) ProtoSize() (n int)
func (*PlatformData) Reset ¶
func (m *PlatformData) Reset()
func (*PlatformData) String ¶
func (m *PlatformData) String() string
func (*PlatformData) Unmarshal ¶
func (m *PlatformData) Unmarshal(dAtA []byte) error
func (*PlatformData) XXX_DiscardUnknown ¶
func (m *PlatformData) XXX_DiscardUnknown()
func (*PlatformData) XXX_Marshal ¶
func (m *PlatformData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*PlatformData) XXX_Merge ¶
func (m *PlatformData) XXX_Merge(src proto.Message)
func (*PlatformData) XXX_Size ¶
func (m *PlatformData) XXX_Size() int
func (*PlatformData) XXX_Unmarshal ¶
func (m *PlatformData) XXX_Unmarshal(b []byte) error
type Request ¶
type Request struct { ID int `protobuf:"varint,1,opt,name=id,proto3,casttype=int" json:"id" xml:"id"` Folder string `protobuf:"bytes,2,opt,name=folder,proto3" json:"folder" xml:"folder"` Name string `protobuf:"bytes,3,opt,name=name,proto3" json:"name" xml:"name"` Offset int64 `protobuf:"varint,4,opt,name=offset,proto3" json:"offset" xml:"offset"` Size int `protobuf:"varint,5,opt,name=size,proto3,casttype=int" json:"size" xml:"size"` Hash []byte `protobuf:"bytes,6,opt,name=hash,proto3" json:"hash" xml:"hash"` FromTemporary bool `protobuf:"varint,7,opt,name=from_temporary,json=fromTemporary,proto3" json:"fromTemporary" xml:"fromTemporary"` WeakHash uint32 `protobuf:"varint,8,opt,name=weak_hash,json=weakHash,proto3" json:"weakHash" xml:"weakHash"` BlockNo int `protobuf:"varint,9,opt,name=block_no,json=blockNo,proto3,casttype=int" json:"blockNo" xml:"blockNo"` }
func (*Request) Descriptor ¶
func (*Request) MarshalToSizedBuffer ¶
func (*Request) ProtoMessage ¶
func (*Request) ProtoMessage()
func (*Request) XXX_DiscardUnknown ¶
func (m *Request) XXX_DiscardUnknown()
func (*Request) XXX_Marshal ¶
func (*Request) XXX_Unmarshal ¶
type RequestResponse ¶
type RequestResponse interface { Data() []byte Close() // Must always be called once the byte slice is no longer in use Wait() // Blocks until Close is called }
type Response ¶
type Response struct { ID int `protobuf:"varint,1,opt,name=id,proto3,casttype=int" json:"id" xml:"id"` Data []byte `protobuf:"bytes,2,opt,name=data,proto3" json:"data" xml:"data"` Code ErrorCode `protobuf:"varint,3,opt,name=code,proto3,enum=protocol.ErrorCode" json:"code" xml:"code"` }
func (*Response) Descriptor ¶
func (*Response) MarshalToSizedBuffer ¶
func (*Response) ProtoMessage ¶
func (*Response) ProtoMessage()
func (*Response) XXX_DiscardUnknown ¶
func (m *Response) XXX_DiscardUnknown()
func (*Response) XXX_Marshal ¶
func (*Response) XXX_Unmarshal ¶
type Statistics ¶
type TestNewDeviceID ¶
type TestNewDeviceID struct {
Test DeviceID `protobuf:"bytes,1,opt,name=test,proto3,customtype=DeviceID" json:"test" xml:"test"`
}
func (*TestNewDeviceID) Descriptor ¶
func (*TestNewDeviceID) Descriptor() ([]byte, []int)
func (*TestNewDeviceID) Marshal ¶
func (m *TestNewDeviceID) Marshal() (dAtA []byte, err error)
func (*TestNewDeviceID) MarshalToSizedBuffer ¶
func (m *TestNewDeviceID) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*TestNewDeviceID) ProtoMessage ¶
func (*TestNewDeviceID) ProtoMessage()
func (*TestNewDeviceID) ProtoSize ¶
func (m *TestNewDeviceID) ProtoSize() (n int)
func (*TestNewDeviceID) Reset ¶
func (m *TestNewDeviceID) Reset()
func (*TestNewDeviceID) String ¶
func (m *TestNewDeviceID) String() string
func (*TestNewDeviceID) Unmarshal ¶
func (m *TestNewDeviceID) Unmarshal(dAtA []byte) error
func (*TestNewDeviceID) XXX_DiscardUnknown ¶
func (m *TestNewDeviceID) XXX_DiscardUnknown()
func (*TestNewDeviceID) XXX_Marshal ¶
func (m *TestNewDeviceID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*TestNewDeviceID) XXX_Merge ¶
func (m *TestNewDeviceID) XXX_Merge(src proto.Message)
func (*TestNewDeviceID) XXX_Size ¶
func (m *TestNewDeviceID) XXX_Size() int
func (*TestNewDeviceID) XXX_Unmarshal ¶
func (m *TestNewDeviceID) XXX_Unmarshal(b []byte) error
type TestOldDeviceID ¶
type TestOldDeviceID struct {
Test []byte `protobuf:"bytes,1,opt,name=test,proto3" json:"test" xml:"test"`
}
func (*TestOldDeviceID) Descriptor ¶
func (*TestOldDeviceID) Descriptor() ([]byte, []int)
func (*TestOldDeviceID) Marshal ¶
func (m *TestOldDeviceID) Marshal() (dAtA []byte, err error)
func (*TestOldDeviceID) MarshalToSizedBuffer ¶
func (m *TestOldDeviceID) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*TestOldDeviceID) ProtoMessage ¶
func (*TestOldDeviceID) ProtoMessage()
func (*TestOldDeviceID) ProtoSize ¶
func (m *TestOldDeviceID) ProtoSize() (n int)
func (*TestOldDeviceID) Reset ¶
func (m *TestOldDeviceID) Reset()
func (*TestOldDeviceID) String ¶
func (m *TestOldDeviceID) String() string
func (*TestOldDeviceID) Unmarshal ¶
func (m *TestOldDeviceID) Unmarshal(dAtA []byte) error
func (*TestOldDeviceID) XXX_DiscardUnknown ¶
func (m *TestOldDeviceID) XXX_DiscardUnknown()
func (*TestOldDeviceID) XXX_Marshal ¶
func (m *TestOldDeviceID) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*TestOldDeviceID) XXX_Merge ¶
func (m *TestOldDeviceID) XXX_Merge(src proto.Message)
func (*TestOldDeviceID) XXX_Size ¶
func (m *TestOldDeviceID) XXX_Size() int
func (*TestOldDeviceID) XXX_Unmarshal ¶
func (m *TestOldDeviceID) XXX_Unmarshal(b []byte) error
type UnixData ¶
type UnixData struct { // The owner name and group name are set when known (i.e., could be // resolved on the source device), while the UID and GID are always set // as they come directly from the stat() call. OwnerName string `protobuf:"bytes,1,opt,name=owner_name,json=ownerName,proto3" json:"ownerName" xml:"ownerName"` GroupName string `protobuf:"bytes,2,opt,name=group_name,json=groupName,proto3" json:"groupName" xml:"groupName"` UID int `protobuf:"varint,3,opt,name=uid,proto3,casttype=int" json:"uid" xml:"uid"` GID int `protobuf:"varint,4,opt,name=gid,proto3,casttype=int" json:"gid" xml:"gid"` }
func (*UnixData) Descriptor ¶
func (*UnixData) MarshalToSizedBuffer ¶
func (*UnixData) ProtoMessage ¶
func (*UnixData) ProtoMessage()
func (*UnixData) XXX_DiscardUnknown ¶
func (m *UnixData) XXX_DiscardUnknown()
func (*UnixData) XXX_Marshal ¶
func (*UnixData) XXX_Unmarshal ¶
type Vector ¶
type Vector struct {
Counters []Counter `protobuf:"bytes,1,rep,name=counters,proto3" json:"counters" xml:"counter"`
}
func (Vector) Concurrent ¶
Concurrent returns true when the two vectors are concurrent.
func (*Vector) Descriptor ¶
func (Vector) DropOthers ¶
DropOthers removes all counters, keeping only the one with given id. If there is no such counter, an empty Vector is returned.
func (Vector) GreaterEqual ¶
GreaterEqual returns true when the two vectors are equivalent or v is Greater than b.
func (Vector) LesserEqual ¶
LesserEqual returns true when the two vectors are equivalent or v is Lesser than b.
func (*Vector) MarshalToSizedBuffer ¶
func (Vector) Merge ¶
Merge returns the vector containing the maximum indexes from v and b. If it is possible, the vector v is updated and returned. If it is not, a copy will be created, updated and returned.
func (*Vector) ProtoMessage ¶
func (*Vector) ProtoMessage()
func (Vector) Update ¶
Update returns a Vector with the index for the specific ID incremented by one. If it is possible, the vector v is updated and returned. If it is not, a copy will be created, updated and returned.
func (*Vector) XXX_DiscardUnknown ¶
func (m *Vector) XXX_DiscardUnknown()
func (*Vector) XXX_Marshal ¶
func (*Vector) XXX_Unmarshal ¶
type WindowsData ¶
type WindowsData struct { // Windows file objects have a single owner, which may be a user or a // group. We keep the name of that account, and a flag to indicate what // type it is. OwnerName string `protobuf:"bytes,1,opt,name=owner_name,json=ownerName,proto3" json:"ownerName" xml:"ownerName"` OwnerIsGroup bool `protobuf:"varint,2,opt,name=owner_is_group,json=ownerIsGroup,proto3" json:"ownerIsGroup" xml:"ownerIsGroup"` }
func (*WindowsData) Descriptor ¶
func (*WindowsData) Descriptor() ([]byte, []int)
func (*WindowsData) Marshal ¶
func (m *WindowsData) Marshal() (dAtA []byte, err error)
func (*WindowsData) MarshalToSizedBuffer ¶
func (m *WindowsData) MarshalToSizedBuffer(dAtA []byte) (int, error)
func (*WindowsData) ProtoMessage ¶
func (*WindowsData) ProtoMessage()
func (*WindowsData) ProtoSize ¶
func (m *WindowsData) ProtoSize() (n int)
func (*WindowsData) Reset ¶
func (m *WindowsData) Reset()
func (*WindowsData) String ¶
func (m *WindowsData) String() string
func (*WindowsData) Unmarshal ¶
func (m *WindowsData) Unmarshal(dAtA []byte) error
func (*WindowsData) XXX_DiscardUnknown ¶
func (m *WindowsData) XXX_DiscardUnknown()
func (*WindowsData) XXX_Marshal ¶
func (m *WindowsData) XXX_Marshal(b []byte, deterministic bool) ([]byte, error)
func (*WindowsData) XXX_Merge ¶
func (m *WindowsData) XXX_Merge(src proto.Message)
func (*WindowsData) XXX_Size ¶
func (m *WindowsData) XXX_Size() int
func (*WindowsData) XXX_Unmarshal ¶
func (m *WindowsData) XXX_Unmarshal(b []byte) error