]> granicus.if.org Git - libevent/commitdiff
New function to put an SSL bufferevent into a renegotiating state.
authorNick Mathewson <nickm@torproject.org>
Fri, 14 Aug 2009 20:07:35 +0000 (20:07 +0000)
committerNick Mathewson <nickm@torproject.org>
Fri, 14 Aug 2009 20:07:35 +0000 (20:07 +0000)
svn:r1418

bufferevent_openssl.c
include/event2/bufferevent_ssl.h

index f099f30b24d7c13fe1b362814788cd909f065ed3..cdd627c143bc76508858b608976a70b19da8f70e 100644 (file)
@@ -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,
index 540caad2e6e0135b1774428f07b7f534172940dc..0f5e5898dc64b43a920440b8bf4e2e4b3985196f 100644 (file)
@@ -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