*) Bugfix: the response encrypted by SSL may not transferred complete.
*) Bugfix: errors while processing FastCGI response by SSI.
*) Bugfix: errors while using SSI and gzipping.
*) Bugfix: the redirect with the 301 code was transferred without
response body; the bug had appeared in 0.1.30.
<title lang="en">nginx changelog</title>
+<changes ver="0.1.31" date="16.05.2005">
+
+<change type="bugfix">
+<para lang="ru">
+ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ SSL ÏÔ×ÅÔ ÍÏÇ ÐÅÒÅÄÁ×ÁÔØÓÑ ÎÅ ÄÏ ËÏÎÃÁ.
+</para>
+<para lang="en">
+the response encrypted by SSL may not transferred complete.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÏÛÉÂËÉ ÐÒÉ ÏÂÒÁÂÏÔËÅ SSI × ÏÔ×ÅÔÅ, ÐÏÌÕÞÅÎÎÏÇÏ ÏÔ FastCGI-ÓÅÒ×ÅÒÁ.
+</para>
+<para lang="en">
+errors while processing FastCGI response by SSI.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÏÛÉÂËÉ ÐÒÉ ÉÓÐÏÌØÚÏ×ÁÎÉÉ SSI É ÓÖÁÔÉÑ.
+</para>
+<para lang="en">
+errors while using SSI and gzipping.
+</para>
+</change>
+
+<change type="bugfix">
+<para lang="ru">
+ÒÅÄÉÒÅËÔ Ó ËÏÄÏÍ 301 ÐÅÒÅÄÁ×ÁÌÓÑ ÂÅÚ ÔÅÌÁ ÏÔ×ÅÔÁ;
+ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.1.30.
+</para>
+<para lang="en">
+the redirect with the 301 code was transferred without response body;
+bug appeared in 0.1.30.
+</para>
+</change>
+
+</changes>
+
+
<changes ver="0.1.30" date="14.05.2005">
<change type="bugfix">
#define _NGINX_H_INCLUDED_
-#define NGINX_VER "nginx/0.1.30"
+#define NGINX_VER "nginx/0.1.31"
#define NGINX_VAR "NGINX"
#define NGX_NEWPID_EXT ".newbin"
return NGX_CHAIN_ERROR;
}
- if (n < 0) {
- n = 0;
+ if (n == NGX_AGAIN) {
+ c->buffered = 1;
+ return in;
}
in->buf->pos += n;
r->headers_out.content_length = NULL;
}
- r->filter_need_in_memory = 1;
+ r->main_filter_need_in_memory = 1;
return ngx_http_next_header_filter(r);
}
ctx->timefmt.data = (u_char *) "%A, %d-%b-%Y %H:%M:%S %Z";
r->filter_need_in_memory = 1;
- r->filter_ssi_need_in_memory = 1;
if (r->main == NULL) {
r->headers_out.content_length_n = -1;
ngx_memcpy(b, ctx->buf, sizeof(ngx_buf_t));
- b->last_buf = 0;
- b->recycled = 0;
b->pos = ctx->copy_start;
b->last = ctx->copy_end;
+ b->shadow = NULL;
+ b->last_buf = 0;
+ b->recycled = 0;
if (b->in_file) {
if (conf->min_file_chunk < (size_t) (b->last - b->pos))
ngx_http_set_ctx(r, ctx, ngx_http_copy_filter_module);
ctx->sendfile = r->connection->sendfile;
- ctx->need_in_memory = r->filter_need_in_memory;
+ ctx->need_in_memory = r->main_filter_need_in_memory
+ || r->filter_need_in_memory;
ctx->need_in_temp = r->filter_need_temporary;
ctx->pool = r->pool;
sr->internal = 1;
+ sr->main_filter_need_in_memory = r->main_filter_need_in_memory;
+
ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
"http subrequest \"%V\"", uri);
out = in;
}
- if (out == NULL && r->out == NULL) {
+ if (out == NULL && r->out == NULL && !r->connection->buffered) {
return NGX_OK;
}
c->ssl->no_rcv_shut = 1;
}
- r->filter_need_in_memory = 1;
+ r->main_filter_need_in_memory = 1;
}
#endif
unsigned closed:1;
unsigned done:1;
+ unsigned main_filter_need_in_memory:1;
unsigned filter_need_in_memory:1;
- unsigned filter_ssi_need_in_memory:1;
unsigned filter_need_temporary:1;
unsigned filter_allow_ranges:1;
} else if (error < NGX_HTTP_BAD_REQUEST) {
/* 3XX */
- err = error - NGX_HTTP_MOVED_PERMANENTLY;
+ err = error - NGX_HTTP_MOVED_PERMANENTLY + NGX_HTTP_LEVEL_200;
} else if (error < NGX_HTTP_NGX_CODES) {
/* 4XX */
return NGX_OK;
}
-#if 0
- /*
- * avoid the output if there are no incoming bufs but there are
- * the postponed requests or data
- */
-
- if (in == NULL && r->postponed) {
- return NGX_OK;
- }
-#endif
-
if (c->write->delayed) {
return NGX_AGAIN;
}
r->out = chain;
- if (chain || (last && c->buffered)) {
+ if (chain || c->buffered) {
return NGX_AGAIN;
}