5 #ifndef __XMPP_STATE_MC__
6 #define __XMPP_STATE_MC__
8 #include <boost/asio.hpp>
9 #include <boost/statechart/state_machine.hpp>
10 #include <tbb/mutex.h>
17 namespace sc = boost::statechart;
25 struct XmppStreamEstablished;
58 class XmppConnectionInfo;
61 public sc::state_machine<XmppStateMachine, xmsm::Idle> {
164 const std::string &nextstate =
"");
167 const std::string &nextstate =
"");
172 tbb::mutex::scoped_lock lock(
mutex_);
180 tbb::mutex::scoped_lock lock(
mutex_);
196 bool Enqueue(
const sc::event_base &ev);
197 bool DequeueEvent(boost::intrusive_ptr<const sc::event_base> event);
xmsm::XmOpenConfirmState get_openconfirm_state()
int GetConnectTime() const
int get_connect_attempts() const
virtual void StartOpenTimer(int seconds)
void SetHandShakeCbHandler(SslHandShakeCallbackHandler cb)
void set_hold_time(int hold_time)
std::string StateName() const
DISALLOW_COPY_AND_ASSIGN(XmppStateMachine)
XmppConnection * connection()
void SwapXmppConnection(XmppStateMachine *other)
virtual void StartHoldTimer()
static const int kHoldTime
void SetAdminState(bool down)
std::string LastStateChangeAt() const
int get_keepalive_count() const
SslHandShakeCallbackHandler handshake_cb_
friend class XmppStateMachineTest
static const int kConnectInterval
std::string LastStateName() const
static const int kMaxAttempts
uint32_t keepalive_count_
XmppStateMachine(XmppConnection *connection, bool active, bool auth_enabled=false, int config_hold_time=kHoldTime)
xmsm::XmOpenConfirmState openconfirm_state_
virtual int hold_time_msecs() const
xmsm::XmState get_state()
void set_state(xmsm::XmState state)
void OnMessage(XmppSession *session, const XmppStanza::XmppMessage *msg)
bool Enqueue(const sc::event_base &ev)
xmsm::XmOpenConfirmState OpenConfirmStateType() const
void DeleteSession(XmppSession *session)
void connect_attempts_clear()
void set_openconfirm_state(xmsm::XmOpenConfirmState state)
const std::string last_event() const
int GetConfiguredHoldTime() const
void SendConnectionInfo(const std::string &event, const std::string &nextstate="")
xmsm::XmState StateType() const
bool DequeueEvent(boost::intrusive_ptr< const sc::event_base > event)
bool OpenTimerCancelled()
XmppConnection * connection_
SslHandShakeCallbackHandler HandShakeCbHandler()
const Timer * hold_timer() const
virtual void StartConnectTimer(int seconds)
WorkQueue< boost::intrusive_ptr< const sc::event_base > > work_queue_
xmsm::XmState last_state_
void keepalive_count_clear()
void connect_attempts_inc()
void ProcessMessage(XmppSession *session, const XmppStanza::XmppMessage *msg)
void keepalive_count_inc()
bool HoldTimerCancelled()
void OnEvent(SslSession *session, xmsm::SslHandShakeResponse)
static const int kOpenTime
void CancelConnectTimer()
void set_session(TcpSession *session)
void set_connection(const XmppConnection *connection)
static uint64_t UTCTimestampUsec()
bool ConnectTimerExpired()
void OnStart(const xmsm::EvStart &event)
bool ConnectTimerCancelled()
bool PassiveOpen(XmppSession *session)
void ProcessStreamHeaderMessage(XmppSession *session, const XmppStanza::XmppMessage *msg)
void AssertOnHoldTimeout()
const char * ChannelType()
virtual void OnSessionEvent(TcpSession *session, TcpSession::Event event)
void ProcessEvent(const sc::event_base &event)
void ResurrectOldConnection(XmppConnection *connection, XmppSession *session)
void set_last_event(const std::string &event)
void TimerErrorHandler(std::string name, std::string error)
boost::function< void(SslSessionPtr, const boost::system::error_code &error)> SslHandShakeCallbackHandler
void unconsumed_event(const sc::event_base &event)
void update_last_event(const std::string &event)