Compare commits

...

13 Commits

Author SHA1 Message Date
Tatsuhiro Tsujikawa
818c3bcadc Update man pages 2015-09-16 22:35:11 +09:00
Tatsuhiro Tsujikawa
cd845ae111 Bump up version number to 1.3.2, LT revision to 15:2:1 2015-09-16 22:30:38 +09:00
Tatsuhiro Tsujikawa
c6785abd1f nghttp: Check req is null, found by coverity 2015-09-16 22:18:09 +09:00
Tatsuhiro Tsujikawa
ee4732a676 nghttp: Show error if HEADERS frame cannot be sent for whatever reason 2015-09-16 00:41:55 +09:00
Tatsuhiro Tsujikawa
eacd6eeed2 Check header block limit after new stream is opened 2015-09-16 00:40:31 +09:00
Tatsuhiro Tsujikawa
4aaf111c58 nghttpx: Fix assertion failure on TLS handshake 2015-09-15 23:24:30 +09:00
Tatsuhiro Tsujikawa
991352d201 Just assign stream->cycle to descendant_last_cycle 2015-09-14 22:20:08 +09:00
Tatsuhiro Tsujikawa
d22573086f nghttpx: Add x-http2-push header field for pushed resource
Fixes GH-352
2015-09-14 00:28:19 +09:00
Tatsuhiro Tsujikawa
1148584526 nghttpx: Reserve room for required header fields for PUSH_PROMISE 2015-09-14 00:26:50 +09:00
Tatsuhiro Tsujikawa
5005369f71 android-config: Use absolute path for compilers 2015-09-13 00:43:31 +09:00
Tatsuhiro Tsujikawa
33601f1a51 nghttpx: Fix compile error with --disable-threads 2015-09-13 00:42:59 +09:00
Tatsuhiro Tsujikawa
b97c088e87 Bump up version number to 1.3.2-DEV 2015-09-12 23:13:24 +09:00
Tatsuhiro Tsujikawa
e93a1bdf6d Call git submodule before creating packages 2015-09-12 23:12:51 +09:00
13 changed files with 76 additions and 26 deletions

View File

@@ -27,9 +27,9 @@ if [ -z "$ANDROID_HOME" ]; then
echo 'No $ANDROID_HOME specified.' echo 'No $ANDROID_HOME specified.'
exit 1 exit 1
fi fi
PREFIX=$ANDROID_HOME/usr/local PREFIX="$ANDROID_HOME"/usr/local
TOOLCHAIN=$ANDROID_HOME/toolchain TOOLCHAIN="$ANDROID_HOME"/toolchain
PATH=$TOOLCHAIN/bin:$PATH PATH="$TOOLCHAIN"/bin:"$PATH"
./configure \ ./configure \
--disable-shared \ --disable-shared \
@@ -40,8 +40,8 @@ PATH=$TOOLCHAIN/bin:$PATH
--disable-python-bindings \ --disable-python-bindings \
--disable-examples \ --disable-examples \
--enable-werror \ --enable-werror \
CC=clang \ CC="$TOOLCHAIN"/bin/clang \
CXX=clang++ \ CXX="$TOOLCHAIN"/bin/clang++ \
CPPFLAGS="-fPIE -I$PREFIX/include" \ CPPFLAGS="-fPIE -I$PREFIX/include" \
PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \ PKG_CONFIG_LIBDIR="$PREFIX/lib/pkgconfig" \
LDFLAGS="-fPIE -pie -L$PREFIX/lib" LDFLAGS="-fPIE -pie -L$PREFIX/lib"

View File

@@ -25,7 +25,7 @@ dnl Do not change user variables!
dnl http://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html dnl http://www.gnu.org/software/automake/manual/html_node/Flag-Variables-Ordering.html
AC_PREREQ(2.61) AC_PREREQ(2.61)
AC_INIT([nghttp2], [1.3.1], [t-tujikawa@users.sourceforge.net]) AC_INIT([nghttp2], [1.3.2], [t-tujikawa@users.sourceforge.net])
AC_CONFIG_AUX_DIR([.]) AC_CONFIG_AUX_DIR([.])
AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_MACRO_DIR([m4])
AC_CONFIG_HEADERS([config.h]) AC_CONFIG_HEADERS([config.h])
@@ -47,7 +47,7 @@ m4_ifdef([AM_SILENT_RULES], [AM_SILENT_RULES([yes])])
dnl See versioning rule: dnl See versioning rule:
dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html dnl http://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html
AC_SUBST(LT_CURRENT, 15) AC_SUBST(LT_CURRENT, 15)
AC_SUBST(LT_REVISION, 1) AC_SUBST(LT_REVISION, 2)
AC_SUBST(LT_AGE, 1) AC_SUBST(LT_AGE, 1)
major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"` major=`echo $PACKAGE_VERSION |cut -d. -f1 | sed -e "s/[^0-9]//g"`

View File

