1 #ifndef PROXY_H
2 #define PROXY_H
3 
4 #include "HTTP.h"
5 #include "Network.h"
6 
7 #define PROXY_CONNECTION_TIMEOUT	(4 * 1000)
8 
9 #define PROXY_MAX_USERNAME_LEN		255
10 #define PROXY_MAX_PASSWORD_LEN		255
11 
12 #define PROXY_ERROR_SUCCESS			0
13 #define PROXY_ERROR_GENERIC			1
14 #define PROXY_ERROR_PARAMETER		2
15 #define PROXY_ERROR_CANCELED		3
16 #define PROXY_ERROR_CONNECTION		4
17 #define PROXY_ERROR_DISCONNECTED	5
18 #define PROXY_ERROR_VERSION			6
19 #define PROXY_ERROR_AUTHENTICATION	7
20 #define PROXY_ERROR_TARGET			8
21 
22 struct PROXY_PARAM_IN
23 {
24 	char Hostname[MAX_HOST_NAME_LEN + 1];
25 	USHORT Port;
26 	char TargetHostname[MAX_HOST_NAME_LEN + 1];
27 	USHORT TargetPort;
28 	char Username[PROXY_MAX_USERNAME_LEN + 1];
29 	char Password[PROXY_MAX_PASSWORD_LEN + 1];
30 	UINT Timeout;
31 	char HttpCustomHeader[HTTP_CUSTOM_HEADER_MAX_SIZE + 1];
32 	char HttpUserAgent[HTTP_HEADER_USER_AGENT_MAX_SIZE + 1];
33 #ifdef OS_WIN32
34 	void *Hwnd;
35 #endif
36 };
37 
38 struct PROXY_PARAM_OUT
39 {
40 	SOCK *Sock;
41 	IP ResolvedIp;
42 };
43 
44 UINT ProxyHttpConnect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
45 UINT ProxySocks5Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
46 UINT ProxySocks4Connect(PROXY_PARAM_OUT *out, PROXY_PARAM_IN *in, volatile bool *cancel_flag);
47 
48 #endif
49