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
int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
virtual int ConfigXeq(char *var, XrdOucStream &, XrdSysError &)
XrdBwmDirectory(const char *user, int monid)
Definition: XrdBwm.hh:68
int PolSlotsOut
Definition: XrdBwm.hh:283
char * AuthParm
Definition: XrdBwm.hh:275
const char * FName()
Definition: XrdBwm.hh:100
int Stall(XrdOucErrInfo &, int, const char *)
char * HostPref
Definition: XrdBwm.hh:248
char Authorize
Definition: XrdBwm.hh:251
int mkdir(const char *dirName, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int rename(const char *oldFileName, const char *newFileName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *infoO=0, const char *infoN=0)
int getMmap(void **Addr, off_t &Size)
char * ConfigFN
Definition: XrdBwm.hh:246
const char * Name()
Definition: XrdBwmHandle.hh:57
Definition: XrdBwm.hh:52
char Reserved[7]
Definition: XrdBwm.hh:252
Definition: XrdOucStream.hh:46
int getCXinfo(char cxtype[4], int &cxrsz)
int stat(struct stat *buf)
int XrdSfsXferSize
Definition: XrdSfsInterface.hh:129
XrdSfsFileExistence
Definition: XrdSfsInterface.hh:131
friend class XrdBwmFile
Definition: XrdBwm.hh:152
int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0)
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
int locRlen
Definition: XrdBwm.hh:281
Definition: XrdAccAuthorize.hh:65
int PolSlotsIn
Definition: XrdBwm.hh:282
char * PolLib
Definition: XrdBwm.hh:278
XrdSfsFile * newFile(char *user=0, int monid=0)
Definition: XrdBwm.hh:161
Definition: XrdSysError.hh:89
int getStats(char *buff, int blen)
Definition: XrdBwm.hh:183
void copyError(XrdOucErrInfo &einfo)
Definition: XrdBwm.hh:64
Definition: XrdSfsInterface.hh:238
Definition: XrdSysPthread.hh:165
int prepare(XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client=0)
const char * FName()
Definition: XrdBwm.hh:66
int xpol(XrdOucStream &, XrdSysError &)
XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size)
int myDomLen
Definition: XrdBwm.hh:250
long long XrdSfsFileOffset
Definition: XrdSfsInterface.hh:126
friend class XrdBwmDirectory
Definition: XrdBwm.hh:151
int rem(const char *path, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0)
Definition: XrdBwm.hh:197
XrdBwmFile(const char *user, int monid)
XrdSfsDirectory * newDir(char *user=0, int monid=0)
Definition: XrdBwm.hh:158
const char * getVersion()
char * HostName
Definition: XrdBwm.hh:247
Definition: XrdOucErrInfo.hh:100
Definition: XrdBwmPolicy.hh:33
int xtrace(XrdOucStream &, XrdSysError &)
int xlog(XrdOucStream &, XrdSysError &)
virtual ~XrdBwmFile()
Definition: XrdBwm.hh:131
XrdBwmLogger * Logger
Definition: XrdBwm.hh:276
Definition: XrdOucEnv.hh:41
Definition: XrdBwmHandle.hh:41
int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
XrdVersionInfo * myVersion
Definition: XrdBwm.hh:244
char * PolParm
Definition: XrdBwm.hh:279
XrdAccAuthorize * Authorization
Definition: XrdBwm.hh:273
int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
virtual ~XrdBwmDirectory()
Definition: XrdBwm.hh:72
int remdir(const char *dirName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info=0)
Definition: XrdBwm.hh:203
int Emsg(const char *, XrdOucErrInfo &, int, const char *, const char *y="")
XrdSysMutex ocMutex
Definition: XrdBwm.hh:286
Definition: XrdSysLogger.hh:52
char * myDomain
Definition: XrdBwm.hh:249
XrdBwmHandle * oh
Definition: XrdBwm.hh:138
XrdBwmPolicy * Policy
Definition: XrdBwm.hh:277
int fctl(const int cmd, const char *args, XrdOucErrInfo &out_error)
virtual int Configure(XrdSysError &)
int truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
int xalib(XrdOucStream &, XrdSysError &)
char * AuthLib
Definition: XrdBwm.hh:274
const char * tident
Definition: XrdBwm.hh:134
int XrdSfsMode
Definition: XrdSfsInterface.hh:128
virtual ~XrdBwm()
Definition: XrdBwm.hh:238
Definition: XrdBwmLogger.hh:40
const char * nextEntry()
int read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount)
Definition: XrdBwm.hh:82
Definition: XrdSecEntity.hh:63
const char * tident
Definition: XrdBwm.hh:75
int open(const char *dirName, const XrdSecEntity *client, const char *opaque=0)
Definition: XrdSfsAio.hh:58
Definition: XrdSfsInterface.hh:364
< Prepare parameters
Definition: XrdSfsInterface.hh:167
XrdOucErrInfo & error
Definition: XrdSfsInterface.hh:247
int setupAuth(XrdSysError &)
int fsctl(const int cmd, const char *args, XrdOucErrInfo &out_error, const XrdSecEntity *client)
static XrdBwmHandle * dummyHandle
Definition: XrdBwm.hh:285
int setupPolicy(XrdSysError &)
int XrdSfsFileOpenMode
Definition: XrdSfsInterface.hh:127
Definition: XrdBwm.hh:149
char * locResp
Definition: XrdBwm.hh:280
int truncate(XrdSfsFileOffset fileOffset)