00001 #ifndef __FRMADMIN__HH
00002 #define __FRMADMIN__HH
00003 
00004 
00005 
00006 
00007 
00008 
00009 
00010 
00011 
00012   
00013 
00014 
00015 #include <stdlib.h>
00016 #include <sys/types.h>
00017 
00018 #include "XrdOuc/XrdOucNSWalk.hh"
00019 
00020 class  XrdFrmFileset;
00021 class  XrdFrmProxy;
00022 class  XrdOucArgs;
00023 class  XrdOucTList;
00024 
00025 class XrdFrmAdmin
00026 {
00027 public:
00028 
00029 int  Audit();
00030 
00031 int  Copy();
00032 
00033 int  Create();
00034 
00035 int  Find();
00036 
00037 int  Help();
00038 
00039 int  MakeLF();
00040 
00041 int  Pin();
00042 
00043 int  Query();
00044 
00045 int  Quit() {exit(finalRC); return 0;}
00046 
00047 int  Reloc();
00048 
00049 int  Remove();
00050 
00051 int  Rename();
00052 
00053 void setArgs(int argc, char **argv);
00054 
00055 void setArgs(char *argv);
00056 
00057 int  xeqArgs(char *Cmd);
00058 
00059      XrdFrmAdmin() : frmProxy(0), frmProxz(0), finalRC(0) {}
00060     ~XrdFrmAdmin() {}
00061 
00062 private:
00063 int  AuditNameNB(XrdFrmFileset *sP);
00064 int  AuditNameNF(XrdFrmFileset *sP);
00065 int  AuditNameNL(XrdFrmFileset *sP);
00066 int  AuditNames();
00067 int  AuditNameXA(XrdFrmFileset *sP);
00068 int  AuditNameXL(XrdFrmFileset *sP, int dorm);
00069 int  AuditRemove(XrdFrmFileset *sP);
00070 int  AuditSpace();
00071 int  AuditSpaceAX(const char *Path);
00072 int  AuditSpaceAXDB(const char *Path);
00073 int  AuditSpaceAXDC(const char *Path, XrdOucNSWalk::NSEnt *nP);
00074 int  AuditSpaceAXDL(int dorm, const char *Path, const char *Dest);
00075 int  AuditSpaceXA(const char *Space, const char *Path);
00076 int  AuditSpaceXANB(XrdFrmFileset *sP);
00077 int  AuditUsage();
00078 int  AuditUsage(char *Space);
00079 int  AuditUsageAX(const char *Path);
00080 int  AuditUsageXA(const char *Path, const char *Space);
00081 int  isXA(XrdOucNSWalk::NSEnt *nP);
00082 
00083 int  FindFail(XrdOucArgs &Spec);
00084 int  FindNolk(XrdOucArgs &Spec);
00085 int  FindUnmi(XrdOucArgs &Spec);
00086 
00087 void ConfigProxy();
00088 
00089 void Emsg(const char *tx1, const char *tx2=0, const char *tx3=0,
00090                            const char *tx4=0, const char *tx5=0);
00091 void Emsg(int Enum,        const char *tx2=0, const char *tx3=0,
00092                            const char *tx4=0, const char *tx5=0);
00093 void Msg(const char *tx1,  const char *tx2=0, const char *tx3=0,
00094                            const char *tx4=0, const char *tx5=0);
00095 
00096 int          Parse(const char *What, XrdOucArgs &Spec, const char **Reqs);
00097 int          ParseKeep(const char *What, const char *kTime);
00098 int          ParseOwner(const char *What, char *Uname);
00099 XrdOucTList *ParseSpace(char *Space, char **Path);
00100 
00101 int  mkLock(const char *Lfn);
00102 int  mkFile(int What, const char *Path, const char *Data=0, int Dlen=0);
00103 int  mkPin(const char *Lfn, const char *Pdata, int Pdlen);
00104 char mkStat(int What, const char *Lfn, char *Pfn, int Pfnsz);
00105 
00106 
00107 
00108 static const int isPFN= 0x0001; 
00109 static const int mkLF = 0x0002; 
00110 static const int mkPF = 0x0004; 
00111 
00112 int  QueryPfn(XrdOucArgs &Spec);
00113 int  QueryRfn(XrdOucArgs &Spec);
00114 int  QuerySpace(XrdOucArgs &Spec);
00115 int  QuerySpace(const char *Pfn, char *Lnk=0, int Lsz=0);
00116 int  QueryUsage(XrdOucArgs &Spec);
00117 int  QueryXfrQ(XrdOucArgs &Spec);
00118 
00119 int  Reloc(char *srcLfn, char *Space);
00120 int  RelocCP(const char *srcpfn, const char *trgpfn, off_t srcSz);
00121 int  RelocWR(const char *outFn,  int oFD, char *Buff, size_t BLen, off_t Boff);
00122 
00123 int  Unlink(const char *Path);
00124 int  UnlinkDir(const char *Path, const char *lclPath);
00125 int  UnlinkDir(XrdOucNSWalk::NSEnt *&nP, XrdOucNSWalk::NSEnt *&dP);
00126 int  UnlinkFile(const char *lclPath);
00127 
00128 int  VerifyAll(char *path);
00129 char VerifyMP(const char *func, const char *path);
00130 
00131 static const char *AuditHelp;
00132 static const char *FindHelp;
00133 static const char *HelpHelp;
00134 static const char *MakeLFHelp;
00135 static const char *PinHelp;
00136 static const char *QueryHelp;
00137 static const char *RelocHelp;
00138 static const char *RemoveHelp;
00139 
00140 
00141 
00142 XrdFrmProxy *frmProxy;
00143 int          frmProxz;
00144 
00145 
00146 
00147 char    **ArgV;
00148 char     *ArgS;
00149 int       ArgC;
00150 
00151 
00152 
00153 long long numBytes;
00154 int       numDirs;
00155 int       numFiles;
00156 int       numProb;
00157 int       numFix;
00158 int       finalRC;
00159 
00160 
00161 
00162 struct {char   All;
00163         char   Echo;
00164         char   Erase;
00165         char   Fix;
00166         char   Force;
00167         char   Keep;
00168         char   ktAlways;
00169         char   ktIdle;
00170         char   Local;
00171         char   MPType;
00172         char   Recurse;
00173         char  *Args[2];
00174         uid_t  Uid;
00175         gid_t  Gid;
00176         time_t KeepTime;
00177        } Opt;
00178 };
00179 namespace XrdFrm
00180 {
00181 extern XrdFrmAdmin Admin;
00182 }
00183 #endif