/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 | } |