Line data Source code
1 : // Copyright 2024 Accenture.
2 :
3 : // NOLINTBEGIN(cppcoreguidelines-pro-type-vararg): Logger/StringWriter API is variadic by design.
4 :
5 : #include "transport/AbstractTransportLayer.h"
6 :
7 : #include "common/busid/BusId.h"
8 : #include "transport/TransportLogger.h"
9 :
10 : namespace transport
11 : {
12 : using ::util::logger::Logger;
13 : using ::util::logger::TRANSPORT;
14 :
15 : // explicit
16 157 : AbstractTransportLayer::AbstractTransportLayer(uint8_t const busId)
17 157 : : fBusId(busId), fProvidingListenerHelper(busId)
18 157 : {}
19 :
20 : // virtual
21 1 : AbstractTransportLayer::ErrorCode AbstractTransportLayer::init() { return ErrorCode::TP_OK; }
22 :
23 : // virtual
24 1 : bool AbstractTransportLayer::shutdown(ShutdownDelegate) { return SYNC_SHUTDOWN_COMPLETE; }
25 :
26 : /*
27 : *
28 : * TransportMessageProvidingListenerHelper
29 : *
30 : */
31 :
32 157 : AbstractTransportLayer::TransportMessageProvidingListenerHelper::
33 157 : TransportMessageProvidingListenerHelper(uint8_t const busId)
34 157 : : fpMessageProvider(nullptr), fpMessageListener(nullptr), fBusId(busId)
35 157 : {}
36 :
37 : // virtual
38 : ITransportMessageProvidingListener::ErrorCode
39 11 : AbstractTransportLayer::TransportMessageProvidingListenerHelper::getTransportMessage(
40 : uint8_t const srcBusId,
41 : uint16_t const sourceAddress,
42 : uint16_t const targetAddress,
43 : uint16_t const size,
44 : ::etl::span<uint8_t const> const& peek,
45 : TransportMessage*& pTransportMessage)
46 : {
47 11 : if (fpMessageProvider != nullptr)
48 : {
49 10 : return fpMessageProvider->getTransportMessage(
50 10 : srcBusId, sourceAddress, targetAddress, size, peek, pTransportMessage);
51 : }
52 1 : Logger::warn(
53 : TRANSPORT,
54 : "AbstractTransportLayer(%s)::getTransportMessage() with no registered "
55 : "provider!",
56 1 : ::common::busid::BusIdTraits::getName(fBusId));
57 1 : pTransportMessage = nullptr;
58 1 : return ITransportMessageProvidingListener::ErrorCode::TPMSG_NO_MSG_AVAILABLE;
59 : }
60 :
61 : // virtual
62 22 : void AbstractTransportLayer::TransportMessageProvidingListenerHelper::releaseTransportMessage(
63 : TransportMessage& transportMessage)
64 : {
65 22 : if (fpMessageProvider != nullptr)
66 : {
67 16 : fpMessageProvider->releaseTransportMessage(transportMessage);
68 : }
69 22 : }
70 :
71 : // virtual
72 : ITransportMessageListener::ReceiveResult
73 15 : AbstractTransportLayer::TransportMessageProvidingListenerHelper::messageReceived(
74 : uint8_t const sourceBusId,
75 : TransportMessage& transportMessage,
76 : ITransportMessageProcessedListener* const pNotificationListener)
77 : {
78 15 : if (fpMessageListener != nullptr)
79 : {
80 14 : return fpMessageListener->messageReceived(
81 14 : sourceBusId, transportMessage, pNotificationListener);
82 : }
83 1 : Logger::warn(
84 : TRANSPORT,
85 : "AbstractTransportLayer(%s)::messageReceived() with no registered "
86 : "listener!",
87 1 : ::common::busid::BusIdTraits::getName(fBusId));
88 1 : return ReceiveResult::RECEIVED_ERROR;
89 : }
90 :
91 : // virtual
92 2 : void AbstractTransportLayer::TransportMessageProvidingListenerHelper::dump()
93 : {
94 2 : if (fpMessageProvider != nullptr)
95 : {
96 1 : fpMessageProvider->dump();
97 : }
98 2 : }
99 :
100 : } // namespace transport
101 :
102 : // NOLINTEND(cppcoreguidelines-pro-type-vararg)
|