/src/PcapPlusPlus/Packet++/src/PayloadLayer.cpp
Line | Count | Source (jump to first uncovered line) |
1 | | #define LOG_MODULE PacketLogModulePayloadLayer |
2 | | |
3 | | #include "PayloadLayer.h" |
4 | | #include "GeneralUtils.h" |
5 | | #include <string.h> |
6 | | #include <sstream> |
7 | | |
8 | | namespace pcpp |
9 | | { |
10 | | |
11 | | PayloadLayer::PayloadLayer(const uint8_t* data, size_t dataLen, bool) : Layer() |
12 | 0 | { |
13 | 0 | m_Data = new uint8_t[dataLen]; |
14 | 0 | memcpy(m_Data, data, dataLen); |
15 | 0 | m_DataLen = dataLen; |
16 | 0 | m_Protocol = GenericPayload; |
17 | 0 | } |
18 | | |
19 | | PayloadLayer::PayloadLayer(const std::string& payloadAsHexStream) |
20 | 0 | { |
21 | 0 | m_DataLen = payloadAsHexStream.length() / 2; |
22 | 0 | m_Data = new uint8_t[m_DataLen]; |
23 | 0 | m_Protocol = GenericPayload; |
24 | 0 | if (hexStringToByteArray(payloadAsHexStream, m_Data, m_DataLen) == 0) |
25 | 0 | { |
26 | 0 | delete [] m_Data; |
27 | 0 | m_Data = nullptr; |
28 | 0 | m_DataLen = 0; |
29 | 0 | } |
30 | 0 | } |
31 | | |
32 | | void PayloadLayer::setPayload(const uint8_t* newPayload, size_t newPayloadLength) |
33 | 0 | { |
34 | 0 | if (newPayloadLength < m_DataLen) |
35 | 0 | { |
36 | | // shorten payload layer |
37 | 0 | shortenLayer(newPayloadLength, m_DataLen - newPayloadLength); |
38 | 0 | } |
39 | 0 | else if (newPayloadLength > m_DataLen) |
40 | 0 | { |
41 | | // extend payload layer |
42 | 0 | extendLayer(m_DataLen, newPayloadLength - m_DataLen); |
43 | 0 | } |
44 | | |
45 | | // and copy data to layer |
46 | | // this is also executed if the newPayloadLength == m_DataLen |
47 | 0 | memcpy(m_Data, newPayload, newPayloadLength); |
48 | 0 | } |
49 | | |
50 | | std::string PayloadLayer::toString() const |
51 | 219k | { |
52 | 219k | std::ostringstream dataLenStream; |
53 | 219k | dataLenStream << m_DataLen; |
54 | | |
55 | 219k | return "Payload Layer, Data length: " + dataLenStream.str() + " [Bytes]"; |
56 | 219k | } |
57 | | |
58 | | } // namespace pcpp |