xrootd
|
00001 #ifndef __XRDOUCMSUBS_H__ 00002 #define __XRDOUCMSUBS_H__ 00003 /******************************************************************************/ 00004 /* */ 00005 /* X r d O u c M S u b s . h h */ 00006 /* */ 00007 /* (c) 2006 by the Board of Trustees of the Leland Stanford, Jr., University */ 00008 /* All Rights Reserved */ 00009 /* Produced by Andrew Hanushevsky for Stanford University under contract */ 00010 /* DE-AC02-76-SFO0515 with the Department of Energy */ 00011 /******************************************************************************/ 00012 00013 // $Id$ 00014 00015 #include <stdlib.h> 00016 00017 #include "XrdSys/XrdSysError.hh" 00018 #include "XrdOuc/XrdOucEnv.hh" 00019 #include "XrdOuc/XrdOucName2Name.hh" 00020 00021 /******************************************************************************/ 00022 /* P r e d e f i n e d E n v i r o n m e n t V a r i a b l e s */ 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 /* X r d O u c M s u b s */ 00033 /******************************************************************************/ 00034 00035 struct XrdOucMsubsInfo 00036 { 00037 const char *Tid; // $TID or $RID unless Rid is defined. 00038 XrdOucEnv *Env; 00039 XrdOucName2Name *N2N; 00040 const char *lfn; // $LFN 00041 const char *lfn2; // $LFN2 or $NOTIFY or $SRC 00042 const char *pfn; // $PFN 00043 const char *pfn2; // $PFN2 or $DST 00044 const char *misc; // $OPTS or $MDP 00045 const char *Rid; // $RID for real 00046 const char *Src; // $SRC 00047 const char *Dst; // $DST 00048 char *pfnbuff; 00049 char *rfnbuff; 00050 char *pfn2buff; 00051 char *rfn2buff; 00052 mode_t Mode; // $FMODE or $PRTY 00053 int Oflag; // $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