XrdCmsParser.hh

Go to the documentation of this file.
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: XrdCmsParser.hh 24468 2008-06-22 16:47:03Z ganis $
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

Generated on Tue Jul 5 14:46:31 2011 for ROOT_528-00b_version by  doxygen 1.5.1