forest-net
an overlay networks for large-scale virtual worlds
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator
CpHandlerDoowon.h
1 
9 #ifndef CPHANDLER_H
10 #define CPHANDLER_H
11 
12 #include "Forest.h"
13 #include "Logger.h"
14 #include "CtlPkt.h"
15 #include "RateSpec.h"
16 #include "Queue.h"
17 #include "PacketStoreTs.h"
18 
19 namespace forest {
20 
21 
31 class CpHandler {
32 public:
33  CpHandler(Queue* q1, Queue* q2, fAdr_t myAdr1, Logger* log,
34  PacketStoreTs *ps1) : inq(q1), outq(q2), myAdr(myAdr1),
35  tunIp(0), tunPort(0), ps(ps1), logger(log) {}
36 
37  static const int NORESPONSE = (1 << 31);
38 
39  pktx clientAddComtree(fAdr_t,int,CtlPkt&);
40  pktx clientDropComtree(fAdr_t,comt_t,CtlPkt&);
41  pktx clientJoinComtree(fAdr_t,comt_t,ipa_t, ipp_t,CtlPkt&);
42  pktx clientLeaveComtree(fAdr_t,comt_t,ipa_t, ipp_t,CtlPkt&);
43 
44  pktx addIface(fAdr_t,int,ipa_t,RateSpec&,CtlPkt&);
45  pktx dropIface(fAdr_t,int,CtlPkt&);
46  pktx modIface(fAdr_t,int,ipa_t,RateSpec&,CtlPkt&);
47  pktx getIface(fAdr_t,int,CtlPkt&);
48 
49  pktx addLink(fAdr_t,Forest::ntyp_t,int,int,ipa_t,ipp_t,fAdr_t,uint64_t,CtlPkt&);
50  pktx addLink(fAdr_t,Forest::ntyp_t,int,uint64_t,CtlPkt&);
51  pktx dropLink(fAdr_t,int,fAdr_t,CtlPkt&);
52  pktx modLink(fAdr_t,int,RateSpec&,CtlPkt&);
53  pktx getLink(fAdr_t,int,CtlPkt&);
54 
55  pktx addComtree(fAdr_t,comt_t,CtlPkt&);
56  pktx dropComtree(fAdr_t,comt_t,CtlPkt&);
57  pktx modComtree(fAdr_t,comt_t,int,int,CtlPkt&);
58  pktx getComtree(fAdr_t,comt_t,CtlPkt&);
59 
60  pktx addComtreeLink(fAdr_t,comt_t,int,int,CtlPkt&);
61  pktx addComtreeLink(fAdr_t,comt_t,fAdr_t,CtlPkt&);
62  pktx dropComtreeLink(fAdr_t,comt_t,int,fAdr_t,CtlPkt&);
63  pktx modComtreeLink(fAdr_t,comt_t,int,RateSpec&,CtlPkt&);
64  pktx getComtreeLink(fAdr_t,comt_t,int,CtlPkt&);
65 
66  pktx newSession(fAdr_t,ipa_t,RateSpec&,CtlPkt&);
67  pktx clientConnect(fAdr_t,fAdr_t,fAdr_t,CtlPkt&);
68  pktx clientDisconnect(fAdr_t,fAdr_t,fAdr_t,CtlPkt&);
69 
70  pktx setLeafRange(fAdr_t,fAdr_t,fAdr_t,CtlPkt&);
71  pktx configLeaf(fAdr_t,fAdr_t,fAdr_t,ipa_t,ipp_t,uint64_t,CtlPkt&);
72  pktx bootRouter(fAdr_t,CtlPkt&);
73  pktx bootLeaf(fAdr_t,CtlPkt&);
74  pktx bootComplete(fAdr_t,CtlPkt&);
75  pktx bootAbort(fAdr_t,CtlPkt&);
76 
77  pktx getLinkSet(fAdr_t,CtlPkt&,int,int); //Feng and Doowon
78 
79  int sendRequest(CtlPkt&, fAdr_t, CtlPkt&);
80  bool handleReply(pktx, CtlPkt&, string&, string&);
81  void sendReply(CtlPkt&, fAdr_t);
82  void errReply(pktx, CtlPkt&, const string&);
83 
84  void setTunnel(ipa_t, ipp_t);
85 
86 private:
87  Queue* inq;
88  Queue* outq;
89  fAdr_t myAdr;
90  ipa_t tunIp;
91  ipp_t tunPort;
92  PacketStoreTs* ps;
93  Logger* logger;
94 
95  int sendAndWait(pktx, CtlPkt&);
96 };
97 
98 inline void CpHandler::setTunnel(ipa_t ip, ipp_t port) {
99  tunIp = ip; tunPort = port;
100 }
101 
102 } // ends namespace
103 
104 
105 #endif