/*******************************************/
/* DESCRIPTION */

// This file contains the high-level logic.


/*******************************************/
/* INCLUDES */

#ifndef __MAIN_H__
#define __MAIN_H__

#include <getopt.h>

#include "encap.h"
#include "tool.h"
#include "tcp_by_tcp_tunnel.h"
#include "tcp_by_http_tunnel.h"
#include "tcp_by_udp_tunnel.h"
#include "tcp_by_dns_tunnel.h"


/*******************************************/
/* DEFINES AND ENUM */

// Program options.
struct prog_opt_struct {
    bool h;
    bool v;
    bool l;
    bool r;
    bool t;
    bool o;
    bool s;
    bool d;
    char *sd_ptr;
    char *t_ptr;
    int port_1;
    int port_2;
    sockaddr_in dest_addr;
};


/*******************************************/
/* GLOBALS */

// Program name.
extern char *prog_name;

extern prog_opt_struct prog_opt;


/*******************************************/
/* PROTOTYPES */

int parse_command_line(int argc, char *argv[], prog_opt_struct * opt_ptr);
void print_usage();
void print_version();
void test_area();



#endif
