mirror of
https://github.com/oxen-io/lokinet.git
synced 2024-11-19 09:25:28 +00:00
6f055eca4f
to rebase to rebase
86 lines
1.5 KiB
C++
86 lines
1.5 KiB
C++
#include "llarp/iwp/xmit.hpp"
|
|
|
|
xmit::xmit(byte_t *ptr)
|
|
{
|
|
memcpy(buffer, ptr, sizeof(buffer));
|
|
}
|
|
|
|
xmit::xmit(const xmit &other)
|
|
{
|
|
memcpy(buffer, other.buffer, sizeof(buffer));
|
|
}
|
|
|
|
void
|
|
xmit::set_info(const byte_t *hash, uint64_t id, uint16_t fragsz,
|
|
uint16_t lastsz, uint8_t numfrags, uint8_t flags)
|
|
{
|
|
// big endian assumed
|
|
// TODO: implement little endian
|
|
memcpy(buffer, hash, 32);
|
|
memcpy(buffer + 32, &id, 8);
|
|
memcpy(buffer + 40, &fragsz, 2);
|
|
memcpy(buffer + 42, &lastsz, 2);
|
|
buffer[44] = 0;
|
|
buffer[45] = 0;
|
|
buffer[46] = numfrags;
|
|
buffer[47] = flags;
|
|
}
|
|
|
|
const byte_t *
|
|
xmit::hash() const
|
|
{
|
|
return &buffer[0];
|
|
}
|
|
|
|
uint64_t
|
|
xmit::msgid() const
|
|
{
|
|
// big endian assumed
|
|
// TODO: implement little endian
|
|
const byte_t *start = buffer + 32;
|
|
const uint64_t *msgid = (const uint64_t *)start;
|
|
return *msgid;
|
|
}
|
|
|
|
// size of each full fragment
|
|
uint16_t
|
|
xmit::fragsize() const
|
|
{
|
|
// big endian assumed
|
|
// TODO: implement little endian
|
|
const byte_t *start = buffer + 40;
|
|
const uint16_t *fragsz = (uint16_t *)start;
|
|
return *fragsz;
|
|
}
|
|
|
|
// number of full fragments
|
|
uint8_t
|
|
xmit::numfrags() const
|
|
{
|
|
return buffer[46];
|
|
}
|
|
|
|
// size of the entire message
|
|
size_t
|
|
xmit::totalsize() const
|
|
{
|
|
return (fragsize() * numfrags()) + lastfrag();
|
|
}
|
|
|
|
// size of the last fragment
|
|
uint16_t
|
|
xmit::lastfrag() const
|
|
{
|
|
// big endian assumed
|
|
// TODO: implement little endian
|
|
const byte_t *start = buffer + 42;
|
|
const uint16_t *lastsz = (uint16_t *)start;
|
|
return *lastsz;
|
|
}
|
|
|
|
uint8_t
|
|
xmit::flags()
|
|
{
|
|
return buffer[47];
|
|
}
|