变更stream系列文件的名称,修正了部分编译错误
* 变更stream系列文件的名称为ssl_stream, tcp_stream等; * 变更stream.h为platform.h,因该文件为平台整体公用; * 修正了ssl_stream, ssl_sess_cache文件中的编译错误,部分实现的bug。 * 调整了tfe_future的路径,由平台实现改为公用组件。
This commit is contained in:
@@ -1,8 +1,8 @@
|
||||
#ifndef CERT_H
|
||||
#define CERT_H
|
||||
#pragma once
|
||||
|
||||
#include <openssl/ssl.h>
|
||||
#include <pthread.h>
|
||||
#include <tfe_future.h>
|
||||
|
||||
struct keyring
|
||||
{
|
||||
@@ -16,6 +16,5 @@ struct key_keeper * key_keeper_destroy(struct key_keeper *keeper);
|
||||
|
||||
struct keyring* key_keeper_release_cert(future_result_t* result);
|
||||
void key_keeper_free_keyring(struct keyring* cert);
|
||||
void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, int keyring_id,
|
||||
void key_keeper_async_ask(struct future * f, struct key_keeper * keeper, int keyring_id,
|
||||
X509 * origin_cert, int is_cert_valid, struct event_base * evbase);
|
||||
#endif /* !CERT_H */
|
||||
|
||||
@@ -5,7 +5,8 @@
|
||||
|
||||
#include <tfe_stream.h>
|
||||
#include <tfe_stat.h>
|
||||
#include <cert.h>
|
||||
#include <tfe_future.h>
|
||||
#include <proxy.h>
|
||||
|
||||
struct tfe_thread_ctx
|
||||
{
|
||||
@@ -26,26 +27,6 @@ struct tfe_thread_ctx
|
||||
const struct tfe_plugin * modules;
|
||||
};
|
||||
|
||||
//Downstream: comunication form client to proxy
|
||||
//Upstream: communication form proxy to server
|
||||
struct ssl_downstream
|
||||
{
|
||||
/* server name indicated by client in SNI TLS extension */
|
||||
char * sni;
|
||||
SSL * ssl;
|
||||
X509 * fake_cert_ref;//?
|
||||
int keyring_id;
|
||||
struct future * future_sni_peek;
|
||||
struct future * future_get_cert;
|
||||
};
|
||||
|
||||
struct ssl_upstream
|
||||
{
|
||||
X509 * orig_cert;
|
||||
SSL * ssl;
|
||||
struct future * conn_ssl_srv;
|
||||
};
|
||||
|
||||
enum tfe_plugin_state
|
||||
{
|
||||
PLUG_STATE_READONLY,
|
||||
@@ -78,22 +59,18 @@ struct tfe_conn_private
|
||||
struct tfe_stream_private
|
||||
{
|
||||
struct tfe_stream head;
|
||||
struct tfe_proxy *proxy;
|
||||
struct tfe_proxy * proxy_ref;
|
||||
struct tfe_thread_ctx * thread_ref;
|
||||
|
||||
enum tfe_session_proto session_type;
|
||||
struct tfe_conn_private conn_upstream;
|
||||
struct tfe_conn_private conn_downstream;
|
||||
struct tfe_conn_private * conn_upstream;
|
||||
struct tfe_conn_private * conn_downstream;
|
||||
|
||||
union
|
||||
struct
|
||||
{
|
||||
struct ssl_downstream * ssl_downstream;
|
||||
void * raw_downstream;
|
||||
};
|
||||
|
||||
union
|
||||
{
|
||||
struct ssl_upstream * ssl_upstream;
|
||||
void * raw_upstream;
|
||||
struct ssl_mgr * ssl_mgr;
|
||||
struct ssl_stream * ssl_downstream;
|
||||
struct ssl_stream * ssl_upstream;
|
||||
};
|
||||
|
||||
uint8_t is_plugin_opened;
|
||||
@@ -109,15 +86,17 @@ struct tfe_stream_private
|
||||
struct plugin_ctx * plug_ctx;
|
||||
unsigned char passthrough; /* 1 if SSL passthrough is active */
|
||||
|
||||
evutil_socket_t fd_downstream;
|
||||
evutil_socket_t fd_upstream;
|
||||
/* For defer connection setup */
|
||||
evutil_socket_t defer_fd_downstream;
|
||||
evutil_socket_t defer_fd_upstream;
|
||||
|
||||
struct tfe_thread_ctx * thrmgr_ref;
|
||||
future * async_future;
|
||||
/* ASYNC UPSTREAM */
|
||||
future * future_upstream_create;
|
||||
/* ASYNC DOWNSTREAM */
|
||||
future * future_downstream_create;
|
||||
};
|
||||
|
||||
struct tfe_stream_private * tfe_stream_create(evutil_socket_t fd_downstream, evutil_socket_t fd_upstream,
|
||||
enum tfe_session_proto session_type, tfe_thread_ctx * thread);
|
||||
|
||||
void tfe_stream_setup(struct tfe_stream_private * _stream);
|
||||
|
||||
static inline void * __STREAM_LOGGER(struct tfe_stream_private * _stream)
|
||||
{
|
||||
return _stream->proxy_ref->main_logger;
|
||||
}
|
||||
@@ -2,8 +2,32 @@
|
||||
|
||||
#include <tfe_stream.h>
|
||||
#include <event2/event.h>
|
||||
#include <ssl_stream.h>
|
||||
|
||||
struct ssl_mgr;
|
||||
struct key_keeper;
|
||||
|
||||
struct tfe_proxy
|
||||
{
|
||||
char name[TFE_SYMBOL_MAX];
|
||||
struct event_base * evbase;
|
||||
struct event * sev[8];
|
||||
struct event * gcev;
|
||||
|
||||
struct tfe_config * opts;
|
||||
void * main_logger;
|
||||
|
||||
unsigned int nr_work_threads;
|
||||
struct tfe_thread_ctx * work_threads;
|
||||
|
||||
unsigned int nr_modules;
|
||||
struct tfe_plugin * modules;
|
||||
void * io_mod;
|
||||
|
||||
struct ssl_mgr * ssl_mgr_handler;
|
||||
struct key_keeper * key_keeper_handler;
|
||||
};
|
||||
|
||||
struct tfe_proxy;
|
||||
struct tfe_proxy_accept_para
|
||||
{
|
||||
/* Both upstream and downstream FDs */
|
||||
@@ -17,3 +41,4 @@ struct tfe_proxy_accept_para
|
||||
struct tfe_proxy * tfe_proxy_new(const char * profile);
|
||||
int tfe_proxy_fds_accept(struct tfe_proxy * ctx, const struct tfe_proxy_accept_para * para);
|
||||
void tfe_proxy_run(struct tfe_proxy * proxy);
|
||||
|
||||
|
||||
16
platform/include/internal/ssl_sess_cache.h
Normal file
16
platform/include/internal/ssl_sess_cache.h
Normal file
@@ -0,0 +1,16 @@
|
||||
#pragma once
|
||||
|
||||
#include <sys/socket.h>
|
||||
#include <openssl/ssl.h>
|
||||
#include <tfe_stream.h>
|
||||
|
||||
struct sess_cache;
|
||||
struct sess_cache * ssl_sess_cache_create(unsigned int slot_size, unsigned int expire_seconds, enum tfe_conn_dir served);
|
||||
void ssl_sess_cache_destroy(struct sess_cache * cache);
|
||||
|
||||
void up_session_set(struct sess_cache * cache, struct sockaddr * addr, socklen_t addr_len, const char * sni, SSL_SESSION * value);
|
||||
SSL_SESSION * up_session_get(struct sess_cache * cache, struct sockaddr * addr, socklen_t addr_len, const char * sni);
|
||||
|
||||
void down_session_set(struct sess_cache * cache, const SSL_SESSION * sess);
|
||||
void down_session_del(struct sess_cache * cache, const SSL_SESSION * sess);
|
||||
SSL_SESSION * down_session_get(struct sess_cache * cache, const unsigned char * id, int idlen);
|
||||
@@ -1,22 +1,29 @@
|
||||
#pragma once
|
||||
#include <event2/event.h>
|
||||
#include <tfe_future.h>
|
||||
#include <field_stat2.h>
|
||||
|
||||
#include <openssl/ssl.h>
|
||||
#include <openssl/err.h>
|
||||
#include <openssl/rand.h>
|
||||
#include <openssl/x509.h>
|
||||
#include <openssl/x509v3.h>
|
||||
|
||||
#include <MESA/field_stat2.h>
|
||||
|
||||
struct ssl_stream;
|
||||
|
||||
struct ssl_mgr;
|
||||
struct ssl_mgr* ssl_manager_init(const char* ini_profile, const char* section, struct event_base *evbase, void* logger, screen_stat_handle_t* fs);
|
||||
void ssl_manager_destroy(struct ssl_mgr* mgr);
|
||||
struct ssl_mgr * ssl_manager_init(const char * ini_profile, const char * section, struct event_base * evbase,
|
||||
void * logger, screen_stat_handle_t * fs);
|
||||
void ssl_manager_destroy(struct ssl_mgr * mgr);
|
||||
|
||||
struct ssl_stream* ssl_upstream_create_result_release_stream(future_result_t* result);
|
||||
struct bufferevent* ssl_upstream_create_result_release_bev(future_result_t* result);
|
||||
void ssl_async_upstream_create(struct future* f, struct ssl_mgr* mgr, evutil_socket_t fd_upstream, evutil_socket_t fd_downstream, struct event_base *evbase);
|
||||
|
||||
struct ssl_stream* ssl_downstream_create_result_release_stream(future_result_t* result);
|
||||
struct bufferevent* ssl_downstream_create_result_release_bev(future_result_t* result);
|
||||
void ssl_async_downstream_create(struct future* f, struct ssl_mgr* mgr, struct ssl_stream* upstream, evutil_socket_t fd_downstream, int keyring_id, struct event_base *evbase);
|
||||
|
||||
void ssl_stream_free_and_close_fd(struct ssl_stream* stream, struct event_base *evbase, evutil_socket_t fd);
|
||||
struct ssl_stream * ssl_upstream_create_result_release_stream(future_result_t * result);
|
||||
struct bufferevent * ssl_upstream_create_result_release_bev(future_result_t * result);
|
||||
void ssl_async_upstream_create(struct future * f, struct ssl_mgr * mgr, evutil_socket_t fd_upstream,
|
||||
evutil_socket_t fd_downstream, struct event_base * evbase);
|
||||
|
||||
struct ssl_stream * ssl_downstream_create_result_release_stream(future_result_t * result);
|
||||
struct bufferevent * ssl_downstream_create_result_release_bev(future_result_t * result);
|
||||
void ssl_async_downstream_create(struct future * f, struct ssl_mgr * mgr, struct ssl_stream * upstream,
|
||||
evutil_socket_t fd_downstream, int keyring_id, struct event_base * evbase);
|
||||
void ssl_stream_free_and_close_fd(struct ssl_stream * stream, struct event_base * evbase, evutil_socket_t fd);
|
||||
|
||||
8
platform/include/internal/tcp_stream.h
Normal file
8
platform/include/internal/tcp_stream.h
Normal file
@@ -0,0 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include <platform.h>
|
||||
|
||||
struct tfe_stream * tfe_stream_create(struct tfe_proxy * pxy, struct tfe_thread_ctx * thread_ctx);
|
||||
void tfe_stream_init_by_fds(struct tfe_stream * stream, enum tfe_session_proto session_type,
|
||||
evutil_socket_t fd_downstream, evutil_socket_t fd_upstream);
|
||||
void tfe_stream_destory(struct tfe_stream_private * stream);
|
||||
Reference in New Issue
Block a user