OpenSDN source code
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Pages
xmpp_channel_mux.h
Go to the documentation of this file.
1 /*
2  * Copyright (c) 2013 Juniper Networks, Inc. All rights reserved.
3  */
4 
5 #ifndef __XMPP_CHANNEL_MUX_H__
6 #define __XMPP_CHANNEL_MUX_H__
7 
8 #include <boost/system/error_code.hpp>
9 #include <tbb/atomic.h>
10 #include <tbb/mutex.h>
11 #include "xmpp/xmpp_channel.h"
12 #include "xmpp/xmpp_proto.h"
14 
15 class XmppConnection;
16 
17 class XmppChannelMux : public XmppChannel {
18 public:
19  explicit XmppChannelMux(XmppConnection *);
20  virtual ~XmppChannelMux();
21 
22  virtual void Close();
23  virtual bool Send(const uint8_t *msg, size_t msg_size, xmps::PeerId id,
24  SendReadyCb cb) {
25  return Send(msg, msg_size, NULL, id, cb);
26  }
27  virtual bool Send(const uint8_t *, size_t, const std::string *,
29  virtual int GetTaskInstance() const;
30  virtual void RegisterReferer(xmps::PeerId);
31  virtual void UnRegisterReferer(xmps::PeerId);
32  virtual void RegisterReceive(xmps::PeerId, ReceiveCb);
33  virtual void UnRegisterReceive(xmps::PeerId);
36  size_t ReceiverCount() const;
37  size_t RefererCount() const;
38  std::vector<std::string> GetReceiverList() const;
39 
40  virtual const std::string &ToString() const;
41  virtual const std::string &FromString() const;
42  virtual std::string StateName() const;
43  virtual xmps::PeerState GetPeerState() const;
44 
45  virtual std::string LastStateName() const;
46  virtual std::string LastStateChangeAt() const;
47  virtual std::string LastEvent() const;
48  virtual uint32_t rx_open() const;
49  virtual uint32_t rx_close() const;
50  virtual uint32_t rx_update() const;
51  virtual uint32_t rx_keepalive() const;
52  virtual uint32_t tx_open() const;
53  virtual uint32_t tx_close() const;
54  virtual uint32_t tx_update() const;
55  virtual uint32_t tx_keepalive() const;
56  virtual uint32_t FlapCount() const;
57  virtual std::string LastFlap() const;
58  virtual std::string AuthType() const;
59  virtual std::string PeerAddress() const;
60  virtual bool LastReceived(time_t duration) const;
61  virtual bool LastSent(time_t duration) const;
62 
63  virtual void ProcessXmppMessage(const XmppStanza::XmppMessage *msg);
64  void WriteReady(const boost::system::error_code &ec);
65  virtual void UnRegisterWriteReady(xmps::PeerId id);
66 
67  void HandleStateEvent(xmsm::XmState state);
68 
69  virtual const XmppConnection *connection() const { return connection_; }
70  virtual XmppConnection *connection() { return connection_; }
71  bool RxMessageTrace(const std::string &to_address, int port, int msg_size,
72  const std::string &msg,
73  const XmppStanza::XmppMessage *xmpp_msg);
74 
75  bool TxMessageTrace(const std::string &to_address, int port, int msg_size,
76  const std::string &msg,
77  const XmppStanza::XmppMessage *xmpp_msg);
78 
79 protected:
80  friend class XmppChannelMuxMock;
81 
82 private:
84 
85  typedef std::map<xmps::PeerId, SendReadyCb> WriteReadyCbMap;
86  typedef std::map<xmps::PeerId, ReceiveCb> ReceiveCbMap;
87  typedef std::set<xmps::PeerId> RefererSet;
88 
94  tbb::mutex mutex_;
97  tbb::atomic<time_t> last_received_;
98  tbb::atomic<time_t> last_sent_;
99 };
100 
101 #endif // __XMPP_CHANNEL_MUX_H__
virtual uint32_t rx_keepalive() const
virtual std::string LastStateName() const
virtual void UnRegisterWriteReady(xmps::PeerId id)
virtual void Close()
virtual uint32_t FlapCount() const
virtual xmps::PeerState GetPeerState() const
virtual void RegisterReceive(xmps::PeerId, ReceiveCb)
virtual uint32_t tx_open() const
virtual void ProcessXmppMessage(const XmppStanza::XmppMessage *msg)
friend class XmppChannelMuxMock
virtual std::string LastEvent() const
virtual std::string StateName() const
virtual void RegisterRxMessageTraceCallback(RxMessageTraceCb cb)
boost::function< void(const boost::system::error_code &)> SendReadyCb
Definition: xmpp_channel.h:35
virtual bool Send(const uint8_t *msg, size_t msg_size, xmps::PeerId id, SendReadyCb cb)
std::vector< std::string > GetReceiverList() const
virtual void UnRegisterReferer(xmps::PeerId)
virtual int GetTaskInstance() const
RefererSet referers_
SendReadyCb cb_
tbb::atomic< time_t > last_received_
virtual const XmppConnection * connection() const
ReceiveCbMap rxmap_
RxMessageTraceCb rx_message_trace_cb_
virtual std::string PeerAddress() const
virtual uint32_t rx_update() const
virtual XmppConnection * connection()
virtual std::string AuthType() const
boost::function< bool(const std::string &, int, int, const std::string &, const XmppStanza::XmppMessage *msg) > RxMessageTraceCb
Definition: xmpp_channel.h:44
virtual uint32_t tx_close() const
std::set< xmps::PeerId > RefererSet
virtual uint32_t rx_open() const
virtual void UnRegisterReceive(xmps::PeerId)
XmppConnection * connection_
void HandleStateEvent(xmsm::XmState state)
virtual ~XmppChannelMux()
virtual uint32_t tx_keepalive() const
virtual uint32_t rx_close() const
tbb::mutex mutex_
virtual void RegisterReferer(xmps::PeerId)
std::map< xmps::PeerId, SendReadyCb > WriteReadyCbMap
virtual void RegisterTxMessageTraceCallback(TxMessageTraceCb cb)
void WriteReady(const boost::system::error_code &ec)
void RegisterWriteReady(xmps::PeerId, SendReadyCb)
virtual bool LastSent(time_t duration) const
virtual std::string LastStateChangeAt() const
boost::function< bool(const std::string &, int, int, const std::string &, const XmppStanza::XmppMessage *msg) > TxMessageTraceCb
Definition: xmpp_channel.h:50
virtual bool LastReceived(time_t duration) const
XmppChannelMux(XmppConnection *)
boost::function< void(const XmppStanza::XmppMessage *, xmps::PeerState state) > ReceiveCb
Definition: xmpp_channel.h:38
size_t RefererCount() const
virtual std::string LastFlap() const
std::map< xmps::PeerId, ReceiveCb > ReceiveCbMap
size_t ReceiverCount() const
virtual uint32_t tx_update() const
virtual const std::string & ToString() const
bool TxMessageTrace(const std::string &to_address, int port, int msg_size, const std::string &msg, const XmppStanza::XmppMessage *xmpp_msg)
TxMessageTraceCb tx_message_trace_cb_
bool RxMessageTrace(const std::string &to_address, int port, int msg_size, const std::string &msg, const XmppStanza::XmppMessage *xmpp_msg)
tbb::atomic< time_t > last_sent_
virtual const std::string & FromString() const
WriteReadyCbMap map_