27 #include <arpa/inet.h>
34 bool InQueue::DiscardMessage( Message& msg, uint16_t& sid)
const
36 if( msg.GetSize() < 8 )
56 uint16_t handlerSid = handler->
GetSid();
59 pHandlers[handlerSid] = HandlerAndExpire( handler, 0 );
75 if (DiscardMessage(*msg, msgSid))
81 HandlerMap::iterator it = pHandlers.find(msgSid);
83 if (it != pHandlers.end())
86 handler = it->second.first;
88 if( it->second.second == 0 ) {
90 log->
Debug(
ExDbgMsg,
"[handler: %p] Assigned expiration %lld.",
91 handler, (
long long)it->second.second );
93 exp = it->second.second;
100 pHandlers.erase( it );
101 log->
Debug(
ExDbgMsg,
"[handler: %p] Removed MsgHandler: %p from the in-queue.",
121 uint16_t handlerSid = handler->
GetSid();
123 pHandlers[handlerSid] = HandlerAndExpire( handler, expires );
131 uint16_t handlerSid = handler->
GetSid();
133 pHandlers.erase(handlerSid);
135 log->
Debug(
ExDbgMsg,
"[handler: %p] Removed MsgHandler: %p from the in-queue.",
148 for( HandlerMap::iterator it = pHandlers.begin(); it != pHandlers.end(); )
150 action = it->second.first->OnStreamEvent( event, status );
154 auto next = it; ++next;
155 pHandlers.erase( it );
172 HandlerMap::iterator it = pHandlers.begin();
173 while( it != pHandlers.end() )
175 if( it->second.second && it->second.second <= now )
179 auto next = it; ++next;
181 pHandlers.erase( it );
194 uint16_t handlerSid = handler->
GetSid();
196 HandlerMap::iterator it = pHandlers.find( handlerSid );
197 if( it != pHandlers.end() )
199 if( it->second.second == 0 )
204 log->
Debug(
ExDbgMsg,
"[handler: %p] Assigned expiration %lld.",
205 handler, (
long long)it->second.second );
static Log * GetLog()
Get default log.
void ReportTimeout(time_t now=0)
Timeout handlers.
void RemoveMessageHandler(MsgHandler *handler)
Remove a listener.
void ReAddMessageHandler(MsgHandler *handler, time_t expires)
Re-insert the handler without scanning the cached messages.
void ReportStreamEvent(MsgHandler::StreamEvent event, XRootDStatus status)
Report an event to the handlers.
MsgHandler * GetHandlerForMessage(std::shared_ptr< Message > &msg, time_t &expires, uint16_t &action)
void AssignTimeout(MsgHandler *handler)
void AddMessageHandler(MsgHandler *handler, bool &rmMsg)
void Debug(uint64_t topic, const char *format,...)
Print a debug message.
virtual uint16_t Examine(std::shared_ptr< Message > &msg)=0
virtual uint16_t GetSid() const =0
virtual time_t GetExpiration()=0
StreamEvent
Events that may have occurred to the stream.
@ Timeout
The declared timeout has occurred.
const uint16_t errOperationExpired
const uint16_t stError
An error occurred that could potentially be retried.
Procedure execution status.