LCOV - code coverage report
Current view: top level - libs/bsw/uds/src/uds/base - DiagJobRoot.cpp (source / functions) Coverage Total Hit
Test: coverage.info Lines: 79.3 % 29 23
Test Date: 2026-02-24 11:21:15 Functions: 100.0 % 6 6

            Line data    Source code
       1              : // Copyright 2024 Accenture.
       2              : 
       3              : #include "uds/base/DiagJobRoot.h"
       4              : 
       5              : #include "transport/TransportConfiguration.h"
       6              : #include "uds/UdsConstants.h"
       7              : #include "uds/authentication/DefaultDiagAuthenticator.h"
       8              : #include "uds/authentication/IDiagAuthenticator.h"
       9              : #include "uds/connection/IncomingDiagConnection.h"
      10              : #include "uds/session/IDiagSessionManager.h"
      11              : 
      12              : namespace uds
      13              : {
      14              : using ::transport::TransportConfiguration;
      15              : 
      16          154 : DiagJobRoot::DiagJobRoot() : AbstractDiagJob(nullptr, 0U, 0U)
      17              : {
      18          154 :     fDefaultDiagReturnCode = DiagReturnCode::ISO_SERVICE_NOT_SUPPORTED;
      19          154 :     sfpDiagJobRoot         = this;
      20          154 : }
      21              : 
      22          159 : DiagJobRoot::~DiagJobRoot() { sfpDiagJobRoot = nullptr; }
      23              : 
      24           12 : DiagReturnCode::Type DiagJobRoot::verify(uint8_t const* const request, uint16_t const requestLength)
      25              : {
      26           12 :     if ((request == nullptr) || (requestLength < 1U))
      27              :     { // no empty requests!
      28            3 :         return DiagReturnCode::ISO_GENERAL_REJECT;
      29              :     }
      30            9 :     return DiagReturnCode::OK;
      31              : }
      32              : 
      33            9 : DiagReturnCode::Type DiagJobRoot::execute(
      34              :     IncomingDiagConnection& connection, uint8_t const* const request, uint16_t const requestLength)
      35              : {
      36            9 :     if (connection.serviceId == 0x7FU) // no response to incoming NRC
      37              :     {
      38            0 :         connection.terminate();
      39            0 :         return DiagReturnCode::OK;
      40              :     }
      41            9 :     if (TransportConfiguration::isFunctionalAddress(connection.targetAddress))
      42              :     {
      43            5 :         if (connection.serviceId == uds::ServiceId::TESTER_PRESENT)
      44              :         {
      45            7 :             if ((!getDiagSessionManager().isSessionTimeoutActive()) && (requestLength > 1U)
      46            7 :                 && (((request[1] & SUPPRESS_POSITIVE_RESPONSE_MASK)) > 0U))
      47              :             {
      48            1 :                 connection.terminate();
      49            1 :                 return DiagReturnCode::OK;
      50              :             }
      51              :         }
      52              :     }
      53            8 :     DiagReturnCode::Type const ret = verify(request, requestLength);
      54            8 :     if (ret != DiagReturnCode::OK)
      55              :     {
      56            0 :         (void)getDiagSessionManager().acceptedJob(connection, *this, request, requestLength);
      57            0 :         return ret;
      58              :     }
      59            8 :     if (!fAllowedSessions.match(getSession()))
      60              :     {
      61            0 :         acceptJob(connection, request, requestLength);
      62            0 :         return DiagReturnCode::ISO_REQUEST_OUT_OF_RANGE;
      63              :     }
      64            8 :     return process(connection, request, requestLength);
      65              : }
      66              : 
      67              : DiagReturnCode::Type
      68           59 : DiagJobRoot::verifySupplierIndication(uint8_t const* const request, uint16_t const requestLength)
      69              : {
      70              :     (void)request;
      71              :     (void)requestLength;
      72           59 :     return DiagReturnCode::OK;
      73              : }
      74              : 
      75              : } // namespace uds
        

Generated by: LCOV version 2.0-1