Documentation ¶
Index ¶
- type Client
- func (c Client) Receive(filename string, mode string) (io.WriterTo, error)
- func (c *Client) RequestTSize(s bool)
- func (c Client) Send(filename string, mode string) (io.ReaderFrom, error)
- func (c *Client) SetBackoff(h backoffFunc)
- func (c *Client) SetBlockSize(s int)
- func (c *Client) SetRetries(count int)
- func (c *Client) SetTimeout(t time.Duration)
- type Hook
- type IncomingTransfer
- type OutgoingTransfer
- type RequestPacketInfo
- type Server
- func (s *Server) EnableSinglePort()
- func (s *Server) ListenAndServe(addr string) error
- func (s *Server) Serve(conn net.PacketConn) error
- func (s *Server) SetAnticipate(winsz uint)
- func (s *Server) SetBackoff(h backoffFunc)
- func (s *Server) SetBlockSize(i int)
- func (s *Server) SetHook(hook Hook)
- func (s *Server) SetRetries(count int)
- func (s *Server) SetTimeout(t time.Duration)
- func (s *Server) Shutdown()
- type TransferStats
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Client ¶
type Client struct {
// contains filtered or unexported fields
}
Client stores data about a single TFTP client
func (*Client) RequestTSize ¶
RequestTSize sets flag to indicate if tsize should be requested.
func (*Client) SetBackoff ¶
func (c *Client) SetBackoff(h backoffFunc)
SetBackoff sets a user provided function that is called to provide a backoff duration prior to retransmitting an unacknowledged packet.
func (*Client) SetBlockSize ¶
SetBlockSize sets a custom block size used in the transmission.
func (*Client) SetRetries ¶
SetRetries sets maximum number of attempts client made to transmit a packet. Default is 5 attempts.
func (*Client) SetTimeout ¶
SetTimeout sets maximum time client waits for single network round-trip to succeed. Default is 5 seconds.
type Hook ¶
type Hook interface { OnSuccess(stats TransferStats) OnFailure(stats TransferStats, err error) }
Hook is an interface used to provide the server with success and failure hooks
type IncomingTransfer ¶
type IncomingTransfer interface { // Size returns the size of an incoming file if the request included the // tsize option (see RFC2349). To differentiate a zero-sized file transfer // from a request without tsize use the second boolean "ok" return value. Size() (n int64, ok bool) // RemoteAddr returns the remote peer's IP address and port. RemoteAddr() net.UDPAddr }
IncomingTransfer provides methods that expose information associated with an incoming transfer.
type OutgoingTransfer ¶
type OutgoingTransfer interface { // SetSize is used to set the outgoing transfer size (tsize option: RFC2349) // manually in a server write transfer handler. // // It is not necessary in most cases; when the io.Reader provided to // ReadFrom also satisfies io.Seeker (e.g. os.File) the transfer size will // be determined automatically. Seek will not be attempted when the // transfer size option is set with SetSize. // // The value provided will be used only if SetSize is called before ReadFrom // and only on in a server read handler. SetSize(n int64) // RemoteAddr returns the remote peer's IP address and port. RemoteAddr() net.UDPAddr }
OutgoingTransfer provides methods to set the outgoing transfer size and retrieve the remote address of the peer.
type RequestPacketInfo ¶
type RequestPacketInfo interface { // LocalIP returns the IP address we are servicing the request on. // If it is unable to determine what address that is, the returned // net.IP will be nil. LocalIP() net.IP }
RequestPacketInfo provides a method of getting the local IP address that is handling a UDP request. It relies for its accuracy on the OS providing methods to inspect the underlying UDP and IP packets directly.
type Server ¶
Server is an instance of a TFTP server
func NewServer ¶
func NewServer(readHandler func(filename string, rf io.ReaderFrom) error, writeHandler func(filename string, wt io.WriterTo) error) *Server
NewServer creates TFTP server. It requires two functions to handle read and write requests. In case nil is provided for read or write handler the respective operation is disabled.
func (*Server) EnableSinglePort ¶
func (s *Server) EnableSinglePort()
EnableSinglePort enables an experimental mode where the server will serve all connections on port 69 only. There will be no random TIDs on the server side.
Enabling this will negatively impact performance
func (*Server) ListenAndServe ¶
ListenAndServe binds to address provided and start the server. ListenAndServe returns when Shutdown is called.
func (*Server) Serve ¶
func (s *Server) Serve(conn net.PacketConn) error
Serve starts server provided already opened UDP connection. It is useful for the case when you want to run server in separate goroutine but still want to be able to handle any errors opening connection. Serve returns when Shutdown is called.
func (*Server) SetAnticipate ¶
SetAnticipate provides an experimental feature in which when a packets is requested the server will keep sending a number of packets before checking whether an ack has been received. It improves tftp downloading speed by a few times. The argument winsz specifies how many packets will be sent before waiting for an ack packet. When winsz is bigger than 1, the feature is enabled, and the server runs through a different experimental code path. When winsz is 0 or 1, the feature is disabled.
func (*Server) SetBackoff ¶
func (s *Server) SetBackoff(h backoffFunc)
SetBackoff sets a user provided function that is called to provide a backoff duration prior to retransmitting an unacknowledged packet.
func (*Server) SetBlockSize ¶
SetBlockSize sets the maximum size of an individual data block. This must be a value between 512 (the default block size for TFTP) and 65456 (the max size a UDP packet payload can be).
This is an advisory value -- it will be clamped to the smaller of the block size the client wants and the MTU of the interface being communicated over munis overhead.
func (*Server) SetRetries ¶
SetRetries sets maximum number of attempts server made to transmit a packet. Default is 5 attempts.
func (*Server) SetTimeout ¶
SetTimeout sets maximum time server waits for single network round-trip to succeed. Default is 5 seconds.
func (*Server) Shutdown ¶
func (s *Server) Shutdown()
Shutdown make server stop listening for new requests, allows server to finish outstanding transfers and stops server. Shutdown blocks until all outstanding requests are processed or timed out. Calling Shutdown from the handler or hook might cause deadlock.