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 ) { (void)msg; };
00105 
00106       //------------------------------------------------------------------------
00116       //------------------------------------------------------------------------
00117       virtual Status ReadMessageBody( Message  *msg,
00118                                       int       socket,
00119                                       uint32_t &bytesRead )
00120       {
00121         (void)msg; (void)socket; (void)bytesRead;
00122         return Status( stOK, suDone );
00123       };
00124 
00125       //------------------------------------------------------------------------
00132       //------------------------------------------------------------------------
00133       virtual uint8_t OnStreamEvent( StreamEvent event,
00134                                      uint16_t    streamNum,
00135                                      Status      status )
00136       {
00137         (void)event; (void)streamNum; (void)status;
00138         return 0;
00139       };
00140   };
00141 
00142   //----------------------------------------------------------------------------
00144   //----------------------------------------------------------------------------
00145   class OutgoingMsgHandler
00146   {
00147     public:
00148       virtual ~OutgoingMsgHandler() {}
00149 
00150       //------------------------------------------------------------------------
00152       //------------------------------------------------------------------------
00153       virtual void OnStatusReady( const Message *message,
00154                                   Status         status ) = 0;
00155 
00156       //------------------------------------------------------------------------
00164       //------------------------------------------------------------------------
00165       virtual void OnReadyToSend( Message *msg, uint16_t streamNum )
00166       {
00167         (void)msg; (void)streamNum;
00168       };
00169 
00170       //------------------------------------------------------------------------
00174       //------------------------------------------------------------------------
00175       virtual bool IsRaw() const { return false; }
00176 
00177       //------------------------------------------------------------------------
00186       //------------------------------------------------------------------------
00187       virtual Status WriteMessageBody( int       socket,
00188                                        uint32_t &bytesRead )
00189       {
00190         (void)socket; (void)bytesRead;
00191         return Status();
00192       }
00193   };
00194 
00195   //----------------------------------------------------------------------------
00197   //----------------------------------------------------------------------------
00198   class ChannelEventHandler
00199   {
00200     public:
00201       //------------------------------------------------------------------------
00203       //------------------------------------------------------------------------
00204       enum ChannelEvent
00205       {
00206         StreamReady  = 1, 
00207         StreamBroken = 2, 
00208         FatalError   = 4  
00209       };
00210 
00211       //------------------------------------------------------------------------
00213       //------------------------------------------------------------------------
00214       virtual ~ChannelEventHandler() {};
00215 
00216       //------------------------------------------------------------------------
00224       //------------------------------------------------------------------------
00225       virtual bool OnChannelEvent( ChannelEvent event,
00226                                    Status       status,
00227                                    uint16_t     stream ) = 0;
00228   };
00229 
00230   //----------------------------------------------------------------------------
00232   //----------------------------------------------------------------------------
00233   struct HandShakeData
00234   {
00235     //--------------------------------------------------------------------------
00237     //--------------------------------------------------------------------------
00238     HandShakeData( const URL *addr, uint16_t stream, uint16_t subStream ):
00239       step(0), out(0), in(0), url(addr), streamId(stream),
00240       subStreamId( subStream ), startTime( time(0) ), serverAddr(0)
00241     {}
00242     uint16_t     step;           
00243     Message     *out;            
00244     Message     *in;             
00245     const URL   *url;            
00246     uint16_t     streamId;       
00247     uint16_t     subStreamId;    
00248     time_t       startTime;      
00249     const void  *serverAddr;     
00250     std::string  clientName;     
00251     std::string  streamName;     
00252   };
00253 
00254   //----------------------------------------------------------------------------
00257   //----------------------------------------------------------------------------
00258   struct PathID
00259   {
00260     PathID( uint16_t u = 0, uint16_t d = 0 ): up(u), down(d) {}
00261     uint16_t up;
00262     uint16_t down;
00263   };
00264 
00265   //----------------------------------------------------------------------------
00268   //----------------------------------------------------------------------------
00269   struct TransportQuery
00270   {
00271     static const uint16_t Name = 1; 
00272     static const uint16_t Auth = 2; 
00273   };
00274 
00275   //----------------------------------------------------------------------------
00277   //----------------------------------------------------------------------------
00278   class TransportHandler
00279   {
00280     public:
00281 
00282       //------------------------------------------------------------------------
00284       //------------------------------------------------------------------------
00285       enum StreamAction
00286       {
00287         NoAction     = 0x0000, 
00288         DigestMsg    = 0x0001, 
00289 
00290         AbortStream  = 0x0002, 
00291 
00292 
00293         CloseStream  = 0x0004, 
00294 
00295         ResumeStream = 0x0008, 
00296 
00297         HoldStream   = 0x0010  
00298       };
00299 
00300 
00301       virtual ~TransportHandler() {}
00302 
00303       //------------------------------------------------------------------------
00314       //------------------------------------------------------------------------
00315       virtual Status GetHeader( Message *message, int socket ) = 0;
00316 
00317       //------------------------------------------------------------------------
00326       //------------------------------------------------------------------------
00327       virtual Status GetBody( Message *message, int socket ) = 0;
00328 
00329       //------------------------------------------------------------------------
00331       //------------------------------------------------------------------------
00332       virtual void InitializeChannel( AnyObject &channelData ) = 0;
00333 
00334       //------------------------------------------------------------------------
00336       //------------------------------------------------------------------------
00337       virtual void FinalizeChannel( AnyObject &channelData ) = 0;
00338 
00339       //------------------------------------------------------------------------
00341       //------------------------------------------------------------------------
00342       virtual Status HandShake( HandShakeData *handShakeData,
00343                                 AnyObject     &channelData ) = 0;
00344 
00345       //------------------------------------------------------------------------
00347       //------------------------------------------------------------------------
00348       virtual bool IsStreamTTLElapsed( time_t     inactiveTime,
00349                                        AnyObject &channelData ) = 0;
00350 
00351       //------------------------------------------------------------------------
00357       //------------------------------------------------------------------------
00358       virtual PathID Multiplex( Message   *msg,
00359                                 AnyObject &channelData,
00360                                 PathID    *hint = 0 ) = 0;
00361 
00362       //------------------------------------------------------------------------
00368       //------------------------------------------------------------------------
00369       virtual PathID MultiplexSubStream( Message   *msg,
00370                                          AnyObject &channelData,
00371                                          PathID    *hint = 0 ) = 0;
00372 
00373       //------------------------------------------------------------------------
00375       //------------------------------------------------------------------------
00376       virtual uint16_t StreamNumber( AnyObject &channelData ) = 0;
00377 
00378       //------------------------------------------------------------------------
00380       //------------------------------------------------------------------------
00381       virtual uint16_t SubStreamNumber( AnyObject &channelData ) = 0;
00382 
00383       //------------------------------------------------------------------------
00385       //------------------------------------------------------------------------
00386       virtual void Disconnect( AnyObject &channelData,
00387                                uint16_t   streamId,
00388                                uint16_t   subStreamId ) = 0;
00389 
00390       //------------------------------------------------------------------------
00392       //------------------------------------------------------------------------
00393       virtual Status Query( uint16_t   query,
00394                             AnyObject &result,
00395                             AnyObject &channelData ) = 0;
00396 
00397       //------------------------------------------------------------------------
00399       //------------------------------------------------------------------------
00400       virtual uint32_t StreamAction( Message *msg, AnyObject &channelData ) = 0;
00401   };
00402 }
00403 
00404 #endif // __XRD_CL_POST_MASTER_INTERFACES_HH__

Generated on 16 Jan 2014 for xrootd by  doxygen 1.4.7