43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
|
#pragma once
|
||
|
|
||
|
/** A packet to be transmitted or received over the VPN socket */
|
||
|
|
||
|
#include <cstdlib>
|
||
|
|
||
|
#include "ip_header.hpp"
|
||
|
|
||
|
class VpnPacket {
|
||
|
public:
|
||
|
static const size_t VPN_HEADER_SIZE;
|
||
|
|
||
|
VpnPacket(size_t mtu);
|
||
|
~VpnPacket();
|
||
|
|
||
|
/// Try to parse the packet as IPv6, return `false` upon failure.
|
||
|
bool parse_as_ipv6();
|
||
|
bool ipv6_parsed() const { return _ipv6_parsed; }
|
||
|
const IPv6Header& get_ipv6_header() const { return _ipv6_header; }
|
||
|
|
||
|
const char* get_payload() const { return _data + VPN_HEADER_SIZE; }
|
||
|
char* get_payload() { return _data + VPN_HEADER_SIZE; }
|
||
|
size_t get_payload_space() const {
|
||
|
return _data_space - VPN_HEADER_SIZE; }
|
||
|
size_t get_payload_size() const {
|
||
|
return _data_size - VPN_HEADER_SIZE; }
|
||
|
void set_payload_size(size_t payload_size) {
|
||
|
_data_size = payload_size + VPN_HEADER_SIZE; }
|
||
|
|
||
|
const char* get_data() const { return _data; }
|
||
|
char* get_data() { return _data; }
|
||
|
size_t get_data_space() const { return _data_space; }
|
||
|
size_t get_data_size() const { return _data_size; }
|
||
|
void set_data_size(size_t data_size) { _data_size = data_size; }
|
||
|
|
||
|
private:
|
||
|
char* _data;
|
||
|
size_t _data_space, _data_size;
|
||
|
|
||
|
bool _ipv6_parsed;
|
||
|
IPv6Header _ipv6_header;
|
||
|
};
|