xrootd
XrdBwm.hh
Go to the documentation of this file.
1 #ifndef __BWM_API_H__
2 #define __BWM_API_H__
3 /******************************************************************************/
4 /* */
5 /* X r d B w m . h h */
6 /* */
7 /* (c) 2008 by the Board of Trustees of the Leland Stanford, Jr., University */
8 /* Produced by Andrew Hanushevsky for Stanford University under contract */
9 /* DE-AC02-76-SFO0515 with the Department of Energy */
10 /* */
11 /* This file is part of the XRootD software suite. */
12 /* */
13 /* XRootD is free software: you can redistribute it and/or modify it under */
14 /* the terms of the GNU Lesser General Public License as published by the */
15 /* Free Software Foundation, either version 3 of the License, or (at your */
16 /* option) any later version. */
17 /* */
18 /* XRootD is distributed in the hope that it will be useful, but WITHOUT */
19 /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */
20 /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */
21 /* License for more details. */
22 /* */
23 /* You should have received a copy of the GNU Lesser General Public License */
24 /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */
25 /* COPYING (GPL license). If not, see <http://www.gnu.org/licenses/>. */
26 /* */
27 /* The copyright holder's institutional names and contributor's names may not */
28 /* be used to endorse or promote products derived from this software without */
29 /* specific prior written permission of the institution or contributor. */
30 /******************************************************************************/
31 
32 #include <string.h>
33 #include <dirent.h>
34 #include <sys/types.h>
35 
36 #include "XrdBwm/XrdBwmHandle.hh"
37 #include "XrdSys/XrdSysPthread.hh"
39 
40 class XrdOucEnv;
41 class XrdSysError;
42 class XrdSysLogger;
43 class XrdOucStream;
44 class XrdSfsAio;
45 
46 struct XrdVersionInfo;
47 
48 /******************************************************************************/
49 /* X r d B w m D i r e c t o r y */
50 /******************************************************************************/
51 
53 {
54 public:
55 
56  int open(const char *dirName,
57  const XrdSecEntity *client,
58  const char *opaque = 0);
59 
60  const char *nextEntry();
61 
62  int close();
63 
64 inline void copyError(XrdOucErrInfo &einfo) {einfo = error;}
65 
66 const char *FName() {return "";}
67 
68  XrdBwmDirectory(const char *user, int monid)
69  : XrdSfsDirectory(user, monid),
70  tident(user ? user : "") {}
71 
72 virtual ~XrdBwmDirectory() {}
73 
74 protected:
75 const char *tident;
76 };
77 
78 /******************************************************************************/
79 /* X r d B w m F i l e */
80 /******************************************************************************/
81 
82 class XrdBwmFile : public XrdSfsFile
83 {
84 public:
85 
86  int open(const char *fileName,
87  XrdSfsFileOpenMode openMode,
88  mode_t createMode,
89  const XrdSecEntity *client,
90  const char *opaque = 0);
91 
92  int close();
93 
94  using XrdSfsFile::fctl;
95 
96  int fctl(const int cmd,
97  const char *args,
98  XrdOucErrInfo &out_error);
99 
100  const char *FName() {return (oh ? oh->Name() : "?");}
101 
102  int getMmap(void **Addr, off_t &Size);
103 
104  int read(XrdSfsFileOffset fileOffset, // Preread only
105  XrdSfsXferSize amount);
106 
108  char *buffer,
109  XrdSfsXferSize buffer_size);
110 
111  int read(XrdSfsAio *aioparm);
112 
114  const char *buffer,
115  XrdSfsXferSize buffer_size);
116 
117  int write(XrdSfsAio *aioparm);
118 
119  int sync();
120 
121  int sync(XrdSfsAio *aiop);
122 
123  int stat(struct stat *buf);
124 
125  int truncate(XrdSfsFileOffset fileOffset);
126 
127  int getCXinfo(char cxtype[4], int &cxrsz);
128 
129  XrdBwmFile(const char *user, int monid);
130 
131 virtual ~XrdBwmFile() {if (oh) close();}
132 
133 protected:
134  const char *tident;
135 
136 private:
137 
139 };
140 
141 /******************************************************************************/
142 /* C l a s s X r d B w m */
143 /******************************************************************************/
144 
145 class XrdAccAuthorize;
146 class XrdBwmLogger;
147 class XrdBwmPolicy;
148 
149 class XrdBwm : public XrdSfsFileSystem
150 {
151 friend class XrdBwmDirectory;
152 friend class XrdBwmFile;
153 
154 public:
155 
156 // Object allocation
157 //
158  XrdSfsDirectory *newDir(char *user=0, int monid=0)
159  {return (XrdSfsDirectory *)new XrdBwmDirectory(user,monid);}
160 
161  XrdSfsFile *newFile(char *user=0, int monid=0)
162  {return (XrdSfsFile *)new XrdBwmFile(user,monid);}
163 
164 // Other functions
165 //
166  int chmod(const char *Name,
167  XrdSfsMode Mode,
168  XrdOucErrInfo &out_error,
169  const XrdSecEntity *client,
170  const char *opaque = 0);
171 
172  int exists(const char *fileName,
173  XrdSfsFileExistence &exists_flag,
174  XrdOucErrInfo &out_error,
175  const XrdSecEntity *client,
176  const char *opaque = 0);
177 
178  int fsctl(const int cmd,
179  const char *args,
180  XrdOucErrInfo &out_error,
181  const XrdSecEntity *client);
182 
183  int getStats(char *buff, int blen) {return 0;}
184 
185 const char *getVersion();
186 
187  int mkdir(const char *dirName,
188  XrdSfsMode Mode,
189  XrdOucErrInfo &out_error,
190  const XrdSecEntity *client,
191  const char *opaque = 0);
192 
193  int prepare( XrdSfsPrep &pargs,
194  XrdOucErrInfo &out_error,
195  const XrdSecEntity *client = 0);
196 
197  int rem(const char *path,
198  XrdOucErrInfo &out_error,
199  const XrdSecEntity *client,
200  const char *info = 0)
201  {return remove('f', path, out_error, client, info);}
202 
203  int remdir(const char *dirName,
204  XrdOucErrInfo &out_error,
205  const XrdSecEntity *client,
206  const char *info = 0)
207  {return remove('d',dirName,out_error,client,info);}
208 
209  int rename(const char *oldFileName,
210  const char *newFileName,
211  XrdOucErrInfo &out_error,
212  const XrdSecEntity *client,
213  const char *infoO = 0,
214  const char *infoN = 0);
215 
216  int stat(const char *Name,
217  struct stat *buf,
218  XrdOucErrInfo &out_error,
219  const XrdSecEntity *client,
220  const char *opaque = 0);
221 
222  int stat(const char *Name,
223  mode_t &mode,
224  XrdOucErrInfo &out_error,
225  const XrdSecEntity *client,
226  const char *opaque = 0);
227 
228  int truncate(const char *Name,
229  XrdSfsFileOffset fileOffset,
230  XrdOucErrInfo &out_error,
231  const XrdSecEntity *client = 0,
232  const char *opaque = 0);
233 // Management functions
234 //
235 virtual int Configure(XrdSysError &);
236 
237  XrdBwm();
238 virtual ~XrdBwm() {} // Too complicate to delete :-)
239 
240 /******************************************************************************/
241 /* C o n f i g u r a t i o n V a l u e s */
242 /******************************************************************************/
243 
244 XrdVersionInfo *myVersion; // ->Version compiled with
245 
246 char *ConfigFN; // ->Configuration filename
247 char *HostName; // ->Our hostname
248 char *HostPref; // ->Our hostname with domain removed
249 char *myDomain; // ->Our domain name
250 int myDomLen; //
252 char Reserved[7];
253 
254 /******************************************************************************/
255 /* P r o t e c t e d I t e m s */
256 /******************************************************************************/
257 
258 protected:
259 
260 virtual int ConfigXeq(char *var, XrdOucStream &, XrdSysError &);
261  int Emsg(const char *, XrdOucErrInfo &, int,
262  const char *, const char *y="");
263  int Emsg(const char *, XrdOucErrInfo &, const char *,
264  const char *, const char *y="");
265  int Stall(XrdOucErrInfo &, int, const char *);
266 
267 /******************************************************************************/
268 /* P r i v a t e C o n f i g u r a t i o n */
269 /******************************************************************************/
270 
271 private:
272 
273 XrdAccAuthorize *Authorization; // ->Authorization Service
274 char *AuthLib; // ->Authorization Library
275 char *AuthParm; // ->Authorization Parameters
276 XrdBwmLogger *Logger; // ->Logger
277 XrdBwmPolicy *Policy; // ->Policy
278 char *PolLib;
279 char *PolParm;
280 char *locResp; // ->Locate Response
281 int locRlen; // Length of locResp;
284 
286 XrdSysMutex ocMutex; // Global mutex for open/close
287 
288 /******************************************************************************/
289 /* O t h e r D a t a */
290 /******************************************************************************/
291 
292 int remove(const char type, const char *path,
293  XrdOucErrInfo &out_error, const XrdSecEntity *client,
294  const char *opaque);
295 // Function used during Configuration
296 //
297 int setupAuth(XrdSysError &);
298 int setupPolicy(XrdSysError &);
299 int xalib(XrdOucStream &, XrdSysError &);
300 int xlog(XrdOucStream &, XrdSysError &);
301 int xpol(XrdOucStream &, XrdSysError &);
303 };
304 #endif
XrdBwm::myVersion
XrdVersionInfo * myVersion
Definition: XrdBwm.hh:244
XrdBwmFile::XrdBwmFile
XrdBwmFile(const char *user, int monid)
XrdSfsInterface.hh
XrdBwm::XrdBwmDirectory
friend class XrdBwmDirectory
Definition: XrdBwm.hh:151
XrdBwm::XrdBwmFile
friend class XrdBwmFile
Definition: XrdBwm.hh:152
XrdBwmDirectory::XrdBwmDirectory
XrdBwmDirectory(const char *user, int monid)
Definition: XrdBwm.hh:68
XrdBwm::newDir
XrdSfsDirectory * newDir(char *user=0, int monid=0)
Definition: XrdBwm.hh:158
XrdBwm
Definition: XrdBwm.hh:149
XrdSysMutex
Definition: XrdSysPthread.hh:165
XrdBwm::Logger
XrdBwmLogger * Logger
Definition: XrdBwm.hh:276
XrdBwm::PolSlotsIn
int PolSlotsIn
Definition: XrdBwm.hh:282
XrdSysPthread.hh
XrdSfsFileSystem
Definition: XrdSfsInterface.hh:209
XrdBwmDirectory
Definition: XrdBwm.hh:52
XrdBwm::Authorization
XrdAccAuthorize * Authorization
Definition: XrdBwm.hh:273
XrdBwm::Configure
virtual int Configure(XrdSysError &)
XrdBwm::truncate
int truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
XrdBwm::PolLib
char * PolLib
Definition: XrdBwm.hh:278
XrdBwmFile::open
int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0)
XrdBwm::xalib
int xalib(XrdOucStream &, XrdSysError &)
XrdSfsXferSize
int XrdSfsXferSize
Definition: XrdSfsInterface.hh:122
XrdBwm::remove
int remove(const char type, const char *path, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque)
XrdBwm::ocMutex
XrdSysMutex ocMutex
Definition: XrdBwm.hh:286
XrdBwmDirectory::FName
const char * FName()
Definition: XrdBwm.hh:66
XrdBwm::AuthLib
char * AuthLib
Definition: XrdBwm.hh:274
XrdSfsFileExistence
XrdSfsFileExistence
Definition: XrdSfsInterface.hh:124
XrdBwm::myDomain
char * myDomain
Definition: XrdBwm.hh:249
XrdBwm::rem
int rem(const char *path, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0)
Definition: XrdBwm.hh:197
XrdBwm::Authorize
char Authorize
Definition: XrdBwm.hh:251
XrdBwmFile::sync
int sync()
XrdSfsFile
Definition: XrdSfsInterface.hh:651
XrdSfsFileOffset
long long XrdSfsFileOffset
Definition: XrdSfsInterface.hh:119
XrdBwm::HostPref
char * HostPref
Definition: XrdBwm.hh:248
XrdOucStream
Definition: XrdOucStream.hh:45
XrdBwm::getVersion
const char * getVersion()
XrdBwmFile
Definition: XrdBwm.hh:82
XrdBwmDirectory::nextEntry
const char * nextEntry()
XrdBwmLogger
Definition: XrdBwmLogger.hh:40
XrdBwmHandle::Name
const char * Name()
Definition: XrdBwmHandle.hh:57
XrdBwmFile::~XrdBwmFile
virtual ~XrdBwmFile()
Definition: XrdBwm.hh:131
XrdBwm::xlog
int xlog(XrdOucStream &, XrdSysError &)
XrdBwm::chmod
int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
XrdBwmFile::truncate
int truncate(XrdSfsFileOffset fileOffset)
XrdBwm::locResp
char * locResp
Definition: XrdBwm.hh:280
XrdSfsDirectory
Definition: XrdSfsInterface.hh:994
XrdBwmDirectory::~XrdBwmDirectory
virtual ~XrdBwmDirectory()
Definition: XrdBwm.hh:72
XrdAccAuthorize
Definition: XrdAccAuthorize.hh:64
XrdBwm::setupPolicy
int setupPolicy(XrdSysError &)
XrdBwm::PolSlotsOut
int PolSlotsOut
Definition: XrdBwm.hh:283
XrdSfsDirectory::error
XrdOucErrInfo error
Definition: XrdSfsInterface.hh:1003
XrdBwm::AuthParm
char * AuthParm
Definition: XrdBwm.hh:275
XrdBwm::Emsg
int Emsg(const char *, XrdOucErrInfo &, int, const char *, const char *y="")
XrdOucEnv
Definition: XrdOucEnv.hh:41
XrdBwmFile::tident
const char * tident
Definition: XrdBwm.hh:134
XrdBwm::locRlen
int locRlen
Definition: XrdBwm.hh:281
XrdBwm::exists
int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
XrdBwm::Stall
int Stall(XrdOucErrInfo &, int, const char *)
XrdBwmFile::close
int close()
XrdBwm::myDomLen
int myDomLen
Definition: XrdBwm.hh:250
XrdBwmFile::oh
XrdBwmHandle * oh
Definition: XrdBwm.hh:138
XrdSysLogger
Definition: XrdSysLogger.hh:52
XrdBwmDirectory::close
int close()
XrdBwmDirectory::tident
const char * tident
Definition: XrdBwm.hh:75
XrdBwmDirectory::open
int open(const char *dirName, const XrdSecEntity *client, const char *opaque=0)
XrdSfsFile::fctl
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
XrdBwmFile::read
int read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount)
XrdSfsMode
int XrdSfsMode
Definition: XrdSfsInterface.hh:121
XrdBwmDirectory::copyError
void copyError(XrdOucErrInfo &einfo)
Definition: XrdBwm.hh:64
XrdBwmFile::stat
int stat(struct stat *buf)
XrdBwmFile::write
XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size)
XrdBwmHandle
Definition: XrdBwmHandle.hh:41
XrdBwmHandle.hh
XrdBwm::Reserved
char Reserved[7]
Definition: XrdBwm.hh:252
XrdBwm::dummyHandle
static XrdBwmHandle * dummyHandle
Definition: XrdBwm.hh:285
XrdBwmFile::getMmap
int getMmap(void **Addr, off_t &Size)
XrdBwm::HostName
char * HostName
Definition: XrdBwm.hh:247
XrdBwm::rename
int rename(const char *oldFileName, const char *newFileName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *infoO=0, const char *infoN=0)
XrdBwm::setupAuth
int setupAuth(XrdSysError &)
XrdBwm::fsctl
int fsctl(const int cmd, const char *args, XrdOucErrInfo &out_error, const XrdSecEntity *client)
XrdBwm::PolParm
char * PolParm
Definition: XrdBwm.hh:279
XrdSfsPrep
< Prepare parameters
Definition: XrdSfsInterface.hh:160
XrdBwmFile::getCXinfo
int getCXinfo(char cxtype[4], int &cxrsz)
XrdSfsFileOpenMode
int XrdSfsFileOpenMode
Definition: XrdSfsInterface.hh:120
XrdBwm::ConfigXeq
virtual int ConfigXeq(char *var, XrdOucStream &, XrdSysError &)
XrdSecEntity
Definition: XrdSecEntity.hh:51
XrdSfsAio
Definition: XrdSfsAio.hh:57
XrdOucErrInfo
Definition: XrdOucErrInfo.hh:99
XrdBwmFile::fctl
int fctl(const int cmd, const char *args, XrdOucErrInfo &out_error)
XrdBwm::remdir
int remdir(const char *dirName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0)
Definition: XrdBwm.hh:203
XrdBwm::Policy
XrdBwmPolicy * Policy
Definition: XrdBwm.hh:277
XrdSysError
Definition: XrdSysError.hh:89
XrdBwm::newFile
XrdSfsFile * newFile(char *user=0, int monid=0)
Definition: XrdBwm.hh:161
XrdBwmPolicy
Definition: XrdBwmPolicy.hh:33
XrdBwm::getStats
int getStats(char *buff, int blen)
Definition: XrdBwm.hh:183
XrdBwm::~XrdBwm
virtual ~XrdBwm()
Definition: XrdBwm.hh:238
XrdBwm::XrdBwm
XrdBwm()
XrdBwm::xtrace
int xtrace(XrdOucStream &, XrdSysError &)
XrdBwm::ConfigFN
char * ConfigFN
Definition: XrdBwm.hh:246
XrdBwmFile::FName
const char * FName()
Definition: XrdBwm.hh:100
XrdBwm::mkdir
int mkdir(const char *dirName, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
XrdBwm::prepare
int prepare(XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client=0)
XrdBwm::xpol
int xpol(XrdOucStream &, XrdSysError &)
XrdBwm::stat
int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)