Unverified Commit 3e716b45 authored by Dennis Jenkins's avatar Dennis Jenkins Committed by GitHub

Merge pull request #699 from hyperxor/improve_peer_secured_api

Improve Peer SSL API and remove unnecessary code
parents e0c7c07a f3c4cf78
...@@ -39,13 +39,13 @@ public: ...@@ -39,13 +39,13 @@ public:
~Peer(); ~Peer();
static std::shared_ptr<Peer> Create(Fd fd, const Address &addr); static std::shared_ptr<Peer> Create(Fd fd, const Address &addr);
static std::shared_ptr<Peer> CreateSSL(Fd fd, const Address &addr, void *ssl);
const Address &address() const; const Address &address() const;
const std::string &hostname(); const std::string &hostname();
Fd fd() const; Fd fd() const;
void associateSSL(void *ssl); void *ssl() const;
void *ssl(void) const;
void putData(std::string name, void putData(std::string name,
std::shared_ptr<Pistache::Http::Private::ParserBase> data); std::shared_ptr<Pistache::Http::Private::ParserBase> data);
...@@ -57,7 +57,7 @@ public: ...@@ -57,7 +57,7 @@ public:
Async::Promise<ssize_t> send(const RawBuffer &buffer, int flags = 0); Async::Promise<ssize_t> send(const RawBuffer &buffer, int flags = 0);
protected: protected:
Peer(Fd fd, const Address &addr); Peer(Fd fd, const Address &addr, void *ssl);
private: private:
void associateTransport(Transport *transport); void associateTransport(Transport *transport);
......
...@@ -21,21 +21,26 @@ namespace Tcp { ...@@ -21,21 +21,26 @@ namespace Tcp {
namespace { namespace {
struct ConcretePeer : Peer { struct ConcretePeer : Peer {
ConcretePeer() = default; ConcretePeer() = default;
ConcretePeer(Fd fd, const Address &addr) : Peer(fd, addr) {} ConcretePeer(Fd fd, const Address &addr, void *ssl) : Peer(fd, addr, ssl) {}
}; };
} // namespace } // namespace
Peer::Peer(Fd fd, const Address &addr) : fd_(fd), addr(addr) {} Peer::Peer(Fd fd, const Address &addr, void *ssl)
: fd_(fd), addr(addr), ssl_(ssl) {}
Peer::~Peer() { Peer::~Peer() {
#ifdef PISTACHE_USE_SSL #ifdef PISTACHE_USE_SSL
if (ssl_) if (ssl_)
SSL_free((SSL *)ssl_); SSL_free(static_cast<SSL *>(ssl_));
#endif /* PISTACHE_USE_SSL */ #endif /* PISTACHE_USE_SSL */
} }
std::shared_ptr<Peer> Peer::Create(Fd fd, const Address &addr) { std::shared_ptr<Peer> Peer::Create(Fd fd, const Address &addr) {
return std::make_shared<ConcretePeer>(fd, addr); return std::make_shared<ConcretePeer>(fd, addr, nullptr);
}
std::shared_ptr<Peer> Peer::CreateSSL(Fd fd, const Address &addr, void *ssl) {
return std::make_shared<ConcretePeer>(fd, addr, ssl);
} }
const Address &Peer::address() const { return addr; } const Address &Peer::address() const { return addr; }
...@@ -60,11 +65,7 @@ const std::string &Peer::hostname() { ...@@ -60,11 +65,7 @@ const std::string &Peer::hostname() {
return hostname_; return hostname_;
} }
#ifdef PISTACHE_USE_SSL void *Peer::ssl() const { return ssl_; }
void Peer::associateSSL(void *ssl) { ssl_ = ssl; }
void *Peer::ssl(void) const { return ssl_; }
#endif /* PISTACHE_USE_SSL */
int Peer::fd() const { int Peer::fd() const {
if (fd_ == -1) { if (fd_ == -1) {
......
...@@ -165,13 +165,6 @@ void Transport::handlePeerDisconnection(const std::shared_ptr<Peer> &peer) { ...@@ -165,13 +165,6 @@ void Transport::handlePeerDisconnection(const std::shared_ptr<Peer> &peer) {
if (it == std::end(peers)) if (it == std::end(peers))
throw std::runtime_error("Could not find peer to erase"); throw std::runtime_error("Could not find peer to erase");
#ifdef PISTACHE_USE_SSL
if (peer->ssl() != NULL) {
SSL_free((SSL *)peer->ssl());
peer->associateSSL(NULL);
}
#endif /* PISTACHE_USE_SSL */
peers.erase(it->first); peers.erase(it->first);
{ {
......
...@@ -335,13 +335,12 @@ void Listener::handleNewConnection() { ...@@ -335,13 +335,12 @@ void Listener::handleNewConnection() {
make_non_blocking(client_fd); make_non_blocking(client_fd);
auto peer = std::shared_ptr<Peer> peer;
Peer::Create(client_fd, Address::fromUnix(&peer_addr)); if (this->useSSL_) {
peer = Peer::CreateSSL(client_fd, Address::fromUnix(&peer_addr), ssl);
#ifdef PISTACHE_USE_SSL } else {
if (this->useSSL_) peer = Peer::Create(client_fd, Address::fromUnix(&peer_addr));
peer->associateSSL(ssl); }
#endif /* PISTACHE_USE_SSL */
dispatchPeer(peer); dispatchPeer(peer);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment