SNode.C
Loading...
Searching...
No Matches
core::socket::stream::SocketContext Class Referenceabstract

#include <SocketContext.h>

Inheritance diagram for core::socket::stream::SocketContext:
Collaboration diagram for core::socket::stream::SocketContext:

Public Member Functions

 SocketContext (core::socket::stream::SocketConnection *socketConnection)
void sendToPeer (const char *chunk, std::size_t chunkLen) const final
bool streamToPeer (core::pipe::Source *source) const
void streamEof ()
std::size_t readFromPeer (char *chunk, std::size_t chunklen) const final
void setTimeout (const utils::Timeval &timeout) final
void shutdownRead ()
void shutdownWrite (bool forceClose=false)
void close () override
std::size_t getTotalSent () const override
std::size_t getTotalQueued () const override
std::size_t getTotalRead () const override
std::size_t getTotalProcessed () const override
std::string getOnlineSince () const override
std::string getOnlineDuration () const override
SocketConnectiongetSocketConnection () const
void sendToPeer (const std::string &data) const
Public Member Functions inherited from core::socket::SocketContext
 SocketContext (const SocketContext &)=delete
 SocketContext (SocketContext &&)=delete
SocketContextoperator= (const SocketContext &)=delete
SocketContextoperator= (SocketContext &&)=delete
void sendToPeer (const std::string &data) const

Protected Member Functions

void onWriteError (int errnum) override
void onReadError (int errnum) override
std::size_t readFromPeer ()
Protected Member Functions inherited from core::socket::SocketContext
 SocketContext ()=default
virtual ~SocketContext ()
virtual std::size_t onReceivedFromPeer ()=0
virtual bool onSignal (int sig)=0

Private Types

using Super = core::socket::SocketContext

Private Member Functions

virtual void onConnected ()=0
virtual void onDisconnected ()=0
virtual void attach ()
virtual void detach ()

Static Private Member Functions

static std::string timePointToString (const std::chrono::time_point< std::chrono::system_clock > &timePoint)
static std::string durationToString (const std::chrono::time_point< std::chrono::system_clock > &bevore, const std::chrono::time_point< std::chrono::system_clock > &later=std::chrono::system_clock::now())

Private Attributes

core::socket::stream::SocketConnectionsocketConnection
std::string onlineSince
std::size_t alreadyTotalQueued = 0
std::size_t alreadyTotalProcessed = 0
std::chrono::time_point< std::chrono::system_clock > onlineSinceTimePoint

Friends

template<typename PhysicalSocketT, class SocketReaderT, class SocketWriterT, typename ConfigT>
class SocketConnectionT
class SocketConnection

Detailed Description

Definition at line 66 of file SocketContext.h.

Member Typedef Documentation

◆ Super

Constructor & Destructor Documentation

◆ SocketContext()

core::socket::stream::SocketContext::SocketContext ( core::socket::stream::SocketConnection * socketConnection)
explicit

Definition at line 60 of file SocketContext.cpp.

62 , onlineSinceTimePoint(std::chrono::system_clock::now()) {
63 }
core::socket::stream::SocketConnection * socketConnection
std::chrono::time_point< std::chrono::system_clock > onlineSinceTimePoint

References onlineSinceTimePoint, and socketConnection.

Referenced by apps::echo::model::EchoSocketContext::EchoSocketContext(), apps::http::SimpleSocketProtocol::SimpleSocketProtocol(), iot::mqtt::SocketContext::SocketContext(), iot::mqtt_fast::SocketContext::SocketContext(), web::http::client::SocketContext::SocketContext(), and web::http::server::SocketContext::SocketContext().

Here is the caller graph for this function:

Member Function Documentation

◆ attach()

void core::socket::stream::SocketContext::attach ( )
privatevirtual

Definition at line 146 of file SocketContext.cpp.

146 {
147 alreadyTotalQueued = socketConnection->getTotalQueued();
148 alreadyTotalProcessed = socketConnection->getTotalProcessed();
149
150 onConnected();
151 }

References alreadyTotalProcessed, alreadyTotalQueued, core::socket::stream::SocketConnection::getTotalProcessed(), core::socket::stream::SocketConnection::getTotalQueued(), onConnected(), and socketConnection.

Referenced by core::socket::stream::SocketConnectionT< PhysicalSocketT, SocketReaderT, SocketWriterT, ConfigT >::onReceivedFromPeer(), and core::socket::stream::SocketConnection::setSocketContext().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ close()

void core::socket::stream::SocketContext::close ( )
overridevirtual

Implements core::socket::SocketContext.

Reimplemented in iot::mqtt::SocketContext.

Definition at line 93 of file SocketContext.cpp.

93 {
94 socketConnection->close();
95 }

References core::socket::stream::SocketConnection::close(), and socketConnection.

Referenced by iot::mqtt::SocketContext::close(), web::http::client::MasterRequest::executeUpgrade(), iot::mqtt_fast::SocketContext::onReceivedFromPeer(), web::http::client::MasterRequest::onSourceError(), web::http::server::Response::onSourceError(), and web::http::client::Request::upgrade().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ detach()

void core::socket::stream::SocketContext::detach ( )
privatevirtual

Definition at line 153 of file SocketContext.cpp.

153 {
155
156 LOG(DEBUG) << socketConnection->getConnectionName() << " SocketContext: detached";
157 LOG(DEBUG) << " Online Since: " << getOnlineSince();
158 LOG(DEBUG) << " Online Duration: " << getOnlineDuration();
159 LOG(DEBUG) << " Total Sent: " << getTotalQueued();
160 LOG(DEBUG) << " Total Processed: " << getTotalProcessed();
161
162 delete this;
163 }
std::string getOnlineSince() const override
std::size_t getTotalProcessed() const override
std::size_t getTotalQueued() const override
std::string getOnlineDuration() const override

References core::socket::stream::SocketConnection::getConnectionName(), getOnlineDuration(), getOnlineSince(), getTotalProcessed(), getTotalQueued(), onDisconnected(), and socketConnection.

Referenced by core::socket::stream::SocketConnectionT< PhysicalSocketT, SocketReaderT, SocketWriterT, ConfigT >::onReceivedFromPeer(), and core::socket::stream::SocketConnectionT< PhysicalSocketT, SocketReaderT, SocketWriterT, ConfigT >::unobservedEvent().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ durationToString()

std::string core::socket::stream::SocketContext::durationToString ( const std::chrono::time_point< std::chrono::system_clock > & bevore,
const std::chrono::time_point< std::chrono::system_clock > & later = std::chrono::system_clock::now() )
staticprivate

Definition at line 180 of file SocketContext.cpp.

181 {
182 using seconds_duration_type = std::chrono::duration<std::chrono::seconds::rep>::rep;
183
184 const seconds_duration_type totalSeconds = std::chrono::duration_cast<std::chrono::seconds>(later - bevore).count();
185
186 // Compute days, hours, minutes, and seconds
187 const seconds_duration_type days = totalSeconds / 86400; // 86400 seconds in a day
188 seconds_duration_type remainder = totalSeconds % 86400;
189 const seconds_duration_type hours = remainder / 3600;
190 remainder = remainder % 3600;
191 const seconds_duration_type minutes = remainder / 60;
192 const seconds_duration_type seconds = remainder % 60;
193
194 // Format the components into a string using stringstream
195 std::ostringstream oss;
196 if (days > 0) {
197 oss << days << " day" << (days == 1 ? "" : "s") << ", ";
198 }
199 oss << std::setw(2) << std::setfill('0') << hours << ":" << std::setw(2) << std::setfill('0') << minutes << ":" << std::setw(2)
200 << std::setfill('0') << seconds;
201
202 return oss.str();
203 }

Referenced by getOnlineDuration().

Here is the caller graph for this function:

◆ getOnlineDuration()

std::string core::socket::stream::SocketContext::getOnlineDuration ( ) const
overridevirtual

Implements core::socket::SocketContext.

Reimplemented in web::websocket::SocketContextUpgrade< SubProtocolT, RequestT, ResponseT >, web::websocket::SocketContextUpgrade< SubProtocol, web::http::client::Request, web::http::client::Response >, and web::websocket::SocketContextUpgrade< SubProtocol, web::http::server::Request, web::http::server::Response >.

Definition at line 116 of file SocketContext.cpp.

116 {
118 }
static std::string durationToString(const std::chrono::time_point< std::chrono::system_clock > &bevore, const std::chrono::time_point< std::chrono::system_clock > &later=std::chrono::system_clock::now())

References durationToString(), and onlineSinceTimePoint.

Referenced by detach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getOnlineSince()

std::string core::socket::stream::SocketContext::getOnlineSince ( ) const
overridevirtual

Implements core::socket::SocketContext.

Reimplemented in web::websocket::SocketContextUpgrade< SubProtocolT, RequestT, ResponseT >, web::websocket::SocketContextUpgrade< SubProtocol, web::http::client::Request, web::http::client::Response >, and web::websocket::SocketContextUpgrade< SubProtocol, web::http::server::Request, web::http::server::Response >.

Definition at line 113 of file SocketContext.cpp.

113 {
115 }
static std::string timePointToString(const std::chrono::time_point< std::chrono::system_clock > &timePoint)

References onlineSinceTimePoint, and timePointToString().

Referenced by detach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getSocketConnection()

SocketConnection * core::socket::stream::SocketContext::getSocketConnection ( ) const

Definition at line 65 of file SocketContext.cpp.

65 {
66 return socketConnection;
67 }

References socketConnection.

Referenced by web::http::server::SocketContext::deliverRequest(), web::http::client::SocketContext::deliverResponse(), web::http::client::SocketContext::deliverResponseParseError(), express::dispatcher::ApplicationDispatcher::dispatch(), express::dispatcher::MiddlewareDispatcher::dispatch(), express::dispatcher::RouterDispatcher::dispatch(), web::http::client::MasterRequest::executeUpgrade(), iot::mqtt::SocketContext::getSocketConnection(), web::http::client::SocketContext::initiateRequest(), main(), web::http::client::SocketContext::onConnected(), web::http::server::SocketContext::onConnected(), web::http::client::SocketContext::onDisconnected(), web::http::server::SocketContext::onDisconnected(), web::http::client::SocketContext::onSignal(), web::http::server::SocketContext::onSignal(), web::http::client::SocketContext::requestCompleted(), web::http::server::SocketContext::requestCompleted(), web::http::client::SocketContext::requestDelivered(), web::http::client::MasterRequest::requestEventSource(), web::http::client::SocketContext::requestPrepared(), web::http::server::SocketContext::responseCompleted(), web::http::client::SocketContext::responseStarted(), web::http::server::SocketContext::responseStarted(), web::http::client::SocketContext::setSseEventReceiver(), web::http::server::SocketContext::SocketContext(), express::middleware::StaticMiddleware::StaticMiddleware(), web::http::client::MasterRequest::upgrade(), web::http::client::Request::upgrade(), web::http::server::Response::upgrade(), express::middleware::VerboseRequest::VerboseRequest(), and web::http::client::SocketContext::~SocketContext().

Here is the caller graph for this function:

◆ getTotalProcessed()

std::size_t core::socket::stream::SocketContext::getTotalProcessed ( ) const
overridevirtual

Implements core::socket::SocketContext.

Definition at line 109 of file SocketContext.cpp.

109 {
110 return socketConnection->getTotalProcessed() - alreadyTotalProcessed;
111 }

References alreadyTotalProcessed, core::socket::stream::SocketConnection::getTotalProcessed(), and socketConnection.

Referenced by detach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getTotalQueued()

std::size_t core::socket::stream::SocketContext::getTotalQueued ( ) const
overridevirtual

Implements core::socket::SocketContext.

Definition at line 101 of file SocketContext.cpp.

101 {
102 return socketConnection->getTotalQueued() - alreadyTotalQueued;
103 }

References alreadyTotalQueued, core::socket::stream::SocketConnection::getTotalQueued(), and socketConnection.

Referenced by detach().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ getTotalRead()

std::size_t core::socket::stream::SocketContext::getTotalRead ( ) const
overridevirtual

Implements core::socket::SocketContext.

Definition at line 105 of file SocketContext.cpp.

105 {
106 return socketConnection->getTotalRead();
107 }

References core::socket::stream::SocketConnection::getTotalRead(), and socketConnection.

Here is the call graph for this function:

◆ getTotalSent()

std::size_t core::socket::stream::SocketContext::getTotalSent ( ) const
overridevirtual

Implements core::socket::SocketContext.

Definition at line 97 of file SocketContext.cpp.

97 {
98 return socketConnection->getTotalSent();
99 }

References core::socket::stream::SocketConnection::getTotalSent(), and socketConnection.

