mirror of
https://github.com/XRPLF/rippled.git
synced 2025-11-19 10:35:50 +00:00
97 lines
2.3 KiB
C++
97 lines
2.3 KiB
C++
//------------------------------------------------------------------------------
|
|
/*
|
|
Copyright (c) 2011-2013, OpenCoin, Inc.
|
|
*/
|
|
//==============================================================================
|
|
|
|
#ifndef RIPPLE_MULTISOCKET_H_INCLUDED
|
|
#define RIPPLE_MULTISOCKET_H_INCLUDED
|
|
|
|
/** A Socket that can handshake with multiple protocols.
|
|
*/
|
|
class MultiSocket : public Socket
|
|
{
|
|
public:
|
|
// immutable flags
|
|
struct Flag
|
|
{
|
|
enum Bit
|
|
{
|
|
peer = 0, // no handshaking. remaining flags ignored.
|
|
client_role = 1, // operate in client role
|
|
server_role = 2, // operate in server role
|
|
|
|
proxy = 4, // client: will send PROXY handshake
|
|
// server: PROXY handshake required
|
|
|
|
ssl = 8, // client: will use ssl
|
|
// server: will allow, but not require ssl
|
|
|
|
ssl_required = 16 // client: ignored
|
|
// server: will require ssl (ignores ssl flag)
|
|
};
|
|
|
|
Flag (int flags = 0) noexcept
|
|
: m_flags (flags)
|
|
{
|
|
}
|
|
|
|
Flag& operator= (int mask) noexcept
|
|
{
|
|
m_flags = mask;
|
|
return *this;
|
|
}
|
|
|
|
bool operator== (Flag const& other) const noexcept
|
|
{
|
|
return m_flags == other.m_flags;
|
|
}
|
|
|
|
inline bool set (int mask) const noexcept
|
|
{
|
|
return (m_flags & mask) == mask;
|
|
}
|
|
|
|
inline bool any_set (int mask) const noexcept
|
|
{
|
|
return (m_flags & mask) != 0;
|
|
}
|
|
|
|
Flag with (int mask) const noexcept
|
|
{
|
|
return Flag (m_flags | mask);
|
|
}
|
|
|
|
Flag without (int mask) const noexcept
|
|
{
|
|
return Flag (m_flags & ~mask);
|
|
}
|
|
|
|
int asBits () const noexcept
|
|
{
|
|
return m_flags;
|
|
}
|
|
|
|
private:
|
|
int m_flags;
|
|
};
|
|
|
|
enum Flags
|
|
{
|
|
none = 0,
|
|
client_ssl = 1,
|
|
server_ssl = 2,
|
|
server_ssl_required = 4,
|
|
server_proxy = 8
|
|
};
|
|
|
|
virtual SSL* native_handle () = 0;
|
|
|
|
static MultiSocket* New (
|
|
boost::asio::io_service& io_service,
|
|
boost::asio::ssl::context& ssl_context,
|
|
int flags = 0);
|
|
};
|
|
|
|
#endif
|