00001 #ifndef _XRDOSS_H
00002 #define _XRDOSS_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 <dirent.h>
00034 #include <errno.h>
00035 #include <strings.h>
00036 #include <sys/stat.h>
00037 #include <sys/types.h>
00038 #include <string.h>
00039
00040 class XrdOucEnv;
00041 class XrdSysLogger;
00042 class XrdSfsAio;
00043
00044 #ifndef XrdOssOK
00045 #define XrdOssOK 0
00046 #endif
00047
00048
00049
00050
00051
00056
00057 class XrdOssDF
00058 {
00059 public:
00060
00061 virtual int Opendir(const char *, XrdOucEnv &) {return -ENOTDIR;}
00062 virtual int Readdir(char *buff, int blen) {return -ENOTDIR;}
00063
00064
00065 virtual int Fchmod(mode_t mode) {return -EISDIR;}
00066 virtual int Fstat(struct stat *) {return -EISDIR;}
00067 virtual int Fsync() {return -EISDIR;}
00068 virtual int Fsync(XrdSfsAio *aiop) {return -EISDIR;}
00069 virtual int Ftruncate(unsigned long long) {return -EISDIR;}
00070 virtual int getFD() {return -1;}
00071 virtual off_t getMmap(void **addr) {return 0;}
00072 virtual int isCompressed(char *cxidp=0) {return -EISDIR;}
00073 virtual int Open(const char *, int, mode_t, XrdOucEnv &) {return -EISDIR;}
00074 virtual ssize_t Read(off_t, size_t) {return (ssize_t)-EISDIR;}
00075 virtual ssize_t Read(void *, off_t, size_t) {return (ssize_t)-EISDIR;}
00076 virtual int Read(XrdSfsAio *aoip) {return (ssize_t)-EISDIR;}
00077 virtual ssize_t ReadRaw( void *, off_t, size_t) {return (ssize_t)-EISDIR;}
00078 virtual ssize_t Write(const void *, off_t, size_t) {return (ssize_t)-EISDIR;}
00079 virtual int Write(XrdSfsAio *aiop) {return (ssize_t)-EISDIR;}
00080
00081
00082 virtual int Close(long long *retsz=0)=0;
00083 inline int Handle() {return fd;}
00084
00085 XrdOssDF() {fd = -1;}
00086 virtual ~XrdOssDF() {}
00087
00088 protected:
00089
00090 int fd;
00091 };
00092
00093
00094
00095
00096
00097
00098
00099 #define XRDOSS_mkpath 0x01
00100 #define XRDOSS_new 0x02
00101 #define XRDOSS_Online 0x04
00102 #define XRDOSS_isPFN 0x10
00103 #define XRDOSS_isMIG 0x20
00104 #define XRDOSS_setnoxa 0x40
00105
00106
00107
00108 #define XRDOSS_resonly 0x01
00109 #define XRDOSS_updtatm 0x02
00110
00111
00112
00113 class XrdOssVSInfo
00114 {
00115 public:
00116 long long Total;
00117 long long Free;
00118 long long Large;
00119 long long LFree;
00120 long long Usage;
00121 long long Quota;
00122 int Extents;
00123 int Reserved;
00124
00125 XrdOssVSInfo() : Total(0),Free(0),Large(0),LFree(0),Usage(-1),
00126 Quota(-1),Extents(0),Reserved(0) {}
00127 ~XrdOssVSInfo() {}
00128 };
00129
00130 class XrdOss
00131 {
00132 public:
00133 virtual XrdOssDF *newDir(const char *tident)=0;
00134 virtual XrdOssDF *newFile(const char *tident)=0;
00135
00136 virtual int Chmod(const char *, mode_t mode, XrdOucEnv *eP=0)=0;
00137 virtual int Create(const char *, const char *, mode_t, XrdOucEnv &,
00138 int opts=0)=0;
00139 virtual int Init(XrdSysLogger *, const char *)=0;
00140 virtual int Mkdir(const char *, mode_t mode, int mkpath=0,
00141 XrdOucEnv *eP=0)=0;
00142 virtual int Reloc(const char *, const char *, const char *, const char *x=0)
00143 {return -ENOTSUP;}
00144 virtual int Remdir(const char *, int Opts=0, XrdOucEnv *eP=0)=0;
00145 virtual int Rename(const char *, const char *,
00146 XrdOucEnv *eP1=0, XrdOucEnv *eP2=0)=0;
00147 virtual int Stat(const char *, struct stat *, int opts=0, XrdOucEnv *eP=0)=0;
00148 virtual int StatFS(const char *path, char *buff, int &blen, XrdOucEnv *eP=0)
00149 {return -ENOTSUP;}
00150 virtual int StatLS(XrdOucEnv &env, const char *cgrp, char *buff, int &blen)
00151 {return -ENOTSUP;}
00152 virtual int StatXA(const char *path, char *buff, int &blen, XrdOucEnv *eP=0)
00153 {return -ENOTSUP;}
00154 virtual int StatXP(const char *path, unsigned long long &attr,
00155 XrdOucEnv *eP=0) {return -ENOTSUP;}
00156 virtual int Truncate(const char *, unsigned long long, XrdOucEnv *eP=0)=0;
00157 virtual int Unlink(const char *, int Opts=0, XrdOucEnv *eP=0)=0;
00158
00159 virtual int Stats(char *bp, int bl) {return 0;}
00160
00161 virtual int StatVS(XrdOssVSInfo *sP, const char *sname=0, int updt=0)
00162 {return -ENOTSUP;}
00163
00164 virtual int Lfn2Pfn(const char *Path, char *buff, int blen)
00165 {if ((int)strlen(Path) >= blen) return -ENAMETOOLONG;
00166 strcpy(buff, Path); return 0;
00167 }
00168 virtual
00169 const char *Lfn2Pfn(const char *Path, char *buff, int blen, int &rc)
00170 {rc = 0; return Path;}
00171
00172 XrdOss() {}
00173 virtual ~XrdOss() {}
00174 };
00175
00176
00177
00178
00179
00180
00201
00209
00215
00216
00222 #endif