#ifndef _MAIN_H #define _MAIN_H #include <arpa/inet.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <netdb.h> #include <netinet/in.h> #include <pwd.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <sys/socket.h> #include <sys/stat.h> #include <sys/time.h> #include <sys/types.h> #include <syslog.h> #include <time.h> #include <tox/tox.h> #include <unistd.h> #include "util.h" #include "uthash.h" #include "utlist.h" #define PROTOCOL_MAGIC_V1 0xa26a #define PROTOCOL_MAGIC_V2 0xa26b #define PROTOCOL_MAGIC PROTOCOL_MAGIC_V2 #define PROTOCOL_MAGIC_HIGH (PROTOCOL_MAGIC >> 8) #define PROTOCOL_MAGIC_LOW (PROTOCOL_MAGIC & 0xff) #define PACKET_TYPE_PONG 0x0100 #define PACKET_TYPE_PING 0x0108 #define PACKET_TYPE_REQUESTTUNNEL 0x0602 /* TODO - currently unused */ #define PACKET_TYPE_DENYTUNNEL 0x0604 #define PACKET_TYPE_ACKTUNNEL 0x0610 #define PACKET_TYPE_TCP 0x0600 #define PACKET_TYPE_TCP_FIN 0x0601 #define INT16_AT(array,pos) ( (*((array)+(pos)))*256 + (*((array)+(pos)+1)) ) #define INT32_AT(array,pos) ( (*((array)+(pos)))*256*256*256 + (*((array)+(pos)+1))*256*256 +(*((array)+(pos)+2))*256 + (*((array)+(pos)+3)) ) #define BYTE1(number) ((number)&0xff) #define BYTE2(number) (((number) / 256) & 0xff) #define BYTE3(number) (((number) / (256*256)) & 0xff) #define BYTE4(number) (((number) / (256*256*256)) & 0xff) /* Offset of the data buffer in the packet */ #define PROTOCOL_BUFFER_OFFSET 8 #define READ_BUFFER_SIZE TOX_MAX_CUSTOM_PACKET_SIZE - PROTOCOL_BUFFER_OFFSET #define PROTOCOL_MAX_PACKET_SIZE (READ_BUFFER_SIZE + PROTOCOL_BUFFER_OFFSET) typedef struct tunnel_t { /* The forwarded socket fd */ int sockfd; /* Connection ID, must be int because of uthash */ int connid; /* Friend number of remote end */ uint32_t friendnumber; UT_hash_handle hh; } tunnel; typedef struct tunnel_list_t { tunnel *tun; struct tunnel_list_t *next; } tunnel_list; typedef struct allowed_toxid { uint8_t toxid[TOX_ADDRESS_SIZE]; struct allowed_toxid *next; } allowed_toxid; typedef struct protocol_frame_t { uint32_t friendnumber; /* Fields actually found in the protocol */ uint16_t magic; uint16_t packet_type; uint16_t connid; uint16_t data_length; uint8_t *data; } protocol_frame; /* A list of local port forwards (listen locally, forward to server) */ typedef struct local_port_forward_t { int local_port; char *remote_host; int remote_port; /* Sock representing the local port - call accept() on it */ int bind_sockfd; /* If tunnel open is pending, accepted sockfd is temporarly stored here */ /* -1 = we can accept another connection */ int accept_sockfd; /* When the forward has been created - used in ack timeouts */ time_t created; /* ID - used to identify the ack frame */ uint32_t forward_id; struct local_port_forward_t *next; } local_port_forward; /* Rules policy */ enum rules_policy_enum { VALIDATE, NONE }; typedef struct rule { uint16_t port; char * host; struct rule *next; } rule; /**** GLOBAL VARIABLES ****/ extern Tox *tox; /* Whether we're a client */ extern int client_mode; /* Just send a ping and exit */ extern int ping_mode; /* TOX_CONNECTION global variable */ extern TOX_CONNECTION connection_status; /* Open a local port and forward it */ extern int client_local_port_mode; /* Forward stdin/stdout to remote machine - SSH ProxyCommand mode */ extern int client_pipe_mode; /* Remote Tox ID in client mode */ extern uint8_t *remote_tox_id; /* Ports and hostname for port forwarding */ extern int remote_port; extern char *remote_host; extern int local_port; /* Shared secret used for authentication */ extern int use_shared_secret; extern char shared_secret[TOX_MAX_FRIEND_REQUEST_LENGTH]; extern int select_nfds; extern tunnel *by_id; extern local_port_forward *local_port_forwards; local_port_forward *find_pending_forward_by_id(uint32_t local_forward_id); void parse_lossless_packet(Tox *tox, uint32_t friendnumber, const uint8_t *data, size_t len, void *tmp); tunnel *tunnel_create(int sockfd, int connid, uint32_t friendnumber); void tunnel_delete(tunnel *t); void update_select_nfds(int fd); int send_frame(protocol_frame *frame, uint8_t *data); int send_tunnel_request_packet(char *remote_host, int remote_port, uint32_t local_forward_id, int friend_number); void print_version(void); void print_version_stdout(void); #endif
Mode | Type | Size | Ref | File |
---|---|---|---|---|
100644 | blob | 268 | 272c4eb3ad3672621962ce38f8c7472336729ec3 | .gitignore |
100644 | blob | 0 | e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 | .sonarcloud.properties |
100644 | blob | 2088 | 300c5a7e37f67cb8cdd88261756a10be561d51c5 | .travis.yml |
100644 | blob | 1934 | 9b63571486cca0d558fb18d7826e84f8983217de | BUILD.md |
100644 | blob | 890 | 6a32bd94ed7175124e4abdfec44db695f222584c | Dockerfile |
100644 | blob | 5516 | 15426e21574a20e0391b016ea554e1f198d13025 | FAQ.md |
100644 | blob | 36522 | d6af5d577e5ccb42e451bffdb59696ae1b8078ab | LICENSE.md |
100644 | blob | 1332 | 67eff94b8d8f56754f643ac90cd76bd0517006b8 | Makefile |
100644 | blob | 652 | 6a0550489a8718388bef0ef61e36f6a0a9d8bfdf | Makefile.mac |
100644 | blob | 6184 | ac7877e3aa526eaef260811746f9962f6b3a3df7 | README.md |
100644 | blob | 1989 | f1c8658a62d5be3c1726843db101a54df9c52f47 | VPN.md |
100644 | blob | 939 | d4c2844167d0a3bbe01f06adc650e28ae6d79690 | bitbucket-pipelines.yml |
100644 | blob | 77769 | 3063f74e9864b29839928800f1cfb0469ee74990 | cJSON.c |
100644 | blob | 15829 | 92907a2cd38b1e1f2e099e5cbe2f5c557b70b07b | cJSON.h |
100644 | blob | 25342 | 8a02c93007264707d6f308be119270c7117ae104 | client.c |
100644 | blob | 759 | be68f25ae57282e30acf01fd0eb619763045dc1e | client.h |
040000 | tree | - | 8242200a82b7b6d771a336c7c81b4f76b8e7be84 | debian |
100644 | blob | 3695 | 9d240e23d50d3a7bd69552eb243e686fdbe4c5b8 | generate_tox_bootstrap.py |
100644 | blob | 467 | b5da76802ae2be17bf221890db7e7c0b230beffa | gitversion.c |
100644 | blob | 62 | 747e06d3c602915452532d540ee9817776f236c5 | gitversion.h |
100644 | blob | 3141 | 31244349cd221b4e8931f612b3325ae59faa58cb | log.c |
100644 | blob | 892 | bcd4c9bb1af0a1f1c44b1e7a36c3a5971ba73b34 | log.h |
100644 | blob | 169 | 57385c284c57ab99d21bd53c270ebc04ecd19d31 | mach.h |
100644 | blob | 53579 | 6857bd39f91a9d49c2ac9d5c9487a5d92fd8e407 | main.c |
100644 | blob | 4500 | af9f47a54f870914913329ad162b730ea3c73aa1 | main.h |
100755 | blob | 791 | d4c9730c37f222ed6390eacbd1effb9a640dcdcb | multiarch-build.sh |
040000 | tree | - | 9ea39ebb6fd8fb34f1a28a69d445d099d5001a37 | screenshots |
040000 | tree | - | b412cd72eccd06bedcb8f98492901c638dd0010b | scripts |
100644 | blob | 33976 | bc6bd24abe31cc08ec749f9a1eb89a141bcfce58 | tox_bootstrap.h |
100644 | blob | 3272 | 61c6bc0d273f973522940ef64982f8c7a1781973 | tox_bootstrap_json.c |
100644 | blob | 124 | f6479b9112cbf5aab844fb733a3ab7d9f9a683b0 | tox_bootstrap_json.h |
100644 | blob | 12536 | 75e9dc5ed9399120416e8da5f24d1ccde41cf901 | utarray.h |
100644 | blob | 61492 | 7205c67efa27c66884c8d4d1c8a105d4854a0548 | uthash.h |
100644 | blob | 5406 | cdf3ddcf61249fbfa406ac648b1d8cc6c3d9dd89 | util.c |
100644 | blob | 893 | 33e1cb381b18a34d413d7379121f9a8e584eaf53 | util.h |
100644 | blob | 55882 | b5f3f04c104785a57d8280c37c1b19b36068e56e | utlist.h |
100644 | blob | 11555 | 867442c843dbe6bf096a488e3ce9ec6323809f7f | utstring.h |