XRootD
XrdClChannel.hh
Go to the documentation of this file.
1 //------------------------------------------------------------------------------
2 // Copyright (c) 2011-2012 by European Organization for Nuclear Research (CERN)
3 // Author: Lukasz Janyst <ljanyst@cern.ch>
4 //------------------------------------------------------------------------------
5 // XRootD is free software: you can redistribute it and/or modify
6 // it under the terms of the GNU Lesser General Public License as published by
7 // the Free Software Foundation, either version 3 of the License, or
8 // (at your option) any later version.
9 //
10 // XRootD is distributed in the hope that it will be useful,
11 // but WITHOUT ANY WARRANTY; without even the implied warranty of
12 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 // GNU General Public License for more details.
14 //
15 // You should have received a copy of the GNU Lesser General Public License
16 // along with XRootD. If not, see <http://www.gnu.org/licenses/>.
17 //------------------------------------------------------------------------------
18 
19 #ifndef __XRD_CL_POST_CHANNEL_HH__
20 #define __XRD_CL_POST_CHANNEL_HH__
21 
22 #include <cstdint>
23 #include <vector>
24 #include <ctime>
25 #include <functional>
26 
27 #include "XrdCl/XrdClStatus.hh"
28 #include "XrdCl/XrdClURL.hh"
29 #include "XrdCl/XrdClPoller.hh"
30 #include "XrdCl/XrdClInQueue.hh"
32 #include "XrdCl/XrdClAnyObject.hh"
34 
35 #include "XrdSys/XrdSysPthread.hh"
36 
37 namespace XrdCl
38 {
39  class Stream;
40  class JobManager;
41  class VirtualRedirector;
42  class TickGeneratorTask;
43  class Job;
44 
45  //----------------------------------------------------------------------------
47  //----------------------------------------------------------------------------
48  class Channel
49  {
50  public:
51  //------------------------------------------------------------------------
59  //------------------------------------------------------------------------
60  Channel( const URL &url,
61  Poller *poller,
62  TransportHandler *transport,
63  TaskManager *taskManager,
64  JobManager *jobManager,
65  const URL &prefurl = URL() );
66 
67  //------------------------------------------------------------------------
69  //------------------------------------------------------------------------
70  ~Channel();
71 
72  //------------------------------------------------------------------------
74  //------------------------------------------------------------------------
75  const URL &GetURL() const
76  {
77  return pUrl;
78  }
79 
80  //------------------------------------------------------------------------
92  //------------------------------------------------------------------------
94  MsgHandler *handler,
95  bool stateful,
96  time_t expires );
97 
98  //------------------------------------------------------------------------
105  //------------------------------------------------------------------------
106  Status QueryTransport( uint16_t query, AnyObject &result );
107 
108  //------------------------------------------------------------------------
110  //------------------------------------------------------------------------
111  void RegisterEventHandler( ChannelEventHandler *handler );
112 
113  //------------------------------------------------------------------------
115  //------------------------------------------------------------------------
116  void RemoveEventHandler( ChannelEventHandler *handler );
117 
118  //------------------------------------------------------------------------
120  //------------------------------------------------------------------------
121  void Tick( time_t now );
122 
123  //------------------------------------------------------------------------
125  //------------------------------------------------------------------------
127 
128  //------------------------------------------------------------------------
130  //------------------------------------------------------------------------
131  Status ForceDisconnect( bool hush );
132 
133  //------------------------------------------------------------------------
135  //------------------------------------------------------------------------
137 
138  //------------------------------------------------------------------------
140  //------------------------------------------------------------------------
141  uint16_t NbConnectedStrm();
142 
143  //------------------------------------------------------------------------
145  //------------------------------------------------------------------------
146  void SetOnDataConnectHandler( std::shared_ptr<Job> &onConnJob );
147 
148  //------------------------------------------------------------------------
151  //------------------------------------------------------------------------
152  bool CanCollapse( const URL &url );
153 
154  //------------------------------------------------------------------------
156  //------------------------------------------------------------------------
157  void DecFileInstCnt();
158 
159  private:
160 
161  URL pUrl;
162  Poller *pPoller;
163  TransportHandler *pTransport;
164  TaskManager *pTaskManager;
165  Stream *pStream;
166  XrdSysMutex pMutex;
167  AnyObject pChannelData;
168  InQueue pIncoming;
169  TickGeneratorTask *pTickGenerator;
170  JobManager *pJobManager;
171  };
172 }
173 
174 #endif // __XRD_CL_POST_CHANNEL_HH__
A communication channel between the client and the server.
Definition: XrdClChannel.hh:49
uint16_t NbConnectedStrm()
Get the number of connected data streams.
Status ForceReconnect()
Force reconnect.
void RemoveEventHandler(ChannelEventHandler *handler)
Remove a channel event handler.
void SetOnDataConnectHandler(std::shared_ptr< Job > &onConnJob)
Set the on-connect handler for data streams.
const URL & GetURL() const
Get the URL.
Definition: XrdClChannel.hh:75
~Channel()
Destructor.
void RegisterEventHandler(ChannelEventHandler *handler)
Register channel event handler.
void DecFileInstCnt()
Decrement file object instance count bound to this channel.
Status ForceDisconnect()
Force disconnect of all streams.
XRootDStatus Send(Message *msg, MsgHandler *handler, bool stateful, time_t expires)
void Tick(time_t now)
Handle a time event.
bool CanCollapse(const URL &url)
Status QueryTransport(uint16_t query, AnyObject &result)
Channel(const URL &url, Poller *poller, TransportHandler *transport, TaskManager *taskManager, JobManager *jobManager, const URL &prefurl=URL())
Definition: XrdClChannel.cc:84
A synchronize queue for incoming data.
Definition: XrdClInQueue.hh:37
A synchronized queue.
The message representation used throughout the system.
Definition: XrdClMessage.hh:32
Interface for socket pollers.
Definition: XrdClPoller.hh:87
Perform the handshake and the authentication for each physical stream.
URL representation.
Definition: XrdClURL.hh:31
Procedure execution status.
Definition: XrdClStatus.hh:115