bool zsys_has_curve (void) { #if defined (ZMQ_CURVE_SERVER) # if defined (ZMQ_HAS_CAPABILITIES) // This is the most modern way of probing libzmq capabilities return zmq_has ("curve") != 0; # else // However trying the zmq_setsockopt will also work int rc = -1; // assume we fail void *ctx = zmq_ctx_new (); if (ctx) { void *pub = zmq_socket (ctx, ZMQ_PUB); if (pub) { int as_server = 1; rc = zmq_setsockopt (pub, ZMQ_CURVE_SERVER, &as_server, sizeof (int)); zmq_close (pub); } zmq_term (ctx); } return rc != -1; # endif #else return false; #endif }
int main (void) { setup_test_environment (); fprintf (stderr, "NULL mechanism\n"); test_zap_errors (&socket_config_null_server, NULL, &socket_config_null_client, NULL); fprintf (stderr, "PLAIN mechanism\n"); test_zap_errors (&socket_config_plain_server, NULL, &socket_config_plain_client, NULL); if (zmq_has ("curve")) { fprintf (stderr, "CURVE mechanism\n"); setup_testutil_security_curve (); curve_client_data_t curve_client_data = { valid_server_public, valid_client_public, valid_client_secret}; test_zap_errors (&socket_config_curve_server, valid_server_secret, &socket_config_curve_client, &curve_client_data); } }