Ejemplo n.º 1
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var10& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	{
		std::ostringstream oss;
		oss << "kcm: " << KeyChangeMethodToString(value.keyChangeMethod);
		oss << " op: " << UserOperationToString(value.userOperation);
		oss << " scsn: " << value.statusChangeSeqNum;
		oss << " role: " << value.userRole;
		oss << "exp: " << value.userRoleExpDays;
		SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
	}

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "user name: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.userName, 18, 18);

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "pub key: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.userPublicKey, 18, 18);

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "cert data: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.certificationData, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 2
0
    void ParseAndLogRequestTx(openpal::Logger& logger, const openpal::RSlice& apdu)
    {

#ifndef OPENPAL_STRIP_LOGGING

        FORMAT_HEX_BLOCK(logger, flags::APP_HEX_TX, apdu, 18, 18);

        if (logger.IsEnabled(flags::APP_HEADER_TX))
        {
            const auto result = APDUHeaderParser::ParseRequest(apdu, &logger);
            if (result.success)
            {
                LogHeader(logger, flags::APP_HEADER_TX, result.header);

                if (logger.IsEnabled(flags::APP_OBJECT_TX))
                {
                    auto expectsContents = result.header.function != FunctionCode::READ;
                    APDUParser::ParseAndLogAll(result.objects, &logger,
                                               ParserSettings::Create(expectsContents, flags::APP_OBJECT_TX));
                }
            }
        }

#endif
    }
Ejemplo n.º 3
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var15& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "MAC value: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.hmacValue, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 4
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var11& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	{
		std::ostringstream oss;
		oss << "kcm: " << KeyChangeMethodToString(value.keyChangeMethod);
		SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
	}

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "user name: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.userName, 18, 18);

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "master challenge data: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.challengeData, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 5
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var5& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	std::ostringstream oss;
	oss << "ksq: " << value.keyChangeSeqNum;
	oss << " user: "******" KW: " << KeyWrapAlgorithmToString(value.keyWrapAlgo);
	oss << " KS: " << KeyStatusToString(value.keyStatus);
	oss << " MAC: " << HMACTypeToString(value.hmacAlgo);
	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "challenge data: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.challengeData, 18, 18);

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "MAC value: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.hmacValue, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 6
0
void DecoderImpl::DecodeTPDU(const openpal::RSlice& data)
{
    Indent i(*callbacks);
    FORMAT_HEX_BLOCK(logger, flags::TRANSPORT_RX, data, 18, 18);

    auto result = transportRx.ProcessReceive(Message(Addresses(), data));
    if (result.payload.IsNotEmpty())
    {
        this->DecodeAPDU(result.payload);
    }
}
Ejemplo n.º 7
0
IINField LoggingHandler::PrintOctets(const ICollection<Indexed<OctetString>>& items)
{
	Indent i(*callbacks);
	auto logItem = [this](const Indexed<OctetString>& item)
	{
		auto slice = item.value.ToRSlice();
		FORMAT_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "[%u] value: (length = %u)", item.index, slice.Size());
		FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, slice, 18, 18);
	};

	items.ForeachItem(logItem);

	return IINField::Empty();
}
Ejemplo n.º 8
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var8& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	std::ostringstream oss;
	oss << "kcm: " << KeyChangeMethodToString(value.keyChangeMethod);
	oss << " type: " << CertificateTypeToString(value.certificateType);
	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "certificate: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.certificate, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 9
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var6& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	std::ostringstream oss;
	oss << "ksq: " << value.keyChangeSeqNum;
	oss << " user: "******"key data: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.keyWrapData, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 10
