/src/PcapPlusPlus/Packet++/src/PayloadLayer.cpp
Line | Count | Source |
1 | | #define LOG_MODULE PacketLogModulePayloadLayer |
2 | | |
3 | | #include "PayloadLayer.h" |
4 | | #include "GeneralUtils.h" |
5 | | #include <sstream> |
6 | | #include <cstring> |
7 | | |
8 | | namespace pcpp |
9 | | { |
10 | | |
11 | 0 | PayloadLayer::PayloadLayer(const uint8_t* data, size_t dataLen) : Layer() |
12 | 0 | { |
13 | 0 | allocData(dataLen, false); |
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_Protocol = GenericPayload; |
22 | 0 | auto const dataLen = payloadAsHexStream.size() / 2; |
23 | 0 | if (dataLen > 0) |
24 | 0 | { |
25 | 0 | allocData(dataLen, false); |
26 | 0 | if (hexStringToByteArray(payloadAsHexStream, m_Data, m_DataLen) == 0) |
27 | 0 | { |
28 | | // TODO: Move to base Layer class. |
29 | 0 | delete[] m_Data; |
30 | 0 | m_Data = nullptr; |
31 | 0 | m_DataLen = 0; |
32 | 0 | } |
33 | 0 | } |
34 | 0 | } |
35 | | |
36 | | void PayloadLayer::setPayload(const uint8_t* newPayload, size_t newPayloadLength) |
37 | 0 | { |
38 | 0 | if (newPayloadLength < m_DataLen) |
39 | 0 | { |
40 | | // shorten payload layer |
41 | 0 | shortenLayer(newPayloadLength, m_DataLen - newPayloadLength); |
42 | 0 | } |
43 | 0 | else if (newPayloadLength > m_DataLen) |
44 | 0 | { |
45 | | // extend payload layer |
46 | 0 | extendLayer(m_DataLen, newPayloadLength - m_DataLen); |
47 | 0 | } |
48 | | |
49 | | // and copy data to layer |
50 | | // this is also executed if the newPayloadLength == m_DataLen |
51 | 0 | memcpy(m_Data, newPayload, newPayloadLength); |
52 | 0 | } |
53 | | |
54 | | std::string PayloadLayer::toString() const |
55 | 104k | { |
56 | 104k | std::ostringstream dataLenStream; |
57 | 104k | dataLenStream << m_DataLen; |
58 | | |
59 | 104k | return "Payload Layer, Data length: " + dataLenStream.str() + " [Bytes]"; |
60 | 104k | } |
61 | | |
62 | | } // namespace pcpp |