Documentation ¶
Overview ¶
Package protocol contains the XRootD protocol specific types and methods to handle them, such as marshalling and unmarshalling requests.
Index ¶
- Constants
- func Opaque(path string) string
- func ReadRequest(r io.Reader) ([]byte, error)
- func ReadResponseWithReuse(r io.Reader, headerBytes []byte, header *ResponseHeader) ([]byte, error)
- func SetOpaque(path *string, opaque string)
- func WriteResponse(w io.Writer, streamID StreamID, status ResponseStatus, resp Marshaler) error
- type DataRequest
- type DataRequestDirection
- type FilepathRequest
- type Marshaler
- type PathID
- type Request
- type RequestHeader
- type RequestLevel
- type Response
- type ResponseHeader
- type ResponseStatus
- type SecurityLevel
- type SecurityOverride
- type ServerError
- type ServerErrorCode
- type ServerType
- type StreamID
- type Unmarshaler
- type WaitResponse
Constants ¶
const RequestHeaderLength = 2 + 2
RequestHeaderLength is the length of the RequestHeader in bytes.
const ResponseHeaderLength = 2 + 2 + 4
ResponseHeaderLength is the length of the ResponseHeader in bytes.
const SecurityOverrideLength = 2
SecurityOverrideLength is the length of SecurityOverride in bytes.
Variables ¶
This section is empty.
Functions ¶
func ReadRequest ¶
ReadRequest reads a XRootD request from r. ReadRequest returns entire payload of the request including header. ReadRequest requires serialization since multiple ReadFull calls are made.
func ReadResponseWithReuse ¶
ReadResponseWithReuse reads a XRootD response from r. A response header is read into headerBytes and unmarshaled to header for the reusing reasons. ReadResponseWithReuse returns the response body. ReadResponseWithReuse requires serialization since multiple ReadFull calls are made.
func WriteResponse ¶
WriteResponse writes a XRootD response resp to the w. The response is directed to the stream with id equal to the streamID. The status is sent as part of response header. WriteResponse writes all data to the w as single Write call, so no serialization is required.
Types ¶
type DataRequest ¶
type DataRequest interface { // PathID returns an identifier of the socket which should be used to read or write a data. PathID() PathID // SePathID sets the identifier of the socket which should be used to read or write a data. SetPathID(pathID PathID) // Direction returns the direction of the request: either reading or writing. Direction() DataRequestDirection // PathData returns the data which should be send to the data socket. PathData() []byte }
DataRequest is the request that operate over 2 sockets. One socket is used for sending the request and other is used to send or receive data.
type DataRequestDirection ¶
type DataRequestDirection int
DataRequestDirection is the direction of the request: either reading or writing.
const ( // DataRequestRead indicates that request has reading direction. // In other words, the request obtains a data from the server. DataRequestRead DataRequestDirection = iota // DataRequestWrite indicates that request has writing direction. // In other words, the request sends a data to the server. DataRequestWrite )
type FilepathRequest ¶
type FilepathRequest interface { Opaque() string // Opaque returns opaque data from this request. SetOpaque(opaque string) // SetOpaque sets opaque data for this request. }
FilepathRequest is a request that contains file paths. This interface is used to append opaque data to the request. Opaque data is received as part of the redirect response.
type Marshaler ¶
Marshaler is the interface implemented by a type that can marshal itself into a binary form, following the XRootD protocol.
MarshalXrd encodes the receiver into a binary form and returns the result.
type PathID ¶
type PathID byte
PathID is the socket identifier. It may be used in read and write requests to indicate which socket should be used for a response or as a source of data.
type Request ¶
type Request interface { // ReqID uniquely identifies the type of a request. ReqID() uint16 // ShouldSign indicates whether this request should be signed if security level is SignLikely. // For the list of actual examples see XRootD protocol specification v. 3.1.0, p.76. ShouldSign() bool Marshaler Unmarshaler }
Request is a XRootD request issued to a server.
type RequestHeader ¶
ResponseHeader is the header that precedes all requests (we are interested in StreamID and RequestID, actual request parameters are a part of specific request).
func (RequestHeader) MarshalXrd ¶
func (o RequestHeader) MarshalXrd(wBuffer *xrdenc.WBuffer) error
MarshalXrd implements Marshaler.
func (*RequestHeader) UnmarshalXrd ¶
func (o *RequestHeader) UnmarshalXrd(rBuffer *xrdenc.RBuffer) error
UnmarshalXrd implements Unmarshaler.
type RequestLevel ¶
type RequestLevel byte
RequestLevel is the security requirement that the associated request is to have.
const ( SignNone RequestLevel = 0 // SignNone indicates that the request need not to be signed. SignLikely RequestLevel = 1 // SignLikely indicates that the request must be signed if it modifies data. SignNeeded RequestLevel = 2 // SignNeeded indicates that the request mush be signed. )
type Response ¶
type Response interface { RespID() uint16 Marshaler Unmarshaler }
Response is a XRootD response returned by the server
type ResponseHeader ¶
type ResponseHeader struct { StreamID StreamID Status ResponseStatus DataLength int32 }
ResponseHeader is the header that precedes all responses (see xrootd protocol specification).
func ReadResponse ¶
func ReadResponse(r io.Reader) (ResponseHeader, []byte, error)
ReadResponse reads a XRootD response from r. ReadResponse returns the response header and the response body. ReadResponse requires serialization since multiple ReadFull calls are made.
func (ResponseHeader) Error ¶
func (hdr ResponseHeader) Error(data []byte) error
Error returns an error received from the server or nil if request hasn't failed.
func (ResponseHeader) MarshalXrd ¶
func (o ResponseHeader) MarshalXrd(wBuffer *xrdenc.WBuffer) error
MarshalXrd implements xrdproto.Marshaler
func (*ResponseHeader) UnmarshalXrd ¶
func (o *ResponseHeader) UnmarshalXrd(rBuffer *xrdenc.RBuffer) error
UnmarshalXrd implements xrdproto.Unmarshaler
type ResponseStatus ¶
type ResponseStatus uint16
ResponseStatus is the status code indicating how the request completed.
const ( // Ok indicates that request fully completed and no addition responses will be forthcoming. Ok ResponseStatus = 0 // OkSoFar indicates that server provides partial response and client should be prepared // to receive additional responses on same stream. OkSoFar ResponseStatus = 4000 // Error indicates that an error occurred during request handling. // Error code and error message are sent as part of response (see xrootd protocol specification v3.1.0, p. 27). Error ResponseStatus = 4003 // Redirect indicates that the client must re-issue the request to another server. Redirect ResponseStatus = 4004 // Wait indicates that the client must wait the indicated number of seconds and retry the request. Wait ResponseStatus = 4005 )
type SecurityLevel ¶
type SecurityLevel byte
SecurityLevel is the predefined security level that specifies which requests should be signed. See specification for details: http://xrootd.org/doc/dev45/XRdv310.pdf, p. 75.
const ( // NoneLevel indicates that no request needs to be signed. NoneLevel SecurityLevel = 0 // Compatible indicates that only potentially destructive requests need to be signed. Compatible SecurityLevel = 1 // Standard indicates that potentially destructive requests // as well as certain non-destructive requests need to be signed. Standard SecurityLevel = 2 // Intense indicates that request that may reveal metadata or modify data need to be signed. Intense SecurityLevel = 3 // Pedantic indicates that all requests need to be signed. Pedantic SecurityLevel = 4 )
type SecurityOverride ¶
type SecurityOverride struct { RequestIndex byte RequestLevel RequestLevel }
SecurityOverride is an alteration needed to the specified predefined security level. It consists of the request index and the security requirement the associated request should have. Request index is calculated as:
(request code) - (request code of Auth request)
according to xrootd protocol specification.
func (SecurityOverride) MarshalXrd ¶
func (o SecurityOverride) MarshalXrd(enc *xrdenc.WBuffer) error
MarshalXrd implements xrdproto.Marshaler
func (*SecurityOverride) UnmarshalXrd ¶
func (o *SecurityOverride) UnmarshalXrd(dec *xrdenc.RBuffer) error
UnmarshalXrd implements xrdproto.Unmarshaler
type ServerError ¶
type ServerError struct { Code ServerErrorCode Message string }
ServerError is the error returned by the XRootD server as part of response to the request.
func (ServerError) Error ¶
func (err ServerError) Error() string
func (ServerError) MarshalXrd ¶
func (o ServerError) MarshalXrd(wBuffer *xrdenc.WBuffer) error
MarshalXrd implements Marshaler.
func (*ServerError) UnmarshalXrd ¶
func (o *ServerError) UnmarshalXrd(rBuffer *xrdenc.RBuffer) error
UnmarshalXrd implements Unmarshaler.
type ServerErrorCode ¶
type ServerErrorCode int32
ServerErrorCode is the code of the error returned by the XRootD server as part of response to the request.
const ( InvalidRequest ServerErrorCode = 3006 // InvalidRequest indicates that request is invalid. IOError ServerErrorCode = 3007 // IOError indicates that an IO error has occurred on the server side. NotAuthorized ServerErrorCode = 3010 // NotAuthorized indicates that user was not authorized for operation. NotFound ServerErrorCode = 3011 // NotFound indicates that path was not found on the remote server. )
type ServerType ¶
type ServerType int32
ServerType is the general server type kept for compatibility with 2.0 protocol version (see xrootd protocol specification v3.1.0, p. 5).
const ( // LoadBalancingServer indicates whether this is a load-balancing server. LoadBalancingServer ServerType = iota // DataServer indicates whether this is a data server. DataServer )
type StreamID ¶
type StreamID [2]byte
StreamID is the binary identifier associated with a request stream.
type Unmarshaler ¶
Unmarshaler is the interface implemented by a type that can unmarshal a binary representation of itself, following the XRootD protocol.
UnmarshalXrd must be able to decode the form generated by MarshalXrd. UnmarshalXrd must copy the data if it wishes to retain the data after returning.
type WaitResponse ¶
WaitResponse is the response indicating that the client must wait and retry the request. See http://xrootd.org/doc/dev45/XRdv310.pdf, p. 35 for details.
func (WaitResponse) MarshalXrd ¶
func (o WaitResponse) MarshalXrd(wBuffer *xrdenc.WBuffer) error
MarshalXrd implements Marshaler.
func (*WaitResponse) UnmarshalXrd ¶
func (o *WaitResponse) UnmarshalXrd(rBuffer *xrdenc.RBuffer) error
UnmarshalXrd implements Unmarshaler.
Directories ¶
Path | Synopsis |
---|---|
Package admin contains the types related to the admin request.
|
Package admin contains the types related to the admin request. |
Package auth contains the structures describing auth request.
|
Package auth contains the structures describing auth request. |
host
Package host contains the implementation for the "host" security provider.
|
Package host contains the implementation for the "host" security provider. |
krb5
Package krb5 contains the implementation of krb5 (Kerberos) security provider.
|
Package krb5 contains the implementation of krb5 (Kerberos) security provider. |
unix
Package unix contains the implementation of unix security provider.
|
Package unix contains the implementation of unix security provider. |
Package bind contains the structures describing bind request and response.
|
Package bind contains the structures describing bind request and response. |
Package chmod contains the structures describing chmod request.
|
Package chmod contains the structures describing chmod request. |
Package decrypt contains the types related to the decrypt request.
|
Package decrypt contains the types related to the decrypt request. |
Package dirlist contains the structures describing request and response for dirlist request used to obtain the contents of a directory.
|
Package dirlist contains the structures describing request and response for dirlist request used to obtain the contents of a directory. |
Package endsess contains the types related to the endsess request.
|
Package endsess contains the types related to the endsess request. |
Package handshake contains the structures describing request and response for handshake request (see XRootD specification).
|
Package handshake contains the structures describing request and response for handshake request (see XRootD specification). |
Package locate contains the types related to the locate request.
|
Package locate contains the types related to the locate request. |
Package login contains the structures describing request and response for login request.
|
Package login contains the structures describing request and response for login request. |
Package mkdir contains the structures describing mkdir request.
|
Package mkdir contains the structures describing mkdir request. |
Package mv contains the structures describing mv request.
|
Package mv contains the structures describing mv request. |
Package open contains the structures describing request and response for open request.
|
Package open contains the structures describing request and response for open request. |
Package ping contains the structures describing ping request.
|
Package ping contains the structures describing ping request. |
Package prepare contains the types related to the prepare request.
|
Package prepare contains the types related to the prepare request. |
Package protocol contains the structures describing request and response for protocol request (see XRootD specification).
|
Package protocol contains the structures describing request and response for protocol request (see XRootD specification). |
Package query contains the types related to the query request.
|
Package query contains the types related to the query request. |
Package read contains the structures describing request and response for read request.
|
Package read contains the structures describing request and response for read request. |
Package rm contains the structures describing rm request.
|
Package rm contains the structures describing rm request. |
Package rmdir contains the structures describing rmdir request.
|
Package rmdir contains the structures describing rmdir request. |
Package signing contains implementation of a way to check if request should be signed according to XRootD protocol specification v.
|
Package signing contains implementation of a way to check if request should be signed according to XRootD protocol specification v. |
Package sigver contains the structures describing sigver request.
|
Package sigver contains the structures describing sigver request. |
Package stat contains the structures describing request and response for stat request.
|
Package stat contains the structures describing request and response for stat request. |
Package statx contains the structures describing request and response for statx request.
|
Package statx contains the structures describing request and response for statx request. |
Package sync contains the structures describing sync request.
|
Package sync contains the structures describing sync request. |
Package truncate contains the structures describing truncate request.
|
Package truncate contains the structures describing truncate request. |
Package verifyw contains the structures describing verifyw request.
|
Package verifyw contains the structures describing verifyw request. |
Package write contains the structures describing write request.
|
Package write contains the structures describing write request. |
Package xrdclose contains the structures describing request and response for close request.
|
Package xrdclose contains the structures describing request and response for close request. |