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

Method HandleNextMessage

libi2pd/TunnelEndpoint.cpp:313–343  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

311 }
312
313 void TunnelEndpoint::HandleNextMessage (const TunnelMessageBlock& msg)
314 {
315 if (!m_IsInbound && msg.data->IsExpired ())
316 {
317 LogPrint (eLogInfo, "TunnelMessage: Message expired");
318 return;
319 }
320 uint8_t typeID = msg.data->GetTypeID ();
321 LogPrint (eLogDebug, "TunnelMessage: Handle fragment of ", msg.data->GetLength (), " bytes, msg type ", (int)typeID);
322
323 switch (msg.deliveryType)
324 {
325 case eDeliveryTypeLocal:
326 i2p::HandleI2NPMessage (msg.data);
327 break;
328 case eDeliveryTypeTunnel:
329 if (!m_IsInbound) // outbound transit tunnel
330 SendMessageTo (msg.hash, i2p::CreateTunnelGatewayMsg (msg.tunnelID, msg.data));
331 else
332 LogPrint (eLogError, "TunnelMessage: Delivery type 'tunnel' arrived from an inbound tunnel, dropped");
333 break;
334 case eDeliveryTypeRouter:
335 if (!m_IsInbound) // outbound transit tunnel
336 i2p::transport::transports.SendMessage (msg.hash, msg.data); // send right away, because most likely it's single message
337 else // we shouldn't send this message. possible leakage
338 LogPrint (eLogError, "TunnelMessage: Delivery type 'router' arrived from an inbound tunnel, dropped");
339 break;
340 default:
341 LogPrint (eLogError, "TunnelMessage: Unknown delivery type ", (int)msg.deliveryType);
342 };
343 }
344
345 void TunnelEndpoint::Cleanup ()
346 {

Callers 3

PostGarlicMessageMethod · 0.45
HandleGarlicMessageMethod · 0.45

Calls 7

LogPrintFunction · 0.85
HandleI2NPMessageFunction · 0.85
CreateTunnelGatewayMsgFunction · 0.85
GetTypeIDMethod · 0.80
SendMessageMethod · 0.80
IsExpiredMethod · 0.45
GetLengthMethod · 0.45

Tested by

no test coverage detected