15 zmq::plain_client_t::plain_client_t (session_base_t *
const session_,
17 mechanism_base_t (session_,
options_), _state (sending_hello)
21 zmq::plain_client_t::~plain_client_t ()
25 int zmq::plain_client_t::next_handshake_command (msg_t *msg_)
32 _state = waiting_for_welcome;
34 case sending_initiate:
35 produce_initiate (msg_);
36 _state = waiting_for_ready;
45 int zmq::plain_client_t::process_handshake_command (msg_t *msg_)
47 const unsigned char *cmd_data =
48 static_cast<unsigned char *
> (msg_->data ());
49 const size_t data_size = msg_->size ();
54 rc = process_welcome (cmd_data, data_size);
57 rc = process_ready (cmd_data, data_size);
60 rc = process_error (cmd_data, data_size);
62 session->get_socket ()->event_handshake_failed_protocol (
83 case error_command_received:
90 void zmq::plain_client_t::produce_hello (msg_t *msg_)
const
100 + password.length ();
102 const int rc = msg_->init_size (command_size);
105 unsigned char *ptr =
static_cast<unsigned char *
> (msg_->data ());
109 *ptr++ =
static_cast<unsigned char> (username.length ());
110 memcpy (ptr, username.c_str (), username.length ());
111 ptr += username.length ();
113 *ptr++ =
static_cast<unsigned char> (password.length ());
114 memcpy (ptr, password.c_str (), password.length ());
117 int zmq::plain_client_t::process_welcome (
const unsigned char *cmd_data_,
122 if (_state != waiting_for_welcome) {
123 session->get_socket ()->event_handshake_failed_protocol (
129 session->get_socket ()->event_handshake_failed_protocol (
130 session->get_endpoint (),
135 _state = sending_initiate;
139 void zmq::plain_client_t::produce_initiate (msg_t *msg_)
const
145 int zmq::plain_client_t::process_ready (
const unsigned char *cmd_data_,
148 if (_state != waiting_for_ready) {
149 session->get_socket ()->event_handshake_failed_protocol (
159 session->get_socket ()->event_handshake_failed_protocol (
165 int zmq::plain_client_t::process_error (
const unsigned char *cmd_data_,
168 if (_state != waiting_for_welcome && _state != waiting_for_ready) {
169 session->get_socket ()->event_handshake_failed_protocol (
175 if (data_size_ < start_of_error_reason) {
176 session->get_socket ()->event_handshake_failed_protocol (
177 session->get_endpoint (),
182 const size_t error_reason_len =
184 if (error_reason_len > data_size_ - start_of_error_reason) {
185 session->get_socket ()->event_handshake_failed_protocol (
186 session->get_endpoint (),
191 const char *error_reason =
192 reinterpret_cast<const char *
> (cmd_data_) + start_of_error_reason;
193 handle_error_reason (error_reason, error_reason_len);
194 _state = error_command_received;