mechanism_base.cpp
Go to the documentation of this file.
1 /* SPDX-License-Identifier: MPL-2.0 */
2 
3 #include "precompiled.hpp"
4 
5 #include "mechanism_base.hpp"
6 #include "session_base.hpp"
7 
9  const options_t &options_) :
10  mechanism_t (options_), session (session_)
11 {
12 }
13 
15 {
16  if (msg_->size () <= 1
17  || msg_->size () <= (static_cast<uint8_t *> (msg_->data ()))[0]) {
18  session->get_socket ()->event_handshake_failed_protocol (
19  session->get_endpoint (),
21  errno = EPROTO;
22  return -1;
23  }
24  return 0;
25 }
26 
27 void zmq::mechanism_base_t::handle_error_reason (const char *error_reason_,
28  size_t error_reason_len_)
29 {
30  const size_t status_code_len = 3;
31  const char zero_digit = '0';
32  const size_t significant_digit_index = 0;
33  const size_t first_zero_digit_index = 1;
34  const size_t second_zero_digit_index = 2;
35  const int factor = 100;
36  if (error_reason_len_ == status_code_len
37  && error_reason_[first_zero_digit_index] == zero_digit
38  && error_reason_[second_zero_digit_index] == zero_digit
39  && error_reason_[significant_digit_index] >= '3'
40  && error_reason_[significant_digit_index] <= '5') {
41  // it is a ZAP error status code (300, 400 or 500), so emit an authentication failure event
42  session->get_socket ()->event_handshake_failed_auth (
43  session->get_endpoint (),
44  (error_reason_[significant_digit_index] - zero_digit) * factor);
45  } else {
46  // this is a violation of the ZAP protocol
47  // TODO zmq_assert in this case?
48  }
49 }
50 
52 {
53  return !options.zap_domain.empty ();
54 }
zmq::session_base_t
Definition: session_base.hpp:21
zmq::options_t
Definition: options.hpp:34
options
Message * options
Definition: src/google/protobuf/descriptor.cc:3119
zmq::mechanism_base_t::check_basic_command_structure
int check_basic_command_structure(msg_t *msg_) const
Definition: mechanism_base.cpp:14
zmq::mechanism_base_t::mechanism_base_t
mechanism_base_t(session_base_t *session_, const options_t &options_)
Definition: mechanism_base.cpp:8
precompiled.hpp
ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_UNSPECIFIED
#define ZMQ_PROTOCOL_ERROR_ZMTP_MALFORMED_COMMAND_UNSPECIFIED
Definition: zmq.h:428
errno
int errno
zmq::mechanism_t
Definition: mechanism.hpp:19
EPROTO
#define EPROTO
Definition: err.hpp:26
zmq::mechanism_base_t::zap_required
bool zap_required() const
Definition: mechanism_base.cpp:51
zmq::mechanism_base_t::handle_error_reason
void handle_error_reason(const char *error_reason_, size_t error_reason_len_)
Definition: mechanism_base.cpp:27
mechanism_base.hpp
zmq::msg_t::size
unsigned char size
Definition: msg.hpp:240
session_base.hpp
zmq::msg_t::data
unsigned char data[max_vsm_size]
Definition: msg.hpp:239
zmq::msg_t
Definition: msg.hpp:33
options_
DebugStringOptions options_
Definition: src/google/protobuf/descriptor.cc:2410


libaditof
Author(s):
autogenerated on Wed May 21 2025 02:06:56