00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027 #ifndef ns_ssmsrm_h
00028 #define ns_ssmsrm_h
00029
00030 #include "config.h"
00031
00032 #include "srm-state.h"
00033
00034
00035
00036 #define SRM_LOCAL 1
00037 #define SRM_GLOBAL 2
00038 #define SRM_RINFO 3
00039
00040 struct hdr_srm_ext {
00041 int repid_;
00042 int origTTL_;
00043
00044 static int offset_;
00045 inline static int& offset() { return offset_; }
00046 inline static hdr_srm_ext* access(const Packet* p) {
00047 return (hdr_srm_ext*) p->access(offset_);
00048 }
00049
00050
00051 int& repid() { return repid_; }
00052 int& ottl() { return origTTL_; }
00053 };
00054
00055 class SSMSRMAgent : public SRMAgent
00056 {
00057 int glb_sessCtr_;
00058 int loc_sessCtr_;
00059 int rep_sessCtr_;
00060 int scopeFlag_;
00061 int groupScope_;
00062 int localScope_;
00063 int senderFlag_;
00064 int repid_;
00065
00066 void recv_data(int sender, int id, int repid, u_char* data);
00067
00068 void recv_rqst(int requestor, int round, int sender, int repid, int msgid);
00069 void recv_sess(int sessCtr, int* data, Packet *p);
00070 void recv_glb_sess(int sessCtr, int* data, Packet *p);
00071 void recv_loc_sess(int sessCtr, int* data, Packet *p);
00072 void recv_rep_sess(int sessCtr, int* data, Packet *p);
00073 void send_ctrl(int type, int round, int sender, int msgid, int size);
00074 void send_sess();
00075 void send_glb_sess();
00076 void send_loc_sess();
00077 void send_rep_sess();
00078 void timeout_info();
00079 int is_active(SRMinfo *sp);
00080 public:
00081 SSMSRMAgent();
00082 int command(int argc, const char*const* argv);
00083 void recv(Packet* p, Handler* h);
00084 };
00085
00086
00087 #endif // ns_srm_ssm_h