00001 #ifndef __XRDCKSLOADER_HH__ 00002 #define __XRDCKSLOADER_HH__ 00003 /******************************************************************************/ 00004 /* */ 00005 /* X r d C k s L o a d e r . h h */ 00006 /* */ 00007 /* (c) 2012 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 loader interface. It is intended to be used 00039 by xrootd clients to obtain an instance of a checksum calculation object. 00040 This object may be builtin or may come from a shared library. 00041 */ 00042 00043 class XrdCksCalc; 00044 class XrdSysError; 00045 struct XrdVersionInfo; 00046 00047 class XrdCksLoader : public XrdCks 00048 { 00049 public: 00050 virtual int Calc( const char *Pfn, XrdCksData &Cks, int doSet=1); 00051 00052 virtual int Config(const char *Token, char *Line); 00053 00054 virtual int Del( const char *Pfn, XrdCksData &Cks); 00055 00056 virtual int Get( const char *Pfn, XrdCksData &Cks); 00057 00058 virtual int Init(const char *ConfigFN, const char *AddCalc=0); 00059 00060 virtual char *List(const char *Pfn, char *Buff, int Blen, char Sep=' '); 00061 00062 virtual const char *Name(int seqNum=0); 00063 00064 virtual XrdCksCalc *Object(const char *name); 00065 00066 virtual int Size( const char *Name=0); 00067 00068 virtual int Set( const char *Pfn, XrdCksData &Cks, int myTime=0); 00069 00070 virtual int Ver( const char *Pfn, XrdCksData &Cks); 00071 00072 XrdCksLoader(XrdSysError *erP, int iosz, 00073 XrdVersionInfo *vInfo); 00074 virtual ~XrdCksLoader(); 00075 00076 protected: 00077 00078 /* Calc() returns 0 if the checksum was successfully calculated using the 00079 supplied CksObj and places the file's modification time in MTime. 00080 Otherwise, it returns -errno. The default implementation uses 00081 open(), fstat(), mmap(), and unmap() to calculate the results. 00082 */ 00083 virtual int Calc(const char *Pfn, time_t &MTime, XrdCksCalc *CksObj); 00084 00085 /* ModTime() returns 0 and places file's modification time in MTime. Otherwise, 00086 it return -errno. The default implementation uses stat(). 00087 */ 00088 virtual int ModTime(const char *Pfn, time_t &MTime); 00089 00090 private: 00091 00092 struct csInfo 00093 {char Name[XrdCksData::NameSize]; 00094 XrdCksCalc *Obj; 00095 char *Path; 00096 char *Parms; 00097 XrdSysPlugin *Plugin; 00098 int Len; 00099 csInfo() : Obj(0), Path(0), Parms(0), Plugin(0), Len(0) 00100 {memset(Name, 0, sizeof(Name));} 00101 }; 00102 00103 int Config(const char *cFN, csInfo &Info); 00104 csInfo *Find(const char *Name); 00105 00106 static const int csMax = 4; 00107 csInfo csTab[csMax]; 00108 int csLast; 00109 int segSize; 00110 XrdVersionInfo *myVersion; 00111 }; 00112 #endif