|
|
|
@ -21,17 +21,14 @@ frame_state::process_inbound_queue()
|
|
|
|
|
InboundMessage::OrderCompare >
|
|
|
|
|
q;
|
|
|
|
|
recvqueue.Process(q);
|
|
|
|
|
|
|
|
|
|
uint64_t last = 0;
|
|
|
|
|
while(q.size())
|
|
|
|
|
{
|
|
|
|
|
// TODO: is this right?
|
|
|
|
|
auto &front = q.top();
|
|
|
|
|
|
|
|
|
|
if(front->msgid < nextMsgID && nextMsgID - front->msgid > 1)
|
|
|
|
|
{
|
|
|
|
|
// re-queue because of an ordering gap
|
|
|
|
|
recvqueue.Put(front);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
if(last != front->msgid)
|
|
|
|
|
{
|
|
|
|
|
auto buffer = front->Buffer();
|
|
|
|
|
if(!Router()->HandleRecvLinkMessage(parent, buffer))
|
|
|
|
@ -39,12 +36,14 @@ frame_state::process_inbound_queue()
|
|
|
|
|
llarp::LogWarn("failed to process inbound message ", front->msgid);
|
|
|
|
|
llarp::DumpBuffer< llarp_buffer_t, 128 >(buffer);
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
nextMsgID = std::max(front->msgid, nextMsgID + 1);
|
|
|
|
|
}
|
|
|
|
|
delete front;
|
|
|
|
|
last = front->msgid;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
llarp::LogWarn("duplicate inbound message ", last);
|
|
|
|
|
}
|
|
|
|
|
delete front;
|
|
|
|
|
|
|
|
|
|
q.pop();
|
|
|
|
|
}
|
|
|
|
|
// TODO: this isn't right
|
|
|
|
|