int zmq::null_mechanism_t::process_handshake_command (msg_t *msg_) { if (ready_command_received || error_command_received) { // Temporary support for security debugging puts ("NULL I: client sent invalid NULL handshake (duplicate READY)"); errno = EPROTO; return -1; } const unsigned char *cmd_data = static_cast <unsigned char *> (msg_->data ()); const size_t data_size = msg_->size (); int rc = 0; if (data_size >= 6 && !memcmp (cmd_data, "\5READY", 6)) rc = process_ready_command (cmd_data, data_size); else if (data_size >= 6 && !memcmp (cmd_data, "\5ERROR", 6)) rc = process_error_command (cmd_data, data_size); else { // Temporary support for security debugging puts ("NULL I: client sent invalid NULL handshake (not READY)"); errno = EPROTO; rc = -1; } if (rc == 0) { int rc = msg_->close (); errno_assert (rc == 0); rc = msg_->init (); errno_assert (rc == 0); } return rc; }
int zmq::plain_mechanism_t::process_handshake_message (msg_t *msg_) { int rc = 0; switch (state) { case waiting_for_hello: rc = process_hello_command (msg_); if (rc == 0) state = expecting_zap_reply? waiting_for_zap_reply: sending_welcome; break; case waiting_for_welcome: rc = process_welcome_command (msg_); if (rc == 0) state = sending_initiate; break; case waiting_for_initiate: rc = process_initiate_command (msg_); if (rc == 0) state = sending_ready; break; case waiting_for_ready: rc = process_ready_command (msg_); if (rc == 0) state = ready; break; default: errno = EPROTO; rc = -1; break; } if (rc == 0) { rc = msg_->close (); errno_assert (rc == 0); rc = msg_->init (); errno_assert (rc == 0); } return rc; }