mirror of
https://github.com/zeromq/libzmq.git
synced 2025-11-04 12:17:39 +01:00
@@ -64,6 +64,16 @@ static void zap_handler_disconnect (void *ctx)
|
|||||||
zap_handler_generic (ctx, zap_disconnect);
|
zap_handler_generic (ctx, zap_disconnect);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void zap_handler_do_not_recv (void *ctx)
|
||||||
|
{
|
||||||
|
zap_handler_generic (ctx, zap_do_not_recv);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void zap_handler_do_not_send (void *ctx)
|
||||||
|
{
|
||||||
|
zap_handler_generic (ctx, zap_do_not_send);
|
||||||
|
}
|
||||||
|
|
||||||
int expect_new_client_bounce_fail_and_count_monitor_events (
|
int expect_new_client_bounce_fail_and_count_monitor_events (
|
||||||
void *ctx,
|
void *ctx,
|
||||||
char *my_endpoint,
|
char *my_endpoint,
|
||||||
@@ -346,6 +356,40 @@ void test_zap_errors (socket_config_fn server_socket_config_,
|
|||||||
client_socket_config_, client_socket_config_data_);
|
client_socket_config_, client_socket_config_data_);
|
||||||
shutdown_context_and_server_side (ctx, zap_thread, server, server_mon,
|
shutdown_context_and_server_side (ctx, zap_thread, server, server_mon,
|
||||||
handler, true);
|
handler, true);
|
||||||
|
|
||||||
|
// ZAP handler does not read request
|
||||||
|
fprintf (stderr,
|
||||||
|
"test_zap_unsuccessful ZAP handler does not read request\n");
|
||||||
|
setup_context_and_server_side (&ctx, &handler, &zap_thread, &server,
|
||||||
|
&server_mon, my_endpoint, &zap_handler_do_not_recv,
|
||||||
|
server_socket_config_);
|
||||||
|
test_zap_unsuccessful_no_handler (
|
||||||
|
ctx, my_endpoint, server, server_mon,
|
||||||
|
#ifdef ZMQ_BUILD_DRAFT_API
|
||||||
|
ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL, EPIPE,
|
||||||
|
#else
|
||||||
|
0, 0,
|
||||||
|
#endif
|
||||||
|
client_socket_config_, client_socket_config_data_);
|
||||||
|
shutdown_context_and_server_side (ctx, zap_thread, server, server_mon,
|
||||||
|
handler);
|
||||||
|
|
||||||
|
// ZAP handler does not send reply
|
||||||
|
fprintf (stderr,
|
||||||
|
"test_zap_unsuccessful ZAP handler does not write reply\n");
|
||||||
|
setup_context_and_server_side (
|
||||||
|
&ctx, &handler, &zap_thread, &server, &server_mon, my_endpoint,
|
||||||
|
&zap_handler_do_not_send, server_socket_config_);
|
||||||
|
test_zap_unsuccessful_no_handler (
|
||||||
|
ctx, my_endpoint, server, server_mon,
|
||||||
|
#ifdef ZMQ_BUILD_DRAFT_API
|
||||||
|
ZMQ_EVENT_HANDSHAKE_FAILED_NO_DETAIL, EPIPE,
|
||||||
|
#else
|
||||||
|
0, 0,
|
||||||
|
#endif
|
||||||
|
client_socket_config_, client_socket_config_data_);
|
||||||
|
shutdown_context_and_server_side (ctx, zap_thread, server, server_mon,
|
||||||
|
handler);
|
||||||
}
|
}
|
||||||
|
|
||||||
int main (void)
|
int main (void)
|
||||||
|
|||||||
@@ -154,7 +154,9 @@ enum zap_protocol_t
|
|||||||
zap_wrong_request_id,
|
zap_wrong_request_id,
|
||||||
zap_status_invalid,
|
zap_status_invalid,
|
||||||
zap_too_many_parts,
|
zap_too_many_parts,
|
||||||
zap_disconnect
|
zap_disconnect,
|
||||||
|
zap_do_not_recv,
|
||||||
|
zap_do_not_send
|
||||||
};
|
};
|
||||||
|
|
||||||
void *zap_requests_handled;
|
void *zap_requests_handled;
|
||||||
@@ -182,8 +184,11 @@ void zap_handler_generic (void *ctx,
|
|||||||
{handler, 0, ZMQ_POLLIN, 0},
|
{handler, 0, ZMQ_POLLIN, 0},
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// if ordered not to receive the request, ignore the second poll item
|
||||||
|
const int numitems = (zap_protocol == zap_do_not_recv) ? 1 : 2;
|
||||||
|
|
||||||
// Process ZAP requests forever
|
// Process ZAP requests forever
|
||||||
while (zmq_poll (items, 2, -1) >= 0) {
|
while (zmq_poll (items, numitems, -1) >= 0) {
|
||||||
if (items[0].revents & ZMQ_POLLIN) {
|
if (items[0].revents & ZMQ_POLLIN) {
|
||||||
char *buf = s_recv (control);
|
char *buf = s_recv (control);
|
||||||
assert (buf);
|
assert (buf);
|
||||||
@@ -198,7 +203,10 @@ void zap_handler_generic (void *ctx,
|
|||||||
if (!version)
|
if (!version)
|
||||||
break; // Terminating - peer's socket closed
|
break; // Terminating - peer's socket closed
|
||||||
if (zap_protocol == zap_disconnect)
|
if (zap_protocol == zap_disconnect)
|
||||||
|
{
|
||||||
|
free (version);
|
||||||
break;
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
char *sequence = s_recv (handler);
|
char *sequence = s_recv (handler);
|
||||||
char *domain = s_recv (handler);
|
char *domain = s_recv (handler);
|
||||||
@@ -268,11 +276,13 @@ void zap_handler_generic (void *ctx,
|
|||||||
if (zap_protocol == zap_too_many_parts) {
|
if (zap_protocol == zap_too_many_parts) {
|
||||||
s_sendmore (handler, "");
|
s_sendmore (handler, "");
|
||||||
}
|
}
|
||||||
|
if (zap_protocol != zap_do_not_send)
|
||||||
s_send (handler, "");
|
s_send (handler, "");
|
||||||
} else {
|
} else {
|
||||||
s_sendmore (handler, "400");
|
s_sendmore (handler, "400");
|
||||||
s_sendmore (handler, "Invalid client public key");
|
s_sendmore (handler, "Invalid client public key");
|
||||||
s_sendmore (handler, "");
|
s_sendmore (handler, "");
|
||||||
|
if (zap_protocol != zap_do_not_send)
|
||||||
s_send(handler, "");
|
s_send(handler, "");
|
||||||
}
|
}
|
||||||
free (version);
|
free (version);
|
||||||
|
|||||||
Reference in New Issue
Block a user