00001 #ifndef _XROOTD_FILE_H_
00002 #define _XROOTD_FILE_H_
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <string.h>
00016
00017 #include "XProtocol/XPtypes.hh"
00018
00019
00020
00021
00022
00023 class XrdSfsFile;
00024 class XrdXrootdFileLock;
00025
00026 class XrdXrootdFile
00027 {
00028 public:
00029
00030 XrdSfsFile *XrdSfsp;
00031 char *mmAddr;
00032 long long fSize;
00033 int fdNum;
00034 kXR_unt32 FileID;
00035 char FileKey[34];
00036 char Reserved[2];
00037 char FileMode;
00038 char AsyncMode;
00039 char isMMapped;
00040 char sfEnabled;
00041 char *ID;
00042 long long readCnt;
00043 long long writeCnt;
00044
00045 static void Init(XrdXrootdFileLock *lp, int sfok) {Locker = lp; sfOK = sfok;}
00046
00047 XrdXrootdFile(char *id, XrdSfsFile *fp, char mode='r',
00048 char async='\0', int sfOK=0, struct stat *sP=0);
00049 ~XrdXrootdFile();
00050
00051 private:
00052 int bin2hex(char *outbuff, char *inbuff, int inlen);
00053 static XrdXrootdFileLock *Locker;
00054 static int sfOK;
00055 static const char *TraceID;
00056 };
00057
00058
00059
00060
00061
00062
00063
00064
00065
00066
00067 #define XRD_FTABSIZE 16
00068
00069
00070
00071
00072
00073 class XrdXrootdFileTable
00074 {
00075 public:
00076
00077 int Add(XrdXrootdFile *fp);
00078
00079 void Del(int fnum);
00080
00081 inline XrdXrootdFile *Get(int fnum)
00082 {if (fnum >= 0)
00083 {if (fnum < XRD_FTABSIZE) return FTab[fnum];
00084 if (XTab && (fnum-XRD_FTABSIZE)<XTnum)
00085 return XTab[fnum-XRD_FTABSIZE];
00086 }
00087 return (XrdXrootdFile *)0;
00088 }
00089
00090 XrdXrootdFileTable() {memset((void *)FTab, 0, sizeof(FTab));
00091 FTfree = 0; XTab = 0; XTnum = XTfree = 0;
00092 }
00093 ~XrdXrootdFileTable();
00094
00095 private:
00096
00097 static const char *TraceID;
00098
00099 XrdXrootdFile *FTab[XRD_FTABSIZE];
00100 int FTfree;
00101
00102 XrdXrootdFile **XTab;
00103 int XTnum;
00104 int XTfree;
00105 };
00106 #endif