Documentation ¶
Overview ¶
Package server provides a high level API for implementing the XRootD server following protocol from http://xrootd.org.
This package contains an implementation of the general requests such as handshake, protocol, and login inside the default Handler which can be obtained via Default.
Example ¶
addr := "0.0.0.0:1094" listener, err := net.Listen("tcp", addr) if err != nil { log.Fatalf("could not listen on %q: %v", addr, err) } srv := New(Default(), func(err error) { log.Printf("an error occured: %v", err) }) log.Printf("listening on %v...", listener.Addr()) if err = srv.Serve(listener); err != nil { log.Fatalf("could not serve: %v", err) }
Output:
Index ¶
Examples ¶
Constants ¶
This section is empty.
Variables ¶
var ErrServerClosed = errors.New("xrootd: server closed")
ErrServerClosed is returned by the Server's Serve method after a call to Shutdown.
Functions ¶
This section is empty.
Types ¶
type ErrorHandler ¶
type ErrorHandler func(error)
ErrorHandler is the function which handles occurred error (e.g. logs it).
type Handler ¶
type Handler interface { // Handshake handles the XRootD handshake: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248784. Handshake() (xrdproto.Marshaler, xrdproto.ResponseStatus) // Login handles the XRootD login request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248819. Login(sessionID [16]byte, request *login.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Protocol handles the XRootD protocol request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248827. Protocol(sessionID [16]byte, request *protocol.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Dirlist handles the XRootD dirlist request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248815. Dirlist(sessionID [16]byte, request *dirlist.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // CloseSession handles the aborting of user session. This can be used to free some user-related data. CloseSession(sessionID [16]byte) error // Open handles the XRootD open request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248823. Open(sessionID [16]byte, request *open.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Close handles the XRootD close request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248813. Close(sessionID [16]byte, request *xrdclose.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Read handles the XRootD read request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248841. Read(sessionID [16]byte, request *read.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Write handles the XRootD write request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248855. Write(sessionID [16]byte, request *write.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Stat handles the XRootD stat request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248850. Stat(sessionID [16]byte, request *stat.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Sync handles the XRootD sync request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248852. Sync(sessionID [16]byte, request *sync.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Truncate handles the XRootD truncate request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248853. Truncate(sessionID [16]byte, request *truncate.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) // Rename handles the XRootD mv request: http://xrootd.org/doc/dev45/XRdv310.htm#_Toc464248822. Rename(sessionID [16]byte, request *mv.Request) (xrdproto.Marshaler, xrdproto.ResponseStatus) }
Handler provides a high-level API for the XRootD server. The Handler receives a parsed request and returns a response together with the status that will be send via Server to the client.
func Default ¶
func Default() Handler
Default returns the defaultHandler implementing Handler with some general functionality added. Any unimplemented request returns InvalidRequest error.
func NewFSHandler ¶
NewFSHandler creates a Handler that passes requests to the backing filesystem at basePath.
type Server ¶
type Server struct {
// contains filtered or unexported fields
}
Server implements the XRootD server following protocol from http://xrootd.org. The Server uses a Handler to handle incoming requests. To listen for incoming connections, Serve method must be called. It is possible to configure to listen on several ports simultaneously by calling Serve with different net.Listeners.
func New ¶
func New(handler Handler, errorHandler ErrorHandler) *Server
New creates a XRootD server which uses specified handler to handle requests and errorHandler to handle errors. If the errorHandler is nil, then a default error handler is used that does nothing.