Changeset View
Changeset View
Standalone View
Standalone View
src/protocol.cpp
Show First 20 Lines • Show All 65 Lines • ▼ Show 20 Lines | |||||
}; | }; | ||||
static const std::vector<std::string> | static const std::vector<std::string> | ||||
allNetMessageTypesVec(allNetMessageTypes, | allNetMessageTypesVec(allNetMessageTypes, | ||||
allNetMessageTypes + ARRAYLEN(allNetMessageTypes)); | allNetMessageTypes + ARRAYLEN(allNetMessageTypes)); | ||||
CMessageHeader::CMessageHeader(const MessageMagic &pchMessageStartIn) { | CMessageHeader::CMessageHeader(const MessageMagic &pchMessageStartIn) { | ||||
memcpy(std::begin(pchMessageStart), std::begin(pchMessageStartIn), | memcpy(std::begin(pchMessageStart), std::begin(pchMessageStartIn), | ||||
MESSAGE_START_SIZE); | MESSAGE_START_SIZE); | ||||
memset(pchCommand, 0, sizeof(pchCommand)); | memset(pchCommand.data(), 0, sizeof(pchCommand)); | ||||
nMessageSize = -1; | nMessageSize = -1; | ||||
memset(pchChecksum, 0, CHECKSUM_SIZE); | memset(pchChecksum, 0, CHECKSUM_SIZE); | ||||
} | } | ||||
CMessageHeader::CMessageHeader(const MessageMagic &pchMessageStartIn, | CMessageHeader::CMessageHeader(const MessageMagic &pchMessageStartIn, | ||||
const char *pszCommand, | const char *pszCommand, | ||||
unsigned int nMessageSizeIn) { | unsigned int nMessageSizeIn) { | ||||
memcpy(std::begin(pchMessageStart), std::begin(pchMessageStartIn), | memcpy(std::begin(pchMessageStart), std::begin(pchMessageStartIn), | ||||
MESSAGE_START_SIZE); | MESSAGE_START_SIZE); | ||||
memset(pchCommand, 0, sizeof(pchCommand)); | memset(pchCommand.data(), 0, sizeof(pchCommand)); | ||||
strncpy(pchCommand, pszCommand, COMMAND_SIZE); | strncpy(pchCommand.data(), pszCommand, COMMAND_SIZE); | ||||
nMessageSize = nMessageSizeIn; | nMessageSize = nMessageSizeIn; | ||||
memset(pchChecksum, 0, CHECKSUM_SIZE); | memset(pchChecksum, 0, CHECKSUM_SIZE); | ||||
} | } | ||||
std::string CMessageHeader::GetCommand() const { | std::string CMessageHeader::GetCommand() const { | ||||
return std::string(pchCommand, | // return std::string(pchCommand.begin(), pchCommand.end()); | ||||
pchCommand + strnlen(pchCommand, COMMAND_SIZE)); | return std::string(pchCommand.data(), | ||||
pchCommand.data() + | |||||
strnlen(pchCommand.data(), COMMAND_SIZE)); | |||||
} | } | ||||
static bool | static bool | ||||
CheckHeaderMagicAndCommand(const CMessageHeader &header, | CheckHeaderMagicAndCommand(const CMessageHeader &header, | ||||
const CMessageHeader::MessageMagic &magic) { | const CMessageHeader::MessageMagic &magic) { | ||||
// Check start string | // Check start string | ||||
if (memcmp(std::begin(header.pchMessageStart), std::begin(magic), | if (memcmp(std::begin(header.pchMessageStart), std::begin(magic), | ||||
CMessageHeader::MESSAGE_START_SIZE) != 0) { | CMessageHeader::MESSAGE_START_SIZE) != 0) { | ||||
return false; | return false; | ||||
} | } | ||||
// Check the command string for errors | // Check the command string for errors | ||||
for (const char *p1 = header.pchCommand; | for (const char *p1 = header.pchCommand.data(); | ||||
p1 < header.pchCommand + CMessageHeader::COMMAND_SIZE; p1++) { | p1 < header.pchCommand.data() + CMessageHeader::COMMAND_SIZE; p1++) { | ||||
if (*p1 == 0) { | if (*p1 == 0) { | ||||
// Must be all zeros after the first zero | // Must be all zeros after the first zero | ||||
for (; p1 < header.pchCommand + CMessageHeader::COMMAND_SIZE; | for (; p1 < header.pchCommand.data() + CMessageHeader::COMMAND_SIZE; | ||||
p1++) { | p1++) { | ||||
if (*p1 != 0) { | if (*p1 != 0) { | ||||
return false; | return false; | ||||
} | } | ||||
} | } | ||||
} else if (*p1 < ' ' || *p1 > 0x7E) { | } else if (*p1 < ' ' || *p1 > 0x7E) { | ||||
return false; | return false; | ||||
} | } | ||||
▲ Show 20 Lines • Show All 104 Lines • Show Last 20 Lines |