nghttp: Code cleanup

This commit is contained in:
Tatsuhiro Tsujikawa 2013-09-03 23:09:56 +09:00
parent 16076cbc2f
commit bb7361cd9b
1 changed files with 37 additions and 41 deletions

View File

@ -237,8 +237,8 @@ struct Request {
const nghttp2_data_provider *data_prd, int64_t data_length,
int level = 0)
: uri(uri), u(u),
inflater(0), html_parser(0), data_prd(data_prd),
data_length(data_length),data_offset(0),
inflater(nullptr), html_parser(nullptr), data_prd(data_prd),
data_length(data_length), data_offset(0),
level(level)
{}
@ -400,7 +400,7 @@ struct HttpClient {
std::string hostport;
SessionStat stat;
// Used for parse the HTTP upgrade response from server
http_parser *htp;
std::unique_ptr<http_parser> htp;
// true if the response message of HTTP Upgrade request is fully
// received. It is not relevant the upgrade succeeds, or not.
bool upgrade_response_complete;
@ -422,7 +422,6 @@ struct HttpClient {
bev(nullptr),
state(STATE_IDLE),
complete(0),
htp(nullptr),
upgrade_response_complete(false),
upgrade_response_status_code(0)
{}
@ -430,7 +429,6 @@ struct HttpClient {
~HttpClient()
{
disconnect();
delete htp;
}
bool need_upgrade() const
@ -460,7 +458,7 @@ struct HttpClient {
host_string = host.c_str();
}
if (!SSL_set_tlsext_host_name(ssl, host_string)) {
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
std::cerr << ERR_error_string(ERR_get_error(), nullptr) << std::endl;
return -1;
}
bev = bufferevent_openssl_socket_new(evbase, -1, ssl,
@ -478,8 +476,8 @@ struct HttpClient {
}
bufferevent_enable(bev, EV_READ);
if(need_upgrade()) {
htp = new http_parser();
http_parser_init(htp, HTTP_RESPONSE);
htp = util::make_unique<http_parser>();
http_parser_init(htp.get(), HTTP_RESPONSE);
htp->data = this;
bufferevent_setcb(bev, upgrade_readcb, nullptr, eventcb, this);
} else {
@ -538,13 +536,13 @@ struct HttpClient {
req += " HTTP/1.1\r\n"
"Host: ";
req += hostport;
req += "\r\n";
req += "Connection: Upgrade, HTTP2-Settings\r\n"
req += "\r\n"
"Connection: Upgrade, HTTP2-Settings\r\n"
"Upgrade: " NGHTTP2_PROTO_VERSION_ID "\r\n"
"HTTP2-Settings: ";
req += token68;
req += "\r\n";
req += "Accept: */*\r\n"
req += "\r\n"
"Accept: */*\r\n"
"User-Agent: nghttp2/" NGHTTP2_VERSION "\r\n"
"\r\n";
bufferevent_write(bev, req.c_str(), req.size());
@ -565,7 +563,7 @@ struct HttpClient {
return 0;
}
auto mem = evbuffer_pullup(input, -1);
auto nread = http_parser_execute(htp, &htp_hooks,
auto nread = http_parser_execute(htp.get(), &htp_hooks,
reinterpret_cast<const char*>(mem),
inputlen);
if(config.verbose) {
@ -573,7 +571,7 @@ struct HttpClient {
}
evbuffer_drain(input, nread);
auto htperr = HTTP_PARSER_ERRNO(htp);
auto htperr = HTTP_PARSER_ERRNO(htp.get());
if(htperr == HPE_OK) {
if(upgrade_response_complete) {
if(config.verbose) {
@ -702,7 +700,7 @@ struct HttpClient {
int sendcb(const uint8_t *data, size_t len)
{
int rv;
evbuffer *output = bufferevent_get_output(bev);
auto output = bufferevent_get_output(bev);
// Check buffer length and return WOULDBLOCK if it is large enough.
if(evbuffer_get_length(output) > config.output_upper_thres) {
return NGHTTP2_ERR_WOULDBLOCK;
@ -719,7 +717,7 @@ struct HttpClient {
int recvcb(uint8_t *buf, size_t len)
{
evbuffer *input = bufferevent_get_input(bev);
auto input = bufferevent_get_input(bev);
int nread = evbuffer_remove(input, buf, len);
if(nread == -1) {
return NGHTTP2_ERR_CALLBACK_FAILURE;
@ -866,15 +864,13 @@ void submit_request(HttpClient *client,
std::string content_length_str;
if(req->data_prd) {
std::stringstream ss;
ss << req->data_length;
content_length_str = ss.str();
content_length_str = std::to_string(req->data_length);
nv[pos++] = "content-length";
nv[pos++] = content_length_str.c_str();
}
while( i != end ) {
const char *key = (*i).first.c_str();
const char *value = (*i).second.c_str();
auto key = (*i).first.c_str();
auto value = (*i).second.c_str();
if ( util::strieq( key, "accept" ) ) {
nv[POS_ACCEPT*2+1] = value;
}
@ -908,8 +904,8 @@ void update_html_parser(HttpClient *client, Request *req,
req->update_html_parser(data, len, fin);
for(size_t i = 0; i < req->html_parser->get_links().size(); ++i) {
const std::string& raw_uri = req->html_parser->get_links()[i];
std::string uri = strip_fragment(raw_uri.c_str());
const auto& raw_uri = req->html_parser->get_links()[i];
auto uri = strip_fragment(raw_uri.c_str());
http_parser_url u;
if(http_parser_parse_url(uri.c_str(), uri.size(), 0, &u) == 0 &&
fieldeq(uri.c_str(), u, req->uri.c_str(), req->u, UF_SCHEMA) &&
@ -934,10 +930,10 @@ int on_data_chunk_recv_callback
(nghttp2_session *session, uint8_t flags, int32_t stream_id,
const uint8_t *data, size_t len, void *user_data)
{
HttpClient *client = get_session(user_data);
auto client = get_session(user_data);
auto itr = client->streams.find(stream_id);
if(itr != client->streams.end()) {
Request *req = (*itr).second;
auto req = (*itr).second;
if(req->inflater) {
while(len > 0) {
const size_t MAX_OUTLEN = 4096;
@ -970,9 +966,9 @@ namespace {
void check_stream_id(nghttp2_session *session, int32_t stream_id,
void *user_data)
{
HttpClient *client = get_session(user_data);
Request *req = (Request*)nghttp2_session_get_stream_user_data(session,
stream_id);
auto client = get_session(user_data);
auto req = (Request*)nghttp2_session_get_stream_user_data(session,
stream_id);
client->streams[stream_id] = req;
req->record_syn_stream_time();
}
@ -1056,14 +1052,14 @@ int on_stream_close_callback
(nghttp2_session *session, int32_t stream_id, nghttp2_error_code error_code,
void *user_data)
{
HttpClient *client = get_session(user_data);
auto client = get_session(user_data);
auto itr = client->streams.find(stream_id);
if(itr != client->streams.end()) {
update_html_parser(client, (*itr).second, 0, 0, 1);
update_html_parser(client, (*itr).second, nullptr, 0, 1);
(*itr).second->record_complete_time();
++client->complete;
if(client->all_requests_processed()) {
nghttp2_submit_goaway(session, NGHTTP2_NO_ERROR, NULL, 0);
nghttp2_submit_goaway(session, NGHTTP2_NO_ERROR, nullptr, 0);
}
}
return 0;
@ -1125,9 +1121,9 @@ int client_select_next_proto_cb(SSL* ssl,
<< std::endl;
} else {
if(config.verbose) {
std::cout << " NPN selected the protocol: "
<< std::string((const char*)*out, (size_t)*outlen)
<< std::endl;
std::cout << " NPN selected the protocol: ";
std::cout.write(reinterpret_cast<const char*>(*out), (size_t)*outlen);
std::cout << std::endl;
}
}
return SSL_TLSEXT_ERR_OK;
@ -1177,7 +1173,7 @@ namespace {
void eventcb(bufferevent *bev, short events, void *ptr)
{
int rv;
HttpClient *client = reinterpret_cast<HttpClient*>(ptr);
auto client = reinterpret_cast<HttpClient*>(ptr);
if(events & BEV_EVENT_CONNECTED) {
client->state = STATE_CONNECTED;
int fd = bufferevent_getfd(bev);
@ -1266,7 +1262,7 @@ int communicate(const std::string& scheme, const std::string& host,
if(!config.keyfile.empty()) {
if(SSL_CTX_use_PrivateKey_file(ssl_ctx, config.keyfile.c_str(),
SSL_FILETYPE_PEM) != 1) {
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
std::cerr << ERR_error_string(ERR_get_error(), nullptr) << std::endl;
result = -1;
goto fin;
}
@ -1274,7 +1270,7 @@ int communicate(const std::string& scheme, const std::string& host,
if(!config.certfile.empty()) {
if(SSL_CTX_use_certificate_chain_file(ssl_ctx,
config.certfile.c_str()) != 1) {
std::cerr << ERR_error_string(ERR_get_error(), 0) << std::endl;
std::cerr << ERR_error_string(ERR_get_error(), nullptr) << std::endl;
result = -1;
goto fin;
}
@ -1383,7 +1379,7 @@ int run(char **uris, int n)
requests;
for(int i = 0; i < n; ++i) {
http_parser_url u;
std::string uri = strip_fragment(uris[i]);
auto uri = strip_fragment(uris[i]);
if(http_parser_parse_url(uri.c_str(), uri.size(), 0, &u) == 0 &&
has_uri_field(u, UF_SCHEMA)) {
uint16_t port = has_uri_field(u, UF_PORT) ?
@ -1533,7 +1529,7 @@ int main(int argc, char **argv)
break;
case 'w': {
errno = 0;
unsigned long int n = strtoul(optarg, 0, 10);
unsigned long int n = strtoul(optarg, nullptr, 10);
if(errno == 0 && n < 31) {
config.window_bits = n;
} else {
@ -1582,7 +1578,7 @@ int main(int argc, char **argv)
config.datafile = strcmp("-", optarg) == 0 ? "/dev/stdin" : optarg;
break;
case 'm':
config.multiply = strtoul(optarg, 0, 10);
config.multiply = strtoul(optarg, nullptr, 10);
break;
case '?':
exit(EXIT_FAILURE);
@ -1608,7 +1604,7 @@ int main(int argc, char **argv)
struct sigaction act;
memset(&act, 0, sizeof(struct sigaction));
act.sa_handler = SIG_IGN;
sigaction(SIGPIPE, &act, 0);
sigaction(SIGPIPE, &act, nullptr);
SSL_load_error_strings();
SSL_library_init();
reset_timer();