shrpx_client_handler: Use std::unique_ptr for upstream_
This commit is contained in:
parent
ab39ae849f
commit
3c1cad9272
|
@ -34,10 +34,12 @@
|
||||||
#include "shrpx_http_downstream_connection.h"
|
#include "shrpx_http_downstream_connection.h"
|
||||||
#include "shrpx_spdy_downstream_connection.h"
|
#include "shrpx_spdy_downstream_connection.h"
|
||||||
#include "shrpx_accesslog.h"
|
#include "shrpx_accesslog.h"
|
||||||
|
|
||||||
#ifdef HAVE_SPDYLAY
|
#ifdef HAVE_SPDYLAY
|
||||||
#include "shrpx_spdy_upstream.h"
|
#include "shrpx_spdy_upstream.h"
|
||||||
#endif // HAVE_SPDYLAY
|
#endif // HAVE_SPDYLAY
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
using namespace nghttp2;
|
||||||
|
|
||||||
namespace shrpx {
|
namespace shrpx {
|
||||||
|
|
||||||
|
@ -214,7 +216,6 @@ ClientHandler::ClientHandler(bufferevent *bev, int fd, SSL *ssl,
|
||||||
: bev_(bev),
|
: bev_(bev),
|
||||||
fd_(fd),
|
fd_(fd),
|
||||||
ssl_(ssl),
|
ssl_(ssl),
|
||||||
upstream_(nullptr),
|
|
||||||
ipaddr_(ipaddr),
|
ipaddr_(ipaddr),
|
||||||
should_close_after_write_(false),
|
should_close_after_write_(false),
|
||||||
spdy_(nullptr),
|
spdy_(nullptr),
|
||||||
|
@ -231,7 +232,7 @@ ClientHandler::ClientHandler(bufferevent *bev, int fd, SSL *ssl,
|
||||||
// For non-TLS version, first create HttpsUpstream. It may be
|
// For non-TLS version, first create HttpsUpstream. It may be
|
||||||
// upgraded to HTTP/2.0 through HTTP Upgrade or direct HTTP/2.0
|
// upgraded to HTTP/2.0 through HTTP Upgrade or direct HTTP/2.0
|
||||||
// connection.
|
// connection.
|
||||||
upstream_ = new HttpsUpstream(this);
|
upstream_ = util::make_unique<HttpsUpstream>(this);
|
||||||
set_bev_cb(upstream_http1_connhd_readcb, nullptr, upstream_eventcb);
|
set_bev_cb(upstream_http1_connhd_readcb, nullptr, upstream_eventcb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -251,7 +252,6 @@ ClientHandler::~ClientHandler()
|
||||||
}
|
}
|
||||||
shutdown(fd_, SHUT_WR);
|
shutdown(fd_, SHUT_WR);
|
||||||
close(fd_);
|
close(fd_);
|
||||||
delete upstream_;
|
|
||||||
for(std::set<DownstreamConnection*>::iterator i = dconn_pool_.begin();
|
for(std::set<DownstreamConnection*>::iterator i = dconn_pool_.begin();
|
||||||
i != dconn_pool_.end(); ++i) {
|
i != dconn_pool_.end(); ++i) {
|
||||||
delete *i;
|
delete *i;
|
||||||
|
@ -263,7 +263,7 @@ ClientHandler::~ClientHandler()
|
||||||
|
|
||||||
Upstream* ClientHandler::get_upstream()
|
Upstream* ClientHandler::get_upstream()
|
||||||
{
|
{
|
||||||
return upstream_;
|
return upstream_.get();
|
||||||
}
|
}
|
||||||
|
|
||||||
bufferevent* ClientHandler::get_bev() const
|
bufferevent* ClientHandler::get_bev() const
|
||||||
|
@ -304,13 +304,13 @@ int ClientHandler::validate_next_proto()
|
||||||
if(proto == NGHTTP2_PROTO_VERSION_ID) {
|
if(proto == NGHTTP2_PROTO_VERSION_ID) {
|
||||||
set_bev_cb(upstream_http2_connhd_readcb, upstream_writecb,
|
set_bev_cb(upstream_http2_connhd_readcb, upstream_writecb,
|
||||||
upstream_eventcb);
|
upstream_eventcb);
|
||||||
upstream_ = new Http2Upstream(this);
|
upstream_ = util::make_unique<Http2Upstream>(this);
|
||||||
return 0;
|
return 0;
|
||||||
} else {
|
} else {
|
||||||
#ifdef HAVE_SPDYLAY
|
#ifdef HAVE_SPDYLAY
|
||||||
uint16_t version = spdylay_npn_get_version(next_proto, next_proto_len);
|
uint16_t version = spdylay_npn_get_version(next_proto, next_proto_len);
|
||||||
if(version) {
|
if(version) {
|
||||||
upstream_ = new SpdyUpstream(version, this);
|
upstream_ = util::make_unique<SpdyUpstream>(version, this);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif // HAVE_SPDYLAY
|
#endif // HAVE_SPDYLAY
|
||||||
|
@ -323,7 +323,7 @@ int ClientHandler::validate_next_proto()
|
||||||
if(LOG_ENABLED(INFO)) {
|
if(LOG_ENABLED(INFO)) {
|
||||||
CLOG(INFO, this) << "Use HTTP/1.1";
|
CLOG(INFO, this) << "Use HTTP/1.1";
|
||||||
}
|
}
|
||||||
upstream_ = new HttpsUpstream(this);
|
upstream_ = util::make_unique<HttpsUpstream>(this);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -425,20 +425,18 @@ void ClientHandler::set_left_connhd_len(size_t left)
|
||||||
|
|
||||||
void ClientHandler::direct_http2_upgrade()
|
void ClientHandler::direct_http2_upgrade()
|
||||||
{
|
{
|
||||||
delete upstream_;
|
upstream_= util::make_unique<Http2Upstream>(this);
|
||||||
upstream_= new Http2Upstream(this);
|
|
||||||
set_bev_cb(upstream_readcb, upstream_writecb, upstream_eventcb);
|
set_bev_cb(upstream_readcb, upstream_writecb, upstream_eventcb);
|
||||||
}
|
}
|
||||||
|
|
||||||
int ClientHandler::perform_http2_upgrade(HttpsUpstream *http)
|
int ClientHandler::perform_http2_upgrade(HttpsUpstream *http)
|
||||||
{
|
{
|
||||||
int rv;
|
int rv;
|
||||||
auto upstream = new Http2Upstream(this);
|
auto upstream = util::make_unique<Http2Upstream>(this);
|
||||||
if(upstream->upgrade_upstream(http) != 0) {
|
if(upstream->upgrade_upstream(http) != 0) {
|
||||||
delete upstream;
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
upstream_ = upstream;
|
upstream_ = std::move(upstream);
|
||||||
set_bev_cb(upstream_http2_connhd_readcb, upstream_writecb, upstream_eventcb);
|
set_bev_cb(upstream_http2_connhd_readcb, upstream_writecb, upstream_eventcb);
|
||||||
static char res[] = "HTTP/1.1 101 Switching Protocols\r\n"
|
static char res[] = "HTTP/1.1 101 Switching Protocols\r\n"
|
||||||
"Connection: Upgrade\r\n"
|
"Connection: Upgrade\r\n"
|
||||||
|
|
|
@ -28,6 +28,7 @@
|
||||||
#include "shrpx.h"
|
#include "shrpx.h"
|
||||||
|
|
||||||
#include <set>
|
#include <set>
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
#include <event.h>
|
#include <event.h>
|
||||||
#include <openssl/ssl.h>
|
#include <openssl/ssl.h>
|
||||||
|
@ -78,7 +79,7 @@ private:
|
||||||
bufferevent *bev_;
|
bufferevent *bev_;
|
||||||
int fd_;
|
int fd_;
|
||||||
SSL *ssl_;
|
SSL *ssl_;
|
||||||
Upstream *upstream_;
|
std::unique_ptr<Upstream> upstream_;
|
||||||
std::string ipaddr_;
|
std::string ipaddr_;
|
||||||
bool should_close_after_write_;
|
bool should_close_after_write_;
|
||||||
std::set<DownstreamConnection*> dconn_pool_;
|
std::set<DownstreamConnection*> dconn_pool_;
|
||||||
|
|
Loading…
Reference in New Issue