Line data Source code
1 : /********************************************************************************
2 : * Copyright (c) 2026 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 : #include "someip/SdSomeIpStack.h"
12 :
13 : #include "someip/EventTransceiver.h"
14 : #include "someip/IServiceRegistry.h"
15 : #include "someip/RpcHandler.h"
16 : #include "someip/TcpClientChannelValidator.h"
17 :
18 : namespace someip
19 : {
20 : using ref = detail::SdRefs;
21 :
22 3 : SdSomeIpStack::SdSomeIpStack(
23 : async::ContextType& ethernetContext,
24 : Network& network,
25 : TcpClientChannelValidator& validator,
26 : SubscriptionManager& subscriptionManager,
27 : ServiceTracker& serviceTracker,
28 : QueryManager& queryManager,
29 : ServiceManager& serviceManager,
30 : SdServiceRegistry& serviceRegistry,
31 : SessionManager& sessionManager,
32 : RebootTracker& rebootTracker,
33 : TpTransceiver& tpTransceiver,
34 : BufferedEventSender& eventSender,
35 : RpcHandler& rpcHandler,
36 : EventTransceiver& eventTransceiver,
37 : RpcReceiver& rpcReceiver,
38 3 : ISdMessageParser::AdditionalSDCheck const additionalSDCheck)
39 : : ref(
40 : network,
41 : validator,
42 : subscriptionManager,
43 : serviceTracker,
44 : queryManager,
45 : serviceManager,
46 : serviceRegistry,
47 : sessionManager,
48 : rebootTracker,
49 : tpTransceiver,
50 : eventSender,
51 : rpcHandler,
52 : eventTransceiver,
53 : rpcReceiver)
54 : , SomeIpStack(
55 3 : ref::_network,
56 3 : ref::_rpcHandler,
57 3 : ref::_eventTransceiver,
58 3 : ref::_eventTransceiver,
59 3 : ref::_serviceRegistry)
60 3 : , _serviceAnnouncer(
61 3 : ref::_network,
62 : ref::_serviceManager,
63 3 : ref::_serviceRegistry,
64 : ethernetContext,
65 : ref::_queryManager,
66 : ref::_sessionManager)
67 6 : , _sdParser(
68 3 : ref::_serviceRegistry,
69 : _serviceAnnouncer,
70 : ref::_rebootTracker,
71 3 : ref::_network.getSubnetId(),
72 3 : ref::_network.getLocalIp(),
73 : additionalSDCheck)
74 6 : , _sdReceiver(_sdParser)
75 : {
76 3 : ref::_network.setSdListener(_sdReceiver);
77 3 : }
78 :
79 : // virtual
80 0 : bool SdSomeIpStack::doInit()
81 : {
82 0 : _queryManager.wire(&_serviceAnnouncer, &_rpcReceiver);
83 0 : _serviceManager.wire(&_serviceAnnouncer);
84 :
85 0 : ref::_serviceRegistry.init();
86 0 : _rpcReceiver.init();
87 0 : ref::_eventSender.init();
88 0 : _serviceAnnouncer.init();
89 0 : _sdParser.init();
90 :
91 0 : return true;
92 : }
93 :
94 : // virtual
95 0 : bool SdSomeIpStack::doStart()
96 : {
97 0 : if (!ref::_network.start())
98 : {
99 0 : return false;
100 : }
101 :
102 0 : ref::_queryManager.start();
103 0 : ref::_serviceManager.start();
104 0 : _serviceAnnouncer.start();
105 :
106 0 : return true;
107 : }
108 :
109 : // virtual
110 0 : void SdSomeIpStack::doStop()
111 : {
112 0 : ref::_serviceTracker.stop();
113 0 : ref::_queryManager.stop();
114 0 : ref::_serviceManager.stop();
115 0 : _serviceAnnouncer.stop();
116 0 : ref::_subscriptionManager.stop();
117 0 : ref::_tpTransceiver.stop();
118 0 : ref::_network.stop();
119 0 : }
120 :
121 : // virtual
122 0 : void SdSomeIpStack::doShutdown()
123 : {
124 0 : _serviceAnnouncer.shutdown();
125 0 : ref::_eventSender.shutdown();
126 0 : ref::_eventTransceiver.shutdown();
127 0 : ref::_rpcReceiver.shutdown();
128 0 : ref::_serviceRegistry.shutdown();
129 0 : }
130 :
131 0 : INetwork const& SdSomeIpStack::getNetwork() const { return ref::_network; }
132 :
133 0 : INetwork& SdSomeIpStack::getNetwork() { return ref::_network; }
134 :
135 0 : EventTransceiver const& SdSomeIpStack::getEventTransceiver() const
136 : {
137 0 : return ref::_eventTransceiver;
138 : }
139 :
140 0 : EventTransceiver& SdSomeIpStack::getEventTransceiver() { return ref::_eventTransceiver; }
141 :
142 0 : RpcHandler const& SdSomeIpStack::getRpcHandler() const { return ref::_rpcHandler; }
143 :
144 0 : RpcHandler& SdSomeIpStack::getRpcHandler() { return ref::_rpcHandler; }
145 :
146 : } // namespace someip
|