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
29
30#include <cstdint>
31#include <ctime>
32#include <memory>
33
34#include "XrdCl/XrdClStatus.hh"
36#include "XrdCl/XrdClURL.hh"
37
38class XrdNetAddr;
39
40namespace XrdCl
41{
42 class Channel;
43 class Message;
44 class URL;
45 class Socket;
46
47 //----------------------------------------------------------------------------
49 //----------------------------------------------------------------------------
51 {
52 public:
53 //------------------------------------------------------------------------
55 //------------------------------------------------------------------------
56 enum Action
57 {
58 None = 0x0000,
59 Nop = 0x0001,
60 Ignore = 0x0002,
61 RemoveHandler = 0x0004,
63 Raw = 0x0008,
66 NoProcess = 0x0010,
69 Corrupted = 0x0020,
72 More = 0x0040
73 };
74
75 //------------------------------------------------------------------------
77 //------------------------------------------------------------------------
79 {
80 Ready = 1,
81 Broken = 2,
82 Timeout = 3,
83 FatalError = 4
84 };
85
86 //------------------------------------------------------------------------
88 //------------------------------------------------------------------------
89
90 virtual ~MsgHandler() {}
91
92 //------------------------------------------------------------------------
98 //------------------------------------------------------------------------
99 virtual uint16_t Examine( std::shared_ptr<Message> &msg ) = 0;
100
101 //------------------------------------------------------------------------
110 //------------------------------------------------------------------------
111 virtual uint16_t InspectStatusRsp() = 0;
112
113 //------------------------------------------------------------------------
117 //------------------------------------------------------------------------
118 virtual uint16_t GetSid() const = 0;
119
120 //------------------------------------------------------------------------
124 //------------------------------------------------------------------------
125 virtual void Process() {};
126
127 //------------------------------------------------------------------------
137 //------------------------------------------------------------------------
139 Socket *socket,
140 uint32_t &bytesRead )
141 {
142 (void)msg; (void)socket; (void)bytesRead;
143 return Status( stOK, suDone );
144 };
145
146 //------------------------------------------------------------------------
152 //------------------------------------------------------------------------
153 virtual uint8_t OnStreamEvent( StreamEvent event,
154 XRootDStatus status )
155 {
156 (void)event; (void)status;
157 return 0;
158 };
159
160 //------------------------------------------------------------------------
162 //------------------------------------------------------------------------
163 virtual void OnStatusReady( const Message *message,
164 XRootDStatus status ) = 0;
165
166 //------------------------------------------------------------------------
173 //------------------------------------------------------------------------
174 virtual void OnReadyToSend( Message *msg )
175 {
176 (void)msg;
177 };
178
179 //------------------------------------------------------------------------
183 //------------------------------------------------------------------------
184 virtual bool IsRaw() const { return false; }
185
186 //------------------------------------------------------------------------
195 //------------------------------------------------------------------------
197 uint32_t &bytesWritten )
198 {
199 (void)socket; (void)bytesWritten;
200 return Status();
201 }
202
203 virtual time_t GetExpiration() = 0;
204 };
205
206 //----------------------------------------------------------------------------
208 //----------------------------------------------------------------------------
210 {
211 public:
212 //------------------------------------------------------------------------
214 //------------------------------------------------------------------------
216 {
219 FatalError = 4
220 };
221
222 //------------------------------------------------------------------------
224 //------------------------------------------------------------------------
226
227 //------------------------------------------------------------------------
234 //------------------------------------------------------------------------
235 virtual bool OnChannelEvent( ChannelEvent event,
236 Status status ) = 0;
237 };
238
239 //----------------------------------------------------------------------------
241 //----------------------------------------------------------------------------
242
244 {
245 //--------------------------------------------------------------------------
247 //--------------------------------------------------------------------------
248 HandShakeData( const URL *addr, uint16_t subStream ):
249 step(0), out(0), in(0), url(addr), subStreamId( subStream ),
250 startTime( time(0) ), serverAddr(0)
251 {}
252 uint16_t step;
255 const URL *url;
256 uint16_t subStreamId;
257 time_t startTime;
258 const
260 std::string clientName;
261 std::string streamName;
262 };
263
264 //----------------------------------------------------------------------------
267 //----------------------------------------------------------------------------
268 struct PathID
269 {
270 PathID( uint16_t u = 0, uint16_t d = 0 ): up(u), down(d) {}
271 uint16_t up;
272 uint16_t down;
273 };
274
275 //----------------------------------------------------------------------------
278 //----------------------------------------------------------------------------
280 {
281 static const uint16_t Name = 1;
282 static const uint16_t Auth = 2;
283 };
284
285 //----------------------------------------------------------------------------
287 //----------------------------------------------------------------------------
289 {
290 static const uint16_t ServerFlags = 1002;
291 static const uint16_t ProtocolVersion = 1003;
292 static const uint16_t IsEncrypted = 1004;
293 };
294
295 //----------------------------------------------------------------------------
298 //----------------------------------------------------------------------------
300 {
301 static const uint16_t IpAddr = 2001;
302 static const uint16_t IpStack = 2002;
303 static const uint16_t HostName = 2003;
304 };
305
306 //----------------------------------------------------------------------------
308 //----------------------------------------------------------------------------
310 {
311 public:
312
313 //------------------------------------------------------------------------
315 //------------------------------------------------------------------------
317 {
318 NoAction = 0x0000,
319 DigestMsg = 0x0001,
321 AbortStream = 0x0002,
324 CloseStream = 0x0004,
326 ResumeStream = 0x0008,
328 HoldStream = 0x0010,
329 RequestClose = 0x0020
330 };
331
332
333 virtual ~TransportHandler() {}
334
335 //------------------------------------------------------------------------
346 //------------------------------------------------------------------------
347 virtual XRootDStatus GetHeader( Message &message, Socket *socket ) = 0;
348
349 //------------------------------------------------------------------------
358 //------------------------------------------------------------------------
359 virtual XRootDStatus GetBody( Message &message, Socket *socket ) = 0;
360
361 //------------------------------------------------------------------------
363 //------------------------------------------------------------------------
364 virtual void InitializeChannel( const URL &url,
365 AnyObject &channelData ) = 0;
366
367 //------------------------------------------------------------------------
369 //------------------------------------------------------------------------
370 virtual void FinalizeChannel( AnyObject &channelData ) = 0;
371
372 //------------------------------------------------------------------------
374 //------------------------------------------------------------------------
375 virtual XRootDStatus HandShake( HandShakeData *handShakeData,
376 AnyObject &channelData ) = 0;
377
378 //------------------------------------------------------------------------
379 // @return true if handshake has been done and stream is connected,
380 // false otherwise
381 //------------------------------------------------------------------------
382 virtual bool HandShakeDone( HandShakeData *handShakeData,
383 AnyObject &channelData ) = 0;
384
385 //------------------------------------------------------------------------
387 //------------------------------------------------------------------------
388 virtual bool IsStreamTTLElapsed( time_t inactiveTime,
389 AnyObject &channelData ) = 0;
390
391 //------------------------------------------------------------------------
394 //------------------------------------------------------------------------
395 virtual Status IsStreamBroken( time_t inactiveTime,
396 AnyObject &channelData ) = 0;
397
398 //------------------------------------------------------------------------
404 //------------------------------------------------------------------------
405 virtual PathID Multiplex( Message *msg,
406 AnyObject &channelData,
407 PathID *hint = 0 ) = 0;
408
409 //------------------------------------------------------------------------
415 //------------------------------------------------------------------------
417 AnyObject &channelData,
418 PathID *hint = 0 ) = 0;
419
420 //------------------------------------------------------------------------
422 //------------------------------------------------------------------------
423 virtual uint16_t SubStreamNumber( AnyObject &channelData ) = 0;
424
425 //------------------------------------------------------------------------
427 //------------------------------------------------------------------------
428 virtual void Disconnect( AnyObject &channelData,
429 uint16_t subStreamId ) = 0;
430
431 //------------------------------------------------------------------------
433 //------------------------------------------------------------------------
434 virtual Status Query( uint16_t query,
435 AnyObject &result,
436 AnyObject &channelData ) = 0;
437
438 //------------------------------------------------------------------------
440 //------------------------------------------------------------------------
441 virtual uint32_t MessageReceived( Message &msg,
442 uint16_t subStream,
443 AnyObject &channelData ) = 0;
444
445 //------------------------------------------------------------------------
447 //------------------------------------------------------------------------
448 virtual void MessageSent( Message *msg,
449 uint16_t subStream,
450 uint32_t bytesSent,
451 AnyObject &channelData ) = 0;
452
453 //------------------------------------------------------------------------
455 //------------------------------------------------------------------------
456 virtual void WaitBeforeExit() = 0;
457
458 //------------------------------------------------------------------------
460 //------------------------------------------------------------------------
461 virtual bool NeedEncryption( HandShakeData *handShakeData,
462 AnyObject &channelData ) = 0;
463
464 //------------------------------------------------------------------------
466 //------------------------------------------------------------------------
467 virtual Status GetSignature( Message *toSign, Message *&sign,
468 AnyObject &channelData ) = 0;
469
470 //------------------------------------------------------------------------
472 //------------------------------------------------------------------------
473 virtual void DecFileInstCnt( AnyObject &channelData ) = 0;
474
475 //------------------------------------------------------------------------
477 //------------------------------------------------------------------------
478 virtual URL GetBindPreference( const URL &url,
479 AnyObject &channelData ) = 0;
480 };
481}
482
483#endif // __XRD_CL_POST_MASTER_INTERFACES_HH__
Definition: XrdClAnyObject.hh:33
Channel event handler.
Definition: XrdClPostMasterInterfaces.hh:210
virtual bool OnChannelEvent(ChannelEvent event, Status status)=0
ChannelEvent
Events that may have occurred to the channel.
Definition: XrdClPostMasterInterfaces.hh:216
@ StreamBroken
The stream is broken.
Definition: XrdClPostMasterInterfaces.hh:218
@ StreamReady
The stream has become connected.
Definition: XrdClPostMasterInterfaces.hh:217
@ FatalError
Stream has been broken and won't be recovered.
Definition: XrdClPostMasterInterfaces.hh:219
virtual ~ChannelEventHandler()
Destructor.
Definition: XrdClPostMasterInterfaces.hh:225
The message representation used throughout the system.
Definition: XrdClMessage.hh:30
Message handler.
Definition: XrdClPostMasterInterfaces.hh:51
virtual ~MsgHandler()
Event types that the message handler may receive.
Definition: XrdClPostMasterInterfaces.hh:90
virtual uint16_t Examine(std::shared_ptr< Message > &msg)=0
virtual XRootDStatus ReadMessageBody(Message *msg, Socket *socket, uint32_t &bytesRead)
Definition: XrdClPostMasterInterfaces.hh:138
virtual XRootDStatus WriteMessageBody(Socket *socket, uint32_t &bytesWritten)
Definition: XrdClPostMasterInterfaces.hh:196
virtual uint16_t GetSid() const =0
Action
Actions to be taken after a message is processed by the handler.
Definition: XrdClPostMasterInterfaces.hh:57
@ NoProcess
Definition: XrdClPostMasterInterfaces.hh:66
@ Raw
Definition: XrdClPostMasterInterfaces.hh:63
@ RemoveHandler
Definition: XrdClPostMasterInterfaces.hh:61
@ Nop
A place holder.
Definition: XrdClPostMasterInterfaces.hh:59
@ More
there are more (non-raw) data to be read
Definition: XrdClPostMasterInterfaces.hh:72
@ Ignore
Ignore the message.
Definition: XrdClPostMasterInterfaces.hh:60
@ Corrupted
Definition: XrdClPostMasterInterfaces.hh:69
virtual void OnReadyToSend(Message *msg)
Definition: XrdClPostMasterInterfaces.hh:174
virtual uint8_t OnStreamEvent(StreamEvent event, XRootDStatus status)
Definition: XrdClPostMasterInterfaces.hh:153
virtual time_t GetExpiration()=0
StreamEvent
Events that may have occurred to the stream.
Definition: XrdClPostMasterInterfaces.hh:79
@ FatalError
Stream has been broken and won't be recovered.
Definition: XrdClPostMasterInterfaces.hh:83
@ Ready
The stream has become connected.
Definition: XrdClPostMasterInterfaces.hh:80
@ Broken
The stream is broken.
Definition: XrdClPostMasterInterfaces.hh:81
virtual uint16_t InspectStatusRsp()=0
virtual void OnStatusReady(const Message *message, XRootDStatus status)=0
The requested action has been performed and the status is available.
virtual void Process()
Definition: XrdClPostMasterInterfaces.hh:125
virtual bool IsRaw() const
Definition: XrdClPostMasterInterfaces.hh:184
A network socket.
Definition: XrdClSocket.hh:43
Definition: XrdClOperationTimeout.hh:20
Perform the handshake and the authentication for each physical stream.
Definition: XrdClPostMasterInterfaces.hh:310
StreamAction
Stream actions that may be triggered by incoming control messages.
Definition: XrdClPostMasterInterfaces.hh:317
@ NoAction
No action.
Definition: XrdClPostMasterInterfaces.hh:318
@ DigestMsg
Definition: XrdClPostMasterInterfaces.hh:319
@ RequestClose
Send a close request.
Definition: XrdClPostMasterInterfaces.hh:329
@ AbortStream
Definition: XrdClPostMasterInterfaces.hh:321
@ HoldStream
Stop sending requests [not yet implemented].
Definition: XrdClPostMasterInterfaces.hh:328
@ CloseStream
Definition: XrdClPostMasterInterfaces.hh:324
@ ResumeStream
Definition: XrdClPostMasterInterfaces.hh:326
virtual bool NeedEncryption(HandShakeData *handShakeData, AnyObject &channelData)=0
virtual uint32_t MessageReceived(Message &msg, uint16_t subStream, AnyObject &channelData)=0
Check if the message invokes a stream action.
virtual uint16_t SubStreamNumber(AnyObject &channelData)=0
Return a number of substreams per stream that should be created.
virtual bool IsStreamTTLElapsed(time_t inactiveTime, AnyObject &channelData)=0
Check if the stream should be disconnected.
virtual PathID Multiplex(Message *msg, AnyObject &channelData, PathID *hint=0)=0
virtual Status Query(uint16_t query, AnyObject &result, AnyObject &channelData)=0
Query the channel.
virtual PathID MultiplexSubStream(Message *msg, AnyObject &channelData, PathID *hint=0)=0
virtual XRootDStatus GetBody(Message &message, Socket *socket)=0
virtual void FinalizeChannel(AnyObject &channelData)=0
Finalize channel.
virtual void Disconnect(AnyObject &channelData, uint16_t subStreamId)=0
The stream has been disconnected, do the cleanups.
virtual ~TransportHandler()
Definition: XrdClPostMasterInterfaces.hh:333
virtual bool HandShakeDone(HandShakeData *handShakeData, AnyObject &channelData)=0
virtual void WaitBeforeExit()=0
Wait before exit.
virtual void InitializeChannel(const URL &url, AnyObject &channelData)=0
Initialize channel.
virtual XRootDStatus GetHeader(Message &message, Socket *socket)=0
virtual void DecFileInstCnt(AnyObject &channelData)=0
Decrement file object instance count bound to this channel.
virtual URL GetBindPreference(const URL &url, AnyObject &channelData)=0
Get bind preference for the next data stream.
virtual Status IsStreamBroken(time_t inactiveTime, AnyObject &channelData)=0
virtual XRootDStatus HandShake(HandShakeData *handShakeData, AnyObject &channelData)=0
HandHake.
virtual void MessageSent(Message *msg, uint16_t subStream, uint32_t bytesSent, AnyObject &channelData)=0
Notify the transport about a message having been sent.
virtual Status GetSignature(Message *toSign, Message *&sign, AnyObject &channelData)=0
Get signature for given message.
URL representation.
Definition: XrdClURL.hh:31
Request status.
Definition: XrdClXRootDResponses.hh:219
Definition: XrdNetAddr.hh:42
Definition: XrdClAction.hh:34
const uint16_t stOK
Everything went OK.
Definition: XrdClStatus.hh:31
const uint16_t suDone
Definition: XrdClStatus.hh:38
Data structure that carries the handshake information.
Definition: XrdClPostMasterInterfaces.hh:244
uint16_t step
Handshake step.
Definition: XrdClPostMasterInterfaces.hh:252
time_t startTime
Timestamp of when the handshake started.
Definition: XrdClPostMasterInterfaces.hh:257
std::string streamName
Name of the stream.
Definition: XrdClPostMasterInterfaces.hh:261
std::string clientName
Client name (an IPv6 representation)
Definition: XrdClPostMasterInterfaces.hh:260
HandShakeData(const URL *addr, uint16_t subStream)
Constructor.
Definition: XrdClPostMasterInterfaces.hh:248
const URL * url
Destination URL.
Definition: XrdClPostMasterInterfaces.hh:255
const XrdNetAddr * serverAddr
Server address.
Definition: XrdClPostMasterInterfaces.hh:259
Message * in
Message that has been received.
Definition: XrdClPostMasterInterfaces.hh:254
uint16_t subStreamId
Sub-stream id.
Definition: XrdClPostMasterInterfaces.hh:256
Message * out
Message to be sent out.
Definition: XrdClPostMasterInterfaces.hh:253
none object for initializing empty Optional
Definition: XrdClOptional.hh:35
Definition: XrdClPostMasterInterfaces.hh:269
uint16_t down
Definition: XrdClPostMasterInterfaces.hh:272
PathID(uint16_t u=0, uint16_t d=0)
Definition: XrdClPostMasterInterfaces.hh:270
uint16_t up
Definition: XrdClPostMasterInterfaces.hh:271
Procedure execution status.
Definition: XrdClStatus.hh:115
Definition: XrdClPostMasterInterfaces.hh:300
static const uint16_t IpAddr
Definition: XrdClPostMasterInterfaces.hh:301
static const uint16_t HostName
Definition: XrdClPostMasterInterfaces.hh:303
static const uint16_t IpStack
Definition: XrdClPostMasterInterfaces.hh:302
Definition: XrdClPostMasterInterfaces.hh:280
static const uint16_t Name
Transport name, returns const char *.
Definition: XrdClPostMasterInterfaces.hh:281
static const uint16_t Auth
Transport name, returns std::string *.
Definition: XrdClPostMasterInterfaces.hh:282
XRootD related protocol queries.
Definition: XrdClPostMasterInterfaces.hh:289
static const uint16_t ServerFlags
returns server flags
Definition: XrdClPostMasterInterfaces.hh:290
static const uint16_t ProtocolVersion
returns the protocol version
Definition: XrdClPostMasterInterfaces.hh:291
static const uint16_t IsEncrypted
returns true if the channel is encrypted
Definition: XrdClPostMasterInterfaces.hh:292