int zmq::plain_client_t::process_handshake_command (msg_t *msg_) { const unsigned char *cmd_data = static_cast <unsigned char *> (msg_->data ()); const size_t data_size = msg_->size (); int rc = 0; if (data_size >= 8 && !memcmp (cmd_data, "\7WELCOME", 8)) rc = process_welcome (cmd_data, data_size); else if (data_size >= 6 && !memcmp (cmd_data, "\5READY", 6)) rc = process_ready (cmd_data, data_size); else if (data_size >= 6 && !memcmp (cmd_data, "\5ERROR", 6)) rc = process_error (cmd_data, data_size); else { // Temporary support for security debugging puts ("PLAIN I: invalid handshake command"); errno = EPROTO; rc = -1; } if (rc == 0) { rc = msg_->close (); errno_assert (rc == 0); rc = msg_->init (); errno_assert (rc == 0); } return rc; }
int zmq::curve_client_t::process_handshake_command (msg_t *msg_) { const unsigned char *msg_data = static_cast<unsigned char *> (msg_->data ()); const size_t msg_size = msg_->size (); int rc = 0; if (curve_client_tools_t::is_handshake_command_welcome (msg_data, msg_size)) rc = process_welcome (msg_data, msg_size); else if (curve_client_tools_t::is_handshake_command_ready (msg_data, msg_size)) rc = process_ready (msg_data, msg_size); else if (curve_client_tools_t::is_handshake_command_error (msg_data, msg_size)) rc = process_error (msg_data, msg_size); else { session->get_socket ()->event_handshake_failed_protocol ( session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZMTP_UNEXPECTED_COMMAND); errno = EPROTO; rc = -1; } if (rc == 0) { rc = msg_->close (); errno_assert (rc == 0); rc = msg_->init (); errno_assert (rc == 0); } return rc; }
int zmq::curve_client_t::process_handshake_command (msg_t *msg_) { const unsigned char *msg_data = static_cast <unsigned char *> (msg_->data ()); const size_t msg_size = msg_->size (); int rc = 0; if (msg_size >= 8 && !memcmp (msg_data, "\7WELCOME", 8)) rc = process_welcome (msg_data, msg_size); else if (msg_size >= 6 && !memcmp (msg_data, "\5READY", 6)) rc = process_ready (msg_data, msg_size); else if (msg_size >= 6 && !memcmp (msg_data, "\5ERROR", 6)) rc = process_error (msg_data, msg_size); else { errno = EPROTO; rc = -1; } if (rc == 0) { rc = msg_->close (); errno_assert (rc == 0); rc = msg_->init (); errno_assert (rc == 0); } return rc; }
int zmq::curve_client_t::process_handshake_command (msg_t *msg_) { int rc = 0; switch (state) { case expect_welcome: rc = process_welcome (msg_); if (rc == 0) state = send_initiate; break; case expect_ready: rc = process_ready (msg_); if (rc == 0) state = connected; 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; }
int zmq::gssapi_client_t::process_handshake_command (msg_t *msg_) { if (state == recv_ready) { int rc = process_ready(msg_); if (rc == 0) state = send_ready; return rc; } if (state != recv_next_token) { errno = EPROTO; return -1; } if (process_next_token (msg_) < 0) return -1; if (maj_stat != GSS_S_COMPLETE && maj_stat != GSS_S_CONTINUE_NEEDED) return -1; state = call_next_init; errno_assert (msg_->close () == 0); errno_assert (msg_->init () == 0); return 0; }
int zmq::gssapi_server_t::process_handshake_command (msg_t *msg_) { if (state == recv_ready) { int rc = process_ready(msg_); if (rc == 0) state = connected; return rc; } if (state != recv_next_token) { errno = EPROTO; return -1; } if (security_context_established) { // Use ZAP protocol (RFC 27) to authenticate the user. // Note that rc will be -1 only if ZAP is not set up, but if it was // requested and it does not work properly the program will abort. bool expecting_zap_reply = false; int rc = session->zap_connect (); if (rc == 0) { rc = send_zap_request (); if (rc != 0) return -1; rc = receive_and_process_zap_reply (); if (rc != 0) { if (errno != EAGAIN) return -1; expecting_zap_reply = true; } } state = expecting_zap_reply? expect_zap_reply: send_ready; return 0; } if (process_next_token (msg_) < 0) return -1; accept_context (); state = send_next_token; errno_assert (msg_->close () == 0); errno_assert (msg_->init () == 0); return 0; }
int zmq::plain_mechanism_t::process_handshake_command (msg_t *msg_) { int rc = 0; switch (state) { case waiting_for_hello: rc = process_hello (msg_); if (rc == 0) state = expecting_zap_reply? waiting_for_zap_reply: sending_welcome; break; case waiting_for_welcome: rc = process_welcome (msg_); if (rc == 0) state = sending_initiate; break; case waiting_for_initiate: rc = process_initiate (msg_); if (rc == 0) state = sending_ready; break; case waiting_for_ready: rc = process_ready (msg_); if (rc == 0) state = ready; break; default: // Temporary support for security debugging puts ("PLAIN I: invalid handshake command"); errno = EPROTO; rc = -1; break; } if (rc == 0) { rc = msg_->close (); errno_assert (rc == 0); rc = msg_->init (); errno_assert (rc == 0); } return rc; }