XrdBwm.hh

Go to the documentation of this file.
00001 #ifndef __BWM_API_H__
00002 #define __BWM_API_H__
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                             X r d B w m . h h                              */
00006 /*                                                                            */
00007 /* (c) 2008 by the Board of Trustees of the Leland Stanford, Jr., University  */
00008 /*       All Rights Reserved. See XrdInfo.cc for complete License Terms       */
00009 /*   Produced by Andrew Hanushevsky for Stanford University under contract    */
00010 /*              DE-AC03-76-SFO0515 with the Department of Energy              */
00011 /******************************************************************************/
00012 
00013 //         $Id: XrdBwm.hh 24468 2008-06-22 16:47:03Z ganis $
00014 
00015 #include <string.h>
00016 #include <dirent.h>
00017 #include <sys/types.h>
00018   
00019 #include "XrdBwm/XrdBwmHandle.hh"
00020 #include "XrdSys/XrdSysPthread.hh"
00021 #include "XrdSfs/XrdSfsInterface.hh"
00022 
00023 class XrdOucEnv;
00024 class XrdSysError;
00025 class XrdSysLogger;
00026 class XrdOucStream;
00027 class XrdSfsAio;
00028 
00029 /******************************************************************************/
00030 /*                       X r d B w m D i r e c t o r y                        */
00031 /******************************************************************************/
00032   
00033 class XrdBwmDirectory : public XrdSfsDirectory
00034 {
00035 public:
00036 
00037         int         open(const char              *dirName,
00038                          const XrdSecEntity      *client,
00039                          const char              *opaque = 0);
00040 
00041         const char *nextEntry();
00042 
00043         int         close();
00044 
00045 inline  void        copyError(XrdOucErrInfo &einfo) {einfo = error;}
00046 
00047 const   char       *FName() {return "";}
00048 
00049                     XrdBwmDirectory(const char *user) 
00050                                    : XrdSfsDirectory(user),
00051                                      tident(user ? user : "") {}
00052 
00053 virtual            ~XrdBwmDirectory() {}
00054 
00055 protected:
00056 const char    *tident;
00057 };
00058 
00059 /******************************************************************************/
00060 /*                            X r d B w m F i l e                             */
00061 /******************************************************************************/
00062   
00063 class XrdBwmFile : public XrdSfsFile
00064 {
00065 public:
00066 
00067         int          open(const char                *fileName,
00068                                 XrdSfsFileOpenMode   openMode,
00069                                 mode_t               createMode,
00070                           const XrdSecEntity        *client,
00071                           const char                *opaque = 0);
00072 
00073         int          close();
00074 
00075         int          fctl(const int               cmd,
00076                           const char             *args,
00077                                 XrdOucErrInfo    &out_error);
00078 
00079         const char  *FName() {return (oh ? oh->Name() : "?");}
00080 
00081         int          getMmap(void **Addr, off_t &Size);
00082 
00083         int            read(XrdSfsFileOffset   fileOffset,   // Preread only
00084                             XrdSfsXferSize     amount);
00085 
00086         XrdSfsXferSize read(XrdSfsFileOffset   fileOffset,
00087                             char              *buffer,
00088                             XrdSfsXferSize     buffer_size);
00089 
00090         int            read(XrdSfsAio *aioparm);
00091 
00092         XrdSfsXferSize write(XrdSfsFileOffset   fileOffset,
00093                              const char        *buffer,
00094                              XrdSfsXferSize     buffer_size);
00095 
00096         int            write(XrdSfsAio *aioparm);
00097 
00098         int            sync();
00099 
00100         int            sync(XrdSfsAio *aiop);
00101 
00102         int            stat(struct stat *buf);
00103 
00104         int            truncate(XrdSfsFileOffset   fileOffset);
00105 
00106         int            getCXinfo(char cxtype[4], int &cxrsz);
00107 
00108                        XrdBwmFile(const char *user);
00109 
00110 virtual               ~XrdBwmFile() {if (oh) close();}
00111 
00112 protected:
00113        const char   *tident;
00114 
00115 private:
00116 
00117 XrdBwmHandle  *oh;
00118 };
00119 
00120 /******************************************************************************/
00121 /*                          C l a s s   X r d B w m                           */
00122 /******************************************************************************/
00123 
00124 class XrdAccAuthorize;
00125 class XrdBwmLogger;
00126 class XrdBwmPolicy;
00127 
00128 class XrdBwm : public XrdSfsFileSystem
00129 {
00130 friend class XrdBwmDirectory;
00131 friend class XrdBwmFile;
00132 
00133 public:
00134 
00135 // Object allocation
00136 //
00137         XrdSfsDirectory *newDir(char *user=0)
00138                         {return (XrdSfsDirectory *)new XrdBwmDirectory(user);}
00139 
00140         XrdSfsFile      *newFile(char *user=0)
00141                         {return      (XrdSfsFile *)new XrdBwmFile(user);}
00142 
00143 // Other functions
00144 //
00145         int            chmod(const char             *Name,
00146                                    XrdSfsMode        Mode,
00147                                    XrdOucErrInfo    &out_error,
00148                              const XrdSecEntity     *client,
00149                              const char             *opaque = 0);
00150 
00151         int            exists(const char                *fileName,
00152                                     XrdSfsFileExistence &exists_flag,
00153                                     XrdOucErrInfo       &out_error,
00154                               const XrdSecEntity        *client,
00155                               const char                *opaque = 0);
00156 
00157         int            fsctl(const int               cmd,
00158                              const char             *args,
00159                                    XrdOucErrInfo    &out_error,
00160                              const XrdSecEntity     *client);
00161 
00162         int            getStats(char *buff, int blen) {return 0;}
00163 
00164 const   char          *getVersion();
00165 
00166         int            mkdir(const char             *dirName,
00167                                    XrdSfsMode        Mode,
00168                                    XrdOucErrInfo    &out_error,
00169                              const XrdSecEntity     *client,
00170                              const char             *opaque = 0);
00171 
00172         int            prepare(      XrdSfsPrep       &pargs,
00173                                      XrdOucErrInfo    &out_error,
00174                                const XrdSecEntity     *client = 0);
00175 
00176         int            rem(const char             *path,
00177                                  XrdOucErrInfo    &out_error,
00178                            const XrdSecEntity     *client,
00179                            const char             *info = 0)
00180                           {return remove('f', path, out_error, client, info);}
00181 
00182         int            remdir(const char             *dirName,
00183                                     XrdOucErrInfo    &out_error,
00184                               const XrdSecEntity     *client,
00185                               const char             *info = 0)
00186                              {return remove('d',dirName,out_error,client,info);}
00187 
00188         int            rename(const char             *oldFileName,
00189                               const char             *newFileName,
00190                                     XrdOucErrInfo    &out_error,
00191                               const XrdSecEntity     *client,
00192                               const char             *infoO = 0,
00193                                const char            *infoN = 0);
00194 
00195         int            stat(const char             *Name,
00196                                   struct stat      *buf,
00197                                   XrdOucErrInfo    &out_error,
00198                             const XrdSecEntity     *client,
00199                             const char             *opaque = 0);
00200 
00201         int            stat(const char             *Name,
00202                                   mode_t           &mode,
00203                                   XrdOucErrInfo    &out_error,
00204                             const XrdSecEntity     *client,
00205                             const char             *opaque = 0);
00206 
00207         int            truncate(const char             *Name,
00208                                       XrdSfsFileOffset fileOffset,
00209                                       XrdOucErrInfo    &out_error,
00210                                 const XrdSecEntity     *client = 0,
00211                                 const char             *opaque = 0);
00212 // Management functions
00213 //
00214 virtual int            Configure(XrdSysError &);
00215 
00216                        XrdBwm();
00217 virtual               ~XrdBwm() {}  // Too complicate to delete :-)
00218 
00219 /******************************************************************************/
00220 /*                  C o n f i g u r a t i o n   V a l u e s                   */
00221 /******************************************************************************/
00222 
00223 char *ConfigFN;       //    ->Configuration filename
00224 char *HostName;       //    ->Our hostname
00225 char *HostPref;       //    ->Our hostname with domain removed
00226 char *myDomain;       //    ->Our domain name
00227 int   myDomLen;       //
00228 char  Authorize;
00229 char  Reserved[3];
00230 
00231 /******************************************************************************/
00232 /*                       P r o t e c t e d   I t e m s                        */
00233 /******************************************************************************/
00234 
00235 protected:
00236 
00237 virtual int   ConfigXeq(char *var, XrdOucStream &, XrdSysError &);
00238         int   Emsg(const char *, XrdOucErrInfo  &, int,
00239                    const char *, const char *y="");
00240         int   Emsg(const char *, XrdOucErrInfo  &, const char *,
00241                    const char *, const char *y="");
00242         int   Stall(XrdOucErrInfo  &, int, const char *);
00243   
00244 /******************************************************************************/
00245 /*                 P r i v a t e   C o n f i g u r a t i o n                  */
00246 /******************************************************************************/
00247 
00248 private:
00249   
00250 XrdAccAuthorize  *Authorization;  //    ->Authorization   Service
00251 char             *AuthLib;        //    ->Authorization   Library
00252 char             *AuthParm;       //    ->Authorization   Parameters
00253 XrdBwmLogger     *Logger;         //    ->Logger
00254 XrdBwmPolicy     *Policy;         //    ->Policy
00255 char             *PolLib;
00256 char             *PolParm;
00257 char             *locResp;        //    ->Locate Response
00258 int               locRlen;        //      Length of locResp;
00259 int               PolSlotsIn;
00260 int               PolSlotsOut;
00261 
00262 static XrdBwmHandle     *dummyHandle;
00263 XrdSysMutex              ocMutex; // Global mutex for open/close
00264 
00265 /******************************************************************************/
00266 /*                            O t h e r   D a t a                             */
00267 /******************************************************************************/
00268 
00269 int           remove(const char type, const char *path,
00270                      XrdOucErrInfo &out_error, const XrdSecEntity     *client,
00271                      const char *opaque);
00272 // Function used during Configuration
00273 //
00274 int           setupAuth(XrdSysError &);
00275 int           setupPolicy(XrdSysError &);
00276 int           xalib(XrdOucStream &, XrdSysError &);
00277 int           xlog(XrdOucStream &, XrdSysError &);
00278 int           xpol(XrdOucStream &, XrdSysError &);
00279 int           xtrace(XrdOucStream &, XrdSysError &);
00280 };
00281 #endif

Generated on Tue Jul 5 14:46:16 2011 for ROOT_528-00b_version by  doxygen 1.5.1