0
bool LinkLayerParser::ValidateBody()
{
	uint32_t len = header.GetLength() - LPDU_MIN_LENGTH;
	if (LinkFrame::ValidateBodyCRC(buffer.ReadBuffer() + LPDU_HEADER_SIZE, len))
	{
		FORMAT_LOG_BLOCK(logger, flags::LINK_RX,
		                 "Function: %s Dest: %u Source: %u Length: %u",
		                 LinkFunctionToString(header.GetFuncEnum()),
		                 header.GetDest(),
		                 header.GetSrc(),
		                 header.GetLength());

		FORMAT_HEX_BLOCK(logger, flags::LINK_RX_HEX, buffer.ReadBuffer().Take(frameSize), 10, 18);

		return true;
	}
	else
	{
		++this->statistics.numBodyCrcError;
		SIMPLE_LOG_BLOCK(logger, flags::ERR, "CRC failure in body");
		return false;
	}
}
Ejemplo n.º 11
0
IINField LoggingHandler::ProcessHeader(const FreeFormatHeader& header, const Group120Var7& value, const openpal::RSlice& object)
{
	Indent i(*callbacks);

	{
		std::ostringstream oss;
		oss << "seq: " << value.challengeSeqNum;
		oss << " user: "******" assoc: " << value.assocId;
		oss << " error: " << AuthErrorCodeToString(value.errorCode);
		SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
	}

	{
		std::ostringstream oss;
		oss << "time of error: " << ToUTCString(value.time);
		SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, oss.str().c_str());
	}

	SIMPLE_LOG_BLOCK(logger, flags::APP_OBJECT_RX, "error text: ");
	FORMAT_HEX_BLOCK(logger, flags::APP_OBJECT_RX, value.errorText, 18, 18);

	return IINField::Empty();
}
Ejemplo n.º 12
0
    void ParseAndLogResponseTx(openpal::Logger& logger, const openpal::RSlice& apdu)
    {

#ifndef OPENPAL_STRIP_LOGGING

        FORMAT_HEX_BLOCK(logger, flags::APP_HEX_TX, apdu, 18, 18);

        if (logger.IsEnabled(flags::APP_HEADER_TX))
        {
            const auto result = APDUHeaderParser::ParseResponse(apdu, &logger);
            if (result.success)
            {
                LogHeader(logger, flags::APP_HEADER_TX, result.header);

                if (logger.IsEnabled(flags::APP_OBJECT_TX))
                {
                    APDUParser::ParseAndLogAll(result.objects, &logger,
                                               ParserSettings::Create(true, flags::APP_OBJECT_TX));
                }
            }
        }

#endif
    }
Ejemplo n.º 13
0
void DecoderImpl::DecodeAPDU(const openpal::RSlice& data)
{
    Indent i(*callbacks);

    FORMAT_HEX_BLOCK(this->logger, flags::APP_HEX_RX, data, 18, 18);

    if (IsResponse(data))
    {
        const auto result = APDUHeaderParser::ParseResponse(data, &logger);
        if (result.success)
        {
            logging::LogHeader(this->logger, flags::APP_HEADER_RX, result.header);

            if ((result.header.IIN.LSB & 0x01) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.0 - All stations");
            if ((result.header.IIN.LSB & 0x02) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.1 - Class 1 events");
            if ((result.header.IIN.LSB & 0x04) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.2 - Class 2 events");
            if ((result.header.IIN.LSB & 0x08) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.3 - Class 3 events");
            if ((result.header.IIN.LSB & 0x10) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.4 - Need time");
            if ((result.header.IIN.LSB & 0x20) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.5 - Local control");
            if ((result.header.IIN.LSB & 0x40) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.6 - Device trouble");
            if ((result.header.IIN.LSB & 0x80) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN1.7 - Device restart");
            if ((result.header.IIN.MSB & 0x01) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.0 - Function code not supported");
            if ((result.header.IIN.MSB & 0x02) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.1 - Object unknown");
            if ((result.header.IIN.MSB & 0x04) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.2 - Parameter error");
            if ((result.header.IIN.MSB & 0x08) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.3 - Event buffer overflow");
            if ((result.header.IIN.MSB & 0x10) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.4 - Already executing");
            if ((result.header.IIN.MSB & 0x20) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.5 - Configuration corrupt");
            if ((result.header.IIN.MSB & 0x40) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.6 - Reserved 1");
            if ((result.header.IIN.MSB & 0x80) != 0)
                SIMPLE_LOG_BLOCK(this->logger, flags::APP_HEADER_RX, "IIN2.7 - Reserved 2");

            Indent i(*callbacks);
            LoggingHandler handler(logger, *callbacks);
            APDUParser::ParseSinglePass(result.objects, &logger, &handler, nullptr, ParserSettings::Default());
        }
    }
    else
    {
        const auto result = APDUHeaderParser::ParseRequest(data, &logger);
        if (result.success)
        {
            logging::LogHeader(this->logger, flags::APP_HEADER_RX, result.header);

            Indent i(*callbacks);
            LoggingHandler handler(logger, *callbacks);
            auto settings = (result.header.function == FunctionCode::READ) ? ParserSettings::NoContents()
                                                                           : ParserSettings::Default();
            APDUParser::ParseSinglePass(result.objects, &logger, &handler, nullptr, settings);
        }
    }
}