# HG changeset patch # User Igor Sysoev # Date 1090780454 0 # Node ID 4e21d1291a147c8616bcfc2b01cf775e022c75ec # Parent 201b5f68b59fb65ef3c467e9aee04be53730677e nginx-0.0.7-2004-07-25-22:34:14 import diff --git a/auto/lib/conf b/auto/lib/conf --- a/auto/lib/conf +++ b/auto/lib/conf @@ -7,6 +7,10 @@ if [ $USE_MD5 = YES ]; then . auto/lib/md5/conf fi +if [ $USE_OPENSSL = YES ]; then + . auto/lib/openssl/conf +fi + if [ $USE_ZLIB = YES ]; then . auto/lib/zlib/conf fi diff --git a/auto/lib/make b/auto/lib/make --- a/auto/lib/make +++ b/auto/lib/make @@ -7,6 +7,10 @@ if [ $MD5 != NONE -a $MD5 != NO -a $MD5 . auto/lib/md5/make fi +if [ $OPENSSL != NONE -a $OPENSSL != NO -a $OPENSSL != YES ]; then + . auto/lib/openssl/make +fi + if [ $ZLIB != NONE -a $ZLIB != NO -a $ZLIB != YES ]; then . auto/lib/zlib/make fi diff --git a/auto/lib/openssl/conf b/auto/lib/openssl/conf new file mode 100644 --- /dev/null +++ b/auto/lib/openssl/conf @@ -0,0 +1,40 @@ + +if [ $OPENSSL != NONE ]; then + CORE_INCS="$CORE_INCS $OPENSSL/include" + CORE_DEPS="$CORE_DEPS $OPENSSL_DEPS" + CORE_SRCS="$CORE_SRCS $OPENSSL_SRCS" + + case "$CC" in + *) + have=NGX_OPENSSL . auto/have + LINK_DEPS="$LINK_DEPS $OPENSSL/libssl.a $OPENSSL/libcrypto.a" + CORE_LIBS="$CORE_LIBS $OPENSSL/libssl.a $OPENSSL/libcrypto.a" + ;; + + esac + +else + + if [ $PLATFORM != win32 ]; then + OPENSSL=NO + ngx_lib_cflags= + + ngx_lib_inc="#include " + ngx_lib="OpenSSL library" + ngx_lib_test="SSL_library_init()" + ngx_libs="-lssl -lcrypto" + . auto/lib/test + + + if [ $ngx_found = yes ]; then + have=NGX_OPENSSL . auto/have + CORE_DEPS="$CORE_DEPS $OPENSSL_DEPS" + CORE_SRCS="$CORE_SRCS $OPENSSL_SRCS" + CORE_LIBS="$CORE_LIBS $ngx_libs" + OPENSSL=YES + ngx_found=no + fi + + fi + +fi diff --git a/auto/lib/openssl/make b/auto/lib/openssl/make new file mode 100644 --- /dev/null +++ b/auto/lib/openssl/make @@ -0,0 +1,13 @@ + +case $PLATFORM in + *) + echo "$OPENSSL/libssl.a:" >> $MAKEFILE + echo " cd $OPENSSL \\" >> $MAKEFILE + echo " && CC=\"\$(CC)\" \\" >> $MAKEFILE + echo " ./config threads no-shared \\" >> $MAKEFILE + echo " && \$(MAKE)" >> $MAKEFILE + ;; + +esac + +echo >> $MAKEFILE diff --git a/auto/modules b/auto/modules --- a/auto/modules +++ b/auto/modules @@ -101,16 +101,17 @@ if [ $HTTP_REWRITE = YES -a $USE_PCRE != fi if [ $HTTP_SSL = YES ]; then + USE_OPENSSL=YES + have=NGX_HTTP_SSL . auto/have HTTP_MODULES="$HTTP_MODULES $HTTP_SSL_MODULE" HTTP_DEPS="$HTTP_DEPS $HTTP_SSL_DEPS" HTTP_SRCS="$HTTP_SRCS $HTTP_SSL_SRCS" # STUB: move to auto/libs/ssl after md5 - have=NGX_HTTP_SSL . auto/have - have=NGX_OPENSSL . auto/have - CORE_DEPS="$CORE_DEPS $OPENSSL_DEPS" - CORE_SRCS="$CORE_SRCS $OPENSSL_SRCS" - CORE_LIBS="$CORE_LIBS -lssl -lcrypto" + #have=NGX_OPENSSL . auto/have + #CORE_DEPS="$CORE_DEPS $OPENSSL_DEPS" + #CORE_SRCS="$CORE_SRCS $OPENSSL_SRCS" + #CORE_LIBS="$CORE_LIBS -lssl -lcrypto" fi if [ $HTTP_PROXY = YES ]; then diff --git a/auto/options b/auto/options --- a/auto/options +++ b/auto/options @@ -42,6 +42,9 @@ USE_PCRE=NO PCRE=NONE PCRE_OPT= +USE_OPENSSL=NO +OPENSSL=NONE + USE_MD5=NO MD5=NONE MD5_OPT= @@ -103,6 +106,8 @@ do --with-pcre=*) PCRE="$value" ;; --with-pcre-opt=*) PCRE_OPT="$value" ;; + --with-openssl=*) OPENSSL="$value" ;; + --with-md5=*) MD5="$value" ;; --with-md5-opt=*) MD5_OPT="$value" ;; --with-md5-asm) MD5_ASM=YES ;; diff --git a/auto/summary b/auto/summary --- a/auto/summary +++ b/auto/summary @@ -22,6 +22,13 @@ case $MD5 in *) echo " + using md5 library: $MD5" ;; esac +case $OPENSSL in + YES) echo " + using system OpenSSL library" ;; + NONE) echo " + OpenSSL library is not used" ;; + NO) echo " + OpenSSL library is not found" ;; + *) echo " + using OpenSSL library: $OPENSSL" ;; +esac + case $ZLIB in YES) echo " + using system zlib library" ;; NONE) echo " + zlib library is not used" ;; diff --git a/src/core/ngx_buf.h b/src/core/ngx_buf.h --- a/src/core/ngx_buf.h +++ b/src/core/ngx_buf.h @@ -132,7 +132,6 @@ typedef struct { #define NGX_CHAIN_ERROR (ngx_chain_t *) NGX_ERROR -#define NGX_CHAIN_AGAIN (ngx_chain_t *) NGX_AGAIN #define ngx_buf_in_memory(b) (b->temporary || b->memory || b->mmap) diff --git a/src/core/ngx_connection.h b/src/core/ngx_connection.h --- a/src/core/ngx_connection.h +++ b/src/core/ngx_connection.h @@ -108,6 +108,7 @@ struct ngx_connection_s { unsigned log_error:2; /* ngx_connection_log_error_e */ + unsigned buffered:1; unsigned single_connection:1; unsigned pipeline:1; unsigned unexpected_eof:1; diff --git a/src/event/ngx_event_openssl.c b/src/event/ngx_event_openssl.c --- a/src/event/ngx_event_openssl.c +++ b/src/event/ngx_event_openssl.c @@ -118,13 +118,13 @@ ngx_chain_t *ngx_ssl_send_chain(ngx_conn off_t limit) { int n; - ngx_uint_t flush, last; + ngx_uint_t flush; ssize_t send, size; ngx_buf_t *buf; buf = c->ssl->buf; - if (in && in->next == NULL && buf->pos == buf->last && !c->ssl->buffer) { + if (in && in->next == NULL && !c->buffered && !c->ssl->buffer) { /* * we avoid a buffer copy if the incoming buf is a single, @@ -148,14 +148,12 @@ ngx_chain_t *ngx_ssl_send_chain(ngx_conn send = 0; flush = (in == NULL) ? 1 : 0; - last = (in == NULL) ? 1 : 0; for ( ;; ) { while (in && buf->last < buf->end) { if (in->buf->last_buf) { flush = 1; - last = 1; } if (ngx_buf_special(in->buf)) { @@ -226,15 +224,9 @@ ngx_chain_t *ngx_ssl_send_chain(ngx_conn } } - if (in) { - return in; - } + c->buffered = (buf->pos < buf->last) ? 1 : 0; - if (buf->pos == buf->last || !last) { - return NULL; - } - - return NGX_CHAIN_AGAIN; + return in; } diff --git a/src/http/ngx_http_write_filter.c b/src/http/ngx_http_write_filter.c --- a/src/http/ngx_http_write_filter.c +++ b/src/http/ngx_http_write_filter.c @@ -7,9 +7,6 @@ typedef struct { ngx_chain_t *out; - - /* unsigned flush:1; */ - ngx_uint_t flush; } ngx_http_write_filter_ctx_t; @@ -119,7 +116,7 @@ ngx_int_t ngx_http_write_filter(ngx_http return NGX_AGAIN; } - if (size == 0 && !ctx->flush) { + if (size == 0 && !c->buffered) { if (!last) { ngx_log_error(NGX_LOG_ALERT, r->connection->log, 0, "the http output chain is empty"); @@ -146,19 +143,13 @@ ngx_int_t ngx_http_write_filter(ngx_http return NGX_ERROR; } - if (chain == NGX_CHAIN_AGAIN) { - ctx->out = NULL; - ctx->flush = 1; + ctx->out = chain; + + if (chain || c->buffered) { return NGX_AGAIN; } - ctx->out = chain; - - if (chain == NULL) { - return NGX_OK; - } - - return NGX_AGAIN; + return NGX_OK; }