Matter SDK Coverage Report
Current view: top level - transport - SessionHolder.cpp (source / functions) Coverage Total Hit
Test: SHA:b879ecb8e99e175eea0a293a888bda853da2b19c Lines: 72.5 % 51 37
Test Date: 2025-01-17 19:00:11 Functions: 70.0 % 10 7

            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         7533 : SessionHolder::~SessionHolder()
      25              : {
      26         7533 :     Release();
      27         7533 : }
      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           52 : bool SessionHolder::GrabPairingSession(const SessionHandle & session)
      78              : {
      79           52 :     Release();
      80              : 
      81           52 :     if (!session->IsSecureSession())
      82            0 :         return false;
      83              : 
      84           52 :     if (!session->AsSecureSession()->IsEstablishing())
      85            0 :         return false;
      86              : 
      87           52 :     GrabUnchecked(session);
      88           52 :     return true;
      89              : }
      90              : 
      91         8361 : bool SessionHolder::Grab(const SessionHandle & session)
      92              : {
      93         8361 :     Release();
      94              : 
      95         8361 :     if (!session->IsActiveSession())
      96            0 :         return false;
      97              : 
      98         8361 :     GrabUnchecked(session);
      99         8361 :     return true;
     100              : }
     101              : 
     102         8415 : void SessionHolder::GrabUnchecked(const SessionHandle & session)
     103              : {
     104         8415 :     VerifyOrDie(!mSession.HasValue());
     105         8415 :     mSession.Emplace(session.mSession);
     106         8415 :     session->AddHolder(*this);
     107         8415 : }
     108              : 
     109        17966 : void SessionHolder::Release()
     110              : {
     111        17966 :     if (mSession.HasValue())
     112              :     {
     113         8658 :         mSession.Value()->RemoveHolder(*this);
     114         8658 :         mSession.ClearValue();
     115              :     }
     116        17966 : }
     117              : 
     118              : } // namespace chip
        

Generated by: LCOV version 2.0-1