35 #include <sys/param.h>
37 #include <sys/types.h>
39 #include "XrdVersion.hh"
109 myPort = (bp = getenv(
"XRDPORT")) ? strtol(bp, (
char **)NULL, 10) : 0;
116 locResp = strdup(buff); locRlen = strlen(buff);
137 oh = XrdBwm::dummyHandle;
138 tident = (user ? user :
"");
149 const char *configfn)
155 BwmEroute.
Say(
"Copr. 2008 Stanford University, Bwm Version " XrdVSTRING);
274 const char *miss, *theUsr, *theSrc, *theDst=0, *theLfn=0, *lclNode, *rmtNode;
284 if (oh != XrdBwm::dummyHandle)
298 if (client &&
XrdBwmFS.Authorization
304 if (!(theSrc = Open_Env.
Get(
"bwm.src"))) miss =
"bwm.src";
305 else if (!(theDst = Open_Env.
Get(
"bwm.dst"))) miss =
"bwm.dst";
306 else if (!(theLfn = index(path+1,
'/'))
307 || !(*(theLfn+1))) miss =
"lfn";
316 {incoming = 0; lclNode = theSrc; rmtNode = theDst;}
318 {incoming = 1; lclNode = theDst; rmtNode = theSrc;}
355 if (oh == XrdBwm::dummyHandle)
357 hP = oh; oh = XrdBwm::dummyHandle;
391 if (oh == XrdBwm::dummyHandle)
392 return XrdBwmFS.
Emsg(
"fctl", out_error, EBADF,
"fctl file");
405 out_error.
setErrInfo(EINVAL,
"invalid fctl command");
428 FTRACE(calls,
"preread " <<blen <<
"@" <<offset);
460 FTRACE(calls,blen <<
"@" <<offset);
519 FTRACE(calls, blen <<
"@" <<offset);
580 static unsigned int myInode = 0;
581 union {
long long Fill;
593 theDev.Fill = 0; theDev.fP =
this; theDev.Xor[0] ^= theDev.Xor[1];
597 memset(buf, 0,
sizeof(
struct stat));
598 buf->st_ino = myInode++;
599 buf->st_dev = theDev.Num;
600 buf->st_blksize = 4096;
601 buf->st_mode = S_IFBLK;
661 FTRACE(calls,
"len=" <<flen);
688 cxtype[0] = cxtype[1] = cxtype[2] = cxtype[3] = 0;
719 return XrdBwmFS.
Emsg(
"chmod", einfo, ENOTSUP,
"change", path);
777 return XrdBwmFS.
Emsg(
"fsctl", einfo, ENOTSUP,
"fsctl", args);
811 return XrdBwmFS.
Emsg(
"mkdir", einfo, ENOTSUP,
"mkdir", path);
829 int XrdBwm::remove(
const char type,
848 return XrdBwmFS.
Emsg(
"remove", einfo, ENOTSUP,
"remove", path);
856 const char *new_name,
876 return XrdBwmFS.
Emsg(
"rename", einfo, ENOTSUP,
"rename", old_name);
902 return XrdBwmFS.
Emsg(
"stat", einfo, ENOTSUP,
"locate", path);
928 return XrdBwmFS.
Emsg(
"stat", einfo, ENOTSUP,
"locate", path);
954 return XrdBwmFS.
Emsg(
"truncate", einfo, ENOTSUP,
"truncate", path);
968 char buffer[MAXPATHLEN+80];
972 if (ecode < 0) ecode = -ecode;
977 snprintf(buffer,
sizeof(buffer),
"Unable to %s %s; %s", op, target, etext);
999 char buffer[MAXPATHLEN+80];
1003 snprintf(buffer,
sizeof(buffer),
"Unable to %s %s; %s missing",
1033 ZTRACE(delay,
"Stall " <<stime <<
" for " <<path);
@ AOP_Update
open() r/w or append
XrdVERSIONINFO(XrdSfsGetFileSystem, XrdBwm)
XrdSfsFileSystem * XrdSfsGetFileSystem(XrdSfsFileSystem *native_fs, XrdSysLogger *lp, const char *configfn)
int stat(const char *path, struct stat *buf)
long long XrdSfsFileOffset
virtual XrdAccPrivs Access(const XrdSecEntity *Entity, const char *path, const Access_Operation oper, XrdOucEnv *Env=0)=0
int open(const char *dirName, const XrdSecEntity *client, const char *opaque=0)
int truncate(XrdSfsFileOffset fileOffset)
int getMmap(void **Addr, off_t &Size)
int read(XrdSfsFileOffset fileOffset, XrdSfsXferSize amount)
XrdBwmFile(const char *user, int monid)
int open(const char *fileName, XrdSfsFileOpenMode openMode, mode_t createMode, const XrdSecEntity *client, const char *opaque=0)
int stat(struct stat *buf)
XrdSfsXferSize write(XrdSfsFileOffset fileOffset, const char *buffer, XrdSfsXferSize buffer_size)
virtual int fctl(const int cmd, const char *args, XrdOucErrInfo &eInfo)=0
int getCXinfo(char cxtype[4], int &cxrsz)
int Activate(XrdOucErrInfo &einfo)
static XrdBwmHandle * Alloc(const char *theUsr, const char *thePath, const char *lclNode, const char *rmtNode, int Incoming)
int chmod(const char *Name, XrdSfsMode Mode, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
XrdVersionInfo * myVersion
int stat(const char *Name, struct stat *buf, 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 truncate(const char *Name, XrdSfsFileOffset fileOffset, XrdOucErrInfo &out_error, const XrdSecEntity *client=0, const char *opaque=0)
const char * getVersion()
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 prepare(XrdSfsPrep &pargs, XrdOucErrInfo &out_error, const XrdSecEntity *client=0)
virtual int Configure(XrdSysError &)
int Emsg(const char *, XrdOucErrInfo &, int, const char *, const char *y="")
int exists(const char *fileName, XrdSfsFileExistence &exists_flag, XrdOucErrInfo &out_error, const XrdSecEntity *client, const char *opaque=0)
int Stall(XrdOucErrInfo &, int, const char *)
static const int old6Map4
Use deprecated IPV6 mapped format.
int Format(char *bAddr, int bLen, fmtUse fmtType=fmtAuto, int fmtOpts=0)
const char * Name(const char *eName=0, const char **eText=0)
char * Get(const char *varname)
int setErrInfo(int code, const char *emsg)
const char * getErrUser()
static bool endsWith(const char *text, const char *ending, int endlen)
virtual void doneRead()=0
virtual void doneWrite()=0
int Emsg(const char *esfx, int ecode, const char *text1, const char *text2=0)
void Say(const char *text1, const char *text2=0, const char *txt3=0, const char *text4=0, const char *text5=0, const char *txt6=0)
static const char * ec2text(int ecode)
XrdSysLogger * logger(XrdSysLogger *lp=0)
const char * SetPrefix(const char *prefix)