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