XRootD transport handler. More...
#include <XrdClXRootDTransport.hh>
Public Member Functions | |
XRootDTransport () | |
Constructor. | |
~XRootDTransport () | |
Destructor. | |
virtual Status | GetHeader (Message *message, int socket) |
virtual Status | GetBody (Message *message, int socket) |
virtual void | InitializeChannel (AnyObject &channelData) |
Initialize channel. | |
virtual void | FinalizeChannel (AnyObject &channelData) |
Finalize channel. | |
virtual Status | HandShake (HandShakeData *handShakeData, AnyObject &channelData) |
HandShake. | |
virtual bool | IsStreamTTLElapsed (time_t time, uint16_t streamId, AnyObject &channelData) |
Check if the stream should be disconnected. | |
virtual Status | IsStreamBroken (time_t inactiveTime, uint16_t streamId, AnyObject &channelData) |
virtual PathID | Multiplex (Message *msg, AnyObject &channelData, PathID *hint=0) |
virtual PathID | MultiplexSubStream (Message *msg, uint16_t streamId, AnyObject &channelData, PathID *hint=0) |
virtual uint16_t | StreamNumber (AnyObject &channelData) |
Return a number of streams that should be created. | |
virtual uint16_t | SubStreamNumber (AnyObject &channelData) |
Return a number of substreams per stream that should be created. | |
virtual bool | NeedControlConnection () |
virtual void | Disconnect (AnyObject &channelData, uint16_t streamId, uint16_t subStreamId) |
The stream has been disconnected, do the cleanups. | |
virtual Status | Query (uint16_t query, AnyObject &result, AnyObject &channelData) |
Query the channel. | |
virtual uint32_t | MessageReceived (Message *msg, uint16_t streamId, uint16_t subStream, AnyObject &channelData) |
Check if the message invokes a stream action. | |
virtual void | MessageSent (Message *msg, uint16_t streamId, uint16_t subStream, uint32_t bytesSent, AnyObject &channelData) |
Notify the transport about a message having been sent. | |
virtual Status | GetSignature (Message *toSign, Message *&sign, AnyObject &channelData) |
Get signature for given message. | |
Status | ClassifyErrno (int error) |
Classify errno while reading/writing. | |
Static Public Member Functions | |
static Status | MarshallRequest (Message *msg) |
Marshal the outgoing message. | |
static Status | UnMarshallRequest (Message *msg) |
static Status | UnMarshallBody (Message *msg, uint16_t reqType) |
Unmarshall the body of the incoming message. | |
static void | UnMarshallHeader (Message *msg) |
Unmarshall the header incoming message. | |
static void | LogErrorResponse (const Message &msg) |
Log server error response. | |
static void | SetDescription (Message *msg) |
Get the description of a message. | |
Private Member Functions | |
Status | HandShakeMain (HandShakeData *handShakeData, AnyObject &channelData) |
Status | HandShakeParallel (HandShakeData *handShakeData, AnyObject &channelData) |
Message * | GenerateInitialHS (HandShakeData *hsData, XRootDChannelInfo *info) |
Message * | GenerateInitialHSProtocol (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | ProcessServerHS (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | ProcessProtocolResp (HandShakeData *hsData, XRootDChannelInfo *info) |
Message * | GenerateBind (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | ProcessBindResp (HandShakeData *hsData, XRootDChannelInfo *info) |
Message * | GenerateLogIn (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | ProcessLogInResp (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | DoAuthentication (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | GetCredentials (XrdSecCredentials *&credentials, HandShakeData *hsData, XRootDChannelInfo *info) |
Status | CleanUpAuthentication (XRootDChannelInfo *info) |
Status | CleanUpProtection (XRootDChannelInfo *info) |
XrdSecGetProt_t | GetAuthHandler () |
Message * | GenerateEndSession (HandShakeData *hsData, XRootDChannelInfo *info) |
Status | ProcessEndSessionResp (HandShakeData *hsData, XRootDChannelInfo *info) |
Static Private Member Functions | |
static std::string | ServerFlagsToStr (uint32_t flags) |
static std::string | FileHandleToStr (const unsigned char handle[4]) |
Private Attributes | |
PluginUnloadHandler * | pSecUnloadHandler |
Friends | |
struct | PluginUnloadHandler |
XRootD transport handler.
XrdCl::XRootDTransport::XRootDTransport | ( | ) |
Constructor.
XrdCl::XRootDTransport::~XRootDTransport | ( | ) |
Destructor.
Status XrdCl::XRootDTransport::ClassifyErrno | ( | int | error | ) |
Classify errno while reading/writing.
Status XrdCl::XRootDTransport::CleanUpAuthentication | ( | XRootDChannelInfo * | info | ) | [private] |
Status XrdCl::XRootDTransport::CleanUpProtection | ( | XRootDChannelInfo * | info | ) | [private] |
virtual void XrdCl::XRootDTransport::Disconnect | ( | AnyObject & | channelData, | |
uint16_t | streamId, | |||
uint16_t | subStreamId | |||
) | [virtual] |
The stream has been disconnected, do the cleanups.
Implements XrdCl::TransportHandler.
Status XrdCl::XRootDTransport::DoAuthentication | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
static std::string XrdCl::XRootDTransport::FileHandleToStr | ( | const unsigned char | handle[4] | ) | [static, private] |
virtual void XrdCl::XRootDTransport::FinalizeChannel | ( | AnyObject & | channelData | ) | [virtual] |
Finalize channel.
Implements XrdCl::TransportHandler.
Message* XrdCl::XRootDTransport::GenerateBind | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Message* XrdCl::XRootDTransport::GenerateEndSession | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Message* XrdCl::XRootDTransport::GenerateInitialHS | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Message* XrdCl::XRootDTransport::GenerateInitialHSProtocol | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Message* XrdCl::XRootDTransport::GenerateLogIn | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
XrdSecGetProt_t XrdCl::XRootDTransport::GetAuthHandler | ( | ) | [private] |
Read the message body from the socket, the socket is non-blocking, the method may be called multiple times - see GetHeader for details
message | the message buffer containing the header | |
socket | the socket |
Implements XrdCl::TransportHandler.
Status XrdCl::XRootDTransport::GetCredentials | ( | XrdSecCredentials *& | credentials, | |
HandShakeData * | hsData, | |||
XRootDChannelInfo * | info | |||
) | [private] |
Read a message header from the socket, the socket is non-blocking, so if there is not enough data the function should return errRetry in which case it will be called again when more data arrives, with the data previously read stored in the message buffer
message | the message buffer | |
socket | the socket |
Implements XrdCl::TransportHandler.
virtual Status XrdCl::XRootDTransport::GetSignature | ( | Message * | toSign, | |
Message *& | sign, | |||
AnyObject & | channelData | |||
) | [virtual] |
Get signature for given message.
virtual Status XrdCl::XRootDTransport::HandShake | ( | HandShakeData * | handShakeData, | |
AnyObject & | channelData | |||
) | [virtual] |
HandShake.
Implements XrdCl::TransportHandler.
Status XrdCl::XRootDTransport::HandShakeMain | ( | HandShakeData * | handShakeData, | |
AnyObject & | channelData | |||
) | [private] |
Status XrdCl::XRootDTransport::HandShakeParallel | ( | HandShakeData * | handShakeData, | |
AnyObject & | channelData | |||
) | [private] |
virtual void XrdCl::XRootDTransport::InitializeChannel | ( | AnyObject & | channelData | ) | [virtual] |
Initialize channel.
Implements XrdCl::TransportHandler.
virtual Status XrdCl::XRootDTransport::IsStreamBroken | ( | time_t | inactiveTime, | |
uint16_t | streamId, | |||
AnyObject & | channelData | |||
) | [virtual] |
Check the stream is broken - ie. TCP connection got broken and went undetected by the TCP stack
Implements XrdCl::TransportHandler.
virtual bool XrdCl::XRootDTransport::IsStreamTTLElapsed | ( | time_t | time, | |
uint16_t | streamId, | |||
AnyObject & | channelData | |||
) | [virtual] |
Check if the stream should be disconnected.
Implements XrdCl::TransportHandler.
static void XrdCl::XRootDTransport::LogErrorResponse | ( | const Message & | msg | ) | [static] |
Log server error response.
Marshal the outgoing message.
virtual uint32_t XrdCl::XRootDTransport::MessageReceived | ( | Message * | msg, | |
uint16_t | streamId, | |||
uint16_t | subStream, | |||
AnyObject & | channelData | |||
) | [virtual] |
Check if the message invokes a stream action.
Implements XrdCl::TransportHandler.
virtual void XrdCl::XRootDTransport::MessageSent | ( | Message * | msg, | |
uint16_t | streamId, | |||
uint16_t | subStream, | |||
uint32_t | bytesSent, | |||
AnyObject & | channelData | |||
) | [virtual] |
Notify the transport about a message having been sent.
Implements XrdCl::TransportHandler.
virtual PathID XrdCl::XRootDTransport::Multiplex | ( | Message * | msg, | |
AnyObject & | channelData, | |||
PathID * | hint = 0 | |||
) | [virtual] |
Return the ID for the up stream this message should be sent by and the down stream which the answer should be expected at. Modify the message itself if necessary. If hint is non-zero then the message should be modified such that the answer will be returned via the hinted stream.
Implements XrdCl::TransportHandler.
virtual PathID XrdCl::XRootDTransport::MultiplexSubStream | ( | Message * | msg, | |
uint16_t | streamId, | |||
AnyObject & | channelData, | |||
PathID * | hint = 0 | |||
) | [virtual] |
Return the ID for the up substream this message should be sent by and the down substream which the answer should be expected at. Modify the message itself if necessary. If hint is non-zero then the message should be modified such that the answer will be returned via the hinted stream.
Implements XrdCl::TransportHandler.
virtual bool XrdCl::XRootDTransport::NeedControlConnection | ( | ) | [inline, virtual] |
Return the information whether a control connection needs to be valid before establishing other connections
Status XrdCl::XRootDTransport::ProcessBindResp | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Status XrdCl::XRootDTransport::ProcessEndSessionResp | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Status XrdCl::XRootDTransport::ProcessLogInResp | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Status XrdCl::XRootDTransport::ProcessProtocolResp | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
Status XrdCl::XRootDTransport::ProcessServerHS | ( | HandShakeData * | hsData, | |
XRootDChannelInfo * | info | |||
) | [private] |
virtual Status XrdCl::XRootDTransport::Query | ( | uint16_t | query, | |
AnyObject & | result, | |||
AnyObject & | channelData | |||
) | [virtual] |
Query the channel.
Implements XrdCl::TransportHandler.
static std::string XrdCl::XRootDTransport::ServerFlagsToStr | ( | uint32_t | flags | ) | [static, private] |
static void XrdCl::XRootDTransport::SetDescription | ( | Message * | msg | ) | [static] |
Get the description of a message.
virtual uint16_t XrdCl::XRootDTransport::StreamNumber | ( | AnyObject & | channelData | ) | [virtual] |
Return a number of streams that should be created.
Implements XrdCl::TransportHandler.
virtual uint16_t XrdCl::XRootDTransport::SubStreamNumber | ( | AnyObject & | channelData | ) | [virtual] |
Return a number of substreams per stream that should be created.
Implements XrdCl::TransportHandler.
Unmarshall the body of the incoming message.
static void XrdCl::XRootDTransport::UnMarshallHeader | ( | Message * | msg | ) | [static] |
Unmarshall the header incoming message.
Unmarshall the request - sometimes the requests need to be rewritten, so we need to unmarshall them
friend struct PluginUnloadHandler [friend] |
PluginUnloadHandler* XrdCl::XRootDTransport::pSecUnloadHandler [private] |