#ifndef __BWM_API_H__ #define __BWM_API_H__ /******************************************************************************/ /* */ /* X r d B w m . h h */ /* */ /* (c) 2008 by the Board of Trustees of the Leland Stanford, Jr., University */ /* Produced by Andrew Hanushevsky for Stanford University under contract */ /* DE-AC02-76-SFO0515 with the Department of Energy */ /* */ /* This file is part of the XRootD software suite. */ /* */ /* XRootD is free software: you can redistribute it and/or modify it under */ /* the terms of the GNU Lesser General Public License as published by the */ /* Free Software Foundation, either version 3 of the License, or (at your */ /* option) any later version. */ /* */ /* XRootD is distributed in the hope that it will be useful, but WITHOUT */ /* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or */ /* FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public */ /* License for more details. */ /* */ /* You should have received a copy of the GNU Lesser General Public License */ /* along with XRootD in a file called COPYING.LESSER (LGPL license) and file */ /* COPYING (GPL license). If not, see . */ /* */ /* The copyright holder's institutional names and contributor's names may not */ /* be used to endorse or promote products derived from this software without */ /* specific prior written permission of the institution or contributor. */ /******************************************************************************/ #include #include #include #include "XrdBwm/XrdBwmHandle.hh" #include "XrdSys/XrdSysPthread.hh" #include "XrdSfs/XrdSfsInterface.hh" class XrdOucEnv; class XrdSysError; class XrdSysLogger; class XrdOucStream; class XrdSfsAio; struct XrdVersionInfo; /******************************************************************************/ /* X r d B w m D i r e c t o r y */ /******************************************************************************/ class XrdBwmDirectory : public XrdSfsDirectory { public: int open(const char *dirName, const XrdSecEntity *client, const char *opaque = 0); const char *nextEntry(); int close(); inline void copyError(XrdOucErrInfo &einfo) {einfo = error;} const char *FName() {return "";} XrdBwmDirectory(const char *user, int monid) : XrdSfsDirectory(user, monid), tident(user ? user : "") {} virtual ~XrdBwmDirectory() {} protected: const char *tident; }; /******************************************************************************/ /* X r d B w m F i l e */ /******************************************************************************/ class XrdBwmFile : public XrdSfsFile { public: int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque = 0); int close(); using XrdSfsFile::fctl; int fctl(const int cmd, const char *args, XrdOucErrInfo &out_error); const char *FName() {return (oh ? oh->Name() : "?");} int getMmap(void **Addr, off_t &Size); int read(XrdSfsFileOffset fileOffset, // Preread only XrdSfsXferSize amount); XrdSfsXferSize read(XrdSfsFileOffset fileOffset, char *buffer, XrdSfsXferSize buffer_size); int read(XrdSfsAio *aioparm); XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size); int write(XrdSfsAio *aioparm); int sync(); int sync(XrdSfsAio *aiop); int stat(struct stat *buf); int truncate(XrdSfsFileOffset fileOffset); int getCXinfo(char cxtype[4], int &cxrsz); XrdBwmFile(const char *user, int monid); virtual ~XrdBwmFile() {if (oh) close();} protected: const char *tident; private: XrdBwmHandle *oh; }; /******************************************************************************/ /* C l a s s X r d B w m */ /******************************************************************************/ class XrdAccAuthorize; class XrdBwmLogger; class XrdBwmPolicy; class XrdBwm : public XrdSfsFileSystem { friend class XrdBwmDirectory; friend class XrdBwmFile; public: // Object allocation // XrdSfsDirectory *newDir(char *user=0, int monid=0) {return (XrdSfsDirectory *)new XrdBwmDirectory(user,monid);} XrdSfsFile *newFile(char *user=0, int monid=0) {return (XrdSfsFile *)new XrdBwmFile(user,monid);} // Other functions // int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque = 0); int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque = 0); int fsctl(const int cmd, const char *args, XrdOucErrInfo &out_error, const XrdSecEntity *client); int getStats(char *buff, int blen) {return 0;} const char *getVersion(); int mkdir(const char *dirName, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque = 0); int prepare( XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client = 0); int rem(const char *path, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info = 0) {return remove('f', path, out_error, client, info);} int remdir(const char *dirName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *info = 0) {return remove('d',dirName,out_error,client,info);} int rename(const char *oldFileName, const char *newFileName, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *infoO = 0, const char *infoN = 0); int stat(const char *Name, struct stat *buf, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque = 0); int stat(const char *Name, mode_t &mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque = 0); int truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client = 0, const char *opaque = 0); // Management functions // virtual int Configure(XrdSysError &); XrdBwm(); virtual ~XrdBwm() {} // Too complicate to delete :-) /******************************************************************************/ /* C o n f i g u r a t i o n V a l u e s */ /******************************************************************************/ XrdVersionInfo *myVersion; // ->Version compiled with char *ConfigFN; // ->Configuration filename char *HostName; // ->Our hostname char *HostPref; // ->Our hostname with domain removed char *myDomain; // ->Our domain name int myDomLen; // char Authorize; char Reserved[7]; /******************************************************************************/ /* P r o t e c t e d I t e m s */ /******************************************************************************/ protected: virtual int ConfigXeq(char *var, XrdOucStream &, XrdSysError &); int Emsg(const char *, XrdOucErrInfo &, int, const char *, const char *y=""); int Emsg(const char *, XrdOucErrInfo &, const char *, const char *, const char *y=""); int Stall(XrdOucErrInfo &, int, const char *); /******************************************************************************/ /* P r i v a t e C o n f i g u r a t i o n */ /******************************************************************************/ private: XrdAccAuthorize *Authorization; // ->Authorization Service char *AuthLib; // ->Authorization Library char *AuthParm; // ->Authorization Parameters XrdBwmLogger *Logger; // ->Logger XrdBwmPolicy *Policy; // ->Policy char *PolLib; char *PolParm; char *locResp; // ->Locate Response int locRlen; // Length of locResp; int PolSlotsIn; int PolSlotsOut; static XrdBwmHandle *dummyHandle; XrdSysMutex ocMutex; // Global mutex for open/close /******************************************************************************/ /* O t h e r D a t a */ /******************************************************************************/ int remove(const char type, const char *path, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque); // Function used during Configuration // int setupAuth(XrdSysError &); int setupPolicy(XrdSysError &); int xalib(XrdOucStream &, XrdSysError &); int xlog(XrdOucStream &, XrdSysError &); int xpol(XrdOucStream &, XrdSysError &); int xtrace(XrdOucStream &, XrdSysError &); }; #endif