LCOV - code coverage report
Current view: top level - transport - SessionHolder.cpp (source / functions) Hit Total Coverage
Test: lcov_final.info Lines: 37 51 72.5 %
Date: 2024-02-15 08:20:41 Functions: 7 10 70.0 %

          Line data    Source code
       1             : /*
       2             :  *    Copyright (c) 2021 Project CHIP Authors
       3             :  *
       4             :  *    Licensed under the Apache License, Version 2.0 (the "License");
       5             :  *    you may not use this file except in compliance with the License.
       6             :  *    You may obtain a copy of the License at
       7             :  *
       8             :  *        http://www.apache.org/licenses/LICENSE-2.0
       9             :  *
      10             :  *    Unless required by applicable law or agreed to in writing, software
      11             :  *    distributed under the License is distributed on an "AS IS" BASIS,
      12             :  *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
      13             :  *    See the License for the specific language governing permissions and
      14             :  *    limitations under the License.
      15             :  */
      16             : 
      17             : #include <transport/SessionHolder.h>
      18             : 
      19             : #include <transport/SecureSession.h>
      20             : #include <transport/Session.h>
      21             : 
      22             : namespace chip {
      23             : 
      24        5905 : SessionHolder::~SessionHolder()
      25             : {
      26        5905 :     Release();
      27        5905 : }
      28             : 
      29           0 : SessionHolder::SessionHolder(const SessionHolder & that) : IntrusiveListNodeBase()
      30             : {
      31           0 :     mSession = that.mSession;
      32           0 :     if (mSession.HasValue())
      33             :     {
      34           0 :         mSession.Value()->AddHolder(*this);
      35             :     }
      36           0 : }
      37             : 
      38           0 : SessionHolder::SessionHolder(SessionHolder && that) : IntrusiveListNodeBase()
      39             : {
      40           0 :     mSession = that.mSession;
      41           0 :     if (mSession.HasValue())
      42             :     {
      43           0 :         mSession.Value()->AddHolder(*this);
      44             :     }
      45             : 
      46           0 :     that.Release();
      47           0 : }
      48             : 
      49         233 : SessionHolder & SessionHolder::operator=(const SessionHolder & that)
      50             : {
      51         233 :     Release();
      52             : 
      53         233 :     mSession = that.mSession;
      54         233 :     if (mSession.HasValue())
      55             :     {
      56         233 :         mSession.Value()->AddHolder(*this);
      57             :     }
      58             : 
      59         233 :     return *this;
      60             : }
      61             : 
      62          10 : SessionHolder & SessionHolder::operator=(SessionHolder && that)
      63             : {
      64          10 :     Release();
      65             : 
      66          10 :     mSession = that.mSession;
      67          10 :     if (mSession.HasValue())
      68             :     {
      69          10 :         mSession.Value()->AddHolder(*this);
      70             :     }
      71             : 
      72          10 :     that.Release();
      73             : 
      74          10 :     return *this;
      75             : }
      76             : 
      77          55 : bool SessionHolder::GrabPairingSession(const SessionHandle & session)
      78             : {
      79          55 :     Release();
      80             : 
      81          55 :     if (!session->IsSecureSession())
      82           0 :         return false;
      83             : 
      84          55 :     if (!session->AsSecureSession()->IsEstablishing())
      85           0 :         return false;
      86             : 
      87          55 :     GrabUnchecked(session);
      88          55 :     return true;
      89             : }
      90             : 
      91        7829 : bool SessionHolder::Grab(const SessionHandle & session)
      92             : {
      93        7829 :     Release();
      94             : 
      95        7829 :     if (!session->IsActiveSession())
      96           0 :         return false;
      97             : 
      98        7829 :     GrabUnchecked(session);
      99        7829 :     return true;
     100             : }
     101             : 
     102        7886 : void SessionHolder::GrabUnchecked(const SessionHandle & session)
     103             : {
     104        7886 :     VerifyOrDie(!mSession.HasValue());
     105        7886 :     mSession.Emplace(session.mSession);
     106        7886 :     session->AddHolder(*this);
     107        7886 : }
     108             : 
     109       15659 : void SessionHolder::Release()
     110             : {
     111       15659 :     if (mSession.HasValue())
     112             :     {
     113        8129 :         mSession.Value()->RemoveHolder(*this);
     114        8129 :         mSession.ClearValue();
     115             :     }
     116       15659 : }
     117             : 
     118             : } // namespace chip

Generated by: LCOV version 1.14