Documentation ¶
Index ¶
- Constants
- Variables
- type Cmix
- type DelayedTimer
- type FilePartTracker
- type FileTransfer
- type FpStatus
- type FtE2e
- type NewFileTransfer
- func (*NewFileTransfer) Descriptor() ([]byte, []int)deprecated
- func (x *NewFileTransfer) GetFileName() string
- func (x *NewFileTransfer) GetFileType() string
- func (x *NewFileTransfer) GetNumParts() uint32
- func (x *NewFileTransfer) GetPreview() []byte
- func (x *NewFileTransfer) GetRetry() float32
- func (x *NewFileTransfer) GetSize() uint32
- func (x *NewFileTransfer) GetTransferKey() []byte
- func (x *NewFileTransfer) GetTransferMac() []byte
- func (*NewFileTransfer) ProtoMessage()
- func (x *NewFileTransfer) ProtoReflect() protoreflect.Message
- func (x *NewFileTransfer) Reset()
- func (x *NewFileTransfer) String() string
- type Params
- type ReceiveCallback
- type ReceivedProgressCallback
- type ReceivedTransfer
- type SendNew
- type SentProgressCallback
- type SentTransfer
- type Storage
- type Transfer
- type TransferInfo
Constants ¶
const ( // FileNameMaxLen is the maximum size, in bytes, for a file name. Currently, // it is set to 48 bytes. FileNameMaxLen = 48 // FileTypeMaxLen is the maximum size, in bytes, for a file type. Currently, // it is set to 8 bytes. FileTypeMaxLen = 8 // FileMaxSize is the maximum file size that can be transferred. Currently, // it is set to 250 kB. FileMaxSize = 250_000 // PreviewMaxSize is the maximum size, in bytes, for a file preview. // Currently, it is set to 4 kB. PreviewMaxSize = 4_000 )
Variables ¶
var File_ftMessages_proto protoreflect.FileDescriptor
Functions ¶
This section is empty.
Types ¶
type Cmix ¶
type Cmix interface { GetMaxMessageLength() int SendMany(messages []cmix.TargetedCmixMessage, p cmix.CMIXParams) (rounds.Round, []ephemeral.Id, error) AddFingerprint(identity *id.ID, fingerprint format.Fingerprint, mp message.Processor) error DeleteFingerprint(identity *id.ID, fingerprint format.Fingerprint) CheckInProgressMessages() IsHealthy() bool AddHealthCallback(f func(bool)) uint64 RemoveHealthCallback(uint64) GetRoundResults(timeout time.Duration, roundCallback cmix.RoundEventCallback, roundList ...id.Round) }
Cmix interface matches a subset of the cmix.Client methods used by the file transfer manager for easier testing.
type DelayedTimer ¶
The DelayedTimer type represents a single event manually started. When the DelayedTimer expires, the current time will be sent on C. A DelayedTimer must be created with NewDelayedTimer.
func NewDelayedTimer ¶
func NewDelayedTimer(d time.Duration) *DelayedTimer
NewDelayedTimer creates a new DelayedTimer that will send the current time on its channel after at least duration d once it is started.
func (*DelayedTimer) Start ¶
func (dt *DelayedTimer) Start()
Start starts the timer that will send the current time on its channel after at least duration d. If it is already running or stopped, it does nothing.
func (*DelayedTimer) Stop ¶
func (dt *DelayedTimer) Stop() bool
Stop prevents the Timer from firing. It returns true if the call stops the timer, false if the timer has already expired, been stopped, or was never started.
type FilePartTracker ¶
type FilePartTracker interface { // GetPartStatus returns the status of the file part with the given part // number. The possible values for the status are: // 0 < Part does not exist // 0 = unsent // 1 = arrived (sender has sent a part, and it has arrived) // 2 = received (receiver has received a part) GetPartStatus(partNum uint16) FpStatus // GetNumParts returns the total number of file parts in the transfer. GetNumParts() uint16 }
FilePartTracker tracks the status of each file part in a sent or received file transfer.
type FileTransfer ¶
type FileTransfer interface { // StartProcesses starts the sending threads that wait for file transfers to // send. Adheres to the xxdk.Service type. StartProcesses() (stoppable.Stoppable, error) // MaxFileNameLen returns the max number of bytes allowed for a file name. MaxFileNameLen() int // MaxFileTypeLen returns the max number of bytes allowed for a file type. MaxFileTypeLen() int // MaxFileSize returns the max number of bytes allowed for a file. MaxFileSize() int // MaxPreviewSize returns the max number of bytes allowed for a file // preview. MaxPreviewSize() int // Send initiates the sending of a file to the recipient and returns a // transfer ID that uniquely identifies this file transfer. // // In-progress transfers are restored when closing and reopening; however, a // SentProgressCallback must be registered again. // // Parameters: // - recipient - ID of the receiver of the file transfer. The sender must // have an E2E relationship with the recipient. // - fileName - Human-readable file name. Max length defined by // MaxFileNameLen. // - fileType - Shorthand that identifies the type of file. Max length // defined by MaxFileTypeLen. // - fileData - File contents. Max size defined by MaxFileSize. // - retry - The number of sending retries allowed on send failure (e.g. // a retry of 2.0 with 6 parts means 12 total possible sends). // - preview - A preview of the file data (e.g. a thumbnail). Max size // defined by MaxPreviewSize. // - progressCB - A callback that reports the progress of the file // transfer. The callback is called once on initialization, on every // progress update (or less if restricted by the period), or on fatal // error. // - period - The progress callback will be limited from triggering only // once per period. // - sendNew - Function that sends the file transfer information to the // recipient. Send(recipient *id.ID, fileName, fileType string, fileData []byte, retry float32, preview []byte, progressCB SentProgressCallback, period time.Duration, sendNew SendNew) (*ftCrypto.TransferID, error) // RegisterSentProgressCallback allows for the registration of a callback to // track the progress of an individual sent file transfer. // // The callback will be called immediately when added to report the current // progress of the transfer. It will then call every time a file part // arrives, the transfer completes, or a fatal error occurs. It is called at // most once every period regardless of the number of progress updates. // // In the event that the client is closed and resumed, this function must be // used to re-register any callbacks previously registered with this // function or Send. RegisterSentProgressCallback(tid *ftCrypto.TransferID, progressCB SentProgressCallback, period time.Duration) error // CloseSend deletes a file from the internal storage once a transfer has // completed or reached the retry limit. If neither of those condition are // met, an error is returned. // // This function should be called once a transfer completes or errors out // (as reported by the progress callback). CloseSend(tid *ftCrypto.TransferID) error // HandleIncomingTransfer starts tracking the received file parts for the // given payload that contains the file transfer information and returns a // transfer ID that uniquely identifies this file transfer along with the // transfer information // // This function should be called once for every new file received on the // registered SendNew callback. // // In-progress transfers are restored when closing and reopening; however, a // ReceivedProgressCallback must be registered again. // // payload - A marshalled payload container the file transfer information. // progressCB - A callback that reports the progress of the file transfer. // The callback is called once on initialization, on every progress // update (or less if restricted by the period), or on fatal error. // period - A progress callback will be limited from triggering only once // per period. HandleIncomingTransfer(transferInfo []byte, progressCB ReceivedProgressCallback, period time.Duration) ( *ftCrypto.TransferID, *TransferInfo, error) // RegisterReceivedProgressCallback allows for the registration of a // callback to track the progress of an individual received file transfer. // // The callback will be called immediately when added to report the current // progress of the transfer. It will then call every time a file part is // received, the transfer completes, or a fatal error occurs. It is called // at most once every period regardless of the number of progress updates. // // In the event that the client is closed and resumed, this function must be // used to re-register any callbacks previously registered. // // Once the callback reports that the transfer has completed, the recipient // can get the full file by calling Receive. RegisterReceivedProgressCallback(tid *ftCrypto.TransferID, progressCB ReceivedProgressCallback, period time.Duration) error // Receive returns the full file on the completion of the transfer. It // deletes internal references to the data and unregisters any attached // progress callback. Returns an error if the transfer is not complete, the // full file cannot be verified, or if the transfer cannot be found. // // Receive can only be called once the progress callback returns that the // file transfer is complete. Receive(tid *ftCrypto.TransferID) ([]byte, error) }
FileTransfer facilities the sending and receiving of large file transfers. It allows for progress tracking of both inbound and outbound transfers. FileTransfer handles the sending of the file data; however, the caller is responsible for communicating to the recipient of the incoming file transfer.
func NewManager ¶
func NewManager(params Params, user FtE2e) (FileTransfer, error)
NewManager creates a new file transfer manager object. If sent or received transfers already existed, they are loaded from storage and queued to resume once manager.startProcesses is called.
type FpStatus ¶
type FpStatus int
FpStatus is the file part status and indicates the status of individual file parts in a file transfer.
const ( // FpUnsent indicates that the file part has not been sent FpUnsent FpStatus = iota // FpSent indicates that the file part has been sent (sender has sent a // part, but it has not arrived) FpSent // FpArrived indicates that the file part has arrived (sender has sent a // part, and it has arrived) FpArrived // FpReceived indicates that the file part has been received (receiver has // received a part) FpReceived )
Possible values for FpStatus.
type FtE2e ¶
type FtE2e interface { GetStorage() storage.Session GetReceptionIdentity() xxdk.ReceptionIdentity GetCmix() cmix.Client GetRng() *fastRNG.StreamGenerator GetE2E() e2e.Handler }
FtE2e interface matches a subset of the xxdk.E2e methods used by the file transfer manager for easier testing.
type NewFileTransfer ¶
type NewFileTransfer struct { FileName string `protobuf:"bytes,1,opt,name=fileName,proto3" json:"fileName,omitempty"` // Name of the file FileType string `protobuf:"bytes,2,opt,name=fileType,proto3" json:"fileType,omitempty"` // String that indicates type of file TransferKey []byte `protobuf:"bytes,3,opt,name=transferKey,proto3" json:"transferKey,omitempty"` // 256-bit encryption key TransferMac []byte `protobuf:"bytes,4,opt,name=transferMac,proto3" json:"transferMac,omitempty"` // 256-bit MAC of the entire file NumParts uint32 `protobuf:"varint,5,opt,name=numParts,proto3" json:"numParts,omitempty"` // Number of file parts Size uint32 `protobuf:"varint,6,opt,name=size,proto3" json:"size,omitempty"` // The size of the file, in bytes Retry float32 `protobuf:"fixed32,7,opt,name=retry,proto3" json:"retry,omitempty"` // Determines how many times to retry sending Preview []byte `protobuf:"bytes,8,opt,name=preview,proto3" json:"preview,omitempty"` // A preview of the file // contains filtered or unexported fields }
NewFileTransfer is transmitted first on the initialization of a file transfer to inform the receiver about the incoming file.
func (*NewFileTransfer) Descriptor
deprecated
func (*NewFileTransfer) Descriptor() ([]byte, []int)
Deprecated: Use NewFileTransfer.ProtoReflect.Descriptor instead.
func (*NewFileTransfer) GetFileName ¶
func (x *NewFileTransfer) GetFileName() string
func (*NewFileTransfer) GetFileType ¶
func (x *NewFileTransfer) GetFileType() string
func (*NewFileTransfer) GetNumParts ¶
func (x *NewFileTransfer) GetNumParts() uint32
func (*NewFileTransfer) GetPreview ¶
func (x *NewFileTransfer) GetPreview() []byte
func (*NewFileTransfer) GetRetry ¶
func (x *NewFileTransfer) GetRetry() float32
func (*NewFileTransfer) GetSize ¶
func (x *NewFileTransfer) GetSize() uint32
func (*NewFileTransfer) GetTransferKey ¶
func (x *NewFileTransfer) GetTransferKey() []byte
func (*NewFileTransfer) GetTransferMac ¶
func (x *NewFileTransfer) GetTransferMac() []byte
func (*NewFileTransfer) ProtoMessage ¶
func (*NewFileTransfer) ProtoMessage()
func (*NewFileTransfer) ProtoReflect ¶
func (x *NewFileTransfer) ProtoReflect() protoreflect.Message
func (*NewFileTransfer) Reset ¶
func (x *NewFileTransfer) Reset()
func (*NewFileTransfer) String ¶
func (x *NewFileTransfer) String() string
type Params ¶
type Params struct { // MaxThroughput is the maximum data transfer speed to send file parts (in // bytes per second). If set to 0, rate limiting will be disabled. MaxThroughput int // SendTimeout is the duration, in nanoseconds, before sending on a round // times out. It is recommended that SendTimeout is not changed from its // default. SendTimeout time.Duration // Cmix are the parameters used when sending a cMix message. Cmix cmix.CMIXParams }
Params contains parameters used for file transfer.
func DefaultParams ¶
func DefaultParams() Params
DefaultParams returns a Params object filled with the default values.
func GetParameters ¶
GetParameters returns the default network parameters, or override with given parameters, if set. Returns an error if provided invalid JSON. If the JSON is valid but does not match the Params structure, the default parameters will be returned.
type ReceiveCallback ¶
type ReceiveCallback func(tid *ftCrypto.TransferID, fileName, fileType string, sender *id.ID, size uint32, preview []byte)
ReceiveCallback is a callback function that notifies the receiver of an incoming file transfer.
type ReceivedProgressCallback ¶
type ReceivedProgressCallback func(completed bool, received, total uint16, rt ReceivedTransfer, t FilePartTracker, err error)
ReceivedProgressCallback is a callback function that tracks the progress of receiving a file.
type ReceivedTransfer ¶
type ReceivedTransfer interface { Transfer }
ReceivedTransfer tracks the information and individual parts of a received file transfer.
type SendNew ¶
SendNew handles the sending of the initial message informing the recipient of the incoming file transfer parts. SendNew should block until the send completes and return an error only on failed sends.
type SentProgressCallback ¶
type SentProgressCallback func(completed bool, arrived, total uint16, st SentTransfer, t FilePartTracker, err error)
SentProgressCallback is a callback function that tracks the progress of sending a file.
type SentTransfer ¶
SentTransfer tracks the information and individual parts of a sent file transfer.
type Storage ¶
Storage interface matches a subset of the storage.Session methods used by the manager for easier testing.
type Transfer ¶
type Transfer interface { TransferID() *ftCrypto.TransferID FileName() string FileSize() uint32 NumParts() uint16 }
Transfer is the generic structure for a file transfer.
type TransferInfo ¶
type TransferInfo struct { FileName string // Name of the file FileType string // String that indicates type of file Key ftCrypto.TransferKey // 256-bit encryption key Mac []byte // 256-bit MAC of the entire file NumParts uint16 // Number of file parts Size uint32 // The size of the file, in bytes Retry float32 // Determines how many times to retry sending Preview []byte // A preview of the file }
TransferInfo contains all the information for a new transfer. This is the information sent in the initial file transfer so the recipient can prepare for the incoming file transfer parts.
func UnmarshalTransferInfo ¶
func UnmarshalTransferInfo(data []byte) (*TransferInfo, error)
UnmarshalTransferInfo deserializes the TransferInfo.
func (*TransferInfo) Marshal ¶
func (ti *TransferInfo) Marshal() ([]byte, error)
Marshal serialises the TransferInfo for sending over the network.