Unverified Commit e0c7c07a authored by Dennis Jenkins's avatar Dennis Jenkins Committed by GitHub

Merge pull request #698 from hyperxor/code_simplification_and_small_fix

Code simplification in Peer class and small fix in Listener
parents ea1ed4c0 496e6c92
...@@ -142,6 +142,7 @@ public: ...@@ -142,6 +142,7 @@ public:
Address &operator=(Address &&other) = default; Address &operator=(Address &&other) = default;
static Address fromUnix(struct sockaddr *addr); static Address fromUnix(struct sockaddr *addr);
static Address fromUnix(struct sockaddr_in *addr);
std::string host() const; std::string host() const;
Port port() const; Port port() const;
......
...@@ -36,14 +36,12 @@ class Peer { ...@@ -36,14 +36,12 @@ class Peer {
public: public:
friend class Transport; friend class Transport;
Peer();
explicit Peer(const Address &addr);
~Peer(); ~Peer();
static std::shared_ptr<Peer> Create(Fd fd, const Address &addr);
const Address &address() const; const Address &address() const;
const std::string &hostname(); const std::string &hostname();
void associateFd(Fd fd);
Fd fd() const; Fd fd() const;
void associateSSL(void *ssl); void associateSSL(void *ssl);
...@@ -58,20 +56,23 @@ public: ...@@ -58,20 +56,23 @@ public:
Async::Promise<ssize_t> send(const RawBuffer &buffer, int flags = 0); Async::Promise<ssize_t> send(const RawBuffer &buffer, int flags = 0);
protected:
Peer(Fd fd, const Address &addr);
private: private:
void associateTransport(Transport *transport); void associateTransport(Transport *transport);
Transport *transport() const; Transport *transport() const;
Transport *transport_; Transport *transport_ = nullptr;
Fd fd_ = -1;
Address addr; Address addr;
Fd fd_;
std::string hostname_; std::string hostname_;
std::unordered_map<std::string, std::unordered_map<std::string,
std::shared_ptr<Pistache::Http::Private::ParserBase>> std::shared_ptr<Pistache::Http::Private::ParserBase>>
data_; data_;
void *ssl_; void *ssl_ = nullptr;
}; };
std::ostream &operator<<(std::ostream &os, Peer &peer); std::ostream &operator<<(std::ostream &os, Peer &peer);
......
...@@ -248,6 +248,10 @@ Address Address::fromUnix(struct sockaddr *addr) { ...@@ -248,6 +248,10 @@ Address Address::fromUnix(struct sockaddr *addr) {
throw Error("Not an IP socket"); throw Error("Not an IP socket");
} }
Address Address::fromUnix(struct sockaddr_in *addr) {
return Address::fromUnix(reinterpret_cast<struct sockaddr *>(addr));
}
std::string Address::host() const { return ip_.toString(); } std::string Address::host() const { return ip_.toString(); }
Port Address::port() const { return port_; } Port Address::port() const { return port_; }
......
...@@ -18,10 +18,14 @@ ...@@ -18,10 +18,14 @@
namespace Pistache { namespace Pistache {
namespace Tcp { namespace Tcp {
Peer::Peer() : transport_(nullptr), fd_(-1), ssl_(NULL) {} namespace {
struct ConcretePeer : Peer {
ConcretePeer() = default;
ConcretePeer(Fd fd, const Address &addr) : Peer(fd, addr) {}
};
} // namespace
Peer::Peer(const Address &addr) Peer::Peer(Fd fd, const Address &addr) : fd_(fd), addr(addr) {}
: transport_(nullptr), addr(addr), fd_(-1), ssl_(NULL) {}
Peer::~Peer() { Peer::~Peer() {
#ifdef PISTACHE_USE_SSL #ifdef PISTACHE_USE_SSL
...@@ -30,6 +34,10 @@ Peer::~Peer() { ...@@ -30,6 +34,10 @@ Peer::~Peer() {
#endif /* PISTACHE_USE_SSL */ #endif /* PISTACHE_USE_SSL */
} }
std::shared_ptr<Peer> Peer::Create(Fd fd, const Address &addr) {
return std::make_shared<ConcretePeer>(fd, addr);
}
const Address &Peer::address() const { return addr; } const Address &Peer::address() const { return addr; }
const std::string &Peer::hostname() { const std::string &Peer::hostname() {
...@@ -52,8 +60,6 @@ const std::string &Peer::hostname() { ...@@ -52,8 +60,6 @@ const std::string &Peer::hostname() {
return hostname_; return hostname_;
} }
void Peer::associateFd(int fd) { fd_ = fd; }
#ifdef PISTACHE_USE_SSL #ifdef PISTACHE_USE_SSL
void Peer::associateSSL(void *ssl) { ssl_ = ssl; } void Peer::associateSSL(void *ssl) { ssl_ = ssl; }
......
...@@ -316,8 +316,10 @@ void Listener::handleNewConnection() { ...@@ -316,8 +316,10 @@ void Listener::handleNewConnection() {
if (this->useSSL_) { if (this->useSSL_) {
ssl = SSL_new((SSL_CTX *)this->ssl_ctx_); ssl = SSL_new((SSL_CTX *)this->ssl_ctx_);
if (ssl == NULL) if (ssl == NULL) {
close(client_fd);
throw std::runtime_error("Cannot create SSL connection"); throw std::runtime_error("Cannot create SSL connection");
}
SSL_set_fd(ssl, client_fd); SSL_set_fd(ssl, client_fd);
SSL_set_accept_state(ssl); SSL_set_accept_state(ssl);
...@@ -334,8 +336,7 @@ void Listener::handleNewConnection() { ...@@ -334,8 +336,7 @@ void Listener::handleNewConnection() {
make_non_blocking(client_fd); make_non_blocking(client_fd);
auto peer = auto peer =
std::make_shared<Peer>(Address::fromUnix((struct sockaddr *)&peer_addr)); Peer::Create(client_fd, Address::fromUnix(&peer_addr));
peer->associateFd(client_fd);
#ifdef PISTACHE_USE_SSL #ifdef PISTACHE_USE_SSL
if (this->useSSL_) if (this->useSSL_)
......
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