コード例 #1
0
ファイル: APDUHeaderParser.cpp プロジェクト: automatak/dnp3
APDUHeaderParser::Result<APDUHeader> APDUHeaderParser::ParseRequest(const openpal::RSlice& apdu,
                                                                    openpal::Logger* logger)
{
    if (apdu.Size() < APDUHeader::REQUEST_SIZE)
    {
        FORMAT_LOGGER_BLOCK(logger, flags::WARN, "Request fragment  with insufficient size of %u bytes", apdu.Size());
        return Result<APDUHeader>::Error();
    }

    return Result<APDUHeader>::Ok(APDUHeader(AppControlField(apdu[0]), FunctionCodeFromType(apdu[1])),
                                  apdu.Skip(APDUHeader::REQUEST_SIZE));
}
コード例 #2
0
ファイル: NumParser.cpp プロジェクト: AdvMicrogrid/dnp3
ParseResult NumParser::ParseRange(openpal::RSlice& buffer, Range& range, openpal::Logger* pLogger) const
{
	if (buffer.Size() < (2 * static_cast<uint32_t>(size)))
	{
		SIMPLE_LOGGER_BLOCK(pLogger, flags::WARN, "Not enough data for start / stop");
		return ParseResult::NOT_ENOUGH_DATA_FOR_RANGE;
	}
	else
	{
		range.start = this->ReadNum(buffer);
		range.stop = this->ReadNum(buffer);

		if (range.IsValid())
		{
			return ParseResult::OK;
		}
		else
		{
			FORMAT_LOGGER_BLOCK(pLogger, flags::WARN, "start (%u) > stop (%u)", range.start, range.stop);
			return ParseResult::BAD_START_STOP;
		}
	}
}