func()

in plc4go/tools/plc4xpcapanalyzer/internal/cbusanalyzer/analyzer.go [63:122]


func (a *Analyzer) PackageParse(packetInformation common.PacketInformation, payload []byte) (spi.Message, error) {
	if !a.initialized {
		log.Warn().Msg("Not initialized... doing that now")
		a.Init()
	}
	cBusOptions := a.cBusOptions
	log.Debug().
		Stringer("packetInformation", packetInformation).
		Stringer("requestContext", a.requestContext).
		Stringer("cBusOptions", cBusOptions).
		Bytes("payload", payload).
		Msg("Parsing")
	isResponse := a.isResponse(packetInformation)
	if isResponse {
		// Responses should have a checksum
		cBusOptions = readWriteModel.NewCBusOptions(
			cBusOptions.GetConnect(),
			cBusOptions.GetSmart(),
			cBusOptions.GetIdmon(),
			cBusOptions.GetExstat(),
			cBusOptions.GetMonitor(),
			cBusOptions.GetMonall(),
			cBusOptions.GetPun(),
			cBusOptions.GetPcn(),
			true,
		)
	}
	mergeCallback := func(index int) {
		log.Warn().Stringer("packetInformation", packetInformation).Int("index", index).Msg("we have a split at index")
	}
	currentPayload, err := a.getCurrentPayload(packetInformation, payload, mergeCallback, a.currentInboundPayloads, &a.lastParsePayload)
	if err != nil {
		return nil, err
	}
	if reflect.DeepEqual(currentPayload, a.lastParsePayload) {
		return nil, common.ErrEcho
	}
	a.lastParsePayload = currentPayload
	parse, err := readWriteModel.CBusMessageParse[readWriteModel.CBusMessage](context.TODO(), currentPayload, isResponse, a.requestContext, cBusOptions)
	if err != nil {
		if secondParse, err := readWriteModel.CBusMessageParse[readWriteModel.CBusMessage](context.TODO(), currentPayload, isResponse, readWriteModel.NewRequestContext(false), readWriteModel.NewCBusOptions(false, false, false, false, false, false, false, false, false)); err != nil {
			log.Debug().Err(err).Msg("Second parse failed too")
			return nil, errors.Wrap(err, "Error parsing CBusCommand")
		} else {
			log.Warn().
				Stringer("packetInformation", packetInformation).
				Stringer("secondParse", secondParse).
				Msg("package got overridden by second parse... probably a MMI")
			parse = secondParse
		}
	}
	a.requestContext = CreateRequestContextWithInfoCallback(parse, func(infoString string) {
		log.Debug().
			Int("packetNumber", packetInformation.PacketNumber).
			Str("infoString", infoString).
			Msg("No.[packetNumber] infoString")
	})
	log.Debug().Stringer("parse", parse).Msg("Parsed c-bus command")
	return parse, nil
}