#pragma once

#include "darkmagic.h"
#include "nfqws.h"

#include <stdint.h>
#include <stdbool.h>
#include <netinet/ip.h>
#include <netinet/ip6.h>
#include <netinet/tcp.h>
#include <netinet/in.h>

#define DPI_DESYNC_FWMARK_DEFAULT 0x40000000
#define DPI_DESYNC_MAX_FAKE_LEN 1500

enum dpi_desync_mode {
	DESYNC_NONE=0,
	DESYNC_FAKE,
	DESYNC_RST,
	DESYNC_RSTACK,
	DESYNC_DISORDER,
	DESYNC_DISORDER2,
	DESYNC_SPLIT,
	DESYNC_SPLIT2
};

void desync_init();
packet_process_result dpi_desync_packet(uint8_t *data_pkt, size_t len_pkt, struct iphdr *iphdr, struct ip6_hdr *ip6hdr, struct tcphdr *tcphdr, size_t len_tcp, uint8_t *data_payload, size_t len_payload);