|
|
@ -820,7 +820,7 @@ namespace llarp
|
|
|
|
Endpoint::OutboundContext::OnIntroSetUpdate(const Address& addr,
|
|
|
|
Endpoint::OutboundContext::OnIntroSetUpdate(const Address& addr,
|
|
|
|
const IntroSet* i)
|
|
|
|
const IntroSet* i)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
if(i && addr == i->A.Addr() && currentIntroSet.OtherIsNewer(*i))
|
|
|
|
if(i)
|
|
|
|
{
|
|
|
|
{
|
|
|
|
currentIntroSet = *i;
|
|
|
|
currentIntroSet = *i;
|
|
|
|
ShiftIntroduction();
|
|
|
|
ShiftIntroduction();
|
|
|
@ -837,7 +837,8 @@ namespace llarp
|
|
|
|
auto itr = m_AddressToService.find(remote);
|
|
|
|
auto itr = m_AddressToService.find(remote);
|
|
|
|
if(itr != m_AddressToService.end())
|
|
|
|
if(itr != m_AddressToService.end())
|
|
|
|
{
|
|
|
|
{
|
|
|
|
ProtocolFrame f;
|
|
|
|
routing::PathTransferMessage transfer;
|
|
|
|
|
|
|
|
ProtocolFrame& f = transfer.T;
|
|
|
|
path::Path* p = nullptr;
|
|
|
|
path::Path* p = nullptr;
|
|
|
|
std::set< ConvoTag > tags;
|
|
|
|
std::set< ConvoTag > tags;
|
|
|
|
if(!GetConvoTagsForService(itr->second, tags))
|
|
|
|
if(!GetConvoTagsForService(itr->second, tags))
|
|
|
@ -869,18 +870,20 @@ namespace llarp
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
ProtocolMessage m(f.T);
|
|
|
|
ProtocolMessage m(f.T);
|
|
|
|
m.PutBuffer(data);
|
|
|
|
|
|
|
|
m.proto = t;
|
|
|
|
m.proto = t;
|
|
|
|
m.introReply = p->intro;
|
|
|
|
m.introReply = p->intro;
|
|
|
|
m.sender = m_Identity.pub;
|
|
|
|
m.sender = m_Identity.pub;
|
|
|
|
|
|
|
|
m.PutBuffer(data);
|
|
|
|
f.N.Randomize();
|
|
|
|
f.N.Randomize();
|
|
|
|
|
|
|
|
f.S = GetSeqNoForConvo(f.T);
|
|
|
|
f.C.Zero();
|
|
|
|
f.C.Zero();
|
|
|
|
|
|
|
|
transfer.Y.Randomize();
|
|
|
|
|
|
|
|
transfer.P = intro.pathID;
|
|
|
|
if(!f.EncryptAndSign(&Router()->crypto, m, K, m_Identity))
|
|
|
|
if(!f.EncryptAndSign(&Router()->crypto, m, K, m_Identity))
|
|
|
|
{
|
|
|
|
{
|
|
|
|
llarp::LogError("failed to encrypt and sign");
|
|
|
|
llarp::LogError("failed to encrypt and sign");
|
|
|
|
return false;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
routing::PathTransferMessage transfer(f, intro.pathID);
|
|
|
|
|
|
|
|
return p->SendRoutingMessage(&transfer, Router());
|
|
|
|
return p->SendRoutingMessage(&transfer, Router());
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|