From e62258713e35a30f1e92914601624c1d52be74de Mon Sep 17 00:00:00 2001 From: Tatsuhiro Tsujikawa Date: Wed, 17 Oct 2018 11:08:56 +0900 Subject: [PATCH] nghttpx: Convert connection check status to enum class --- src/shrpx_http2_session.cc | 25 ++++++++++++------------- src/shrpx_http2_session.h | 26 +++++++++++++------------- 2 files changed, 25 insertions(+), 26 deletions(-) diff --git a/src/shrpx_http2_session.cc b/src/shrpx_http2_session.cc index 14fcc4ed..4663b9c9 100644 --- a/src/shrpx_http2_session.cc +++ b/src/shrpx_http2_session.cc @@ -69,7 +69,7 @@ void connchk_timeout_cb(struct ev_loop *loop, ev_timer *w, int revents) { ev_timer_stop(loop, w); switch (http2session->get_connection_check_state()) { - case Http2Session::CONNECTION_CHECK_STARTED: + case ConnectionCheck::STARTED: // ping timeout; disconnect if (LOG_ENABLED(INFO)) { SSLOG(INFO, http2session) << "ping timeout"; @@ -82,8 +82,7 @@ void connchk_timeout_cb(struct ev_loop *loop, ev_timer *w, int revents) { if (LOG_ENABLED(INFO)) { SSLOG(INFO, http2session) << "connection check required"; } - http2session->set_connection_check_state( - Http2Session::CONNECTION_CHECK_REQUIRED); + http2session->set_connection_check_state(ConnectionCheck::REQUIRED); } } } // namespace @@ -198,7 +197,7 @@ Http2Session::Http2Session(struct ev_loop *loop, SSL_CTX *ssl_ctx, session_(nullptr), raddr_(nullptr), state_(Http2SessionState::DISCONNECTED), - connection_check_state_(CONNECTION_CHECK_NONE), + connection_check_state_(ConnectionCheck::NONE), freelist_zone_(FreelistZone::NONE), settings_recved_(false), allow_connect_proto_(false) { @@ -266,7 +265,7 @@ int Http2Session::disconnect(bool hard) { proxy_htp_.reset(); } - connection_check_state_ = CONNECTION_CHECK_NONE; + connection_check_state_ = ConnectionCheck::NONE; state_ = Http2SessionState::DISCONNECTED; // When deleting Http2DownstreamConnection, it calls this object's @@ -1867,16 +1866,16 @@ int Http2Session::consume(int32_t stream_id, size_t len) { bool Http2Session::can_push_request(const Downstream *downstream) const { auto &req = downstream->request(); return state_ == Http2SessionState::CONNECTED && - connection_check_state_ == CONNECTION_CHECK_NONE && + connection_check_state_ == ConnectionCheck::NONE && (req.connect_proto == ConnectProto::NONE || settings_recved_); } void Http2Session::start_checking_connection() { if (state_ != Http2SessionState::CONNECTED || - connection_check_state_ != CONNECTION_CHECK_REQUIRED) { + connection_check_state_ != ConnectionCheck::REQUIRED) { return; } - connection_check_state_ = CONNECTION_CHECK_STARTED; + connection_check_state_ = ConnectionCheck::STARTED; SSLOG(INFO, this) << "Start checking connection"; // If connection is down, we may get error when writing data. Issue @@ -1895,7 +1894,7 @@ void Http2Session::reset_connection_check_timer(ev_tstamp t) { } void Http2Session::reset_connection_check_timer_if_not_checking() { - if (connection_check_state_ != CONNECTION_CHECK_NONE) { + if (connection_check_state_ != ConnectionCheck::NONE) { return; } @@ -1905,7 +1904,7 @@ void Http2Session::reset_connection_check_timer_if_not_checking() { void Http2Session::connection_alive() { reset_connection_check_timer(CONNCHK_TIMEOUT); - if (connection_check_state_ == CONNECTION_CHECK_NONE) { + if (connection_check_state_ == ConnectionCheck::NONE) { return; } @@ -1913,7 +1912,7 @@ void Http2Session::connection_alive() { SSLOG(INFO, this) << "Connection alive"; } - connection_check_state_ = CONNECTION_CHECK_NONE; + connection_check_state_ = ConnectionCheck::NONE; submit_pending_requests(); } @@ -1948,11 +1947,11 @@ void Http2Session::submit_pending_requests() { } } -void Http2Session::set_connection_check_state(int state) { +void Http2Session::set_connection_check_state(ConnectionCheck state) { connection_check_state_ = state; } -int Http2Session::get_connection_check_state() const { +ConnectionCheck Http2Session::get_connection_check_state() const { return connection_check_state_; } diff --git a/src/shrpx_http2_session.h b/src/shrpx_http2_session.h index 6694a657..c5743b83 100644 --- a/src/shrpx_http2_session.h +++ b/src/shrpx_http2_session.h @@ -91,6 +91,15 @@ enum class Http2SessionState { RESOLVING_NAME, }; +enum class ConnectionCheck { + // Connection checking is not required + NONE, + // Connection checking is required + REQUIRED, + // Connection checking has been started + STARTED, +}; + class Http2Session { public: Http2Session(struct ev_loop *loop, SSL_CTX *ssl_ctx, Worker *worker, @@ -178,8 +187,8 @@ public: // reset_connection_check_timer() is called. void connection_alive(); // Change connection check state. - void set_connection_check_state(int state); - int get_connection_check_state() const; + void set_connection_check_state(ConnectionCheck state); + ConnectionCheck get_connection_check_state() const; bool should_hard_fail() const; @@ -237,15 +246,6 @@ public: bool get_allow_connect_proto() const; - enum { - // Connection checking is not required - CONNECTION_CHECK_NONE, - // Connection checking is required - CONNECTION_CHECK_REQUIRED, - // Connection checking has been started - CONNECTION_CHECK_STARTED - }; - using ReadBuf = Buffer<8_k>; Http2Session *dlnext, *dlprev; @@ -255,7 +255,7 @@ private: DefaultMemchunks wb_; ev_timer settings_timer_; // This timer has 2 purpose: when it first timeout, set - // connection_check_state_ = CONNECTION_CHECK_REQUIRED. After + // connection_check_state_ = ConnectionCheck::REQUIRED. After // connection check has started, this timer is started again and // traps PING ACK timeout. ev_timer connchk_timer_; @@ -284,7 +284,7 @@ private: std::unique_ptr
resolved_addr_; std::unique_ptr dns_query_; Http2SessionState state_; - int connection_check_state_; + ConnectionCheck connection_check_state_; FreelistZone freelist_zone_; // true if SETTINGS without ACK is received from peer. bool settings_recved_;