Here is the call graph for this function:

◆ onConnected()

◆ onDisconnected()

◆ onReadError()

void core::socket::stream::SocketContext::onReadError ( int errnum)
overrideprotectedvirtual

Implements core::socket::SocketContext.

Definition at line 135 of file SocketContext.cpp.

135 {
136 errno = errnum;
137
138 if (errno == 0) {
139 LOG(DEBUG) << socketConnection->getConnectionName() << " SocketContext: EOF received";
140 } else {
141 PLOG(DEBUG) << socketConnection->getConnectionName() << " SocketContext: onReadError";
142 }
144 }
void shutdownWrite(bool forceClose=false)

References core::socket::stream::SocketConnection::getConnectionName(), shutdownWrite(), and socketConnection.

Referenced by apps::http::SimpleSocketProtocol::onReadError(), and core::socket::stream::SocketConnectionT< PhysicalSocketT, SocketReaderT, SocketWriterT, ConfigT >::onReadError().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ onWriteError()

void core::socket::stream::SocketContext::onWriteError ( int errnum)
overrideprotectedvirtual

Implements core::socket::SocketContext.

Reimplemented in web::http::client::SocketContext, and web::http::server::SocketContext.

Definition at line 128 of file SocketContext.cpp.

128 {
129 errno = errnum;
130
131 PLOG(DEBUG) << socketConnection->getConnectionName() << " SocketContext: onWriteError";
132 shutdownRead();
133 }

References core::socket::stream::SocketConnection::getConnectionName(), shutdownRead(), and socketConnection.

Referenced by apps::http::SimpleSocketProtocol::onWriteError(), and core::socket::stream::SocketConnectionT< PhysicalSocketT, SocketReaderT, SocketWriterT, ConfigT >::onWriteError().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ readFromPeer() [1/2]

std::size_t core::socket::stream::SocketContext::readFromPeer ( )
protected

Definition at line 81 of file SocketContext.cpp.

81 {
82 return onReceivedFromPeer();
83 }
virtual std::size_t onReceivedFromPeer()=0

References core::socket::SocketContext::onReceivedFromPeer().

Referenced by core::socket::stream::SocketConnectionT< PhysicalSocketT, SocketReaderT, SocketWriterT, ConfigT >::onReceivedFromPeer().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ readFromPeer() [2/2]

std::size_t core::socket::stream::SocketContext::readFromPeer ( char * chunk,
std::size_t chunklen ) const
finalvirtual

Implements core::socket::SocketContext.

Definition at line 85 of file SocketContext.cpp.

85 {
86 return socketConnection->readFromPeer(chunk, chunklen);
87 }

References core::socket::stream::SocketConnection::readFromPeer(), and socketConnection.

Referenced by apps::echo::model::EchoSocketContext::onReceivedFromPeer(), web::http::decoder::Chunked::Chunk::read(), web::http::decoder::Fields::read(), web::http::decoder::HTTP10Response::read(), web::http::decoder::Identity::read(), web::http::Parser::readStartLine(), and iot::mqtt::SocketContext::recv().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sendToPeer() [1/2]

void core::socket::stream::SocketContext::sendToPeer ( const char * chunk,
std::size_t chunkLen ) const
finalvirtual

Implements core::socket::SocketContext.

Definition at line 69 of file SocketContext.cpp.

69 {
70 socketConnection->sendToPeer(chunk, chunkLen);
71 }

References core::socket::stream::SocketConnection::sendToPeer(), and socketConnection.

Referenced by web::http::client::MasterRequest::executeSendFragment(), apps::echo::model::EchoSocketContext::onReceivedFromPeer(), iot::mqtt::SocketContext::send(), iot::mqtt_fast::SocketContext::send(), and web::http::server::Response::sendFragment().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ sendToPeer() [2/2]

void core::socket::SocketContext::sendToPeer ( const std::string & data) const

Definition at line 75 of file SocketContext.cpp.

53 {
54 sendToPeer(data.data(), data.length());
55 }
void sendToPeer(const char *chunk, std::size_t chunkLen) const final

◆ setTimeout()

void core::socket::stream::SocketContext::setTimeout ( const utils::Timeval & timeout)
finalvirtual

Implements core::socket::SocketContext.

Definition at line 89 of file SocketContext.cpp.

89 {
90 socketConnection->setTimeout(timeout);
91 }

