xrootd
|
00001 #ifndef __XRDCMSPARSER_H__ 00002 #define __XRDCMSPARSER_H__ 00003 /******************************************************************************/ 00004 /* */ 00005 /* X r d C m s P a r s e r . h h */ 00006 /* */ 00007 /* (c) 2007 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 "XProtocol/YProtocol.hh" 00016 00017 #include "XrdCms/XrdCmsRRData.hh" 00018 #include "XrdOuc/XrdOucPup.hh" 00019 00020 /******************************************************************************/ 00021 /* C l a s s X r d C m s P a r s e r */ 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[]; // chmod | mkdir | mkpath | trunc 00070 static XrdOucPupArgs fwdArgB[]; // mv 00071 static XrdOucPupArgs fwdArgC[]; // rm | rmdir 00072 static XrdOucPupArgs locArgs[]; // locate | select 00073 static XrdOucPupArgs padArgs[]; // prepadd 00074 static XrdOucPupArgs pdlArgs[]; // prepdel 00075 static XrdOucPupArgs avlArgs[]; // avail 00076 static XrdOucPupArgs pthArgs[]; // statfs | try 00077 static XrdOucPupArgs lodArgs[]; // load 00078 static XrdOucPupArgs logArgs[]; // login 00079 00080 static XrdOucPupArgs *vecArgs[XrdCms::kYR_MaxReq]; 00081 }; 00082 00083 namespace XrdCms 00084 { 00085 extern XrdCmsParser Parser; 00086 } 00087 #endif