00001 #ifndef __XRDCMSPARSER_H__
00002 #define __XRDCMSPARSER_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033 #include "XProtocol/YProtocol.hh"
00034
00035 #include "XrdCms/XrdCmsRRData.hh"
00036 #include "XrdOuc/XrdOucPup.hh"
00037
00038
00039
00040
00041
00042 class XrdOucErrInfo;
00043 class XrdOucBuffer;
00044
00045 class XrdCmsParser
00046 {
00047 public:
00048
00049 static int Decode(const char *Man, XrdCms::CmsRRHdr &hdr,
00050 XrdOucBuffer *dBuff, XrdOucErrInfo *eInfo);
00051
00052 static int mapError(const char *ecode);
00053
00054 static int mapError(int ecode);
00055
00056 static int Pack(int rnum, struct iovec *iovP, struct iovec *iovE,
00057 char *Base, char *Work);
00058
00059 inline int Parse(XrdCms::CmsLoginData *Data,
00060 const char *Aps, const char *Apt)
00061 {Data->SID = Data->Paths = 0;
00062 return Pup.Unpack(Aps,Apt,vecArgs[XrdCms::kYR_login],
00063 (char *)Data);
00064 }
00065
00066 inline int Parse(int rnum, const char *Aps, const char *Apt,
00067 XrdCmsRRData *Data)
00068 {Data->Opaque = Data->Opaque2 = Data->Path = 0;
00069 return rnum < XrdCms::kYR_MaxReq
00070 && vecArgs[rnum] != 0
00071 && Pup.Unpack(Aps, Apt,
00072 vecArgs[rnum], (char *)Data);
00073 }
00074
00075 static XrdOucPup Pup;
00076
00077 static XrdOucPupArgs *PupArgs(int rnum)
00078 {return rnum < XrdCms::kYR_MaxReq ? vecArgs[rnum] : 0;}
00079
00080 XrdCmsParser();
00081 ~XrdCmsParser() {}
00082
00083 private:
00084
00085 static const char **PupNVec;
00086 static XrdOucPupNames PupName;
00087
00088 static XrdOucPupArgs fwdArgA[];
00089 static XrdOucPupArgs fwdArgB[];
00090 static XrdOucPupArgs fwdArgC[];
00091 static XrdOucPupArgs locArgs[];
00092 static XrdOucPupArgs padArgs[];
00093 static XrdOucPupArgs pdlArgs[];
00094 static XrdOucPupArgs avlArgs[];
00095 static XrdOucPupArgs pthArgs[];
00096 static XrdOucPupArgs lodArgs[];
00097 static XrdOucPupArgs logArgs[];
00098
00099 static XrdOucPupArgs *vecArgs[XrdCms::kYR_MaxReq];
00100 };
00101
00102 namespace XrdCms
00103 {
00104 extern XrdCmsParser Parser;
00105 }
00106 #endif