From b324c66b6fbd2566853c4f82aa8d6888a717c1c8 Mon Sep 17 00:00:00 2001 From: sigiesec Date: Wed, 16 Aug 2017 10:29:41 +0200 Subject: [PATCH] Problem: null_mechanism duplicates zap_client_t::send_zap_request\nSolution: use zap_client_t::send_zap_request --- src/null_mechanism.cpp | 67 ++---------------------------------------- src/null_mechanism.hpp | 3 ++ src/zap_client.cpp | 15 ++++++---- 3 files changed, 14 insertions(+), 71 deletions(-) diff --git a/src/null_mechanism.cpp b/src/null_mechanism.cpp index 78901723..e0eed731 100644 --- a/src/null_mechanism.cpp +++ b/src/null_mechanism.cpp @@ -45,6 +45,7 @@ zmq::null_mechanism_t::null_mechanism_t (session_base_t *session_, mechanism_t (options_), session (session_), peer_address (peer_address_), + zap_client (session, peer_address, options), ready_command_sent (false), error_command_sent (false), ready_command_received (false), @@ -193,71 +194,7 @@ zmq::mechanism_t::status_t zmq::null_mechanism_t::status () const int zmq::null_mechanism_t::send_zap_request () { - int rc; - msg_t msg; - - // Address delimiter frame - rc = msg.init (); - errno_assert (rc == 0); - msg.set_flags (msg_t::more); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - // Version frame - rc = msg.init_size (3); - errno_assert (rc == 0); - memcpy (msg.data (), "1.0", 3); - msg.set_flags (msg_t::more); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - // Request id frame - rc = msg.init_size (1); - errno_assert (rc == 0); - memcpy (msg.data (), "1", 1); - msg.set_flags (msg_t::more); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - // Domain frame - rc = msg.init_size (options.zap_domain.length ()); - errno_assert (rc == 0); - memcpy (msg.data (), options.zap_domain.c_str (), options.zap_domain.length ()); - msg.set_flags (msg_t::more); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - // Address frame - rc = msg.init_size (peer_address.length ()); - errno_assert (rc == 0); - memcpy (msg.data (), peer_address.c_str (), peer_address.length ()); - msg.set_flags (msg_t::more); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - // Identity frame - rc = msg.init_size (options.identity_size); - errno_assert (rc == 0); - memcpy (msg.data (), options.identity, options.identity_size); - msg.set_flags (msg_t::more); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - // Mechanism frame - rc = msg.init_size (4); - errno_assert (rc == 0); - memcpy (msg.data (), "NULL", 4); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); - - return 0; + return zap_client.send_zap_request ("NULL", 4, NULL, 0); } int zmq::null_mechanism_t::receive_and_process_zap_reply () diff --git a/src/null_mechanism.hpp b/src/null_mechanism.hpp index 91648bb1..4efb7608 100644 --- a/src/null_mechanism.hpp +++ b/src/null_mechanism.hpp @@ -32,6 +32,7 @@ #include "mechanism.hpp" #include "options.hpp" +#include "zap_client.hpp" namespace zmq { @@ -62,6 +63,8 @@ namespace zmq const std::string peer_address; + zap_client_t zap_client; + bool ready_command_sent; bool error_command_sent; bool ready_command_received; diff --git a/src/zap_client.cpp b/src/zap_client.cpp index a7bc187d..d8120d8b 100644 --- a/src/zap_client.cpp +++ b/src/zap_client.cpp @@ -111,12 +111,15 @@ int zap_client_t::send_zap_request (const char *mechanism, return close_and_return (&msg, -1); // Credentials frame - rc = msg.init_size (credentials_size); - errno_assert (rc == 0); - memcpy (msg.data (), credentials, credentials_size); - rc = session->write_zap_msg (&msg); - if (rc != 0) - return close_and_return (&msg, -1); + // Skip if credential is NULL + if (credentials) { + rc = msg.init_size (credentials_size); + errno_assert (rc == 0); + memcpy (msg.data (), credentials, credentials_size); + rc = session->write_zap_msg (&msg); + if (rc != 0) + return close_and_return (&msg, -1); + } return 0; }