From 314a3acfa9ee3f333cf6034b8b42a51d1ce74779 Mon Sep 17 00:00:00 2001 From: sigiesec Date: Wed, 16 Aug 2017 15:42:55 +0200 Subject: [PATCH] Problem: status method duplicated between curve_server_t and plain_server_t Solution: extract into new intermediate base class zap_client_common_handshake_t --- src/curve_server.cpp | 14 +------------- src/curve_server.hpp | 6 +----- src/plain_server.cpp | 14 +------------- src/plain_server.hpp | 3 +-- src/zap_client.cpp | 19 +++++++++++++++++++ src/zap_client.hpp | 14 ++++++++++++++ 6 files changed, 37 insertions(+), 33 deletions(-) diff --git a/src/curve_server.cpp b/src/curve_server.cpp index f462c9e0..b17f42bf 100644 --- a/src/curve_server.cpp +++ b/src/curve_server.cpp @@ -42,8 +42,7 @@ zmq::curve_server_t::curve_server_t (session_base_t *session_, const std::string &peer_address_, const options_t &options_) : mechanism_t (options_), - zap_client_t (session_, peer_address_, options_), - state (waiting_for_hello), + zap_client_common_handshake_t (session_, peer_address_, options_), current_error_detail (no_detail), cn_nonce (1), cn_peer_nonce (1) @@ -260,17 +259,6 @@ int zmq::curve_server_t::zap_msg_available () return rc; } -zmq::mechanism_t::status_t zmq::curve_server_t::status () const -{ - if (state == ready) - return mechanism_t::ready; - else - if (state == error_sent) - return mechanism_t::error; - else - return mechanism_t::handshaking; -} - zmq::mechanism_t::error_detail_t zmq::curve_server_t::error_detail() const { return current_error_detail; diff --git a/src/curve_server.hpp b/src/curve_server.hpp index 094e4d5b..e76321ed 100644 --- a/src/curve_server.hpp +++ b/src/curve_server.hpp @@ -59,7 +59,7 @@ namespace zmq class msg_t; class session_base_t; - class curve_server_t : public zap_client_t + class curve_server_t : public zap_client_common_handshake_t { public: @@ -74,14 +74,10 @@ namespace zmq virtual int encode (msg_t *msg_); virtual int decode (msg_t *msg_); virtual int zap_msg_available (); - virtual status_t status () const; virtual error_detail_t error_detail () const; private: - // Current FSM state - state_t state; - // Details about the current error state error_detail_t current_error_detail; diff --git a/src/plain_server.cpp b/src/plain_server.cpp index 08cd05fd..af189ca2 100644 --- a/src/plain_server.cpp +++ b/src/plain_server.cpp @@ -41,8 +41,7 @@ zmq::plain_server_t::plain_server_t (session_base_t *session_, const std::string &peer_address_, const options_t &options_) : mechanism_t (options_), - zap_client_t (session_, peer_address_, options_), - state (waiting_for_hello) + zap_client_common_handshake_t (session_, peer_address_, options_) { } @@ -104,17 +103,6 @@ int zmq::plain_server_t::process_handshake_command (msg_t *msg_) return rc; } -zmq::mechanism_t::status_t zmq::plain_server_t::status () const -{ - if (state == ready) - return mechanism_t::ready; - else - if (state == error_sent) - return mechanism_t::error; - else - return mechanism_t::handshaking; -} - int zmq::plain_server_t::zap_msg_available () { if (state != waiting_for_zap_reply) { diff --git a/src/plain_server.hpp b/src/plain_server.hpp index 23b45299..82895cd4 100644 --- a/src/plain_server.hpp +++ b/src/plain_server.hpp @@ -40,7 +40,7 @@ namespace zmq class msg_t; class session_base_t; - class plain_server_t : public zap_client_t + class plain_server_t : public zap_client_common_handshake_t { public: @@ -53,7 +53,6 @@ namespace zmq virtual int next_handshake_command (msg_t *msg_); virtual int process_handshake_command (msg_t *msg_); virtual int zap_msg_available (); - virtual status_t status () const; private: diff --git a/src/zap_client.cpp b/src/zap_client.cpp index 8c26a705..e9ac5996 100644 --- a/src/zap_client.cpp +++ b/src/zap_client.cpp @@ -220,4 +220,23 @@ int zap_client_t::receive_and_process_zap_reply () return 0; } + +zap_client_common_handshake_t::zap_client_common_handshake_t ( + session_base_t *const session_, + const std::string &peer_address_, + const options_t &options_) : + zap_client_t (session_, peer_address_, options_), + state (waiting_for_hello) +{ +} + +zmq::mechanism_t::status_t zap_client_common_handshake_t::status () const +{ + if (state == ready) + return mechanism_t::ready; + else if (state == error_sent) + return mechanism_t::error; + else + return mechanism_t::handshaking; +} } diff --git a/src/zap_client.hpp b/src/zap_client.hpp index a8b4e59b..cfdec316 100644 --- a/src/zap_client.hpp +++ b/src/zap_client.hpp @@ -63,6 +63,17 @@ class zap_client_t : public virtual mechanism_t // Status code as received from ZAP handler std::string status_code; +}; + +class zap_client_common_handshake_t : public zap_client_t +{ + protected: + zap_client_common_handshake_t (session_base_t *const session_, + const std::string &peer_address_, + const options_t &options_); + + // methods from mechanism_t + status_t status () const; enum state_t { @@ -75,6 +86,9 @@ class zap_client_t : public virtual mechanism_t error_sent, ready }; + + // Current FSM state + state_t state; }; }