source: filezilla/trunk/fuentes/src/putty/proxy.h @ 130

Last change on this file since 130 was 130, checked in by jrpelegrina, 4 years ago

First release to xenial

File size: 3.3 KB
Line 
1/*
2 * Network proxy abstraction in PuTTY
3 *
4 * A proxy layer, if necessary, wedges itself between the
5 * network code and the higher level backend.
6 *
7 * Supported proxies: HTTP CONNECT, generic telnet, SOCKS 4 & 5
8 */
9
10#ifndef PUTTY_PROXY_H
11#define PUTTY_PROXY_H
12
13#define PROXY_ERROR_GENERAL 8000
14#define PROXY_ERROR_UNEXPECTED 8001
15
16typedef struct Socket_proxy_tag * Proxy_Socket;
17
18struct Socket_proxy_tag {
19    const struct socket_function_table *fn;
20    /* the above variable absolutely *must* be the first in this structure */
21
22    const char *error;
23
24    Socket sub_socket;
25    Plug plug;
26    SockAddr remote_addr;
27    int remote_port;
28
29    bufchain pending_output_data;
30    bufchain pending_oob_output_data;
31    int pending_flush;
32    bufchain pending_input_data;
33    int pending_eof;
34
35#define PROXY_STATE_NEW    -1
36#define PROXY_STATE_ACTIVE  0
37
38    int state; /* proxy states greater than 0 are implementation
39                * dependent, but represent various stages/states
40                * of the initialization/setup/negotiation with the
41                * proxy server.
42                */
43    int freeze; /* should we freeze the underlying socket when
44                 * we are done with the proxy negotiation? this
45                 * simply caches the value of sk_set_frozen calls.
46                 */
47
48#define PROXY_CHANGE_NEW      -1
49#define PROXY_CHANGE_CLOSING   0
50#define PROXY_CHANGE_SENT      1
51#define PROXY_CHANGE_RECEIVE   2
52#define PROXY_CHANGE_ACCEPTING 3
53
54    /* something has changed (a call from the sub socket
55     * layer into our Proxy Plug layer, or we were just
56     * created, etc), so the proxy layer needs to handle
57     * this change (the type of which is the second argument)
58     * and further the proxy negotiation process.
59     */
60
61    int (*negotiate) (Proxy_Socket /* this */, int /* change type */);
62
63    /* current arguments of plug handlers
64     * (for use by proxy's negotiate function)
65     */
66
67    /* closing */
68    const char *closing_error_msg;
69    int closing_error_code;
70    int closing_calling_back;
71
72    /* receive */
73    int receive_urgent;
74    char *receive_data;
75    int receive_len;
76
77    /* sent */
78    int sent_bufsize;
79
80    /* accepting */
81    accept_fn_t accepting_constructor;
82    accept_ctx_t accepting_ctx;
83
84    /* configuration, used to look up proxy settings */
85    Conf *conf;
86
87    /* CHAP transient data */
88    int chap_num_attributes;
89    int chap_num_attributes_processed;
90    int chap_current_attribute;
91    int chap_current_datalen;
92};
93
94typedef struct Plug_proxy_tag * Proxy_Plug;
95
96struct Plug_proxy_tag {
97    const struct plug_function_table *fn;
98    /* the above variable absolutely *must* be the first in this structure */
99
100    Proxy_Socket proxy_socket;
101
102};
103
104extern void proxy_activate (Proxy_Socket);
105
106extern int proxy_http_negotiate (Proxy_Socket, int);
107extern int proxy_telnet_negotiate (Proxy_Socket, int);
108extern int proxy_socks4_negotiate (Proxy_Socket, int);
109extern int proxy_socks5_negotiate (Proxy_Socket, int);
110
111/*
112 * This may be reused by local-command proxies on individual
113 * platforms.
114 */
115char *format_telnet_command(SockAddr addr, int port, Conf *conf);
116
117/*
118 * These are implemented in cproxy.c or nocproxy.c, depending on
119 * whether encrypted proxy authentication is available.
120 */
121extern void proxy_socks5_offerencryptedauth(char *command, int *len);
122extern int proxy_socks5_handlechap (Proxy_Socket p);
123extern int proxy_socks5_selectchap(Proxy_Socket p);
124
125#endif
Note: See TracBrowser for help on using the repository browser.