Line data Source code
1 : // Copyright 2024 Accenture.
2 :
3 : #include "uds/base/Service.h"
4 :
5 : #include "uds/connection/IncomingDiagConnection.h"
6 : #include "uds/session/DiagSession.h"
7 : #include "uds/session/IDiagSessionManager.h"
8 :
9 : namespace uds
10 : {
11 95 : Service::Service(uint8_t const service, DiagSession::DiagSessionMask const sessionMask)
12 : : AbstractDiagJob(
13 95 : fService,
14 : 1U,
15 : 0U,
16 : AbstractDiagJob::VARIABLE_REQUEST_LENGTH,
17 : AbstractDiagJob::VARIABLE_RESPONSE_LENGTH,
18 95 : sessionMask)
19 : {
20 95 : init(service);
21 95 : }
22 :
23 47 : Service::Service(
24 : uint8_t const service,
25 : uint8_t const requestPayloadLength,
26 : uint8_t const responseLength,
27 47 : DiagSession::DiagSessionMask const sessionMask)
28 47 : : AbstractDiagJob(fService, 1U, 0U, requestPayloadLength, responseLength, sessionMask)
29 : {
30 47 : init(service);
31 47 : }
32 :
33 142 : void Service::init(uint8_t const service)
34 : {
35 142 : fService[0] = service;
36 142 : setDefaultDiagReturnCode(DiagReturnCode::ISO_SUBFUNCTION_NOT_SUPPORTED);
37 142 : }
38 :
39 : DiagReturnCode::Type
40 21 : Service::verify(uint8_t const* const request, uint16_t const /* requestLength */)
41 : {
42 21 : if (request[0] != fpImplementedRequest[0])
43 : {
44 4 : return DiagReturnCode::NOT_RESPONSIBLE;
45 : }
46 17 : if (!fAllowedSessions.match(getSession()))
47 : {
48 1 : return DiagReturnCode::ISO_SERVICE_NOT_SUPPORTED_IN_ACTIVE_SESSION;
49 : }
50 16 : return DiagReturnCode::OK;
51 : }
52 :
53 : } // namespace uds
|