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