1 #ifndef __TCPCRYPT_DIVERT_H__
2 #define __TCPCRYPT_DIVERT_H__
3 
4 #define INJECT_TOS 0x22
5 
6 enum {
7 	DIVERT_ACCEPT = 0,
8 	DIVERT_DROP,
9 	DIVERT_MODIFY,
10 };
11 
12 #define DF_IN	0x1
13 
14 typedef int (*divert_cb)(void *data, int len, int flags);
15 
16 struct divert {
17 	int  (*open)(int port, divert_cb cb);
18 	void (*next_packet)(int s);
19 	void (*close)(void);
20 	void (*inject)(void *data, int len);
21 	void (*cycle)(void);
22 	int  (*orig_dest)(struct sockaddr_in *out, struct ip *ip, int *flags);
23 };
24 
25 extern struct divert *divert_get(void);
26 extern struct divert *_divert;
27 
28 extern void raw_inject(void *data, int len);
29 extern void raw_open(void);
30 extern struct divert *divert_get_pcap(void);
31 
32 extern void win_dont_rdr(int s);
33 extern uint32_t win_local_ip(void);
34 extern void win_handshake_complete(int s);
35 
36 #endif /* __TCPCRYPT_DIVERT_H__ */
37