Add nghttp client backed by libevent

This commit is contained in:
Tatsuhiro Tsujikawa 2013-07-21 23:49:12 +09:00
parent 1dd21c1e30
commit 6bc7e7bd0b
5 changed files with 1347 additions and 6 deletions

View File

@ -35,7 +35,7 @@ AM_CXXFLAGS = -std=c++11
LDADD = $(top_builddir)/lib/libnghttp2.la
bin_PROGRAMS += spdycat
bin_PROGRAMS += spdycat nghttp
if ENABLE_SPDYD
bin_PROGRAMS += spdyd
@ -72,6 +72,10 @@ spdycat_SOURCES = ${HELPER_OBJECTS} ${HELPER_HFILES} spdycat.cc \
${HTML_PARSER_OBJECTS} ${HTML_PARSER_HFILES} \
http-parser/http_parser.c http-parser/http_parser.h
nghttp_SOURCES = ${HELPER_OBJECTS} ${HELPER_HFILES} nghttp.cc \
${HTML_PARSER_OBJECTS} ${HTML_PARSER_HFILES} \
http-parser/http_parser.c http-parser/http_parser.h
if ENABLE_SPDYD
SPDY_SERVER_OBJECTS = SpdyServer.cc
SPDY_SERVER_HFILES = SpdyServer.h

1322
src/nghttp.cc Normal file

File diff suppressed because it is too large Load Diff

View File

@ -486,10 +486,10 @@ void check_response_header
bool gzip = false;
for(size_t i = 0; i < frame->headers.nvlen; ++i) {
auto nv = &frame->headers.nva[i];
if(util::strieq("content-encoding", nv->name, nv->namelen) == 0) {
if(util::strieq("content-encoding", nv->name, nv->namelen)) {
gzip = util::strieq("gzip", nv->value, nv->valuelen) ||
util::strieq("deflate", nv->value, nv->valuelen);
} else if(util::strieq(":status", nv->name, nv->namelen) == 0) {
} else if(util::strieq(":status", nv->name, nv->namelen)) {
req->status.assign(nv->value, nv->value + nv->valuelen);
}
}

View File

@ -165,9 +165,9 @@ bool strieq(const char *a, const uint8_t *b, size_t bn)
if(!a || !b) {
return false;
}
size_t i;
for(i = 0; i < bn && *a && lowcase(*a) == lowcase(*b); ++a, ++b);
return !*a && i == bn;
const uint8_t *blast = b + bn;
for(; *a && lowcase(*a) == lowcase(*b); ++a, ++b);
return !*a && b == blast;
}
bool strifind(const char *a, const char *b)

View File

@ -32,6 +32,7 @@
#include <string>
#include <algorithm>
#include <sstream>
#include <memory>
namespace nghttp2 {
@ -360,6 +361,20 @@ std::string utos(T n)
return res;
}
template<typename T, typename... U>
typename std::enable_if<!std::is_array<T>::value, std::unique_ptr<T>>::type
make_unique(U&&... u)
{
return std::unique_ptr<T>(new T(std::forward<U>(u)...));
}
template<typename T>
typename std::enable_if<std::is_array<T>::value, std::unique_ptr<T>>::type
make_unique(size_t size)
{
return std::unique_ptr<T>(new typename std::remove_extent<T>::type[size]());
}
} // namespace util
} // namespace nghttp2