00001 #ifndef __XRDOUCMSUBS_H__
00002 #define __XRDOUCMSUBS_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include <stdlib.h>
00016
00017 #include "XrdSys/XrdSysError.hh"
00018 #include "XrdOuc/XrdOucEnv.hh"
00019 #include "XrdOuc/XrdOucName2Name.hh"
00020
00021
00022
00023
00024
00025 #define CMS_CID "cms&cid"
00026 #define SEC_USER "sec&user"
00027 #define SEC_HOST "sec&host"
00028 #define SEC_POLICY "sec&policy"
00029 #define XRD_INS "xrd&ins"
00030
00031
00032
00033
00034
00035 struct XrdOucMsubsInfo
00036 {
00037 const char *Tid;
00038 XrdOucEnv *Env;
00039 XrdOucName2Name *N2N;
00040 const char *lfn;
00041 const char *lfn2;
00042 const char *pfn;
00043 const char *pfn2;
00044 const char *misc;
00045 const char *Rid;
00046 const char *Src;
00047 const char *Dst;
00048 char *pfnbuff;
00049 char *rfnbuff;
00050 char *pfn2buff;
00051 char *rfn2buff;
00052 mode_t Mode;
00053 int Oflag;
00054 char mbuff[12];
00055 char obuff[4];
00056
00057 XrdOucMsubsInfo(const char *tid, XrdOucEnv *envP,
00058 XrdOucName2Name *n2np,
00059 const char *lfnP, const char *lfn2P,
00060 mode_t mode=0, int ofl=0,
00061 const char *Opts=0, const char *ridP=0,
00062 const char *pfnP=0, const char *pfn2P=0)
00063 : Tid(tid), Env(envP), N2N(n2np),
00064 lfn(lfnP), lfn2(lfn2P), pfn(pfnP), pfn2(pfn2P),
00065 misc(Opts), Rid(ridP), Mode(mode), Oflag(ofl)
00066 {pfnbuff = rfnbuff = pfn2buff = rfn2buff = 0;}
00067 ~XrdOucMsubsInfo(){if (pfnbuff ) free(pfnbuff);
00068 if (rfnbuff ) free(rfnbuff);
00069 if (pfn2buff) free(pfn2buff);
00070 if (rfn2buff) free(rfn2buff);
00071 }
00072 };
00073
00074 class XrdOucMsubs
00075 {
00076 public:
00077
00078 static const int maxElem = 32;
00079
00080 int Parse(const char *oname, char *msg);
00081
00082 int Subs(XrdOucMsubsInfo &Info, char **Data, int *Dlen);
00083
00084 XrdOucMsubs(XrdSysError *errp);
00085 ~XrdOucMsubs();
00086
00087 private:
00088 char *getVal(XrdOucMsubsInfo &Info, int vNum);
00089
00090 enum vNum {vLFN = 1, vPFN = 2, vRFN = 3, vLFN2 = 4, vPFN2 = 5, vRFN2 = 6,
00091 vFM = 7, vOFL = 8, vUSR = 9, vHST = 10, vTID = 11,
00092 vNFY = 12, vOPT = 13, vPTY = 14, vRID = 15, vCGI = 16,
00093 vMDP = 17, vSRC = 18, vDST = 19, vCID = 20, vINS = 21};
00094
00095 static const int vMax = 22;
00096 static const char *vName[vMax];
00097
00098 XrdSysError *eDest;
00099 char *mText;
00100 char *mData[maxElem+1];
00101 int mDlen[maxElem+1];
00102 int numElem;
00103 };
00104 #endif