From: Nick Mathewson Date: Fri, 14 Aug 2009 20:07:35 +0000 (+0000) Subject: New function to put an SSL bufferevent into a renegotiating state. X-Git-Tag: release-2.0.3-alpha~120 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=f22823982fe9e21bf49529c366b021183e52b826;p=libevent New function to put an SSL bufferevent into a renegotiating state. svn:r1418 --- diff --git a/bufferevent_openssl.c b/bufferevent_openssl.c index f099f30b..cdd627c1 100644 --- a/bufferevent_openssl.c +++ b/bufferevent_openssl.c @@ -875,6 +875,20 @@ set_handshake_callbacks(struct bufferevent_openssl *bev_ssl, evutil_socket_t fd) } } +int +bufferevent_ssl_renegotiate(struct bufferevent *bev) +{ + struct bufferevent_openssl *bev_ssl = upcast(bev); + if (!bev_ssl) + return -1; + if (SSL_renegotiate(bev_ssl->ssl) < 0) + return -1; + bev_ssl->state = BUFFEREVENT_SSL_CONNECTING; + set_handshake_callbacks(bev_ssl, -1); + if (!bev_ssl->underlying) + do_handshake(bev_ssl); + return 0; +} static void be_openssl_outbuf_cb(struct evbuffer *buf, diff --git a/include/event2/bufferevent_ssl.h b/include/event2/bufferevent_ssl.h index 540caad2..0f5e5898 100644 --- a/include/event2/bufferevent_ssl.h +++ b/include/event2/bufferevent_ssl.h @@ -65,6 +65,8 @@ bufferevent_openssl_socket_new(struct event_base *base, struct ssl_st * bufferevent_openssl_get_ssl(struct bufferevent *bufev); +int bufferevent_ssl_renegotiate(struct bufferevent *bev); + #endif #ifdef __cplusplus