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