Documentation
¶
Index ¶
- Constants
- Variables
- func CryptPass(pwd []byte) []byte
- func GetHasher(algo string) (hash.Hash, error)
- func HashBlock(block []byte, hasher hash.Hash) ([]byte, error)
- func HashFile(file *os.File, hasher hash.Hash) ([]byte, error)
- func IsBeforePostTask(code rune) bool
- func IsBeforePreTask(code rune) bool
- func IsBeforeTransfer(code rune) bool
- func IsError(code rune) bool
- func IsMD5(mode uint32) bool
- func IsPassThrough(mode uint32) bool
- func IsRecv(mode uint32) bool
- type AdminHandler
- type Authent
- type AuthentHandler
- type Bandwidth
- type BandwidthHandler
- type BasicAuthentHandler
- type BasicSessionHandler
- type BasicTransferHandler
- func (h *BasicTransferHandler) GetHash() ([]byte, error)
- func (h *BasicTransferHandler) GetStream() (utils.ReadWriterAt, error)
- func (h *BasicTransferHandler) UpdateTransferInfo(i *UpdateInfo) error
- func (h *BasicTransferHandler) ValidEndRequest() error
- func (h *BasicTransferHandler) ValidEndTransfer(e *EndTransfer) error
- type Client
- type ClientAuthentHandler
- type Config
- type EndTransfer
- type Error
- type ErrorTasker
- type FileInfo
- type InfoHandler
- type PostTasker
- type PreTasker
- type Request
- type RequestHandler
- type RequestInfo
- type Server
- func (s *Server) IsClosed() bool
- func (s *Server) IsListening() bool
- func (s *Server) IsStarting() bool
- func (s *Server) ListenAndServe(ip string) error
- func (s *Server) ListenAndServeTLS(ip string, conf *tls.Config) error
- func (s *Server) Serve(l net.Listener) error
- func (s *Server) Shutdown(ctx context.Context) error
- type Session
- func (ses *Session) Authent(login string, password []byte, conf *Config) (auth *Authent, err error)
- func (ses *Session) BlockRequest(adminPassword []byte, block bool) (err error)
- func (ses *Session) Cancel() error
- func (ses *Session) Close()
- func (ses *Session) EndRequest() (err error)
- func (ses *Session) GetBandwidth() (res *Bandwidth, err error)
- func (ses *Session) GetFileInfo(pattern, rule string, request byte) (info []FileInfo, err error)
- func (ses *Session) GetFileInfoV2(pattern, rule string, request infoRequest) (info []FileInfo, err error)
- func (ses *Session) GetTransferInfo(id int64) (info *TransferInfo, err error)
- func (ses *Session) Recv(stream io.WriterAt) (eot *EndTransfer, err error)
- func (ses *Session) RecvUpdateRequest() (res *UpdateInfo, err error)
- func (ses *Session) Request(req *Request) (res *Request, err error)
- func (ses *Session) Send(stream io.ReaderAt, getHash func() ([]byte, error)) (eot *EndTransfer, err error)
- func (ses *Session) SendError(err error) error
- func (ses *Session) SendUpdateRequest(infos *UpdateInfo) (err error)
- func (ses *Session) SetBandwidth(src *Bandwidth) (err error)
- func (ses *Session) Shutdown(adminPassword []byte, restart bool) (err error)
- func (ses *Session) Stop() error
- func (ses *Session) Test(message string, bounce int) (err error)
- type SessionHandler
- type SystemData
- type TransferData
- type TransferHandler
- type TransferInfo
- type UpdateInfo
- type Version
Constants ¶
const ( //InitOk stands for initialization ok (internal connection, authentication) InitOk = 'i' //PreProcessingOk stands for pre processing ok PreProcessingOk = 'B' //TransferOk stands for transfer OK TransferOk = 'X' //PostProcessingOk stands for post processing ok PostProcessingOk = 'P' //CompleteOk stands for All action are completed ok CompleteOk = 'O' //ConnectionImpossible stands for connection is impossible (remote or local reason) ConnectionImpossible = 'C' //ServerOverloaded stands for connection is impossible now due to limits(remote or local reason) ServerOverloaded = 'l' //BadAuthent stands for bad authentication (remote or local) BadAuthent = 'A' //ExternalOperation stands for External operation in error (pre, post or error processing ExternalOperation = 'E' //TransferError stands for Transfer is in error TransferError = 'T' //MD5Error stands for Transfer in error due to MD5 MD5Error = 'M' //Disconnection stands for Network disconnection Disconnection = 'D' //RemoteShutdown stands for Remote Shutdown RemoteShutdown = 'r' //FinalOp stands for final action (like moving file) is in error FinalOp = 'F' //Unimplemented stands for unimplemented feature Unimplemented = 'U' //Shutdown stands for shutdown is in progress Shutdown = 'S' //RemoteError stands for a remote error is received RemoteError = 'R' //Internal stands for an internal error Internal = 'I' //StoppedTransfer stands for a request of stopping transfer StoppedTransfer = 'H' //CanceledTransfer stands for a request of canceling transfer CanceledTransfer = 'K' //Warning in execution Warning = 'W' //Unknown stands for unknown type of error Unknown = '-' //QueryAlreadyFinished stands for a request that is already remotely finished QueryAlreadyFinished = 'Q' //QueryStillRunning stands for request that is still running QueryStillRunning = 's' //NotKnownHost stands for not known host NotKnownHost = 'N' //LoopSelfRequestedHost stands for self requested host starting request is invalid LoopSelfRequestedHost = 'L' //QueryRemotelyUnknown stands for request should exist but is not found on remote host QueryRemotelyUnknown = 'u' //FileNotFound stands for File not found error FileNotFound = 'f' //CommandNotFound stands for Command not found error CommandNotFound = 'c' //PassThroughMode stands for a request in PassThroughMode and required action is incompatible with this mode PassThroughMode = 'p' //Running stands for running step Running = 'z' //IncorrectCommand stands for Incorrect command IncorrectCommand = 'n' //FileNotAllowed stands for File not allowed FileNotAllowed = 'a' //SizeNotAllowed stands for Size not allowed SizeNotAllowed = 'd' )
FIXME 1.0.0 errorCode should be its own type (cf infoRequest or globalStep)
const ( // DigestMD5 is used to identify the MD5 hash algorith DigestMD5 = "MD5" // DigestSHA1 is used to identify the SHA1 hash algorith DigestSHA1 = "SHA-1" // DigestSHA256 is used to identify the SHA256 hash algorith DigestSHA256 = "SHA-256" // DigestADLER32 is used to identify the ADLER32 hash algorith DigestADLER32 = "ADLER32" // DigestSHA384 is used to identify the SHA384 hash algorith DigestSHA384 = "SHA-384" // DigestSHA512 is used to identify the SHA512 hash algorith DigestSHA512 = "SHA-512" )
const ( // ModeUnknown is a placeholder and it should not be used. // Deprecated 1.0.0 will be unexported ModeUnknown mode = 0 // ModeSend is used for a file exchange from the client to the server. // Deprecated 1.0.0 will be unexported ModeSend mode = 1 // ModeRecv is used for a file exchange from the server to the client. // Deprecated 1.0.0 will be unexported ModeRecv mode = 2 // ModeSendMD5 is used for a file exchange from the client to the server. // Each data block transmited will carry its hash validation. // Deprecated 1.0.0 will be unexported ModeSendMD5 mode = 3 // ModeRecvMD5 is used for a file exchange from the server to the client. // Each data block transmited will carry its hash validation. // Deprecated 1.0.0 will be unexported ModeRecvMD5 mode = 4 // ModeSendThrough is used for a file exchange from the client to the server. // The server should not store the file but send it to another server. // This mode is not enforced by the library. // Deprecated 1.0.0 will be unexported ModeSendThrough mode = 5 // ModeRecvThrough is used for a file exchange from the server to the client. // The client should not store the file but send it to another server. // This mode is not enforced by the library. // Deprecated 1.0.0 will be unexported ModeRecvThrough mode = 6 // ModeSendMD5Through is used for a file exchange from the client to the server. // The server should not store the file but send it to another server. // This mode is not enforced by the library. // Each data block transmited will carry its hash validation. // Deprecated 1.0.0 will be unexported ModeSendMD5Through mode = 7 // ModeRecvMD5Through is used for a file exchange from the server to the client. // The client should not store the file but send it to another server. // This mode is not enforced by the library. // Each data block transmited will carry its hash validation. // Deprecated 1.0.0 will be unexported ModeRecvMD5Through mode = 8 )
FIXME 1.0.0 mode should be its own type (cf infoRequest or globalStep)
Variables ¶
var ( // InfoFile is used to request the existence or not of a single file. InfoFile infoRequest = infoRequest{0} // InfoFileDetails is used to request the full details of a single file. InfoFileDetails infoRequest = infoRequest{1} // InfoList is used to request the existence of a list of files matching // a pattern. InfoList infoRequest = infoRequest{2} // InfoListDetails is used to request the fule details of a list of files // matching a pattern. InfoListDetails infoRequest = infoRequest{3} // StepNoTask indicates the transfer has not yet started. StepNoTask globalStep = globalStep{0} // StepPreTask indicates the transfer is in a state before the transfer of data. StepPreTask globalStep = globalStep{1} // StrepTransfer indicates the transfer of the data is in process. StrepTransfer globalStep = globalStep{2} // StepPost indicates the transfer of the data is complete. StepPost globalStep = globalStep{3} // StepDone indicates the transfer of the file is complete. StepDone globalStep = globalStep{4} // StepError indicates the transfer is in error. StepError globalStep = globalStep{5} )
var ErrBadProtocol = &Error{ Code: Internal, Detail: "Protocol error: unexpected packet", }
ErrBadProtocol is returned when handlers receive unexpected packets
var ErrMisformedPacket = &Error{ Code: Internal, Detail: "Protocol error: misformed packet", }
ErrMisformedPacket is returned when hadnlers receive misformed packets
ErrUninplementedPacket is returned when handlers receive packets they cannot process
var ErrUnsupportedFeature = &Error{ Code: Unimplemented, Detail: "Remote server doesn't support this feature", }
ErrUnsupportedFeature is returned when the implementation doesn't support the requested feature
Functions ¶
func CryptPass ¶
CryptPass returns a hashed version of the password according to R66
func GetHasher ¶
GetHasher return a new hasher of the specified algorithm
func HashBlock ¶
HashBlock returns the hash of the profided byte array according to the specified algorithm
func HashFile ¶
HashFile returns the hash of the profided file according to the specified algorithm
func IsBeforePostTask ¶
IsBeforePostTask returns true if the code provided is an operation before the post tasks
func IsBeforePreTask ¶
IsBeforePreTask returns true if the code provided is an operation before the pre tasks
func IsBeforeTransfer ¶
IsBeforeTransfer returns true if the code provided is an operation before the transfer
func IsError ¶
IsError returns true if the code provided is an error code
func IsMD5 ¶
IsMD5 return true if the provided mode is a hashed mode Deprecated 1.0.0 will be unexported
func IsPassThrough ¶
IsPassThrough return true if the provided mode is a passthrough mode Deprecated 1.0.0 will be unexported
Types ¶
type AdminHandler ¶
type AdminHandler interface { Shutdown(password []byte, restart bool) error BlockRequest(password []byte, block bool) error }
AdminHandler is the interface that handle shutdown and block transfers request.
Shutdown verifies password and halt the server if restart if false or restart it if is true. Shutdown returns an error if the halt request is refused or fails.
BlockRequest verifies password and prevent the server from accepting new transfer request if block is true or allows it to accept new transfer request is block is false. BlockRequest returns an error if the block request is refused or fails.
Implementations of Shutdown and BlockRequest are encouraged to return a Error (rather than a builtin error).
type Authent ¶
type Authent struct { Login string Password []byte Version string // Refused < 3.0.0 Address string // usefull ? Filesize bool FinalHash bool Digest string // Must be SHA-256 Proxified bool Separator rune // Must be ';' TLS *tls.ConnectionState }
Authent is a structure providing information to authentified an R66 session
type AuthentHandler ¶
type AuthentHandler interface {
ValidAuth(*Authent) (SessionHandler, error)
}
AuthentHandler is an interface responsible to authorize new R66 session If ValidAuth returns a nil error SessionHandler MUST NOT be nil. If a non nil error is returned the authententication is concidered in error.
type Bandwidth ¶
type Bandwidth struct { // GlobalReadLimit is the upper limit (in o/s) at which the server reads // network packets. GlobalReadLimit int64 // GlobalWriteLimit is the upper limit (in o/s) at which the server writes // network packets. GlobalWriteLimit int64 // SessionReadLimit is the upper limit (in o/s) at which the server reads // packets for a given transfer. SessionReadLimit int64 // SessionWriteLimit is the upper limit (in o/s) at which the server // writes packet for a given transfer. SessionWriteLimit int64 }
Bandwidth is a structure representing information about the server's bandwidth limitations.
type BandwidthHandler ¶
type BandwidthHandler interface { GetBandwidth() (*Bandwidth, error) SetBandwidth(*Bandwidth) (*Bandwidth, error) }
BandwidthHandler is the interface that handle get and set operations on the server bandwidth limitations.
GetBandwidth returns the current Bandwidth limitations of the server. GetBandwidth returns an error if the bandwidth request is refused or fails.
SetBandwidth updates the current Bandwidth limitations of the server and returns the new value of these limitations. SetBandwidth returns an error if the bandwidth update is refused or fails.
Implementations of GetBandwidth and SetBandwidth are encouraged to return an Error (rather than a builtin error).
type BasicAuthentHandler ¶
type BasicAuthentHandler struct { Root string Logger *log.Logger AcceptAuth bool AcceptRequest bool }
BasicAuthentHandler is a simple AuthentHandler which accept all request.
func (*BasicAuthentHandler) ValidAuth ¶
func (h *BasicAuthentHandler) ValidAuth(auth *Authent) (SessionHandler, error)
ValidAuth accepts all authent and return a basic implementation of SessionHandler.
type BasicSessionHandler ¶
type BasicSessionHandler struct {
// contains filtered or unexported fields
}
BasicSessionHandler is a simple SessionHandler which accept all request.
func (*BasicSessionHandler) GetFileInfo ¶
func (h *BasicSessionHandler) GetFileInfo(rule string, filename string) ([]FileInfo, error)
GetFileInfo returns the information of the file requested
func (*BasicSessionHandler) ValidRequest ¶
func (h *BasicSessionHandler) ValidRequest(req *Request) (t TransferHandler, err error)
ValidRequest accepts all request and return a basic implementation of TransferHandler.
type BasicTransferHandler ¶
type BasicTransferHandler struct { File string Size int64 UserContent string // contains filtered or unexported fields }
BasicTransferHandler is a simple TransferHandler which run no Tasks.
func (*BasicTransferHandler) GetHash ¶
func (h *BasicTransferHandler) GetHash() ([]byte, error)
GetHash returns the hash of the transfered file according to the hasher of the handler
func (*BasicTransferHandler) GetStream ¶
func (h *BasicTransferHandler) GetStream() (utils.ReadWriterAt, error)
GetStream opens the file if first called and return it as an ReadWriter
func (*BasicTransferHandler) UpdateTransferInfo ¶
func (h *BasicTransferHandler) UpdateTransferInfo(i *UpdateInfo) error
UpdateTransferInfo modifies the informations about the transfered file according to the providing informations
func (*BasicTransferHandler) ValidEndRequest ¶
func (h *BasicTransferHandler) ValidEndRequest() error
ValidEndRequest closes the file
func (*BasicTransferHandler) ValidEndTransfer ¶
func (h *BasicTransferHandler) ValidEndTransfer(e *EndTransfer) error
ValidEndTransfer does nothing
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client represents a connection to a r66 server
func Dial ¶
Dial connects to the address and returns an R66 Client. If provided the logger will give additional information.
func DialTLS ¶
DialTLS connects to the address and returns an R66 Client using the provided tls configuration. If provided the logger will give additional information.
func NewClient ¶
NewClient returns an R66 Client using the provided connection. If provided the logger will give additional information.
type ClientAuthentHandler ¶
type ClientAuthentHandler interface {
ValidAuth(*Authent) (RequestHandler, error)
}
ClientAuthentHandler is an interface responsible to authorize new R66 session Deprecated 1.0.0 will be removed
type Config ¶
Config is used to configure a R66 client or server. After one has been passed to an R66 function it must not be modified. A config should not be reused; the package r66 will modify it.
func (*Config) Clone ¶
Clone returns a copy of the provided configuration.
type EndTransfer ¶
type EndTransfer struct { // Hash is the hash of the file transfered. Hash []byte }
EndTransfer is a structure providing information to valid the correctness of the transfer.
type Error ¶
Error is a representation of an R66 error with a code and a message associated
func GetError ¶
func GetError(p *packet.ErrorPacket) *Error
GetError return the error contained in the provided ErrorPacket
type ErrorTasker ¶
ErrorTasker is the interface that handle custom operations if the file transfer fails. A TransferHandler can be a ErrorTasker if such operations are wanted.
type FileInfo ¶
type FileInfo struct { // Name is the filepath of the file Name string // Size is the size (in o) of the file Size int64 // LastModify is the last date at which the file has been modified LastModify time.Time // The type of the file (file, directory, link, ...) Type string // The permission on the file Permission string }
FileInfo is a structure representing information on a file of the server filesystem.
type InfoHandler ¶
type InfoHandler interface { GetTransferInfo(ID int64, isClient bool) (*TransferInfo, error) GetFileInfo(rule string, patern string) ([]FileInfo, error) }
InfoHandler is the interface that handle requests about the filesystem of the serveer and information about current or past transfers.
GetTransferInfo returns the transfer informations with the given ID. GetTransferInfo returns an error if the information request fails.
GetFileInfo returns information about files matching the requested patern in the context of the provided rules (if the files can be requested with the rule). GetFileInfo returns an error if the rule is unknown, if no files matches the requested pattern or if the filesystem request fails.
Implementations of GetFileInfo are discourages from returning an empty FileInfo array with a nil error.
Implementations of GetTransferInfo and GetFileInfo are encouraged to return an Error (rather than a builtin error).
type PostTasker ¶
type PostTasker interface {
RunPostTask() error
}
PostTasker is the interface that handle custom operations after the file is transfered. A TransferHandler can be a PostTasker if such operations are wanted.
type PreTasker ¶
type PreTasker interface {
RunPreTask() (*UpdateInfo, error)
}
PreTasker is the interface that handle custom operations before the file is transfered. A TransferHandler can be a PreTasker if such operations are wanted.
RunPreTask returns an UpdateInfo if the file trnasfered undergone modifications during the PreTasks (compression, renaming, ...). RunPreTask returns an error if the transfer cannot proceed. RunPreTask can return a nil UpdateInfo and a nil error if the file transfered has been left unchanged.
type Request ¶
type Request struct { ID int64 Filepath string FileSize int64 Rule string IsRecv bool // TODO: Rename to isPull IsMD5 bool Block uint32 Rank uint32 Code rune // Should be ignored Limit uint32 // FIXME: Should be moved to requestInfo Infos string // FIXME: 1.0.0 rename to UserContent }
Request is a structure reprensenting informations about a transfer request.
type RequestHandler ¶
type RequestHandler interface {
ValidRequest(*Request) (TransferHandler, error)
}
A RequestHandler is the interface that handle the validation of received transfer request.
ValidRequest returns a TransferHandler which will be called during the actual file transfer. ValidRequest returns an error if the transfer request cannot be proceded or is refused. ValidRequest should not returns a nil TransferHandler with a nil error.
type RequestInfo ¶
RequestInfo is a struct reprensenting updated informations about a transfer. DEPRECATED
type Server ¶
type Server struct { // Login is the hostid sent by the server to the client for authentication Login string // Password is the secret sent by the server to the client for authentication Password []byte // Config is the R66 configuration used by the server Conf *Config // Handler defines how the server will handle the client requests Handler AuthentHandler // Logger allows to monitor the server processes Logger *log.Logger // contains filtered or unexported fields }
Server defines parameters for running an R66 server. The zero value for Server is NOT a valid configuration. You should at least fill Login and Password.
func (*Server) IsClosed ¶
IsClosed returns true once the server has been closed.
func (*Server) IsListening ¶
IsListening returns true while the server is listening.
func (*Server) IsStarting ¶
IsStarting returns true if the server is starting and not listening yet.
func (*Server) ListenAndServe ¶
ListenAndServe listens on the TCP network address ip and then calls Serve to handle requests on incoming connections. ListenAndServe always returns a non-nil error. After Shutdown or Close, the returned error is ErrServerClosed. TODO ErrServerClosed ???
func (*Server) ListenAndServeTLS ¶
ListenAndServeTLS listens on the TCP network address ip using the provided TLS connection and then calls Serve to handle requests on incoming connections. ListenAndServeTLS always returns a non-nil error. After Shutdown or Close, the returned error is ErrServerClosed. TODO ErrServerClosed ???
func (*Server) Serve ¶
Serve accepts incoming connections on the Listener l, creating a new service goroutine for each. The service goroutines read requests and then call srv.Handler to reply to them. Serve always returns a non-nil error and closes l. After Shutdown or Close, the returned error is ErrServerClosed. TODO ErrServerClosed ???
func (*Server) Shutdown ¶
Shutdown gracefully shuts down the server without interrupting any active connections. Shutdown works by first closing all open listeners, then closing all idle connections, and then waiting indefinitely for connections to return to idle and then shut down. If the provided context expires before the shutdown is complete, Shutdown returns the context's error, otherwise it returns any error returned from closing the Server's underlying Listener(s).
type Session ¶
type Session struct {
// contains filtered or unexported fields
}
Session is an R66 Session.
It is advised to manualy close the session before closing the connection.
Sessions should be used by the same goroutine
func (*Session) Authent ¶
Authent sends the given authentication to the remote server and return an authentified session if the authent process complete successfuly
func (*Session) BlockRequest ¶
BlockRequest request the blocking of new transfer requests on the server.
func (*Session) Cancel ¶
Cancel sends the server a message to cancel the transfer (stop with no resume).
Cancel returns an error if the session has no transfer is currently running or if the operation fails.
func (*Session) Close ¶
func (ses *Session) Close()
Close terminates the session and removes it from the connection's sessions list
func (*Session) EndRequest ¶
EndRequest finishes the transfer.
Recv returns an error if the session cannot end the transfer or if the operation fails.
func (*Session) GetBandwidth ¶
GetBandwidth request the current bandwitdh limitations of the server.
func (*Session) GetFileInfo ¶
GetFileInfo requests the server for informations about the provided file pattern and rule.
GetFileInfo returns a list of FileInfo. If InfoFile or InfoFileDetails are provided as request info will contain 1 entry. If InfoFile or InfoList are provided only the the Name field of FileInfo will be fulfield.
GetFileInfo returns an error if the server retruns an error, or if a connection error occurs. Deprecated 1.0.0 remove use GetFileInfoV2 instead
func (*Session) GetFileInfoV2 ¶
func (ses *Session) GetFileInfoV2(pattern, rule string, request infoRequest) (info []FileInfo, err error)
GetFileInfoV2 requests the server for informations about the provided file pattern and rule.
GetFileInfoV2 returns a list of FileInfo. If InfoFile or InfoFileDetails are provided as request info will contain 1 entry. If InfoFile or InfoList are provided only the the Name field of FileInfo will be fulfield.
GetFileInfoV2 returns an error if the server retruns an error, or if a connection error occurs.
func (*Session) GetTransferInfo ¶
func (ses *Session) GetTransferInfo(id int64) (info *TransferInfo, err error)
GetTransferInfo requests the server for informations about the provided transfer.
GetTransferInfo returns a TransferInfo. GetFileInfo returns an error if the server retruns an error, or if a connection error occurs.
func (*Session) Recv ¶
func (ses *Session) Recv(stream io.WriterAt) (eot *EndTransfer, err error)
Recv writes the content sent by the server in the provided WriterAt.
Recv returns the EndTransfer information provided by the server. Recv returns an error if the session cannot write the file or if the operation fails.
func (*Session) RecvUpdateRequest ¶
func (ses *Session) RecvUpdateRequest() (res *UpdateInfo, err error)
RecvUpdateRequest waits for an modification of the transmited file from the server.
Updates return the new information (name, size, ...) of the file transfered. Update returns an error if the session cannot sends the update or if the operation fails.
This method must only be called for a pull transfer (Recv, RecvMD5, ...). You should always call this function after Request and before Recv.
func (*Session) Request ¶
Request sends the request provided to the server then wait and valid the server response.
Request returns a Request containing the information of the request. Request returns an error if the session cannot sends the request or if the operation failed.
func (*Session) Send ¶
func (ses *Session) Send(stream io.ReaderAt, getHash func() ([]byte, error)) (eot *EndTransfer, err error)
Send transmits the content of the provided ReaderAt to the server. Send finish the file transfer by sending the hash returned by the getHash function.
Send returns the EndTransfer information sent by the server. Send returns an error if the session cannot sends the file or if the operation fails.
getHash must returns the hash of the complete file even in the case of a resumed transfered where the file is partialy transmited.
func (*Session) SendError ¶
SendError creates an ErrorPacket from the provided error and sends it to the connection returns nothing network error are checked at reading
func (*Session) SendUpdateRequest ¶
func (ses *Session) SendUpdateRequest(infos *UpdateInfo) (err error)
SendUpdateRequest sends the modification of the transmited file to the server.
Update returns an error if the session cannot sends the update or if the operation fails.
This method must only be called for a push transfer (Send, SendMD5, ...). If the transfered file was not changed between the request and the transfer this function is optional.
func (*Session) SetBandwidth ¶
SetBandwidth request a modification of the current bandwitdh limitations of the server.
func (*Session) Shutdown ¶
Shutdown request the extinction of the server.
func (*Session) Stop ¶
Stop sends the server a message to stop the transfer.
Stop returns an error if the session has no transfer is currently running or if the operation fails.
type SessionHandler ¶
type SessionHandler interface { RequestHandler }
SessionHandler is an interface responsible to handle r66 request (transfer, information, admin, ...)
type SystemData ¶
type SystemData struct { // FollowID is an ID that can be transmited with the file along a chain of // transfers. FollowID int `json:"follow,omitempty"` }
SystemData is a structure representing informations to caracterise transfer.
type TransferData ¶
type TransferData struct { // UserContent is additional information provided on a transfer basis. UserContent string // SystemData are additional information to caracterized the transfer. SystemData SystemData }
TransferData is a structure representing additional information about a transfer (not directly related to the file transfered).
type TransferHandler ¶
type TransferHandler interface { UpdateTransferInfo(*UpdateInfo) error GetStream() (utils.ReadWriterAt, error) GetHash() ([]byte, error) ValidEndTransfer(*EndTransfer) error ValidEndRequest() error }
TransferHandler is the interface that handle the operations required during a file transfer.
UpdateTransferInfo is called to update transfer informations after the request has been validated but before the any data has been transmited. UpdateTransferInfo returns an error if the information update is refused.
GetStream returns a ReadWriterAt to read or write the file transfered. GetStream returns an error if a filesystem error occurs. GetStreal should not returns a nil ReadWriterAt with a nil error.
ValidEndTransfer is called when the file has been completly transfered. ValidEndTransfer returns an error if the file transfered is invalid (hash, size, fylesystem, ...)
ValidEndRequest is called when at the end of the Transfer one all operations are done.
type TransferInfo ¶
type TransferInfo struct { // ID is the unique identifier of the transfer. ID int64 // Client is the login used by the client of the transfer. Client string // FIXME: Change name for ClientLogin // Server is the login used by the server of the transfer. Server string // FIXME: Change name for ServerLogin // File is the path of the file which is transfered. File string // FIXME: Change name for Filepath // Rule is the name of the rule used for the transfer. Rule string // IsRecv is true if the file is transfered from the server to the client. // IsRecv is false if the file is pushed from the cliend to the server. IsRecv bool // IsMd5 is true if each block of the transfered file is transfered with its control hash. IsMd5 bool // IsThrough is true if the transfered file is supposed to be directly retransfered. // This mode is not enforced by this library. IsThrough bool // RuleMode is the transfer mode used for the transfer. // Deprecated 1.0.0 will be removed RuleMode uint32 // Info is the additional information provided by the user for the // transfer. // Deprecated 1.0.0 use UserContent instead Info string // UserContent is the additional information provided by the user for the // transfer. UserContent string // BlockSize is the size of the block (in o) used for the transfer. BlockSize uint32 // Rank is the number of block successfully transferd Rank uint32 // Step is the Step globalStep // GlobalStep Status rune // Step or LastGlobalStep // Start is the date/time at which the transfer started. Start time.Time // Stoped is the date/time at which the transfer stopped. Stop time.Time }
TransferInfo is a structure representing information on a transfer performed by the server.
type UpdateInfo ¶
type UpdateInfo struct { // Filename is the new path of the transfered file. Filename string // FIXME: rename for filepath // FileSize is the new size of the transferd file. FileSize int64 // FileInfo are additional information about the transfer. FileInfo *TransferData }
UpdateInfo is a struct reprensenting updated informations about a transfer.
type Version ¶
Version is a representation of a protocol version
func CurrentVersion ¶
func CurrentVersion() Version
CurrentVersion returns the implemented version of the protocol
func ParseVersion ¶
ParseVersion the provided string in a Version struct
func SupportedVersion ¶
func SupportedVersion() Version
SupportedVersion returns the minimum version of the protocol compatible with this library
func (Version) IsGreater ¶
IsGreater returns true if the provided Version is srictly inferior to the comparee
Source Files
¶
- basic_handler.go
- client.go
- client_session.go
- client_session_information.go
- client_session_other.go
- client_session_transfer.go
- config.go
- connection.go
- error.go
- handler_info.go
- handler_transfer.go
- handlers.go
- hash.go
- logger.go
- mode.go
- results.go
- server.go
- server_session.go
- session.go
- session_state.go
- test_utils.go
- transfer_context.go
- utils.go
- version.go