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 : #include "uds/base/Service.h"
12 :
13 : #include "uds/connection/IncomingDiagConnection.h"
14 : #include "uds/session/DiagSession.h"
15 : #include "uds/session/IDiagSessionManager.h"
16 :
17 : namespace uds
18 : {
19 101 : Service::Service(uint8_t const service, DiagSession::DiagSessionMask const sessionMask)
20 : : AbstractDiagJob(
21 101 : fService,
22 : 1U,
23 : 0U,
24 : AbstractDiagJob::VARIABLE_REQUEST_LENGTH,
25 : AbstractDiagJob::VARIABLE_RESPONSE_LENGTH,
26 101 : sessionMask)
27 : {
28 101 : init(service);
29 101 : }
30 :
31 47 : Service::Service(
32 : uint8_t const service,
33 : uint8_t const requestPayloadLength,
34 : uint8_t const responseLength,
35 47 : DiagSession::DiagSessionMask const sessionMask)
36 47 : : AbstractDiagJob(fService, 1U, 0U, requestPayloadLength, responseLength, sessionMask)
37 : {
38 47 : init(service);
39 47 : }
40 :
41 148 : void Service::init(uint8_t const service)
42 : {
43 148 : fService[0] = service;
44 148 : setDefaultDiagReturnCode(DiagReturnCode::ISO_SUBFUNCTION_NOT_SUPPORTED);
45 148 : }
46 :
47 : DiagReturnCode::Type
48 27 : Service::verify(uint8_t const* const request, uint16_t const /* requestLength */)
49 : {
50 27 : if (request[0] != fpImplementedRequest[0])
51 : {
52 4 : return DiagReturnCode::NOT_RESPONSIBLE;
53 : }
54 23 : if (!fAllowedSessions.match(getSession()))
55 : {
56 1 : return DiagReturnCode::ISO_SERVICE_NOT_SUPPORTED_IN_ACTIVE_SESSION;
57 : }
58 22 : return DiagReturnCode::OK;
59 : }
60 :
61 : } // namespace uds
|