00001 #ifndef __CMS_ROUTING_H__
00002 #define __CMS_ROUTING_H__
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013 #include "XProtocol/YProtocol.hh"
00014
00015 class XrdCmsRouting
00016 {
00017 public:
00018
00019 enum {isInvalid = 0x00,
00020 isSync = 0x02,
00021 Forward = 0x04,
00022 noArgs = 0x08,
00023 Delayable = 0x10,
00024 Repliable = 0x20,
00025 AsyncQ0 = 0x40,
00026 AsyncQ1 = 0x80
00027 };
00028
00029 struct theRouting {int reqCode; int reqOpts;};
00030
00031 inline int getRoute(int reqCode)
00032 {return reqCode < XrdCms::kYR_MaxReq
00033 ? valVec[reqCode] : isInvalid;
00034 }
00035
00036 XrdCmsRouting(theRouting *initP)
00037 {memset(valVec, 0, sizeof(valVec));
00038 do {valVec[initP->reqCode] = initP->reqOpts;
00039 } while((++initP)->reqCode);
00040 }
00041 ~XrdCmsRouting() {}
00042
00043 private:
00044 int valVec[XrdCms::kYR_MaxReq];
00045 };
00046
00047
00048
00049
00050
00051 class XrdCmsNode;
00052 class XrdCmsRRData;
00053
00054 class XrdCmsRouter
00055 {
00056 public:
00057
00058 typedef const char *(XrdCmsNode::*NodeMethod_t)(XrdCmsRRData &);
00059
00060 struct theRoute {int reqCode; const char *reqName; NodeMethod_t reqMeth;};
00061
00062 inline NodeMethod_t getMethod(int Code)
00063 {return Code < XrdCms::kYR_MaxReq
00064 ? methVec[Code] : (NodeMethod_t)0;
00065 }
00066
00067 inline const char *getName(int Code)
00068 {return Code < XrdCms::kYR_MaxReq && nameVec[Code]
00069 ? nameVec[Code] : "?";
00070 }
00071
00072 XrdCmsRouter(theRoute *initP)
00073 {memset(methVec, 0, sizeof(methVec));
00074 do {nameVec[initP->reqCode] = initP->reqName;
00075 methVec[initP->reqCode] = initP->reqMeth;
00076 } while((++initP)->reqCode);
00077 }
00078 ~XrdCmsRouter() {}
00079
00080 private:
00081
00082 const char *nameVec [XrdCms::kYR_MaxReq];
00083 NodeMethod_t methVec [XrdCms::kYR_MaxReq];
00084 };
00085
00086 namespace XrdCms
00087 {
00088 extern XrdCmsRouter Router;
00089 extern XrdCmsRouting manVOps;
00090 extern XrdCmsRouting rdrVOps;
00091 extern XrdCmsRouting rspVOps;
00092 extern XrdCmsRouting srvVOps;
00093 extern XrdCmsRouting supVOps;
00094 }
00095 #endif