XrdCmsRouting.hh

Go to the documentation of this file.
00001 #ifndef __CMS_ROUTING_H__
00002 #define __CMS_ROUTING_H__
00003 /******************************************************************************/
00004 /*                                                                            */
00005 /*                      X r d C m s R o u t i n g . 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: XrdCmsRouting.hh 25932 2008-10-23 10:58:11Z ganis $
00014 
00015 #include "XProtocol/YProtocol.hh"
00016 
00017 class XrdCmsRouting
00018 {
00019 public:
00020 
00021 enum {isInvalid = 0x00,
00022       isSync    = 0x02,
00023       Forward   = 0x04,
00024       noArgs    = 0x08,
00025       Delayable = 0x10,
00026       Repliable = 0x20,
00027       AsyncQ0   = 0x40,
00028       AsyncQ1   = 0x80
00029      };
00030 
00031 struct      theRouting {int reqCode; int reqOpts;};
00032 
00033 inline int  getRoute(int reqCode)
00034                       {return reqCode < XrdCms::kYR_MaxReq
00035                                       ? valVec[reqCode] : isInvalid;
00036                       }
00037 
00038             XrdCmsRouting(theRouting *initP)
00039                           {memset(valVec, 0, sizeof(valVec));
00040                            do {valVec[initP->reqCode] = initP->reqOpts;
00041                               } while((++initP)->reqCode);
00042                            }
00043             ~XrdCmsRouting() {}
00044 
00045 private:
00046 int          valVec[XrdCms::kYR_MaxReq];
00047 };
00048 
00049 /******************************************************************************/
00050 /*                    X r d C m s R o u t e r   C l a s s                     */
00051 /******************************************************************************/
00052 
00053 class XrdCmsNode;
00054 class XrdCmsRRData;
00055   
00056 class XrdCmsRouter
00057 {
00058 public:
00059 
00060 typedef const char *(XrdCmsNode::*NodeMethod_t)(XrdCmsRRData &);
00061 
00062 struct  theRoute {int reqCode; const char *reqName; NodeMethod_t reqMeth;};
00063 
00064 inline  NodeMethod_t getMethod(int Code)
00065                            {return Code < XrdCms::kYR_MaxReq
00066                                         ? methVec[Code] : (NodeMethod_t)0;
00067                            }
00068 
00069 inline  const char  *getName(int Code)
00070                             {return Code < XrdCms::kYR_MaxReq && nameVec[Code]
00071                                          ? nameVec[Code] : "?";
00072                             }
00073 
00074               XrdCmsRouter(theRoute *initP)
00075                           {memset(methVec, 0, sizeof(methVec));
00076                            do {nameVec[initP->reqCode] = initP->reqName;
00077                                methVec[initP->reqCode] = initP->reqMeth;
00078                               } while((++initP)->reqCode);
00079                            }
00080              ~XrdCmsRouter() {}
00081 
00082 private:
00083 
00084 const  char         *nameVec [XrdCms::kYR_MaxReq];
00085        NodeMethod_t  methVec [XrdCms::kYR_MaxReq];
00086 };
00087 
00088 namespace XrdCms
00089 {
00090 extern XrdCmsRouter  Router;
00091 extern XrdCmsRouting rdrVOps;
00092 extern XrdCmsRouting rspVOps;
00093 extern XrdCmsRouting srvVOps;
00094 extern XrdCmsRouting supVOps;
00095 }
00096 #endif

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