more iwp tweaking

pull/1/head
Jeff Becker 6 years ago
parent 70d19621ee
commit 4231243931
No known key found for this signature in database
GPG Key ID: F357B3B42F6F9B05

@ -283,7 +283,7 @@ namespace iwp
{
if(msginfo.numfrags() == 0)
return true;
return status.count() % (1 + (msginfo.numfrags() / 3)) == 0;
return status.count() % (1 + (msginfo.numfrags() / 2)) == 0;
}
bool
@ -393,7 +393,7 @@ namespace iwp
uint64_t rxids = 0;
uint64_t txids = 0;
llarp_time_t lastEvent = 0;
std::map< uint64_t, transit_message > rx;
std::map< uint64_t, transit_message * > rx;
std::map< uint64_t, transit_message * > tx;
typedef std::queue< sendbuf_t > sendqueue_t;
@ -413,6 +413,8 @@ namespace iwp
void
clear()
{
for(auto &item : rx)
delete item.second;
rx.clear();
for(auto &item : tx)
delete item.second;
@ -462,14 +464,14 @@ namespace iwp
if(x.flags() & 0x01)
{
auto id = x.msgid();
auto itr = rx.emplace(id, x);
if(itr.second)
auto itr = rx.find(id);
if(itr == rx.end())
{
rx[id] = new transit_message(x);
llarp::Debug("got message XMIT with ", (int)x.numfrags(),
" fragments");
// inserted, put last fragment
itr.first->second.put_lastfrag(hdr.data() + sizeof(x.buffer),
x.lastfrag());
rx[id]->put_lastfrag(hdr.data() + sizeof(x.buffer), x.lastfrag());
push_ackfor(id, 0);
if(x.numfrags() == 0)
{
@ -522,25 +524,25 @@ namespace iwp
llarp::Warn("no such RX fragment, msgid=", msgid);
return false;
}
auto fragsize = itr->second.msginfo.fragsize();
auto fragsize = itr->second->msginfo.fragsize();
if(fragsize != sz - 9)
{
llarp::Warn("RX fragment size missmatch ", fragsize, " != ", sz - 9);
return false;
}
if(!itr->second.put_frag(fragno, hdr.data() + 9))
if(!itr->second->put_frag(fragno, hdr.data() + 9))
{
llarp::Warn("inbound message does not have fragment msgid=", msgid,
" fragno=", (int)fragno);
return false;
}
auto mask = itr->second.get_bitmask();
if(itr->second.completed())
auto mask = itr->second->get_bitmask();
if(itr->second->completed())
{
push_ackfor(msgid, mask);
return inbound_frame_complete(msgid);
}
else if(itr->second.should_send_ack())
else if(itr->second->should_send_ack())
{
push_ackfor(msgid, mask);
}
@ -1468,7 +1470,7 @@ namespace iwp
{
bool success = false;
std::vector< byte_t > msg;
if(rx[id].reassemble(msg))
if(rx[id]->reassemble(msg))
{
auto buf = llarp::Buffer< decltype(msg) >(msg);
success = router->HandleRecvLinkMessage(parent, buf);
@ -1484,12 +1486,16 @@ namespace iwp
}
impl->serv->MapAddr(impl->addr, impl->remote_router.pubkey);
}
llarp::Info("handled message ", id);
}
else
llarp::Warn("failed to handle inbound message ", id);
}
else
{
llarp::Warn("failed to reassemble message ", id);
}
delete rx[id];
rx.erase(id);
return success;
}

Loading…
Cancel
Save