30 m_address(peer_info.m_address) ,
31 m_socket(peer_info.m_socket) ,
32 m_sp(*this,es,*this,*m_socket,0U) ,
33 m_line_buffer(line_buffer_config) ,
34 m_config(peer_info.m_config) ,
35 m_idle_timer(*this,&
ServerPeer::onIdleTimeout,es)
37 G_ASSERT( peer_info.m_server !=
nullptr ) ;
38 G_ASSERT( m_socket.get() ) ;
40 G_DEBUG(
"GNet::ServerPeer::ctor: [" <<
this <<
"]: port " << m_address.
port() ) ;
42 if( m_config.idle_timeout )
43 m_idle_timer.startTimer( m_config.idle_timeout ) ;
45 m_socket->addReadHandler( *
this , es ) ;
46 m_socket->addOtherHandler( *
this , es ) ;
52 G_DEBUG(
"GNet::ServerPeer::dtor: [" <<
this <<
"]: port " << m_address.port() ) ;
63 m_line_buffer.expect( n ) ;
68 G_ASSERT( m_socket !=
nullptr ) ;
72void GNet::ServerPeer::otherEvent( EventHandler::Reason reason )
74 m_sp.otherEvent( reason ) ;
77void GNet::ServerPeer::readEvent()
84 G_ASSERT( m_socket !=
nullptr ) ;
85 return std::make_pair(
true , m_socket->getLocalAddress() ) ;
90 return std::pair<bool,Address>(
true , m_address ) ;
95 return m_address.displayString() ;
100 return m_sp.peerCertificate() ;
105 return m_sp.send( data , offset ) ;
110 return m_sp.send( segments ) ;
113void GNet::ServerPeer::writeEvent()
115 if( m_sp.writeEvent() )
121 G_DEBUG(
"GNet::ServerPeer::doOnDelete: reason=[" << reason <<
"]" ) ;
122 onDelete( done ? std::string() : reason ) ;
125void GNet::ServerPeer::onIdleTimeout()
127 std::ostringstream ss ;
128 ss <<
"no activity after " << m_config.idle_timeout <<
"s" ;
129 throw IdleTimeout( ss.str() ) ;
134 if( m_config.idle_timeout )
135 m_idle_timer.startTimer( m_config.idle_timeout ) ;
137 bool fragments = m_line_buffer.transparent() ;
138 m_line_buffer.apply(
this , &ServerPeer::onDataImp , data , size , fragments ) ;
141bool GNet::ServerPeer::onDataImp(
const char * data , std::size_t size , std::size_t eolsize ,
142 std::size_t linesize ,
char c0 )
144 return onReceive( data , size , eolsize , linesize , c0 ) ;
152std::string GNet::ServerPeer::exceptionSourceId()
const
154 if( m_exception_source_id.empty() )
156 std::pair<bool,Address> pair = peerAddress() ;
158 m_exception_source_id = pair.second.hostPartString() ;
160 return m_exception_source_id ;
165GNet::ServerPeerConfig::ServerPeerConfig()
168GNet::ServerPeerConfig::ServerPeerConfig(
unsigned int idle_timeout_in ) :
169 idle_timeout(idle_timeout_in)
unsigned int port() const
Returns port part of the address.
A tuple containing an ExceptionHandler interface pointer and a bound 'exception source' pointer.
A configuration structure for GNet::LineBuffer.
Provides information abount the state of a line buffer.
static void addServerPeer(const Connection &server_peer)
Adds a server connection.
static void removeServerPeer(const Connection &server_peer) noexcept
Removes a server connection.
A structure that GNet::Server uses to configure its ServerPeer objects.
A structure used in GNet::Server::newPeer().
An abstract base class for the GNet::Server's connection to a remote client.
void expect(std::size_t)
Modifies the line buffer state so that it delivers a chunk of non-line-delimited data.
~ServerPeer() override
Destructor.
void secureAccept()
Waits for the peer to start a secure session.
std::string connectionState() const override
Returns the connection state display string.
bool send(const std::string &data, std::size_t offset=0U)
Sends data down the socket to the peer.
void doOnDelete(const std::string &reason, bool done)
Used by the Server class to call onDelete().
LineBufferState lineBuffer() const
Returns information about the state of the internal line-buffer.
std::pair< bool, Address > peerAddress() const override
Returns the peer address.
std::string peerCertificate() const override
Returns the peer's TLS certificate.
std::pair< bool, Address > localAddress() const override
Returns the local address.
StreamSocket & socket()
Returns a reference to the client-server connection socket.
void onData(const char *, std::size_t) override
Override from GNet::SocketProtocolSink.
ServerPeer(ExceptionSink, const ServerPeerInfo &, const LineBufferConfig &)
Constructor.
A derivation of GNet::Socket for a stream socket.