References core::socket::stream::SocketConnection::setTimeout(), and socketConnection.

Here is the call graph for this function:

◆ shutdownRead()

void core::socket::stream::SocketContext::shutdownRead ( )

Definition at line 120 of file SocketContext.cpp.

120 {
121 socketConnection->shutdownRead();
122 }

References core::socket::stream::SocketConnection::shutdownRead(), and socketConnection.

Referenced by apps::http::SimpleSocketProtocol::onWriteError(), and onWriteError().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ shutdownWrite()

void core::socket::stream::SocketContext::shutdownWrite ( bool forceClose = false)

Definition at line 124 of file SocketContext.cpp.

124 {
125 socketConnection->shutdownWrite(forceClose);
126 }

References core::socket::stream::SocketConnection::shutdownWrite(), and socketConnection.

Referenced by web::http::client::SocketContext::deliverResponseParseError(), iot::mqtt::SocketContext::end(), apps::http::SimpleSocketProtocol::onReadError(), onReadError(), web::http::client::SocketContext::requestCompleted(), web::http::client::SocketContext::requestDelivered(), web::http::client::MasterRequest::requestEventSource(), web::http::server::SocketContext::responseCompleted(), and web::http::client::SocketContext::responseStarted().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ streamEof()

void core::socket::stream::SocketContext::streamEof ( )

Definition at line 77 of file SocketContext.cpp.

77 {
78 socketConnection->streamEof();
79 }

References socketConnection, and core::socket::stream::SocketConnection::streamEof().

Referenced by web::http::client::MasterRequest::onSourceEof(), web::http::server::Response::onSourceEof(), web::http::client::MasterRequest::onSourceError(), web::http::server::Response::onSourceError(), web::http::client::MasterRequest::~MasterRequest(), and web::http::server::Response::~Response().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ streamToPeer()

bool core::socket::stream::SocketContext::streamToPeer ( core::pipe::Source * source) const

Definition at line 73 of file SocketContext.cpp.

73 {
74 return socketConnection->streamToPeer(source);
75 }

References socketConnection, and core::socket::stream::SocketConnection::streamToPeer().

Referenced by web::http::client::MasterRequest::onSourceConnect(), and web::http::server::Response::onSourceConnect().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ timePointToString()

std::string core::socket::stream::SocketContext::timePointToString ( const std::chrono::time_point< std::chrono::system_clock > & timePoint)
staticprivate

Definition at line 165 of file SocketContext.cpp.

165 {
166 const std::time_t time = std::chrono::system_clock::to_time_t(timePoint);
167 std::tm* tm_ptr = std::gmtime(&time);
168
169 char buffer[100];
170 std::string onlineSince = "Formatting error";
171
172 // Format: "2025-02-02 14:30:00"
173 if (std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_ptr) > 0) {
174 onlineSince = std::string(buffer) + " UTC";
175 }
176
177 return onlineSince;
178 }
time_t time(time_t *tloc)
Definition time.cpp:52

Referenced by getOnlineSince().

Here is the caller graph for this function:

◆ SocketConnection

friend class SocketConnection
friend

Definition at line 127 of file SocketContext.h.

◆ SocketConnectionT

template<typename PhysicalSocketT, class SocketReaderT, class SocketWriterT, typename ConfigT>
friend class SocketConnectionT
friend

Definition at line 126 of file SocketContext.h.

Member Data Documentation

◆ alreadyTotalProcessed

std::size_t core::socket::stream::SocketContext::alreadyTotalProcessed = 0
private

Definition at line 121 of file SocketContext.h.

Referenced by attach(), and getTotalProcessed().

◆ alreadyTotalQueued

std::size_t core::socket::stream::SocketContext::alreadyTotalQueued = 0
private

Definition at line 120 of file SocketContext.h.

Referenced by attach(), and getTotalQueued().

◆ onlineSince

std::string core::socket::stream::SocketContext::onlineSince
private

Definition at line 119 of file SocketContext.h.

◆ onlineSinceTimePoint

std::chrono::time_point<std::chrono::system_clock> core::socket::stream::SocketContext::onlineSinceTimePoint
private

Definition at line 123 of file SocketContext.h.

Referenced by getOnlineDuration(), getOnlineSince(), and SocketContext().

◆ socketConnection


The documentation for this class was generated from the following files: