bool CNetwork::RoutePacket(QUuid& pTargetGUID, G2Packet* pPacket) { CG2Node* pNode = 0; CEndPoint pAddr; if(m_oRoutingTable.Find(pTargetGUID, &pNode, &pAddr)) { if(pNode) { pNode->SendPacket(pPacket, true, false); systemLog.postLog(LogSeverity::Debug, QString("CNetwork::RoutePacket %1 Packet: %2 routed to neighbour: %3").arg(pTargetGUID.toString()).arg(pPacket->GetType()).arg(pNode->m_oAddress.toString().toAscii().constData())); //qDebug() << "CNetwork::RoutePacket " << pTargetGUID.toString() << " Packet: " << pPacket->GetType() << " routed to neighbour: " << pNode->m_oAddress.toString().toAscii().constData(); return true; } else if(!pAddr.isNull()) { Datagrams.SendPacket(pAddr, pPacket, true); systemLog.postLog(LogSeverity::Debug, QString("CNetwork::RoutePacket %1 Packet: %2 routed to remote node: %3").arg(pTargetGUID.toString()).arg(pPacket->GetType()).arg(pNode->m_oAddress.toString().toAscii().constData())); //qDebug() << "CNetwork::RoutePacket " << pTargetGUID.toString() << " Packet: " << pPacket->GetType() << " routed to remote node: " << pNode->m_oAddress.toString().toAscii().constData(); return true; } systemLog.postLog(LogSeverity::Debug, QString("CNetwork::RoutePacket - No node and no address!")); //qDebug() << "CNetwork::RoutePacket - weird thing, should not happen..."; } systemLog.postLog(LogSeverity::Debug, QString("CNetwork::RoutePacket %1 Packet: %2 DROPED!").arg(pTargetGUID.toString()).arg(pPacket->GetType())); //qDebug() << "CNetwork::RoutePacket " << pTargetGUID.toString() << " Packet: " << pPacket->GetType() << " DROPPED!"; return false; }
bool CNetwork::RoutePacket(G2Packet* pPacket, CG2Node* pNbr) { QUuid pGUID; if(pPacket->GetTo(pGUID) && pGUID != quazaaSettings.Profile.GUID) // no i adres != moj adres { CG2Node* pNode = 0; CEndPoint pAddr; if(m_oRoutingTable.Find(pGUID, &pNode, &pAddr)) { bool bForwardTCP = false; bool bForwardUDP = false; if(pNbr) { if(pNbr->m_nType == G2_LEAF) // if received from leaf - can forward anywhere { bForwardTCP = bForwardUDP = true; } else // if received from a hub - can be forwarded to leaf { if(pNode && pNode->m_nType == G2_LEAF) { bForwardTCP = true; } } } else // received from udp - do not forward via udp { bForwardTCP = true; } if(pNode && bForwardTCP) { pNode->SendPacket(pPacket, true, false); return true; } else if(!pAddr.isNull() && bForwardUDP) { Datagrams.SendPacket(pAddr, pPacket, true); return true; } // drop } return true; } return false; }