Skip to content

Commit 280d3f0

Browse files
author
Damir Zainullin
committed
++
1 parent c085717 commit 280d3f0

File tree

109 files changed

+11980
-1178
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

109 files changed

+11980
-1178
lines changed

process-plugin-api/packet.hpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ struct Packet {
2929

3030
std::span<const std::byte> payload;
3131
std::optional<uint32_t> mplsTopLabel;
32+
std::optional<uint16_t> vlanId;
3233

3334
};
3435

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
// Common for RTSP, SIP, SMTP, HTTP
2+
#pragma once
3+
4+
#include <span>
5+
#include <string_view>
6+
#include <optional>
7+
#include <ranges>
8+
9+
#include <rangeReader/rangeReader.hpp>
10+
#include <rangeReader/generator.hpp>
11+
12+
namespace ipxp
13+
{
14+
15+
struct HeaderField {
16+
std::string_view key;
17+
std::string_view value;
18+
};
19+
20+
class HeaderFieldReader;
21+
22+
struct HeaderFieldReaderFactory {
23+
HeaderFieldReader* self;
24+
25+
auto operator()(std::span<const std::byte> payload) const {
26+
return Generator::generate([payload, self = self]() mutable -> std::optional<HeaderField> {
27+
auto extensionEnd = std::ranges::find(payload, std::byte{'\n'});
28+
if (extensionEnd == payload.end()) {
29+
return std::nullopt;
30+
}
31+
32+
if (std::distance(payload.begin(), extensionEnd) < 2) {
33+
self->setSuccess();
34+
return std::nullopt;
35+
}
36+
37+
auto delimiterIt
38+
= std::ranges::find(payload, std::byte{':'});
39+
if (std::distance(delimiterIt, payload.end()) < 2) {
40+
return std::nullopt;
41+
}
42+
43+
std::string_view key
44+
= {reinterpret_cast<const char*>(
45+
payload.data()), delimiterIt - payload.data()};
46+
47+
std::string_view value
48+
= {reinterpret_cast<const char*>(
49+
delimiterIt + 2), extensionEnd - delimiterIt - 2};
50+
51+
payload
52+
= payload.subspan(extensionEnd - payload.data());
53+
54+
return HeaderField{key, value};
55+
}) | std::views::take_while([](const std::optional<HeaderField>& v) {
56+
return v.has_value();
57+
}) | std::views::transform([](const std::optional<HeaderField>& v) {
58+
return *v;
59+
});
60+
}
61+
};
62+
63+
class HeaderFieldReader : public RangeReader<HeaderFieldReaderFactory> {
64+
public:
65+
HeaderFieldReader(std::span<const std::byte> payload)
66+
: RangeReader(payload, HeaderFieldReaderFactory{this}) {}
67+
};
68+
69+
70+
} // namespace ipxp

process-plugin-api/process/common/tlsParser/extensionReaders/prefixedLengthStringReader.hpp renamed to process-plugin-api/process/common/readers/prefixedLengthStringReader/prefixedLengthStringReader.hpp

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,9 @@
33
#include <span>
44
#include <views>
55
#include <optional>
6-
#include <common/rangeReader/rangeReader.hpp>
7-
#include <common/rangeReader/generator.hpp>
6+
#include "../rangeReader/rangeReader.hpp"
7+
#include "../rangeReader/generator.hpp"
8+
#include "../../utils/toHostByteOrder.hpp"
89

910
namespace ipxp
1011
{
@@ -25,13 +26,12 @@ struct PrefixedLengthStringReaderFactory {
2526
}
2627

2728
if (extension.size() < sizeof(LengthType)) {
28-
self->setFailed();
2929
return std::nullopt;
3030
}
3131

32-
const LengthType length = ntohs(*reinterpret_cast<const uint16_t*>(extension.data()));
32+
const LengthType length
33+
= toHostByteOrder(*reinterpret_cast<const LengthType*>(extension.data()));
3334
if (extension.size() < length + sizeof(length)) {
34-
self->setFailed();
3535
return std::nullopt;
3636
}
3737

process-plugin-api/process/common/rangeReader/generator.hpp renamed to process-plugin-api/process/common/readers/rangeReader/generator.hpp

File renamed without changes.

process-plugin-api/process/common/rangeReader/rangeReader.hpp renamed to process-plugin-api/process/common/readers/rangeReader/rangeReader.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,9 +38,6 @@ class RangeReader {
3838
}
3939

4040
protected:
41-
constexpr void setFailed() noexcept {
42-
m_state = ParsingState::FAILURE;
43-
}
4441

4542
constexpr void setSuccess() noexcept {
4643
m_state = ParsingState::SUCCESS;

process-plugin-api/process/common/tlsParser/extensionReaders/extensionReader.hpp

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,12 @@ struct ExtensionReaderFactory {
2727
return std::nullopt;
2828
}
2929
if (payload.size() < sizeof(uint16_t)) {
30-
self->setFailed();
3130
return std::nullopt;
3231
}
3332

3433
const uint16_t length
3534
= ntohs(*reinterpret_cast<const uint16_t*>(extension.data()));
3635
if (length > extension.size() || length < sizeof(uint16_t)) {
37-
self->setFailed();
3836
return std::nullopt;
3937
}
4038

process-plugin-api/process/common/tlsParser/extensionReaders/userAgentReader.hpp

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -29,20 +29,17 @@ struct UserAgentReaderFactory {
2929
const std::optional<VariableLengthInt> id
3030
= readQUICVariableLengthInt(userAgentExtension);
3131
if (!id.has_value()) {
32-
self->setFailed();
3332
return std::nullopt;
3433
}
3534

3635
const std::size_t lengthOffset = id->length;
3736
const std::optional<VariableLengthInt> userAgentLength
3837
= readQUICVariableLengthInt(userAgentExtension.subspan(lengthOffset));
3938
if (!userAgentLength.has_value()) {
40-
self->setFailed();
4139
return std::nullopt;
4240
}
4341
if (id->length + userAgentLength->length + userAgentLength
4442
> userAgentExtension.size()) {
45-
self->setFailed();
4643
return std::nullopt;
4744
}
4845

process-plugin-api/process/common/tlsParser/tlsExtensionHeader.hpp

Lines changed: 0 additions & 18 deletions
This file was deleted.

process-plugin-api/process/common/tlsParser/tlsExtensionSNIHeader.hpp

Lines changed: 0 additions & 19 deletions
This file was deleted.

process-plugin-api/process/common/tlsParser/tlsExtensionType.hpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,10 @@
22

33
#include <cstdint>
44

5-
namespace ipxp::tls
5+
namespace ipxp
66
{
77

8-
enum class ExtensionType : uint16_t
8+
enum class TLSExtensionType : uint16_t
99
{
1010
SERVER_NAME = 0,
1111
SUPPORTED_GROUPS = 10, // AKA supported_groups, ECLIPTIC_CURVES

0 commit comments

Comments
 (0)