@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "H2LOAD" "1" "September 12, 2015" "1.3.1" "nghttp2" .TH "H2LOAD" "1" "September 16, 2015" "1.3.2" "nghttp2"
.SH NAME .SH NAME
h2load \- HTTP/2 benchmarking tool h2load \- HTTP/2 benchmarking tool
. .

View File

@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "NGHTTP" "1" "September 12, 2015" "1.3.1" "nghttp2" .TH "NGHTTP" "1" "September 16, 2015" "1.3.2" "nghttp2"
.SH NAME .SH NAME
nghttp \- HTTP/2 experimental client nghttp \- HTTP/2 experimental client
. .

View File

@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "NGHTTPD" "1" "September 12, 2015" "1.3.1" "nghttp2" .TH "NGHTTPD" "1" "September 16, 2015" "1.3.2" "nghttp2"
.SH NAME .SH NAME
nghttpd \- HTTP/2 experimental server nghttpd \- HTTP/2 experimental server
. .

View File

@@ -1,6 +1,6 @@
.\" Man page generated from reStructuredText. .\" Man page generated from reStructuredText.
. .
.TH "NGHTTPX" "1" "September 12, 2015" "1.3.1" "nghttp2" .TH "NGHTTPX" "1" "September 16, 2015" "1.3.2" "nghttp2"
.SH NAME .SH NAME
nghttpx \- HTTP/2 experimental proxy nghttpx \- HTTP/2 experimental proxy
. .

View File

