- std::map<unsigned int, std::list<reply_t> > reply_window_;
-
- void free_reply_window(void);
- void add_reply(unsigned int clt_nonce, unsigned int xid, char *b, int sz);
-
- rpcstate_t checkduplicate_and_update(unsigned int clt_nonce,
- unsigned int xid, unsigned int rep_xid,
- char **b, int *sz);
-
- void updatestat(unsigned int proc);
-
- // latest connection to the client
- std::map<unsigned int, connection *> conns_;
-
- // counting
- const int counting_;
- int curr_counts_;
- std::map<int, int> counts_;
-
- int lossytest_;
- bool reachable_;
-
- // map proc # to function
- std::map<int, handler *> procs_;
-
- std::mutex procs_m_; // protect insert/delete to procs[]
- std::mutex count_m_; //protect modification of counts
- std::mutex reply_window_m_; // protect reply window et al
- std::mutex conss_m_; // protect conns_
-
-
- protected:
-
- struct djob_t {
- djob_t (connection *c, char *b, int bsz):buf(b),sz(bsz),conn(c) {}
- char *buf;
- int sz;
- connection *conn;
- };
- void dispatch(djob_t *);
-
- // internal handler registration
- void reg1(unsigned int proc, handler *);
-
- ThrPool* dispatchpool_;
- tcpsconn* listener_;
-
- public:
- rpcs(unsigned int port, int counts=0);
- ~rpcs();
- inline int port() { return listener_->port(); }
- //RPC handler for clients binding
- int rpcbind(int a, int &r);
-
- void set_reachable(bool r) { reachable_ = r; }
-
- bool got_pdu(connection *c, char *b, int sz);
-
- // register a handler
- template<class S, class A1, class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1 a1, R & r));
- template<class S, class A1, class A2, class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1 a1, const A2,
- R & r));
- template<class S, class A1, class A2, class A3, class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1, const A2,
- const A3, R & r));
- template<class S, class A1, class A2, class A3, class A4, class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1, const A2,
- const A3, const A4, R & r));
- template<class S, class A1, class A2, class A3, class A4, class A5, class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1, const A2,
- const A3, const A4, const A5,
- R & r));
- template<class S, class A1, class A2, class A3, class A4, class A5, class A6,
- class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1, const A2,
- const A3, const A4, const A5,
- const A6, R & r));
- template<class S, class A1, class A2, class A3, class A4, class A5, class A6,
- class A7, class R>
- void reg(unsigned int proc, S*, int (S::*meth)(const A1, const A2,
- const A3, const A4, const A5,
- const A6, const A7,
- R & r));
-};