MCPcopy Create free account
hub / github.com/PurpleI2P/i2pd / PutNextMessage

Method PutNextMessage

libi2pd/I2NPProtocol.cpp:543–590  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

541 }
542
543 void I2NPMessagesHandler::PutNextMessage (std::shared_ptr<I2NPMessage>&& msg)
544 {
545 if (msg)
546 {
547 switch (msg->GetTypeID ())
548 {
549 case eI2NPTunnelData:
550 m_TunnelMsgs.push_back (msg);
551 break;
552 case eI2NPTunnelGateway:
553 m_TunnelGatewayMsgs.push_back (msg);
554 break;
555 case eI2NPVariableTunnelBuild:
556 case eI2NPTunnelBuild:
557 case eI2NPShortTunnelBuild:
558 {
559 auto ts = i2p::util::GetMonotonicMilliseconds ();
560 if (!m_LastTunnelBuildMessageTimestamp ||
561 ts > m_LastTunnelBuildMessageTimestamp + TUNNEL_BUILD_MESSAGES_MIN_INTERVAL ||
562 m_NumDroppedTunnelBuildMessages > MAX_NUM_DROPPED_TUNNEL_BUILD_MESSAGES)
563 {
564 m_NumThrottledTunnelBuildMessages = 0;
565 if (m_NumDroppedTunnelBuildMessages > 0)
566 {
567 LogPrint (eLogWarning, "I2NP: ", m_NumDroppedTunnelBuildMessages, " tunnel build messages dropped");
568 m_NumDroppedTunnelBuildMessages = 0;
569 }
570 HandleI2NPMessage (msg);
571 }
572 else
573 {
574 if (m_NumThrottledTunnelBuildMessages < MAX_NUM_THROTTLED_TUNNEL_BUILD_MESSAGES)
575 {
576 // let TBM go through
577 m_NumThrottledTunnelBuildMessages++;
578 HandleI2NPMessage (msg);
579 }
580 else // drop TBM
581 m_NumDroppedTunnelBuildMessages++;
582 }
583 m_LastTunnelBuildMessageTimestamp = ts;
584 break;
585 }
586 default:
587 HandleI2NPMessage (msg);
588 }
589 }
590 }
591
592 void I2NPMessagesHandler::Flush ()
593 {

Callers 3

ProcessNextFrameMethod · 0.80
PostMessagesMethod · 0.80
HandleI2NPMsgMethod · 0.80

Calls 5

GetMonotonicMillisecondsFunction · 0.85
LogPrintFunction · 0.85
HandleI2NPMessageFunction · 0.85
GetTypeIDMethod · 0.80
push_backMethod · 0.80

Tested by

no test coverage detected