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