comparison src/event/ngx_event_openssl.c @ 1779:06014cfdb5b1

create ssl buffer on demand and free it before keep-alive
author Igor Sysoev <igor@sysoev.ru>
date Wed, 26 Dec 2007 21:07:30 +0000
parents 14510c3cc6cb
children 3a0132e2be2c
comparison
equal deleted inserted replaced
1778:14510c3cc6cb 1779:06014cfdb5b1
342 sc = ngx_pcalloc(c->pool, sizeof(ngx_ssl_connection_t)); 342 sc = ngx_pcalloc(c->pool, sizeof(ngx_ssl_connection_t));
343 if (sc == NULL) { 343 if (sc == NULL) {
344 return NGX_ERROR; 344 return NGX_ERROR;
345 } 345 }
346 346
347 if (flags & NGX_SSL_BUFFER) { 347 sc->buffer = ((flags & NGX_SSL_BUFFER) != 0);
348 sc->buffer = 1;
349
350 sc->buf = ngx_create_temp_buf(c->pool, NGX_SSL_BUFSIZE);
351 if (sc->buf == NULL) {
352 return NGX_ERROR;
353 }
354 }
355 348
356 sc->connection = SSL_new(ssl->ctx); 349 sc->connection = SSL_new(ssl->ctx);
357 350
358 if (sc->connection == NULL) { 351 if (sc->connection == NULL) {
359 ngx_ssl_error(NGX_LOG_ALERT, c->log, 0, "SSL_new() failed"); 352 ngx_ssl_error(NGX_LOG_ALERT, c->log, 0, "SSL_new() failed");
802 795
803 if (limit == 0 || limit > (off_t) (NGX_MAX_UINT32_VALUE - ngx_pagesize)) { 796 if (limit == 0 || limit > (off_t) (NGX_MAX_UINT32_VALUE - ngx_pagesize)) {
804 limit = NGX_MAX_UINT32_VALUE - ngx_pagesize; 797 limit = NGX_MAX_UINT32_VALUE - ngx_pagesize;
805 } 798 }
806 799
807
808 buf = c->ssl->buf; 800 buf = c->ssl->buf;
801
802 if (buf == NULL) {
803 buf = ngx_create_temp_buf(c->pool, NGX_SSL_BUFSIZE);
804 if (buf == NULL) {
805 return NGX_CHAIN_ERROR;
806 }
807
808 c->ssl->buf = buf;
809 }
810
811 if (buf->start == NULL) {
812 buf->start = ngx_palloc(c->pool, NGX_SSL_BUFSIZE);
813 if (buf->start == NULL) {
814 return NGX_CHAIN_ERROR;
815 }
816
817 buf->pos = buf->start;
818 buf->last = buf->start;
819 buf->end = buf->start + NGX_SSL_BUFSIZE;
820 }
821
809 send = 0; 822 send = 0;
810 flush = (in == NULL) ? 1 : 0; 823 flush = (in == NULL) ? 1 : 0;
811 824
812 for ( ;; ) { 825 for ( ;; ) {
813 826
975 ngx_connection_t *c; 988 ngx_connection_t *c;
976 989
977 c = rev->data; 990 c = rev->data;
978 991
979 c->write->handler(c->write); 992 c->write->handler(c->write);
993 }
994
995
996 void
997 ngx_ssl_free_buffer(ngx_connection_t *c)
998 {
999 if (ngx_pfree(c->pool, c->ssl->buf->start) == NGX_OK) {
1000 c->ssl->buf->start = NULL;
1001 }
980 } 1002 }
981 1003
982 1004
983 ngx_int_t 1005 ngx_int_t
984 ngx_ssl_shutdown(ngx_connection_t *c) 1006 ngx_ssl_shutdown(ngx_connection_t *c)