congestvpn/VpnPacket.hpp

43 lines
1.3 KiB
C++
Raw Normal View History

2020-06-05 17:30:35 +02:00
#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;
};