diff --git a/common/include/tfe_future.h b/common/include/tfe_future.h index e9fc5d2..80f2b27 100644 --- a/common/include/tfe_future.h +++ b/common/include/tfe_future.h @@ -8,8 +8,8 @@ enum e_future_error struct promise; struct future; - -typedef void (future_success_cb)(void * result, void * user); +typedef void future_result_t; +typedef void (future_success_cb)(future_result_t* result, void * user); typedef void (future_failed_cb)(enum e_future_error err, const char * what, void * user); typedef void (promise_ctx_destroy_cb)(struct promise * p); diff --git a/platform/include/internal/ssl_stream.h b/platform/include/internal/ssl_stream.h new file mode 100644 index 0000000..733bef9 --- /dev/null +++ b/platform/include/internal/ssl_stream.h @@ -0,0 +1,19 @@ +#pragma once +#include "tfe_future.h" + +struct ssl_client_hello +{ + int version; + char* sni; + char* cipher_suites; +}; +struct ssl_client_hello* ssl_get_peek_result(future_result_t* result); +void ssl_free_peek_result(struct ssl_client_hello* client_hello); +void ssl_async_peek_client_hello(struct future* future, evutil_socket_t fd, struct event_base *evbase); + +void ssl_async_connect_origin(struct future* future, const struct ssl_client_hello* client_hello, evutil_socket_t fd, const char* sni, struct event_base *evbase); + +struct ssl_downstream * ssl_downstream_create(); +void ssl_upstream_free(struct ssl_upstream * p); +void ssl_downstream_free(struct ssl_downstream * p); + diff --git a/platform/include/internal/stream.h b/platform/include/internal/stream.h index 35d9947..9ddb678 100644 --- a/platform/include/internal/stream.h +++ b/platform/include/internal/stream.h @@ -116,11 +116,3 @@ struct tfe_stream_private * tfe_stream_create(evutil_socket_t fd_downstream, evu void tfe_stream_setup(struct tfe_stream_private * _stream); -void ssl_async_connect_origin(struct future * future, evutil_socket_t fd, const char * sni, - struct event_base * evbase, struct tfe_config * opts); - -void ssl_async_peek_sni(struct future * future, evutil_socket_t fd, struct event_base * evbase); - -struct ssl_downstream * ssl_downstream_create(); -void ssl_upstream_free(struct ssl_upstream * p); -void ssl_downstream_free(struct ssl_downstream * p); diff --git a/platform/src/ssl_stream.cpp b/platform/src/ssl_stream.cpp index edf4c63..75b2ca8 100644 --- a/platform/src/ssl_stream.cpp +++ b/platform/src/ssl_stream.cpp @@ -31,7 +31,6 @@ struct peek_client_hello_ctx { unsigned char sni_peek_retries; /* max 64 SNI parse retries */ - struct event* ev; struct event_base* evbase; @@ -46,7 +45,7 @@ void peek_client_hello_ctx_free(void* ctx) free(_ctx); return; } -struct ssl_client_hello* ssl_get_peek_result(void* result) +struct ssl_client_hello* ssl_get_peek_result(future_result_t* result) { struct ssl_client_hello* p=(struct ssl_client_hello* )result, *copy=NULL; copy=ALLOC(struct ssl_client_hello*,1); diff --git a/platform/src/tfe_stream.cpp b/platform/src/tfe_stream.cpp index 6ba40bf..820ab3d 100644 --- a/platform/src/tfe_stream.cpp +++ b/platform/src/tfe_stream.cpp @@ -457,7 +457,7 @@ void ssl_conn_origin_on_fail(enum e_future_error err, const char * what, void * assert(0); } -void peek_sni_on_succ(void * result, void * user) +void peek_client_hello_on_succ(void * result, void * user) { struct tfe_stream_private * _stream = (struct tfe_stream_private *) user; assert(_stream->session_type == SESSION_PROTO_SSL); @@ -475,7 +475,7 @@ void peek_sni_on_succ(void * result, void * user) _stream->thrmgr_ref->evbase, NULL); } -void peek_sni_on_fail(enum e_future_error err, const char * what, void * user) +void peek_client_hello_on_fail(enum e_future_error err, const char * what, void * user) { //TODO: assert(0); @@ -501,8 +501,8 @@ void tfe_stream_setup(struct tfe_stream_private * _stream) case SESSION_PROTO_SSL: // for SSL, defer dst connection setup to initial_readcb _stream->ssl_downstream = ssl_downstream_create(); - _stream->async_future = future_create(peek_sni_on_succ, peek_sni_on_fail, _stream); - ssl_async_peek_sni(_stream->ssl_downstream->future_sni_peek, _stream->fd_downstream, + _stream->async_future = future_create(peek_client_hello_on_succ, peek_client_hello_on_fail, _stream); + ssl_async_peek_client_hello(_stream->ssl_downstream->future_sni_peek, _stream->fd_downstream, _stream->thrmgr_ref->evbase); thread->stat.value[SSL_NUM]++; break;