XrdCksManager.hh

Go to the documentation of this file.
00001 #ifndef __XRDCKSMANAGER_HH__
00002 #define __XRDCKSMANAGER_HH__
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                      X r d C k s M a n a g e r . h h                       */
00006 /*                                                                            */
00007 /* (c) 2011 by the Board of Trustees of the Leland Stanford, Jr., University  */
00008 /*                            All Rights Reserved                             */
00009 /*   Produced by Andrew Hanushevsky for Stanford University under contract    */
00010 /*              DE-AC02-76-SFO0515 with the Department of Energy              */
00011 /*                                                                            */
00012 /* This file is part of the XRootD software suite.                            */
00013 /*                                                                            */
00014 /* XRootD is free software: you can redistribute it and/or modify it under    */
00015 /* the terms of the GNU Lesser General Public License as published by the     */
00016 /* Free Software Foundation, either version 3 of the License, or (at your     */
00017 /* option) any later version.                                                 */
00018 /*                                                                            */
00019 /* XRootD is distributed in the hope that it will be useful, but WITHOUT      */
00020 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or      */
00021 /* FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser General Public       */
00022 /* License for more details.                                                  */
00023 /*                                                                            */
00024 /* You should have received a copy of the GNU Lesser General Public License   */
00025 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file  */
00026 /* COPYING (GPL license).  If not, see <http://www.gnu.org/licenses/>.        */
00027 /*                                                                            */
00028 /* The copyright holder's institutional names and contributor's names may not */
00029 /* be used to endorse or promote products derived from this software without  */
00030 /* specific prior written permission of the institution or contributor.       */
00031 /******************************************************************************/
00032 
00033 #include "sys/types.h"
00034 
00035 #include "XrdCks/XrdCks.hh"
00036 #include "XrdCks/XrdCksData.hh"
00037 
00038 /* This class defines the checksum management interface. It may also be used
00039    as the base class for a plugin. This allows you to replace selected methods
00040    which may be needed for handling certain filesystems (see protected ones).
00041 */
00042 
00043 class  XrdCksCalc;
00044 class  XrdCksLoader;
00045 class  XrdSysError;
00046 struct XrdVersionInfo;
00047   
00048 class XrdCksManager : public XrdCks
00049 {
00050 public:
00051 virtual int         Calc( const char *Pfn, XrdCksData &Cks, int doSet=1);
00052 
00053 virtual int         Config(const char *Token, char *Line);
00054 
00055 virtual int         Del(  const char *Pfn, XrdCksData &Cks);
00056 
00057 virtual int         Get(  const char *Pfn, XrdCksData &Cks);
00058 
00059 virtual int         Init(const char *ConfigFN, const char *AddCalc=0);
00060 
00061 virtual char       *List(const char *Pfn, char *Buff, int Blen, char Sep=' ');
00062 
00063 virtual const char *Name(int seqNum=0);
00064 
00065 virtual XrdCksCalc *Object(const char *name);
00066 
00067 virtual int         Size( const char  *Name=0);
00068 
00069 virtual int         Set(  const char *Pfn, XrdCksData &Cks, int myTime=0);
00070 
00071 virtual int         Ver(  const char *Pfn, XrdCksData &Cks);
00072 
00073                     XrdCksManager(XrdSysError *erP, int iosz,
00074                                   XrdVersionInfo &vInfo, bool autoload=false);
00075 virtual            ~XrdCksManager();
00076 
00077 protected:
00078 
00079 /* Calc()     returns 0 if the checksum was successfully calculated using the
00080               supplied CksObj and places the file's modification time in MTime.
00081               Otherwise, it returns -errno. The default implementation uses
00082               open(), fstat(), mmap(), and unmap() to calculate the results.
00083 */
00084 virtual int         Calc(const char *Pfn, time_t &MTime, XrdCksCalc *CksObj);
00085 
00086 /* ModTime()  returns 0 and places file's modification time in MTime. Otherwise,
00087               it return -errno. The default implementation uses stat().
00088 */
00089 virtual int         ModTime(const char *Pfn, time_t &MTime);
00090 
00091 private:
00092 
00093 struct csInfo
00094       {char          Name[XrdCksData::NameSize];
00095        XrdCksCalc   *Obj;
00096        char         *Path;
00097        char         *Parms;
00098        XrdSysPlugin *Plugin;
00099        int           Len;
00100        bool          doDel;
00101                      csInfo() : Obj(0), Path(0), Parms(0), Plugin(0), Len(0),
00102                                 doDel(true)
00103                                 {memset(Name, 0, sizeof(Name));}
00104       };
00105 
00106 int     Config(const char *cFN, csInfo &Info);
00107 csInfo *Find(const char *Name);
00108 
00109 static const int csMax = 8;
00110 csInfo           csTab[csMax];
00111 int              csLast;
00112 int              segSize;
00113 XrdCksLoader    *cksLoader;
00114 XrdVersionInfo  &myVersion;
00115 };
00116 #endif

Generated on 12 Dec 2014 for xrootd by  doxygen 1.4.7