xrootd
XrdClPostMasterInterfaces.hh
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // Copyright (c) 2011-2014 by European Organization for Nuclear Research (CERN)
3 // Author: Lukasz Janyst <ljanyst@cern.ch>
4 //------------------------------------------------------------------------------
5 // This file is part of the XRootD software suite.
6 //
7 // XRootD is free software: you can redistribute it and/or modify
8 // it under the terms of the GNU Lesser General Public License as published by
9 // the Free Software Foundation, either version 3 of the License, or
10 // (at your option) any later version.
11 //
12 // XRootD is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU Lesser General Public License
18 // along with XRootD. If not, see <http://www.gnu.org/licenses/>.
19 //
20 // In applying this licence, CERN does not waive the privileges and immunities
21 // granted to it by virtue of its status as an Intergovernmental Organization
22 // or submit itself to any jurisdiction.
23 //------------------------------------------------------------------------------
24 
25 #ifndef __XRD_CL_POST_MASTER_INTERFACES_HH__
26 #define __XRD_CL_POST_MASTER_INTERFACES_HH__
27 
28 #include <stdint.h>
29 #include <ctime>
30 
31 #include "XrdCl/XrdClStatus.hh"
32 #include "XrdCl/XrdClAnyObject.hh"
33 #include "XrdCl/XrdClURL.hh"
34 
35 class XrdNetAddr;
36 
37 namespace XrdCl
38 {
39  class Channel;
40  class Message;
41  class URL;
42 
43  //----------------------------------------------------------------------------
45  //----------------------------------------------------------------------------
47  {
48  public:
49  virtual ~MessageFilter() {}
50 
51  //------------------------------------------------------------------------
54  //------------------------------------------------------------------------
55  virtual bool Filter( const Message *msg ) = 0;
56 
57  //------------------------------------------------------------------------
61  //------------------------------------------------------------------------
62  virtual uint16_t GetSid() const = 0;
63  };
64 
65  //----------------------------------------------------------------------------
67  //----------------------------------------------------------------------------
69  {
70  public:
71  //------------------------------------------------------------------------
73  //------------------------------------------------------------------------
74  enum Action
75  {
76  Take = 0x0001,
77  Ignore = 0x0002,
78  RemoveHandler = 0x0004,
79  Raw = 0x0008,
81  NoProcess = 0x0010
84  };
87 
88  //------------------------------------------------------------------------
90  //------------------------------------------------------------------------
92  {
93  Ready = 1,
94  Broken = 2,
95  Timeout = 3,
97  };
98 
99  //------------------------------------------------------------------------
101  //------------------------------------------------------------------------
102 
103  virtual ~IncomingMsgHandler() {}
104 
105  //------------------------------------------------------------------------
111  //------------------------------------------------------------------------
112  virtual uint16_t Examine( Message *msg ) = 0;
113 
114  //------------------------------------------------------------------------
118  //------------------------------------------------------------------------
119  virtual uint16_t GetSid() const = 0;
120 
121  //------------------------------------------------------------------------
125  //------------------------------------------------------------------------
126  virtual void Process( Message *msg ) { (void)msg; };
127 
128  //------------------------------------------------------------------------
138  //------------------------------------------------------------------------
140  int socket,
141  uint32_t &bytesRead )
142  {
143  (void)msg; (void)socket; (void)bytesRead;
144  return Status( stOK, suDone );
145  };
146 
147  //------------------------------------------------------------------------
154  //------------------------------------------------------------------------
155  virtual uint8_t OnStreamEvent( StreamEvent event,
156  uint16_t streamNum,
157  Status status )
158  {
159  (void)event; (void)streamNum; (void)status;
160  return 0;
161  };
162  };
163 
164  //----------------------------------------------------------------------------
166  //----------------------------------------------------------------------------
168  {
169  public:
170  virtual ~OutgoingMsgHandler() {}
171 
172  //------------------------------------------------------------------------
174  //------------------------------------------------------------------------
175  virtual void OnStatusReady( const Message *message,
176  Status status ) = 0;
177 
178  //------------------------------------------------------------------------
186  //------------------------------------------------------------------------
187  virtual void OnReadyToSend( Message *msg, uint16_t streamNum )
188  {
189  (void)msg; (void)streamNum;
190  };
191 
192  //------------------------------------------------------------------------
196  //------------------------------------------------------------------------
197  virtual bool IsRaw() const { return false; }
198 
199  //------------------------------------------------------------------------
208  //------------------------------------------------------------------------
209  virtual Status WriteMessageBody( int socket,
210  uint32_t &bytesRead )
211  {
212  (void)socket; (void)bytesRead;
213  return Status();
214  }
215  };
216 
217  //----------------------------------------------------------------------------
219  //----------------------------------------------------------------------------
221  {
222  public:
223  //------------------------------------------------------------------------
225  //------------------------------------------------------------------------
227  {
231  };
232 
233  //------------------------------------------------------------------------
235  //------------------------------------------------------------------------
236  virtual ~ChannelEventHandler() {};
237 
238  //------------------------------------------------------------------------
246  //------------------------------------------------------------------------
247  virtual bool OnChannelEvent( ChannelEvent event,
248  Status status,
249  uint16_t stream ) = 0;
250  };
251 
252  //----------------------------------------------------------------------------
254  //----------------------------------------------------------------------------
255 
257  {
258  //--------------------------------------------------------------------------
260  //--------------------------------------------------------------------------
261  HandShakeData( const URL *addr, uint16_t stream, uint16_t subStream ):
262  step(0), out(0), in(0), url(addr), streamId(stream),
263  subStreamId( subStream ), startTime( time(0) ), serverAddr(0)
264  {}
265  uint16_t step;
268  const URL *url;
269  uint16_t streamId;
270  uint16_t subStreamId;
271  time_t startTime;
272  const
274  std::string clientName;
275  std::string streamName;
276  };
277 
278  //----------------------------------------------------------------------------
281  //----------------------------------------------------------------------------
282  struct PathID
283  {
284  PathID( uint16_t u = 0, uint16_t d = 0 ): up(u), down(d) {}
285  uint16_t up;
286  uint16_t down;
287  };
288 
289  //----------------------------------------------------------------------------
292  //----------------------------------------------------------------------------
294  {
295  static const uint16_t Name = 1;
296  static const uint16_t Auth = 2;
297  };
298 
299  //----------------------------------------------------------------------------
301  //----------------------------------------------------------------------------
303  {
304  public:
305 
306  //------------------------------------------------------------------------
308  //------------------------------------------------------------------------
310  {
311  NoAction = 0x0000,
312  DigestMsg = 0x0001,
313  AbortStream = 0x0002,
315  CloseStream = 0x0004,
318  ResumeStream = 0x0008,
320  HoldStream = 0x0010,
322  RequestClose = 0x0020
323  };
324 
325 
326  virtual ~TransportHandler() {}
327 
328  //------------------------------------------------------------------------
339  //------------------------------------------------------------------------
340  virtual Status GetHeader( Message *message, int socket ) = 0;
341 
342  //------------------------------------------------------------------------
351  //------------------------------------------------------------------------
352  virtual Status GetBody( Message *message, int socket ) = 0;
353 
354  //------------------------------------------------------------------------
356  //------------------------------------------------------------------------
357  virtual void InitializeChannel( AnyObject &channelData ) = 0;
358 
359  //------------------------------------------------------------------------
361  //------------------------------------------------------------------------
362  virtual void FinalizeChannel( AnyObject &channelData ) = 0;
363 
364  //------------------------------------------------------------------------
366  //------------------------------------------------------------------------
367  virtual Status HandShake( HandShakeData *handShakeData,
368  AnyObject &channelData ) = 0;
369 
370  //------------------------------------------------------------------------
372  //------------------------------------------------------------------------
373  virtual bool IsStreamTTLElapsed( time_t inactiveTime,
374  uint16_t streamId,
375  AnyObject &channelData ) = 0;
376 
377  //------------------------------------------------------------------------
380  //------------------------------------------------------------------------
381  virtual Status IsStreamBroken( time_t inactiveTime,
382  uint16_t streamId,
383  AnyObject &channelData ) = 0;
384 
385  //------------------------------------------------------------------------
391  //------------------------------------------------------------------------
392  virtual PathID Multiplex( Message *msg,
393  AnyObject &channelData,
394  PathID *hint = 0 ) = 0;
395 
396  //------------------------------------------------------------------------
402  //------------------------------------------------------------------------
403  virtual PathID MultiplexSubStream( Message *msg,
404  uint16_t streamId,
405  AnyObject &channelData,
406  PathID *hint = 0 ) = 0;
407 
408  //------------------------------------------------------------------------
410  //------------------------------------------------------------------------
411  virtual uint16_t StreamNumber( AnyObject &channelData ) = 0;
412 
413  //------------------------------------------------------------------------
415  //------------------------------------------------------------------------
416  virtual uint16_t SubStreamNumber( AnyObject &channelData ) = 0;
417 
418  //------------------------------------------------------------------------
420  //------------------------------------------------------------------------
421  virtual void Disconnect( AnyObject &channelData,
422  uint16_t streamId,
423  uint16_t subStreamId ) = 0;
424 
425  //------------------------------------------------------------------------
427  //------------------------------------------------------------------------
428  virtual Status Query( uint16_t query,
429  AnyObject &result,
430  AnyObject &channelData ) = 0;
431 
432  //------------------------------------------------------------------------
434  //------------------------------------------------------------------------
435  virtual uint32_t MessageReceived( Message *msg,
436  uint16_t streamId,
437  uint16_t subStream,
438  AnyObject &channelData ) = 0;
439 
440  //------------------------------------------------------------------------
442  //------------------------------------------------------------------------
443  virtual void MessageSent( Message *msg,
444  uint16_t streamId,
445  uint16_t subStream,
446  uint32_t bytesSent,
447  AnyObject &channelData ) = 0;
448  };
449 }
450 
451 #endif // __XRD_CL_POST_MASTER_INTERFACES_HH__
XrdCl::TransportHandler::HoldStream
Stop sending requests [not yet implemented].
Definition: XrdClPostMasterInterfaces.hh:321
XrdCl::stOK
const uint16_t stOK
Everything went OK.
Definition: XrdClStatus.hh:31
XrdCl::OutgoingMsgHandler
Message status handler.
Definition: XrdClPostMasterInterfaces.hh:167
XrdCl::HandShakeData::serverAddr
const XrdNetAddr * serverAddr
Server address.
Definition: XrdClPostMasterInterfaces.hh:273
XrdCl::TransportHandler::~TransportHandler
virtual ~TransportHandler()
Definition: XrdClPostMasterInterfaces.hh:326
XrdCl::TransportQuery
Definition: XrdClPostMasterInterfaces.hh:293
XrdCl::IncomingMsgHandler::Broken
The stream is broken.
Definition: XrdClPostMasterInterfaces.hh:94
XrdCl::OutgoingMsgHandler::OnReadyToSend
virtual void OnReadyToSend(Message *msg, uint16_t streamNum)
Definition: XrdClPostMasterInterfaces.hh:187
XrdCl::HandShakeData::in
Message * in
Message that has been received.
Definition: XrdClPostMasterInterfaces.hh:267
XrdCl::TransportHandler::MessageReceived
virtual uint32_t MessageReceived(Message *msg, uint16_t streamId, uint16_t subStream, AnyObject &channelData)=0
Check if the message invokes a stream action.
XrdCl::PathID
Definition: XrdClPostMasterInterfaces.hh:282
XrdCl::IncomingMsgHandler::~IncomingMsgHandler
virtual ~IncomingMsgHandler()
Event types that the message handler may receive.
Definition: XrdClPostMasterInterfaces.hh:103
XrdCl::MessageFilter::GetSid
virtual uint16_t GetSid() const =0
XrdCl::TransportHandler::HandShake
virtual Status HandShake(HandShakeData *handShakeData, AnyObject &channelData)=0
HandHake.
XrdCl::TransportHandler::Disconnect
virtual void Disconnect(AnyObject &channelData, uint16_t streamId, uint16_t subStreamId)=0
The stream has been disconnected, do the cleanups.
XrdCl::HandShakeData::clientName
std::string clientName
Client name (an IPv6 representation)
Definition: XrdClPostMasterInterfaces.hh:274
XrdCl::TransportHandler::StreamNumber
virtual uint16_t StreamNumber(AnyObject &channelData)=0
Return a number of streams that should be created.
XrdCl::ChannelEventHandler::FatalError
Stream has been broken and won't be recovered.
Definition: XrdClPostMasterInterfaces.hh:230
XrdCl::IncomingMsgHandler::NoProcess
Definition: XrdClPostMasterInterfaces.hh:83
XrdCl::HandShakeData::subStreamId
uint16_t subStreamId
Sub-stream id.
Definition: XrdClPostMasterInterfaces.hh:270
XrdCl::TransportHandler::RequestClose
Send a close request.
Definition: XrdClPostMasterInterfaces.hh:322
XrdCl::PathID::up
uint16_t up
Definition: XrdClPostMasterInterfaces.hh:285
XrdCl::IncomingMsgHandler::Take
Take ownership over the message.
Definition: XrdClPostMasterInterfaces.hh:76
XrdCl::suDone
const uint16_t suDone
Definition: XrdClStatus.hh:38
XrdCl::IncomingMsgHandler::StreamEvent
StreamEvent
Events that may have occurred to the stream.
Definition: XrdClPostMasterInterfaces.hh:91
XrdCl::OutgoingMsgHandler::IsRaw
virtual bool IsRaw() const
Definition: XrdClPostMasterInterfaces.hh:197
XrdCl::TransportQuery::Auth
static const uint16_t Auth
Transport name, returns std::string *.
Definition: XrdClPostMasterInterfaces.hh:296
XrdCl::Message
The message representation used throughout the system.
Definition: XrdClMessage.hh:29
XrdCl::HandShakeData::streamId
uint16_t streamId
Stream number.
Definition: XrdClPostMasterInterfaces.hh:269
XrdCl::TransportHandler::Multiplex
virtual PathID Multiplex(Message *msg, AnyObject &channelData, PathID *hint=0)=0
XrdCl::MessageFilter::~MessageFilter
virtual ~MessageFilter()
Definition: XrdClPostMasterInterfaces.hh:49
XrdCl::HandShakeData::url
const URL * url
Destination URL.
Definition: XrdClPostMasterInterfaces.hh:268
XrdCl::ChannelEventHandler::~ChannelEventHandler
virtual ~ChannelEventHandler()
Destructor.
Definition: XrdClPostMasterInterfaces.hh:236
XrdCl::OutgoingMsgHandler::WriteMessageBody
virtual Status WriteMessageBody(int socket, uint32_t &bytesRead)
Definition: XrdClPostMasterInterfaces.hh:209
XrdCl::TransportHandler::IsStreamTTLElapsed
virtual bool IsStreamTTLElapsed(time_t inactiveTime, uint16_t streamId, AnyObject &channelData)=0
Check if the stream should be disconnected.
XrdCl::OutgoingMsgHandler::~OutgoingMsgHandler
virtual ~OutgoingMsgHandler()
Definition: XrdClPostMasterInterfaces.hh:170
XrdCl::HandShakeData
Data structure that carries the handshake information.
Definition: XrdClPostMasterInterfaces.hh:256
XrdCl::TransportHandler::MultiplexSubStream
virtual PathID MultiplexSubStream(Message *msg, uint16_t streamId, AnyObject &channelData, PathID *hint=0)=0
XrdCl::IncomingMsgHandler::Raw
Definition: XrdClPostMasterInterfaces.hh:80
XrdCl::IncomingMsgHandler::Ready
The stream has become connected.
Definition: XrdClPostMasterInterfaces.hh:93
XrdCl::MessageFilter
Message filter.
Definition: XrdClPostMasterInterfaces.hh:46
XrdCl::ChannelEventHandler::ChannelEvent
ChannelEvent
Events that may have occurred to the channel.
Definition: XrdClPostMasterInterfaces.hh:226
XrdCl::IncomingMsgHandler
Message handler.
Definition: XrdClPostMasterInterfaces.hh:68
XrdCl::TransportHandler::AbortStream
Definition: XrdClPostMasterInterfaces.hh:314
XrdCl::HandShakeData::step
uint16_t step
Handshake step.
Definition: XrdClPostMasterInterfaces.hh:265
XrdCl::TransportHandler::FinalizeChannel
virtual void FinalizeChannel(AnyObject &channelData)=0
Finalize channel.
XrdCl::TransportQuery::Name
static const uint16_t Name
Transport name, returns const char *.
Definition: XrdClPostMasterInterfaces.hh:295
XrdCl::ChannelEventHandler::StreamBroken
The stream is broken.
Definition: XrdClPostMasterInterfaces.hh:229
XrdCl::IncomingMsgHandler::Ignore
Ignore the message.
Definition: XrdClPostMasterInterfaces.hh:77
XrdCl::TransportHandler::IsStreamBroken
virtual Status IsStreamBroken(time_t inactiveTime, uint16_t streamId, AnyObject &channelData)=0
XrdCl::OutgoingMsgHandler::OnStatusReady
virtual void OnStatusReady(const Message *message, Status status)=0
The requested action has been performed and the status is available.
XrdCl::IncomingMsgHandler::OnStreamEvent
virtual uint8_t OnStreamEvent(StreamEvent event, uint16_t streamNum, Status status)
Definition: XrdClPostMasterInterfaces.hh:155
XrdCl::TransportHandler::SubStreamNumber
virtual uint16_t SubStreamNumber(AnyObject &channelData)=0
Return a number of substreams per stream that should be created.
XrdCl::TransportHandler::ResumeStream
Definition: XrdClPostMasterInterfaces.hh:319
XrdCl::TransportHandler::DigestMsg
Definition: XrdClPostMasterInterfaces.hh:312
XrdCl::TransportHandler::StreamAction
StreamAction
Stream actions that may be triggered by incoming control messages.
Definition: XrdClPostMasterInterfaces.hh:309
XrdCl::TransportHandler::NoAction
No action.
Definition: XrdClPostMasterInterfaces.hh:311
XrdCl::PathID::PathID
PathID(uint16_t u=0, uint16_t d=0)
Definition: XrdClPostMasterInterfaces.hh:284
XrdCl::IncomingMsgHandler::ReadMessageBody
virtual Status ReadMessageBody(Message *msg, int socket, uint32_t &bytesRead)
Definition: XrdClPostMasterInterfaces.hh:139
XrdCl
Definition: XrdClAnyObject.hh:25
XrdCl::ChannelEventHandler::OnChannelEvent
virtual bool OnChannelEvent(ChannelEvent event, Status status, uint16_t stream)=0
XrdCl::IncomingMsgHandler::FatalError
Stream has been broken and won't be recovered.
Definition: XrdClPostMasterInterfaces.hh:96
XrdCl::IncomingMsgHandler::Examine
virtual uint16_t Examine(Message *msg)=0
XrdCl::TransportHandler::GetHeader
virtual Status GetHeader(Message *message, int socket)=0
XrdCl::TransportHandler::GetBody
virtual Status GetBody(Message *message, int socket)=0
XrdCl::MessageFilter::Filter
virtual bool Filter(const Message *msg)=0
XrdClStatus.hh
XrdClAnyObject.hh
XrdCl::PathID::down
uint16_t down
Definition: XrdClPostMasterInterfaces.hh:286
XrdClURL.hh
XrdCl::Status
Procedure execution status.
Definition: XrdClStatus.hh:109
XrdCl::URL
URL representation.
Definition: XrdClURL.hh:30
XrdCl::TransportHandler::MessageSent
virtual void MessageSent(Message *msg, uint16_t streamId, uint16_t subStream, uint32_t bytesSent, AnyObject &channelData)=0
Notify the transport about a message having been sent.
XrdCl::TransportHandler::CloseStream
Definition: XrdClPostMasterInterfaces.hh:317
XrdCl::IncomingMsgHandler::RemoveHandler
Definition: XrdClPostMasterInterfaces.hh:78
XrdCl::HandShakeData::out
Message * out
Message to be sent out.
Definition: XrdClPostMasterInterfaces.hh:266
XrdCl::IncomingMsgHandler::Action
Action
Actions to be taken after a message is processed by the handler.
Definition: XrdClPostMasterInterfaces.hh:74
XrdCl::IncomingMsgHandler::GetSid
virtual uint16_t GetSid() const =0
XrdCl::ChannelEventHandler
Channel event handler.
Definition: XrdClPostMasterInterfaces.hh:220
XrdCl::IncomingMsgHandler::Timeout
The declared timeout has occurred.
Definition: XrdClPostMasterInterfaces.hh:95
XrdCl::TransportHandler
Perform the handshake and the authentication for each physical stream.
Definition: XrdClPostMasterInterfaces.hh:302
XrdCl::HandShakeData::streamName
std::string streamName
Name of the stream.
Definition: XrdClPostMasterInterfaces.hh:275
XrdNetAddr
Definition: XrdNetAddr.hh:41
XrdCl::AnyObject
Definition: XrdClAnyObject.hh:32
XrdCl::TransportHandler::Query
virtual Status Query(uint16_t query, AnyObject &result, AnyObject &channelData)=0
Query the channel.
XrdCl::IncomingMsgHandler::Process
virtual void Process(Message *msg)
Definition: XrdClPostMasterInterfaces.hh:126
XrdCl::ChannelEventHandler::StreamReady
The stream has become connected.
Definition: XrdClPostMasterInterfaces.hh:228
XrdCl::TransportHandler::InitializeChannel
virtual void InitializeChannel(AnyObject &channelData)=0
Initialize channel.
XrdCl::HandShakeData::HandShakeData
HandShakeData(const URL *addr, uint16_t stream, uint16_t subStream)
Constructor.
Definition: XrdClPostMasterInterfaces.hh:261
XrdCl::HandShakeData::startTime
time_t startTime
Timestamp of when the handshake started.
Definition: XrdClPostMasterInterfaces.hh:271