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:
Address &operator=(Address &&other) = default;
static Address fromUnix(struct sockaddr *addr);
static Address fromUnix(struct sockaddr_in *addr);
std::string host() const;
Port port() const;
......
......@@ -36,14 +36,12 @@ class Peer {
public:
friend class Transport;
Peer();
explicit Peer(const Address &addr);
~Peer();
static std::shared_ptr<Peer> Create(Fd fd, const Address &addr);
const Address &address() const;
const std::string &hostname();
void associateFd(Fd fd);
Fd fd() const;
void associateSSL(void *ssl);
......@@ -58,20 +56,23 @@ public:
Async::Promise<ssize_t> send(const RawBuffer &buffer, int flags = 0);
protected:
Peer(Fd fd, const Address &addr);
private:
void associateTransport(Transport *transport);
Transport *transport() const;
Transport *transport_;
Transport *transport_ = nullptr;
Fd fd_ = -1;
Address addr;
Fd fd_;
std::string hostname_;
std::unordered_map<std::string,
std::shared_ptr<Pistache::Http::Private::ParserBase>>
data_;
void *ssl_;
void *ssl_ = nullptr;
};
std::ostream &operator<<(std::ostream &os, Peer &peer);
......
......@@ -248,6 +248,10 @@ Address Address::fromUnix(struct sockaddr *addr) {
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(); }
Port Address::port() const { return port_; }
......
......@@ -18,10 +18,14 @@
namespace Pistache {
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)
: transport_(nullptr), addr(addr), fd_(-1), ssl_(NULL) {}
Peer::Peer(Fd fd, const Address &addr) : fd_(fd), addr(addr) {}
Peer::~Peer() {
#ifdef PISTACHE_USE_SSL
......@@ -30,6 +34,10 @@ Peer::~Peer() {
#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 std::string &Peer::hostname() {
......@@ -52,8 +60,6 @@ const std::string &Peer::hostname() {
return hostname_;
}
void Peer::associateFd(int fd) { fd_ = fd; }
#ifdef PISTACHE_USE_SSL
void Peer::associateSSL(void *ssl) { ssl_ = ssl; }
......
......@@ -316,8 +316,10 @@ void Listener::handleNewConnection() {
if (this->useSSL_) {
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");
}
SSL_set_fd(ssl, client_fd);
SSL_set_accept_state(ssl);
......@@ -334,8 +336,7 @@ void Listener::handleNewConnection() {
make_non_blocking(client_fd);
auto peer =
std::make_shared<Peer>(Address::fromUnix((struct sockaddr *)&peer_addr));
peer->associateFd(client_fd);
Peer::Create(client_fd, Address::fromUnix(&peer_addr));
#ifdef PISTACHE_USE_SSL
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