Coverage Report

Created: 2025-07-23 06:03

/src/resiprocate/resip/stack/ReceivedParameter.cxx
Line
Count
Source (jump to first uncovered line)
1
#include "resip/stack/ReceivedParameter.hxx"
2
#include "resip/stack/Symbols.hxx"
3
#include "rutil/ParseBuffer.hxx"
4
#include "rutil/Logger.hxx"
5
6
using namespace resip;
7
8
#define RESIPROCATE_SUBSYSTEM resip::Subsystem::SIP
9
10
ReceivedParameter::ReceivedParameter(ParameterTypes::Type type,
11
                                     ParseBuffer& pb,
12
                                     const std::bitset<256>& terminators) :
13
0
   DataParameter(type)
14
0
{
15
0
   pb.skipWhitespace();
16
17
0
   if (!pb.eof() && *pb.position() == Symbols::EQUALS[0])
18
0
   {
19
      // Catch the exception gracefully to handle seeing ";received="
20
0
      try
21
0
      {
22
0
         pb.skipChar();
23
0
         pb.skipWhitespace();
24
25
         // Handle cases such as ";received="
26
0
         if(terminators[(unsigned char)(*pb.position())])
27
0
         {
28
0
            ErrLog(<< "Empty value in string-type parameter.");
29
0
            return;
30
0
         }
31
32
0
         const char* pos = pb.position();
33
0
         pb.skipToOneOf(terminators);
34
0
         pb.data(mValue, pos);
35
0
      }
36
0
      catch (const BaseException& e)
37
0
      {
38
0
         ErrLog(<< "Caught exception: " << e);
39
0
      }
40
0
   }
41
42
   // The value of p_received will be filled if it is not empty.
43
   // Otherwise, no exceptions as the empty parameter is allowed here.
44
0
}
45
46
ReceivedParameter::ReceivedParameter(ParameterTypes::Type type) :
47
0
   DataParameter(type)
48
0
{
49
0
}
50
51
Parameter* ReceivedParameter::decode(ParameterTypes::Type type,
52
                                     ParseBuffer& pb,
53
                                     const std::bitset<256>& terminators,
54
                                     PoolBase* pool)
55
0
{
56
0
   return new (pool) ReceivedParameter(type, pb, terminators);
57
0
}
58
59
Parameter* ReceivedParameter::clone() const
60
0
{
61
0
   return new ReceivedParameter(*this);
62
0
}
63
64
EncodeStream&
65
ReceivedParameter::encode(EncodeStream& stream) const
66
0
{
67
0
   if (!mValue.empty())
68
0
   {
69
0
      return stream << getName() << Symbols::EQUALS << mValue;
70
0
   }
71
0
   else
72
0
   {
73
0
      return stream << getName();
74
0
   }
75
0
}