2019-10-20 15:53:20 +03:00
|
|
|
#include "abstractdata.h"
|
|
|
|
#include "package.h"
|
|
|
|
|
2019-12-06 13:37:11 +03:00
|
|
|
namespace NP {
|
2019-10-19 22:27:58 +03:00
|
|
|
|
2019-10-20 15:53:20 +03:00
|
|
|
Package::Package() {
|
2019-10-19 22:27:58 +03:00
|
|
|
reset();
|
|
|
|
}
|
|
|
|
|
2019-10-20 15:53:20 +03:00
|
|
|
bool Package::isValid() const {
|
2019-10-19 22:27:58 +03:00
|
|
|
if (!hdr.isValid()) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
|
2019-12-04 22:30:55 +03:00
|
|
|
auto rawint = data.mid(0, sizeof (decltype (hdr.command)));
|
|
|
|
decltype (hdr.command) cmd;
|
2019-10-20 20:30:17 +03:00
|
|
|
memcpy(&cmd, rawint.data(), sizeof (cmd));
|
|
|
|
|
|
|
|
if (data.size() && hdr.command != cmd) {
|
|
|
|
std::reverse(rawint.begin(), rawint.end());
|
|
|
|
memcpy(&cmd, rawint.data(), sizeof (cmd));
|
|
|
|
|
|
|
|
if (hdr.command != cmd)
|
|
|
|
return false;
|
2019-10-19 22:27:58 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 20:30:17 +03:00
|
|
|
return hdr.size == data.size();
|
2019-10-19 22:27:58 +03:00
|
|
|
}
|
|
|
|
|
2019-10-20 15:53:20 +03:00
|
|
|
QByteArray Package::toBytes() const {
|
2019-10-19 22:27:58 +03:00
|
|
|
QByteArray res;
|
2019-10-20 15:53:20 +03:00
|
|
|
res.append(reinterpret_cast<char*>(const_cast<Header*>(&hdr)),
|
2019-10-19 22:27:58 +03:00
|
|
|
sizeof (hdr));
|
|
|
|
|
|
|
|
res.append(data);
|
|
|
|
return res;
|
|
|
|
}
|
|
|
|
|
2019-11-23 13:39:08 +03:00
|
|
|
void Package::fromBytes(const QByteArray& array) {
|
|
|
|
reset();
|
|
|
|
memcpy(&hdr,
|
|
|
|
array.data(), sizeof(Header));
|
|
|
|
|
|
|
|
data.append(array.mid(sizeof(Header)));
|
|
|
|
}
|
|
|
|
|
2019-10-20 15:53:20 +03:00
|
|
|
void Package::reset() {
|
2019-10-19 22:27:58 +03:00
|
|
|
hdr.reset();
|
|
|
|
data.clear();
|
|
|
|
}
|
|
|
|
|
|
|
|
}
|