int zmq::curve_server_t::process_handshake_command (msg_t *msg_) { int rc = 0; switch (state) { case expect_hello: rc = process_hello (msg_); break; case expect_initiate: rc = process_initiate (msg_); break; default: // Temporary support for security debugging puts ("CURVE 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; }
int zmq::curve_server_t::process_handshake_command (msg_t *msg_) { int rc = 0; switch (state) { case waiting_for_hello: rc = process_hello (msg_); break; case waiting_for_initiate: rc = process_initiate (msg_); break; default: // TODO I think this is not a case reachable with a misbehaving // client. It is not an "invalid handshake command", but would be // trying to process a handshake command in an invalid state, // which is purely under control of this peer. // Therefore, it should be changed to zmq_assert (false); // CURVE I: invalid handshake command session->get_socket ()->event_handshake_failed_protocol ( session->get_endpoint (), ZMQ_PROTOCOL_ERROR_ZMTP_UNSPECIFIED); 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::curve_server_t::process_handshake_message (msg_t *msg_) { int rc = 0; switch (state) { case expect_hello: rc = process_hello (msg_); if (rc == 0) state = send_welcome; break; case expect_initiate: rc = process_initiate (msg_); if (rc == 0) state = expecting_zap_reply? expect_zap_reply: send_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; }
int zmq::gssapi_client_t::process_next_token (msg_t *msg_) { if (maj_stat == GSS_S_CONTINUE_NEEDED) { if (process_initiate(msg_, &recv_tok.value, recv_tok.length) < 0) { gss_release_name(&min_stat, &target_name); return -1; } token_ptr = &recv_tok; } return 0; }
int zmq::gssapi_server_t::process_next_token (msg_t *msg_) { if (maj_stat == GSS_S_CONTINUE_NEEDED) { if (process_initiate(msg_, &recv_tok.value, recv_tok.length) < 0) { if (target_name != GSS_C_NO_NAME) gss_release_name(&min_stat, &target_name); return -1; } } 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; }