00001 #ifndef _XRDPSS_API_H
00002 #define _XRDPSS_API_H
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include <errno.h>
00034 #include <unistd.h>
00035 #include <sys/types.h>
00036 #include <vector>
00037 #include "XrdSys/XrdSysHeaders.hh"
00038 #include "XrdOuc/XrdOucExport.hh"
00039 #include "XrdOuc/XrdOucName2Name.hh"
00040 #include "XrdOuc/XrdOucPList.hh"
00041 #include "XrdOuc/XrdOucSid.hh"
00042 #include "XrdOss/XrdOss.hh"
00043
00044
00045
00046
00047
00048 class XrdPssDir : public XrdOssDF
00049 {
00050 public:
00051 int Close(long long *retsz=0);
00052 int Opendir(const char *, XrdOucEnv &);
00053 int Readdir(char *buff, int blen);
00054
00055
00056 XrdPssDir(const char *tid)
00057 : XrdOssDF(tid, XrdOssDF::DF_isDir|XrdOssDF::DF_isProxy),
00058 myDir(0) {}
00059
00060 ~XrdPssDir() {if (myDir) Close();}
00061 private:
00062 DIR *myDir;
00063 };
00064
00065
00066
00067
00068
00069 struct XrdOucIOVec;
00070 class XrdSecEntity;
00071 class XrdSfsAio;
00072
00073 class XrdPssFile : public XrdOssDF
00074 {
00075 public:
00076
00077
00078
00079
00080 virtual int Close(long long *retsz=0);
00081 virtual int Open(const char *, int, mode_t, XrdOucEnv &);
00082
00083 int Fchmod(mode_t mode) {return XrdOssOK;}
00084 int Fstat(struct stat *);
00085 int Fsync();
00086 int Fsync(XrdSfsAio *aiop);
00087 int Ftruncate(unsigned long long);
00088 ssize_t Read( off_t, size_t);
00089 ssize_t Read( void *, off_t, size_t);
00090 int Read(XrdSfsAio *aiop);
00091 ssize_t ReadV(XrdOucIOVec *readV, int n);
00092 ssize_t ReadRaw( void *, off_t, size_t);
00093 ssize_t Write(const void *, off_t, size_t);
00094 int Write(XrdSfsAio *aiop);
00095
00096
00097 XrdPssFile(const char *tid)
00098 : XrdOssDF(tid, XrdOssDF::DF_isFile|XrdOssDF::DF_isProxy),
00099 tpcPath(0), entity(0) {}
00100
00101 virtual ~XrdPssFile() {if (fd >= 0) Close();
00102 if (tpcPath) free(tpcPath);
00103 }
00104
00105 private:
00106
00107 char *tpcPath;
00108
00109 const XrdSecEntity *entity;
00110 };
00111
00112
00113
00114
00115
00116 class XrdNetSecurity;
00117 class XrdOucEnv;
00118 class XrdOucStream;
00119 class XrdOucTList;
00120 class XrdPssUrlInfo;
00121 class XrdSecsssID;
00122 class XrdSysError;
00123
00124 struct XrdVersionInfo;
00125
00126 class XrdPssSys : public XrdOss
00127 {
00128 public:
00129 virtual XrdOssDF *newDir(const char *tident)
00130 {return (XrdOssDF *)new XrdPssDir(tident);}
00131 virtual XrdOssDF *newFile(const char *tident)
00132 {return (XrdOssDF *)new XrdPssFile(tident);}
00133
00134 virtual void Connect(XrdOucEnv &);
00135
00136 virtual void Disc(XrdOucEnv &);
00137
00138 int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0);
00139 bool ConfigMapID();
00140 virtual
00141 int Create(const char *, const char *, mode_t, XrdOucEnv &, int opts=0);
00142 void EnvInfo(XrdOucEnv *envP);
00143 uint64_t Features() {return myFeatures;}
00144 int Init(XrdSysLogger *, const char *);
00145 int Lfn2Pfn(const char *Path, char *buff, int blen);
00146 const
00147 char *Lfn2Pfn(const char *Path, char *buff, int blen, int &rc);
00148 int Mkdir(const char *, mode_t mode, int mkpath=0, XrdOucEnv *eP=0);
00149 int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0);
00150 int Rename(const char *, const char *,
00151 XrdOucEnv *eP1=0, XrdOucEnv *eP2=0);
00152 int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0);
00153 int Stats(char *bp, int bl);
00154 int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0);
00155 int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0);
00156
00157 static const int PolNum = 2;
00158 enum PolAct {PolPath = 0, PolObj = 1};
00159
00160 static int P2DST(int &retc, char *hBuff, int hBlen, PolAct pType,
00161 const char *path);
00162 static int P2OUT(char *pbuff, int pblen, XrdPssUrlInfo &uInfo);
00163 static int P2URL(char *pbuff, int pblen, XrdPssUrlInfo &uInfo,
00164 bool doN2N=true);
00165
00166 static const char *ConfigFN;
00167 static const char *myHost;
00168 static const char *myName;
00169 static
00170 XrdOucPListAnchor XPList;
00171
00172 static XrdNetSecurity *Police[PolNum];
00173 static XrdOucTList *ManList;
00174 static const char *protName;
00175 static const char *hdrData;
00176 static int hdrLen;
00177 static int Streams;
00178 static int Workers;
00179 static int Trace;
00180 static int dcaCTime;
00181
00182 static bool xLfn2Pfn;
00183 static bool dcaCheck;
00184 static bool dcaWorld;
00185 static bool deferID;
00186
00187 XrdPssSys();
00188 virtual ~XrdPssSys() {}
00189
00190 private:
00191
00192 char *LocalRoot;
00193 XrdOucName2Name *theN2N;
00194 unsigned long long DirFlags;
00195 XrdVersionInfo *myVersion;
00196 XrdSecsssID *idMapper;
00197 uint64_t myFeatures;
00198
00199 int Configure(const char *);
00200 int ConfigProc(const char *ConfigFN);
00201 int ConfigXeq(char*, XrdOucStream&);
00202 int xconf(XrdSysError *Eroute, XrdOucStream &Config);
00203 int xdef( XrdSysError *Eroute, XrdOucStream &Config);
00204 int xdca( XrdSysError *errp, XrdOucStream &Config);
00205 int xexp( XrdSysError *Eroute, XrdOucStream &Config);
00206 int xperm(XrdSysError *errp, XrdOucStream &Config);
00207 int xpers(XrdSysError *errp, XrdOucStream &Config);
00208 int xorig(XrdSysError *errp, XrdOucStream &Config);
00209 };
00210 #endif