nginx-0.0.7-2004-07-25-22:34:14 import
diff --git a/auto/lib/conf b/auto/lib/conf
index 163193f..af2e9d7 100644
--- a/auto/lib/conf
+++ b/auto/lib/conf
@@ -7,6 +7,10 @@
. 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
index 2c2d232..377fc7a 100644
--- a/auto/lib/make
+++ b/auto/lib/make
@@ -7,6 +7,10 @@
. 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
index 0000000..28dbf66
--- /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 <openssl/ssl.h>"
+ 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
index 0000000..8631ff3
--- /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
index 6a5becd..4dc9e1e 100644
--- a/auto/modules
+++ b/auto/modules
@@ -101,16 +101,17 @@
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
index c506062..5aea141 100644
--- a/auto/options
+++ b/auto/options
@@ -42,6 +42,9 @@
PCRE=NONE
PCRE_OPT=
+USE_OPENSSL=NO
+OPENSSL=NONE
+
USE_MD5=NO
MD5=NONE
MD5_OPT=
@@ -103,6 +106,8 @@
--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
index 9769180..482f792 100644
--- a/auto/summary
+++ b/auto/summary
@@ -22,6 +22,13 @@
*) 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
index feaad4c..1927ed4 100644
--- a/src/core/ngx_buf.h
+++ b/src/core/ngx_buf.h
@@ -132,7 +132,6 @@
#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
index bc30b13..c2bdcea 100644
--- a/src/core/ngx_connection.h
+++ b/src/core/ngx_connection.h
@@ -108,6 +108,7 @@
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
index 9e8dd0b..0116787 100644
--- a/src/event/ngx_event_openssl.c
+++ b/src/event/ngx_event_openssl.c
@@ -118,13 +118,13 @@
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 @@
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 @@
}
}
- 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
index 412d4f9..2c0989d 100644
--- 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 @@
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 @@
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;
}