save peer test nonces

This commit is contained in:
orignal 2014-04-09 14:58:30 -04:00
parent 5099b997ad
commit d09bafa4a7
2 changed files with 31 additions and 8 deletions

37
SSU.cpp
View File

@ -733,19 +733,40 @@ namespace ssu
uint16_t port = *(uint16_t *)buf; // use it as is uint16_t port = *(uint16_t *)buf; // use it as is
buf += 2; // port buf += 2; // port
uint8_t * introKey = buf; uint8_t * introKey = buf;
if (port) if (port && !address)
{ {
LogPrint ("SSU peer test. We are Charlie"); LogPrint ("Address of ", size, " bytes not supported");
Send (PAYLOAD_TYPE_PEER_TEST, buf1, len); // back to Bob return;
if (address) }
SendPeerTest (nonce, be32toh (*(uint32_t *)address), be16toh (port), introKey); // to Alice if (m_PeerTestNonces.count (nonce) > 0)
{
// existing test
if (port)
{
LogPrint ("SSU peer test from Charlie. We are Bob");
// TODO: back to Alice
}
else else
LogPrint ("Address of ", size, " bytes not supported"); {
LogPrint ("SSU peer test from Alice. We are Charlie");
SendPeerTest (nonce, be32toh (*(uint32_t *)address), be16toh (port), introKey); // to Alice
}
} }
else else
{ {
LogPrint ("SSU peer test. We are Bob"); // new test
// TODO: m_PeerTestNonces.insert (nonce);
if (port)
{
LogPrint ("SSU peer test from Bob. We are Charlie");
Send (PAYLOAD_TYPE_PEER_TEST, buf1, len); // back to Bob
SendPeerTest (nonce, be32toh (*(uint32_t *)address), be16toh (port), introKey); // to Alice
}
else
{
LogPrint ("SSU peer test from Alice. We are Bob");
// TODO: find Charlie
}
} }
} }

2
SSU.h
View File

@ -4,6 +4,7 @@
#include <inttypes.h> #include <inttypes.h>
#include <map> #include <map>
#include <list> #include <list>
#include <set>
#include <boost/asio.hpp> #include <boost/asio.hpp>
#include <cryptopp/modes.h> #include <cryptopp/modes.h>
#include <cryptopp/aes.h> #include <cryptopp/aes.h>
@ -131,6 +132,7 @@ namespace ssu
bool m_PeerTest; bool m_PeerTest;
SessionState m_State; SessionState m_State;
uint32_t m_RelayTag; uint32_t m_RelayTag;
std::set<uint32_t> m_PeerTestNonces;
CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption m_Encryption; CryptoPP::CBC_Mode<CryptoPP::AES>::Encryption m_Encryption;
CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption m_Decryption; CryptoPP::CBC_Mode<CryptoPP::AES>::Decryption m_Decryption;
uint8_t m_SessionKey[32], m_MacKey[32]; uint8_t m_SessionKey[32], m_MacKey[32];