|
|
|
@ -71,6 +71,8 @@ static int ssl_is_init;
|
|
|
|
|
/* need assigned p->id for deep access of module handler_ctx for connection
|
|
|
|
|
* i.e. handler_ctx *hctx = con->plugin_ctx[plugin_data_singleton->id]; */ |
|
|
|
|
static plugin_data *plugin_data_singleton; |
|
|
|
|
#define LOCAL_SEND_BUFSIZE (64 * 1024) |
|
|
|
|
static char *local_send_buffer; |
|
|
|
|
|
|
|
|
|
typedef struct { |
|
|
|
|
SSL *ssl; |
|
|
|
@ -153,6 +155,8 @@ FREE_FUNC(mod_openssl_free)
|
|
|
|
|
#endif |
|
|
|
|
EVP_cleanup(); |
|
|
|
|
#endif |
|
|
|
|
|
|
|
|
|
free(local_send_buffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
free(p); |
|
|
|
@ -473,6 +477,9 @@ network_init_ssl (server *srv, void *p_d)
|
|
|
|
|
"not enough entropy in the pool"); |
|
|
|
|
return -1; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
local_send_buffer = malloc(LOCAL_SEND_BUFSIZE); |
|
|
|
|
force_assert(NULL != local_send_buffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!buffer_string_is_empty(s->ssl_pemfile)) { |
|
|
|
@ -932,16 +939,16 @@ load_next_chunk (server *srv, chunkqueue *cq, off_t max_bytes,
|
|
|
|
|
{ |
|
|
|
|
chunk * const c = cq->first; |
|
|
|
|
|
|
|
|
|
#define LOCAL_SEND_BUFSIZE (64 * 1024) |
|
|
|
|
/* this is a 64k sendbuffer
|
|
|
|
|
/* local_send_buffer is a 64k sendbuffer (LOCAL_SEND_BUFSIZE)
|
|
|
|
|
* |
|
|
|
|
* it has to stay at the same location all the time to satisfy the needs |
|
|
|
|
* of SSL_write to pass the SAME parameter in case of a _WANT_WRITE |
|
|
|
|
* |
|
|
|
|
* buffer is allocated once, is NOT realloced and is NOT freed at shutdown |
|
|
|
|
* -> we expect a 64k block to 'leak' in valgrind |
|
|
|
|
* buffer is allocated once, is NOT realloced |
|
|
|
|
* |
|
|
|
|
* (Note: above restriction no longer true since SSL_CTX_set_mode() is |
|
|
|
|
* called with SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER) |
|
|
|
|
* */ |
|
|
|
|
static char *local_send_buffer = NULL; |
|
|
|
|
|
|
|
|
|
force_assert(NULL != c); |
|
|
|
|
|
|
|
|
@ -962,11 +969,6 @@ load_next_chunk (server *srv, chunkqueue *cq, off_t max_bytes,
|
|
|
|
|
return 0; |
|
|
|
|
|
|
|
|
|
case FILE_CHUNK: |
|
|
|
|
if (NULL == local_send_buffer) { |
|
|
|
|
local_send_buffer = malloc(LOCAL_SEND_BUFSIZE); |
|
|
|
|
force_assert(NULL != local_send_buffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (0 != chunkqueue_open_file_chunk(srv, cq)) return -1; |
|
|
|
|
|
|
|
|
|
{ |
|
|
|
|