Split CTCPListener from CListener

This splits up CListener into a TCP-specific class and a general class.
The intention is to later add another class inheriting from CListener
that listens on unix sockets.

Signed-off-by: Uli Schlachter <psychon@znc.in>
This commit is contained in:
Uli Schlachter
2017-01-12 10:45:54 +01:00
parent b68fbc64a2
commit 35da5784ca
5 changed files with 93 additions and 55 deletions
+33 -15
View File
@@ -29,27 +29,19 @@ class CListener {
public:
typedef enum { ACCEPT_IRC, ACCEPT_HTTP, ACCEPT_ALL } EAcceptType;
CListener(unsigned short uPort, const CString& sBindHost,
const CString& sURIPrefix, bool bSSL, EAddrType eAddr,
EAcceptType eAccept)
CListener(const CString& sURIPrefix, bool bSSL, EAcceptType eAccept)
: m_bSSL(bSSL),
m_eAddr(eAddr),
m_uPort(uPort),
m_sBindHost(sBindHost),
m_sURIPrefix(sURIPrefix),
m_pListener(nullptr),
m_eAcceptType(eAccept) {}
~CListener();
virtual ~CListener();
CListener(const CListener&) = delete;
CListener& operator=(const CListener&) = delete;
// Getters
bool IsSSL() const { return m_bSSL; }
EAddrType GetAddrType() const { return m_eAddr; }
unsigned short GetPort() const { return m_uPort; }
const CString& GetBindHost() const { return m_sBindHost; }
CRealListener* GetRealListener() const { return m_pListener; }
const CString& GetURIPrefix() const { return m_sURIPrefix; }
EAcceptType GetAcceptType() const { return m_eAcceptType; }
@@ -59,21 +51,47 @@ class CListener {
// except this one, so don't add other setters!
void SetAcceptType(EAcceptType eType) { m_eAcceptType = eType; }
bool Listen();
virtual bool Listen() = 0;
void ResetRealListener();
CConfig ToConfig() const;
virtual CConfig ToConfig() const = 0;
private:
protected:
bool m_bSSL;
EAddrType m_eAddr;
unsigned short m_uPort;
CString m_sBindHost;
CString m_sURIPrefix;
CRealListener* m_pListener;
EAcceptType m_eAcceptType;
};
class CTCPListener : public CListener {
public:
CTCPListener(unsigned short uPort, const CString& sBindHost,
const CString& sURIPrefix, bool bSSL, EAddrType eAddr,
EAcceptType eAccept)
: CListener(sURIPrefix, bSSL, eAccept),
m_eAddr(eAddr),
m_uPort(uPort),
m_sBindHost(sBindHost) {}
~CTCPListener();
CTCPListener(const CTCPListener&) = delete;
CTCPListener& operator=(const CTCPListener&) = delete;
// Getters
EAddrType GetAddrType() const { return m_eAddr; }
unsigned short GetPort() const { return m_uPort; }
const CString& GetBindHost() const { return m_sBindHost; }
// !Getters
bool Listen() override;
CConfig ToConfig() const override;
protected:
EAddrType m_eAddr;
unsigned short m_uPort;
CString m_sBindHost;
};
class CRealListener : public CZNCSock {
public:
CRealListener(CListener& listener) : CZNCSock(), m_Listener(listener) {}