static void
set_rbow(struct bufferevent_openssl *bev_ssl)
{
- stop_reading(bev_ssl);
+ if (!bev_ssl->underlying)
+ stop_reading(bev_ssl);
bev_ssl->read_blocked_on_write = 1;
start_writing(bev_ssl);
}
static void
set_wbor(struct bufferevent_openssl *bev_ssl)
{
- stop_writing(bev_ssl);
+ if (!bev_ssl->underlying)
+ stop_writing(bev_ssl);
bev_ssl->write_blocked_on_read = 1;
start_reading(bev_ssl);
}
static int n_connected = 0;
static int got_close = 0;
static int got_error = 0;
+static int renegotiate_at = -1;
static void
respond_to_number(struct bufferevent *bev, void *ctx)
bufferevent_free(bev); /* Should trigger close on other side. */
return;
}
+ if (!strcmp(ctx, "client") && n == renegotiate_at) {
+ SSL_renegotiate(bufferevent_openssl_get_ssl(bev));
+ }
++n;
evbuffer_add_printf(bufferevent_get_output(bev),
"%d\n", n);
SSL_use_certificate(ssl2, cert);
SSL_use_PrivateKey(ssl2, key);
+ if (strstr((char*)data->setup_data, "renegotiate"))
+ renegotiate_at = 600;
+
if (strstr((char*)data->setup_data, "socketpair")) {
bev1 = bufferevent_openssl_socket_new(
data->base,
tt_assert(test_is_done == 1);
tt_assert(n_connected == 2);
+
/* We don't handle shutdown properly yet.
tt_int_op(got_close, ==, 1);
tt_int_op(got_error, ==, 0);
{ "bufferevent_filter", regress_bufferevent_openssl,
TT_ISOLATED,
&basic_setup, (void*)"filter" },
+ { "bufferevent_renegotiate_socketpair", regress_bufferevent_openssl,
+ TT_ISOLATED,
+ &basic_setup, (void*)"socketpair renegotiate" },
+ { "bufferevent_renegotiate_filterfilter", regress_bufferevent_openssl,
+ TT_ISOLATED,
+ &basic_setup, (void*)"filter renegotiate" },
END_OF_TESTCASES,
};