@@ -1733,14 +1733,6 @@ static int session_prep_frame(nghttp2_session *session,
aux_data = &item->aux_data.headers; aux_data = &item->aux_data.headers;
estimated_payloadlen = session_estimate_headers_payload(
session, frame->headers.nva, frame->headers.nvlen,
NGHTTP2_PRIORITY_SPECLEN);
if (estimated_payloadlen > NGHTTP2_MAX_HEADERSLEN) {
return NGHTTP2_ERR_FRAME_SIZE_ERROR;
}
if (frame->headers.cat == NGHTTP2_HCAT_REQUEST) { if (frame->headers.cat == NGHTTP2_HCAT_REQUEST) {
/* initial HEADERS, which opens stream */ /* initial HEADERS, which opens stream */
nghttp2_stream *stream; nghttp2_stream *stream;
@@ -1754,6 +1746,14 @@ static int session_prep_frame(nghttp2_session *session,
return NGHTTP2_ERR_NOMEM; return NGHTTP2_ERR_NOMEM;
} }
estimated_payloadlen = session_estimate_headers_payload(
session, frame->headers.nva, frame->headers.nvlen,
NGHTTP2_PRIORITY_SPECLEN);
if (estimated_payloadlen > NGHTTP2_MAX_HEADERSLEN) {
return NGHTTP2_ERR_FRAME_SIZE_ERROR;
}
rv = session_predicate_request_headers_send(session, item); rv = session_predicate_request_headers_send(session, item);
if (rv != 0) { if (rv != 0) {
return rv; return rv;
@@ -1765,6 +1765,14 @@ static int session_prep_frame(nghttp2_session *session,
} else { } else {
nghttp2_stream *stream; nghttp2_stream *stream;
estimated_payloadlen = session_estimate_headers_payload(
session, frame->headers.nva, frame->headers.nvlen,
NGHTTP2_PRIORITY_SPECLEN);
if (estimated_payloadlen > NGHTTP2_MAX_HEADERSLEN) {
return NGHTTP2_ERR_FRAME_SIZE_ERROR;
}
stream = nghttp2_session_get_stream(session, frame->hd.stream_id); stream = nghttp2_session_get_stream(session, frame->hd.stream_id);
if (session_predicate_push_response_headers_send(session, stream) == if (session_predicate_push_response_headers_send(session, stream) ==

View File

@@ -205,8 +205,7 @@ void nghttp2_stream_reschedule(nghttp2_stream *stream) {
dep_stream->descendant_last_cycle = 0; dep_stream->descendant_last_cycle = 0;
stream->cycle = 0; stream->cycle = 0;
} else { } else {
dep_stream->descendant_last_cycle = dep_stream->descendant_last_cycle = stream->cycle;
nghttp2_max(dep_stream->descendant_last_cycle, stream->cycle);
stream->cycle = stream->cycle =
stream_next_cycle(stream, dep_stream->descendant_last_cycle); stream_next_cycle(stream, dep_stream->descendant_last_cycle);

View File

@@ -3,6 +3,8 @@
TAG=$1 TAG=$1
PREV_TAG=$2 PREV_TAG=$2
git submodule update --init
git checkout refs/tags/$TAG git checkout refs/tags/$TAG
git log --pretty=fuller --date=short refs/tags/$PREV_TAG..HEAD > ChangeLog git log --pretty=fuller --date=short refs/tags/$PREV_TAG..HEAD > ChangeLog

View File

@@ -1860,6 +1860,28 @@ int before_frame_send_callback(nghttp2_session *session,
} // namespace } // namespace
namespace {
int on_frame_not_send_callback(nghttp2_session *session,
const nghttp2_frame *frame, int lib_error_code,
void *user_data) {
if (frame->hd.type != NGHTTP2_HEADERS ||
frame->headers.cat != NGHTTP2_HCAT_REQUEST) {
return 0;
}
auto req = static_cast<Request *>(
nghttp2_session_get_stream_user_data(session, frame->hd.stream_id));
if (!req) {
return 0;
}
std::cerr << "[ERROR] request " << req->uri
<< " failed: " << nghttp2_strerror(lib_error_code) << std::endl;
return 0;
}
} // namespace
namespace { namespace {
int on_stream_close_callback(nghttp2_session *session, int32_t stream_id, int on_stream_close_callback(nghttp2_session *session, int32_t stream_id,
uint32_t error_code, void *user_data) { uint32_t error_code, void *user_data) {
@@ -2212,6 +2234,9 @@ int run(char **uris, int n) {
nghttp2_session_callbacks_set_before_frame_send_callback( nghttp2_session_callbacks_set_before_frame_send_callback(
callbacks, before_frame_send_callback); callbacks, before_frame_send_callback);
nghttp2_session_callbacks_set_on_frame_not_send_callback(
callbacks, on_frame_not_send_callback);
nghttp2_session_callbacks_set_send_callback(callbacks, send_callback); nghttp2_session_callbacks_set_send_callback(callbacks, send_callback);
if (config.padding) { if (config.padding) {

View File

@@ -912,8 +912,9 @@ int event_loop() {
// After that, we drop the root privileges if needed. // After that, we drop the root privileges if needed.
drop_privileges(); drop_privileges();
#ifndef NOTHREADS
int rv; int rv;
#ifndef NOTHREADS
sigset_t signals; sigset_t signals;
sigemptyset(&signals); sigemptyset(&signals);
sigaddset(&signals, REOPEN_LOG_SIGNAL); sigaddset(&signals, REOPEN_LOG_SIGNAL);

View File

@@ -146,7 +146,14 @@ int shrpx_bio_write(BIO *b, const char *buf, int len) {
if (conn->tls.initial_handshake_done) { if (conn->tls.initial_handshake_done) {
// After handshake finished, send |buf| of length |len| to the // After handshake finished, send |buf| of length |len| to the
// socket directly. // socket directly.
assert(wbuf.rleft() == 0);
// Only when TLS session was prematurely ended before server sent
// all handshake message, this condition is true. This could be
// alert from SSL_shutdown(). Since connection is already down,
// just return error.
if (wbuf.rleft()) {
return -1;
}
auto nwrite = conn->write_clear(buf, len); auto nwrite = conn->write_clear(buf, len);
if (nwrite < 0) { if (nwrite < 0) {
return -1; return -1;

View File

@@ -1321,8 +1321,9 @@ int Http2Upstream::on_downstream_header_complete(Downstream *downstream) {
size_t nheader = downstream->get_response_headers().size(); size_t nheader = downstream->get_response_headers().size();
auto nva = std::vector<nghttp2_nv>(); auto nva = std::vector<nghttp2_nv>();
// 3 means :status and possible server and via header field. // 4 means :status and possible server, via and x-http2-push header
nva.reserve(nheader + 3 + get_config()->add_response_headers.size()); // field.
nva.reserve(nheader + 4 + get_config()->add_response_headers.size());
std::string via_value; std::string via_value;
auto response_status = util::utos(downstream->get_response_http_status()); auto response_status = util::utos(downstream->get_response_http_status());
nva.push_back(http2::make_nv_ls(":status", response_status)); nva.push_back(http2::make_nv_ls(":status", response_status));
@@ -1376,6 +1377,12 @@ int Http2Upstream::on_downstream_header_complete(Downstream *downstream) {
nva.push_back(http2::make_nv(p.first, p.second)); nva.push_back(http2::make_nv(p.first, p.second));
} }
if (downstream->get_stream_id() % 2 == 0) {
// This header field is basically for human on client side to
// figure out that the resource is pushed.
nva.push_back(http2::make_nv_ll("x-http2-push", "1"));
}
if (LOG_ENABLED(INFO)) { if (LOG_ENABLED(INFO)) {
log_response_headers(downstream, nva); log_response_headers(downstream, nva);
} }
@@ -1648,7 +1655,8 @@ int Http2Upstream::submit_push_promise(const std::string &scheme,
Downstream *downstream) { Downstream *downstream) {
int rv; int rv;
std::vector<nghttp2_nv> nva; std::vector<nghttp2_nv> nva;
nva.reserve(downstream->get_request_headers().size()); // 4 for :method, :scheme, :path and :authority
nva.reserve(4 + downstream->get_request_headers().size());
// juse use "GET" for now // juse use "GET" for now
nva.push_back(http2::make_nv_ll(":method", "GET")); nva.push_back(http2::make_nv_ll(":method", "GET"));