/src/PcapPlusPlus/Packet++/src/TpktLayer.cpp
Line | Count | Source |
1 | | #include "TpktLayer.h" |
2 | | #include "EndianPortable.h" |
3 | | #include "CotpLayer.h" |
4 | | #include "PayloadLayer.h" |
5 | | #include <cstring> |
6 | | #include <sstream> |
7 | | |
8 | | namespace pcpp |
9 | | { |
10 | | TpktLayer::TpktLayer(uint8_t version, uint16_t length) |
11 | 0 | { |
12 | 0 | m_DataLen = sizeof(tpkthdr); |
13 | 0 | m_Data = new uint8_t[m_DataLen]; |
14 | 0 | memset(m_Data, 0, m_DataLen); |
15 | 0 | tpkthdr* tpktHdr = getTpktHeader(); |
16 | 0 | tpktHdr->version = version; |
17 | 0 | tpktHdr->reserved = 0; |
18 | 0 | tpktHdr->length = htobe16(length); |
19 | 0 | m_Protocol = TPKT; |
20 | 0 | } |
21 | | |
22 | | uint8_t TpktLayer::getReserved() const |
23 | 0 | { |
24 | 0 | return getTpktHeader()->reserved; |
25 | 0 | } |
26 | | |
27 | | uint8_t TpktLayer::getVersion() const |
28 | 4.42k | { |
29 | 4.42k | return getTpktHeader()->version; |
30 | 4.42k | } |
31 | | |
32 | | uint16_t TpktLayer::getLength() const |
33 | 4.42k | { |
34 | 4.42k | return htobe16(getTpktHeader()->length); |
35 | 4.42k | } |
36 | | |
37 | | void TpktLayer::setLength(uint16_t length) const |
38 | 0 | { |
39 | 0 | getTpktHeader()->length = htobe16(length); |
40 | 0 | } |
41 | | |
42 | | void TpktLayer::setVersion(uint8_t version) const |
43 | 0 | { |
44 | 0 | getTpktHeader()->version = version; |
45 | 0 | } |
46 | | |
47 | | std::string TpktLayer::toString() const |
48 | 4.42k | { |
49 | 4.42k | std::ostringstream versionStream; |
50 | 4.42k | versionStream << std::to_string(getVersion()); |
51 | 4.42k | std::ostringstream lengthStream; |
52 | 4.42k | lengthStream << std::to_string(getLength()); |
53 | | |
54 | 4.42k | return "TPKT Layer, version: " + versionStream.str() + ", length: " + lengthStream.str(); |
55 | 4.42k | } |
56 | | |
57 | | void TpktLayer::parseNextLayer() |
58 | 15.6k | { |
59 | 15.6k | size_t headerLen = getHeaderLen(); |
60 | 15.6k | if (m_DataLen <= headerLen) |
61 | 13 | return; |
62 | | |
63 | 15.6k | uint8_t* payload = m_Data + headerLen; |
64 | 15.6k | size_t payloadLen = m_DataLen - headerLen; |
65 | | |
66 | 15.6k | tryConstructNextLayerWithFallback<CotpLayer, PayloadLayer>(payload, payloadLen); |
67 | 15.6k | } |
68 | | |
69 | | } // namespace pcpp |