00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012 #ifndef ROOT_XrdROOT
00013 #define ROOT_XrdROOT
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024 #include <list>
00025
00026 #include "Xrd/XrdProtocol.hh"
00027 #include "XProofProtocol.h"
00028 #include "XrdOuc/XrdOucString.hh"
00029
00030 #include "XrdProofdConfig.h"
00031
00032 class XrdProofdManager;
00033 class XrdSysLogger;
00034
00035 class XrdROOT {
00036 friend class XrdROOTMgr;
00037 private:
00038 int fStatus;
00039 XrdOucString fDir;
00040 XrdOucString fBinDir;
00041 XrdOucString fDataDir;
00042 XrdOucString fIncDir;
00043 XrdOucString fLibDir;
00044 XrdOucString fTag;
00045 XrdOucString fExport;
00046 XrdOucString fPrgmSrv;
00047 kXR_int16 fSrvProtVers;
00048
00049 XrdOucString fRelease;
00050 int fSvnRevision;
00051 int fVersionCode;
00052
00053 int fVrsMajor;
00054 int fVrsMinor;
00055 int fVrsPatch;
00056
00057 int CheckDir(const char *dir);
00058 int ParseROOTVersionInfo();
00059
00060 public:
00061 XrdROOT(const char *dir, const char *tag, const char *bindir = 0,
00062 const char *incdir = 0, const char *libdir = 0, const char *datadir = 0);
00063 ~XrdROOT() { }
00064
00065 const char *Dir() const { return fDir.c_str(); }
00066 const char *BinDir() const { return fBinDir.c_str(); }
00067 const char *DataDir() const { return fDataDir.c_str(); }
00068 const char *IncDir() const { return fIncDir.c_str(); }
00069 const char *LibDir() const { return fLibDir.c_str(); }
00070 const char *Export() const { return fExport.c_str(); }
00071 bool IsParked() const { return ((fStatus == 2) ? 1: 0); }
00072 bool IsValid() const { return ((fStatus == 1) ? 1: 0); }
00073 bool IsInvalid() const { return ((fStatus == -1) ? 1: 0); }
00074 bool Match(const char *dir, const char *tag)
00075 { return ((fTag == tag && fDir == dir) ? 1 : 0); }
00076 bool MatchTag(const char *tag) { return ((fTag == tag) ? 1 : 0); }
00077 void Park() { fStatus = 2; }
00078 const char *PrgmSrv() const { return fPrgmSrv.c_str(); }
00079 const char *Release() const { return fRelease.c_str(); }
00080 void SetValid(kXR_int16 vers = -1);
00081 kXR_int16 SrvProtVers() const { return fSrvProtVers; }
00082 int SvnRevision() const { return fSvnRevision; }
00083 const char *Tag() const { return fTag.c_str(); }
00084 int VersionCode() const { return fVersionCode; }
00085 int VrsMajor() const { return fVrsMajor; }
00086 int VrsMinor() const { return fVrsMinor; }
00087 int VrsPatch() const { return fVrsPatch; }
00088
00089 static int GetVersionCode(const char *release);
00090 static int GetVersionCode(int maj, int min, int patch);
00091 static int ParseReleaseString(const char *release, int &maj, int &min, int &patch);
00092 };
00093
00094
00095
00096
00097 class XrdROOTMgr : public XrdProofdConfig {
00098
00099 XrdProofdManager *fMgr;
00100 XrdSysLogger *fLogger;
00101 XrdOucString fLogDir;
00102
00103 std::list<XrdROOT *> fROOT;
00104
00105 int Validate(XrdROOT *r, XrdScheduler *sched);
00106
00107 void RegisterDirectives();
00108 int DoDirectiveRootSys(char *, XrdOucStream *, bool);
00109
00110 public:
00111 XrdROOTMgr(XrdProofdManager *mgr, XrdProtocol_Config *pi, XrdSysError *e);
00112 virtual ~XrdROOTMgr() { }
00113
00114 int Config(bool rcf = 0);
00115 int DoDirective(XrdProofdDirective *d,
00116 char *val, XrdOucStream *cfg, bool rcf);
00117
00118 XrdROOT *DefaultVersion() const { return fROOT.front(); }
00119 XrdOucString ExportVersions(XrdROOT *def);
00120 XrdROOT *GetVersion(const char *tag);
00121 void SetLogDir(const char *d);
00122 };
00123
00124
00125 #endif