From: Nick Mathewson Date: Thu, 30 Jul 2009 20:41:00 +0000 (+0000) Subject: Add a function to extract the SSL object from a bufferevent_openssl. X-Git-Tag: release-2.0.3-alpha~143 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=eecefc50e77041c588b2c281f57b5609ae80885c;p=libevent Add a function to extract the SSL object from a bufferevent_openssl. svn:r1395 --- diff --git a/bufferevent_openssl.c b/bufferevent_openssl.c index dd0b4edc..cbcfdf36 100644 --- a/bufferevent_openssl.c +++ b/bufferevent_openssl.c @@ -1005,6 +1005,15 @@ be_openssl_ctrl(struct bufferevent *bev, } } +SSL * +bufferevent_openssl_get_ssl(struct bufferevent *bufev) +{ + struct bufferevent_openssl *bev_ssl = upcast(bufev); + if (!bev_ssl) + return NULL; + return bev_ssl->ssl; +} + static struct bufferevent * bufferevent_openssl_new_impl(struct event_base *base, struct bufferevent *underlying, diff --git a/include/event2/bufferevent_ssl.h b/include/event2/bufferevent_ssl.h index 060d6aeb..540caad2 100644 --- a/include/event2/bufferevent_ssl.h +++ b/include/event2/bufferevent_ssl.h @@ -61,6 +61,10 @@ bufferevent_openssl_socket_new(struct event_base *base, struct ssl_st *ssl, enum bufferevent_ssl_state state, enum bufferevent_options options); + +struct ssl_st * +bufferevent_openssl_get_ssl(struct bufferevent *bufev); + #endif #ifdef __cplusplus diff --git a/test/regress_ssl.c b/test/regress_ssl.c index 83e93d72..d48bf2f1 100644 --- a/test/regress_ssl.c +++ b/test/regress_ssl.c @@ -176,9 +176,19 @@ static void eventcb(struct bufferevent *bev, short what, void *ctx) { TT_BLATHER(("Got event %d", (int)what)); - if (what & BEV_EVENT_CONNECTED) + if (what & BEV_EVENT_CONNECTED) { + SSL *ssl; + X509 *peer_cert; ++n_connected; - else if (what & BEV_EVENT_EOF) { + ssl = bufferevent_openssl_get_ssl(bev); + tt_assert(ssl); + peer_cert = SSL_get_peer_certificate(ssl); + if (0==strcmp(ctx, "server")) { + tt_assert(peer_cert == NULL); + } else { + tt_assert(peer_cert != NULL); + } + } else if (what & BEV_EVENT_EOF) { TT_BLATHER(("Got a good EOF")); ++got_close; bufferevent_free(bev); @@ -187,6 +197,8 @@ eventcb(struct bufferevent *bev, short what, void *ctx) ++got_error; bufferevent_free(bev); } +end: + ; } static void @@ -249,8 +261,10 @@ regress_bufferevent_openssl(void *arg) bufferevent_enable(bev1, EV_READ|EV_WRITE); bufferevent_enable(bev2, EV_READ|EV_WRITE); - bufferevent_setcb(bev1, respond_to_number, NULL, eventcb, NULL); - bufferevent_setcb(bev2, respond_to_number, NULL, eventcb, NULL); + bufferevent_setcb(bev1, respond_to_number, NULL, eventcb, + (void*)"client"); + bufferevent_setcb(bev2, respond_to_number, NULL, eventcb, + (void*)"server"); evbuffer_add_printf(bufferevent_get_output(bev1), "1\n");