XrdClPostMasterInterfaces.hh

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 // Copyright (c) 2011-2012 by European Organization for Nuclear Research (CERN)
00003 // Author: Lukasz Janyst <ljanyst@cern.ch>
00004 //------------------------------------------------------------------------------
00005 // XRootD is free software: you can redistribute it and/or modify
00006 // it under the terms of the GNU Lesser General Public License as published by
00007 // the Free Software Foundation, either version 3 of the License, or
00008 // (at your option) any later version.
00009 //
00010 // XRootD is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013 // GNU General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public License
00016 // along with XRootD.  If not, see <http://www.gnu.org/licenses/>.
00017 //------------------------------------------------------------------------------
00018 
00019 #ifndef __XRD_CL_POST_MASTER_INTERFACES_HH__
00020 #define __XRD_CL_POST_MASTER_INTERFACES_HH__
00021 
00022 #include <stdint.h>
00023 #include <ctime>
00024 
00025 #include "XrdCl/XrdClStatus.hh"
00026 #include "XrdCl/XrdClAnyObject.hh"
00027 #include "XrdCl/XrdClURL.hh"
00028 
00029 namespace XrdCl
00030 {
00031   class Channel;
00032   class Message;
00033   class URL;
00034 
00035   //----------------------------------------------------------------------------
00037   //----------------------------------------------------------------------------
00038   class MessageFilter
00039   {
00040     public:
00041       virtual ~MessageFilter() {}
00042 
00043       //------------------------------------------------------------------------
00046       //------------------------------------------------------------------------
00047       virtual bool Filter( const Message *msg ) = 0;
00048   };
00049 
00050   //----------------------------------------------------------------------------
00052   //----------------------------------------------------------------------------
00053   class IncomingMsgHandler
00054   {
00055     public:
00056       //------------------------------------------------------------------------
00058       //------------------------------------------------------------------------
00059       enum Action
00060       {
00061         Take          = 0x0001,    
00062         Ignore        = 0x0002,    
00063         RemoveHandler = 0x0004,    
00064 
00065         Raw           = 0x0008,    
00066 
00067 
00068         NoProcess     = 0x0010     
00069 
00070 
00071       };
00072 
00073       //------------------------------------------------------------------------
00075       //------------------------------------------------------------------------
00076       enum StreamEvent
00077       {
00078         Ready      = 1, 
00079         Broken     = 2, 
00080         Timeout    = 3, 
00081         FatalError = 4  
00082       };
00083 
00084       //------------------------------------------------------------------------
00086       //------------------------------------------------------------------------
00087 
00088       virtual ~IncomingMsgHandler() {}
00089 
00090       //------------------------------------------------------------------------
00096       //------------------------------------------------------------------------
00097       virtual uint16_t Examine( Message *msg ) = 0;
00098 
00099       //------------------------------------------------------------------------
00103       //------------------------------------------------------------------------
00104       virtual void Process( Message *msg ) {};
00105 
00106       //------------------------------------------------------------------------
00116       //------------------------------------------------------------------------
00117       virtual Status ReadMessageBody( Message  *msg,
00118                                       int       socket,
00119                                       uint32_t &bytesRead )
00120       {
00121         return Status( stOK, suDone );
00122       };
00123 
00124       //------------------------------------------------------------------------
00131       //------------------------------------------------------------------------
00132       virtual uint8_t OnStreamEvent( StreamEvent event,
00133                                      uint16_t    streamNum,
00134                                      Status      status )
00135       {
00136         return 0;
00137       };
00138   };
00139 
00140   //----------------------------------------------------------------------------
00142   //----------------------------------------------------------------------------
00143   class OutgoingMsgHandler
00144   {
00145     public:
00146       virtual ~OutgoingMsgHandler() {}
00147 
00148       //------------------------------------------------------------------------
00150       //------------------------------------------------------------------------
00151       virtual void OnStatusReady( const Message *message,
00152                                   Status         status ) = 0;
00153 
00154       //------------------------------------------------------------------------
00162       //------------------------------------------------------------------------
00163       virtual void OnReadyToSend( Message *msg, uint16_t streamNum ) {};
00164 
00165       //------------------------------------------------------------------------
00169       //------------------------------------------------------------------------
00170       virtual bool IsRaw() const { return false; }
00171 
00172       //------------------------------------------------------------------------
00181       //------------------------------------------------------------------------
00182       virtual Status WriteMessageBody( int       socket,
00183                                        uint32_t &bytesRead )
00184       {
00185         return Status();
00186       }
00187   };
00188 
00189   //----------------------------------------------------------------------------
00191   //----------------------------------------------------------------------------
00192   class ChannelEventHandler
00193   {
00194     public:
00195       //------------------------------------------------------------------------
00197       //------------------------------------------------------------------------
00198       enum ChannelEvent
00199       {
00200         StreamReady  = 1, 
00201         StreamBroken = 2, 
00202         FatalError   = 4  
00203       };
00204 
00205       //------------------------------------------------------------------------
00207       //------------------------------------------------------------------------
00208       virtual ~ChannelEventHandler() {};
00209 
00210       //------------------------------------------------------------------------
00218       //------------------------------------------------------------------------
00219       virtual bool OnChannelEvent( ChannelEvent event,
00220                                    Status       status,
00221                                    uint16_t     stream ) = 0;
00222   };
00223 
00224   //----------------------------------------------------------------------------
00226   //----------------------------------------------------------------------------
00227   struct HandShakeData
00228   {
00229     //--------------------------------------------------------------------------
00231     //--------------------------------------------------------------------------
00232     HandShakeData( const URL *addr, uint16_t stream, uint16_t subStream ):
00233       step(0), out(0), in(0), url(addr), streamId(stream),
00234       subStreamId( subStream ), startTime( time(0) ), serverAddr(0)
00235     {}
00236     uint16_t     step;           
00237     Message     *out;            
00238     Message     *in;             
00239     const URL   *url;            
00240     uint16_t     streamId;       
00241     uint16_t     subStreamId;    
00242     time_t       startTime;      
00243     const void  *serverAddr;     
00244     std::string  clientName;     
00245     std::string  streamName;     
00246   };
00247 
00248   //----------------------------------------------------------------------------
00251   //----------------------------------------------------------------------------
00252   struct PathID
00253   {
00254     PathID( uint16_t u = 0, uint16_t d = 0 ): up(u), down(d) {}
00255     uint16_t up;
00256     uint16_t down;
00257   };
00258 
00259   //----------------------------------------------------------------------------
00262   //----------------------------------------------------------------------------
00263   struct TransportQuery
00264   {
00265     static const uint16_t Name = 1; 
00266     static const uint16_t Auth = 2; 
00267   };
00268 
00269   //----------------------------------------------------------------------------
00271   //----------------------------------------------------------------------------
00272   class TransportHandler
00273   {
00274     public:
00275 
00276       //------------------------------------------------------------------------
00278       //------------------------------------------------------------------------
00279       enum StreamAction
00280       {
00281         NoAction     = 0x0000, 
00282         DigestMsg    = 0x0001, 
00283 
00284         AbortStream  = 0x0002, 
00285 
00286 
00287         CloseStream  = 0x0004, 
00288 
00289         ResumeStream = 0x0008, 
00290 
00291         HoldStream   = 0x0010  
00292       };
00293 
00294 
00295       virtual ~TransportHandler() {}
00296 
00297       //------------------------------------------------------------------------
00308       //------------------------------------------------------------------------
00309       virtual Status GetHeader( Message *message, int socket ) = 0;
00310 
00311       //------------------------------------------------------------------------
00320       //------------------------------------------------------------------------
00321       virtual Status GetBody( Message *message, int socket ) = 0;
00322 
00323       //------------------------------------------------------------------------
00325       //------------------------------------------------------------------------
00326       virtual void InitializeChannel( AnyObject &channelData ) = 0;
00327 
00328       //------------------------------------------------------------------------
00330       //------------------------------------------------------------------------
00331       virtual void FinalizeChannel( AnyObject &channelData ) = 0;
00332 
00333       //------------------------------------------------------------------------
00335       //------------------------------------------------------------------------
00336       virtual Status HandShake( HandShakeData *handShakeData,
00337                                 AnyObject     &channelData ) = 0;
00338 
00339       //------------------------------------------------------------------------
00341       //------------------------------------------------------------------------
00342       virtual bool IsStreamTTLElapsed( time_t     inactiveTime,
00343                                        AnyObject &channelData ) = 0;
00344 
00345       //------------------------------------------------------------------------
00351       //------------------------------------------------------------------------
00352       virtual PathID Multiplex( Message   *msg,
00353                                 AnyObject &channelData,
00354                                 PathID    *hint = 0 ) = 0;
00355 
00356       //------------------------------------------------------------------------
00362       //------------------------------------------------------------------------
00363       virtual PathID MultiplexSubStream( Message   *msg,
00364                                          AnyObject &channelData,
00365                                          PathID    *hint = 0 ) = 0;
00366 
00367       //------------------------------------------------------------------------
00369       //------------------------------------------------------------------------
00370       virtual uint16_t StreamNumber( AnyObject &channelData ) = 0;
00371 
00372       //------------------------------------------------------------------------
00374       //------------------------------------------------------------------------
00375       virtual uint16_t SubStreamNumber( AnyObject &channelData ) = 0;
00376 
00377       //------------------------------------------------------------------------
00379       //------------------------------------------------------------------------
00380       virtual void Disconnect( AnyObject &channelData,
00381                                uint16_t   streamId,
00382                                uint16_t   subStreamId ) = 0;
00383 
00384       //------------------------------------------------------------------------
00386       //------------------------------------------------------------------------
00387       virtual Status Query( uint16_t   query,
00388                             AnyObject &result,
00389                             AnyObject &channelData ) = 0;
00390 
00391       //------------------------------------------------------------------------
00393       //------------------------------------------------------------------------
00394       virtual uint32_t StreamAction( Message *msg, AnyObject &channelData ) = 0;
00395   };
00396 }
00397 
00398 #endif // __XRD_CL_POST_MASTER_INTERFACES_HH__

Generated on 27 Jul 2013 for xrootd by  doxygen 1.4.7