#ifndef __SSI_SFS_H__
#define __SSI_SFS_H__
/******************************************************************************/
/* */
/* X r d S s i S f s . h h */
/* */
/* (c) 2013 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 "XrdSfs/XrdSfsInterface.hh"
#include "XrdSsi/XrdSsiDir.hh"
#include "XrdSsi/XrdSsiFile.hh"
struct XrdVersionInfo;
class XrdOucEnv;
class XrdSecEntity;
class XrdSsiSfs : public XrdSfsFileSystem
{
friend class XrdSsiFile;
public:
// Object allocation
//
XrdSfsDirectory *newDir(char *user=0, int MonID=0)
{return new XrdSsiDir(user, MonID);}
XrdSfsFile *newFile(char *user=0,int MonID=0)
{return new XrdSsiFile(user, MonID);}
// Other functions
//
int chksum( csFunc Func,
const char *csName,
const char *path,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client = 0,
const char *opaque = 0);
int chmod(const char *Name,
XrdSfsMode Mode,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *opaque = 0);
void EnvInfo(XrdOucEnv *envP);
int exists(const char *fileName,
XrdSfsFileExistence &exists_flag,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *opaque = 0);
int fsctl(const int cmd,
const char *args,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client);
int getStats(char *buff, int blen);
const char *getVersion();
int mkdir(const char *dirName,
XrdSfsMode Mode,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *opaque = 0);
int prepare( XrdSfsPrep &pargs,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client = 0);
int rem(const char *path,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *info = 0);
int remdir(const char *dirName,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *info = 0);
int rename(const char *oldFileName,
const char *newFileName,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *infoO = 0,
const char *infoN = 0);
int stat(const char *Name,
struct stat *buf,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *opaque = 0);
int stat(const char *Name,
mode_t &mode,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client,
const char *opaque = 0);
int truncate(const char *Name,
XrdSfsFileOffset fileOffset,
XrdOucErrInfo &eInfo,
const XrdSecEntity *client = 0,
const char *opaque = 0);
// Management functions
//
static void setMax(int mVal) {freeMax = mVal;}
XrdSsiSfs() {}
virtual ~XrdSsiSfs() {} // Too complicate to delete :-)
private:
static int freeMax;
int Emsg(const char *pfx, XrdOucErrInfo &einfo, int ecode,
const char *op, const char *target);
const char *Split(const char *Args, const char **Opq, char *Path, int Plen);
};
#endif