* A proxy layer, if necessary, wedges itself between the
* network code and the higher level backend.
*
- * Supported proxies: HTTP CONNECT, generic telnet
- * In progress: SOCKS
+ * Supported proxies: HTTP CONNECT, generic telnet, SOCKS 4 & 5
*/
#ifndef PUTTY_PROXY_H
typedef struct Socket_proxy_tag * Proxy_Socket;
struct Socket_proxy_tag {
- struct socket_function_table *fn;
+ const struct socket_function_table *fn;
/* the above variable absolutely *must* be the first in this structure */
char * error;
/* accepting */
void *accepting_sock;
- /* spin locks, for the critical switch from negotiating
- * to active state. we have to dump all of our pending
- * buffers without new events (read, writes, etc) corrupting
- * things. we should not have built up a large amount of
- * pending data during negotiation, so hopefully this will
- * not have a large effect on performance.
- */
-
- char lock_close;
- char lock_write;
- char lock_write_oob;
- char lock_receive;
- char lock_flush;
- char lock_closing;
- char lock_sent;
- char lock_accepting;
- char lock_freeze;
-
+ /* configuration, used to look up proxy settings */
+ Config cfg;
};
typedef struct Plug_proxy_tag * Proxy_Plug;
struct Plug_proxy_tag {
- struct plug_function_table *fn;
+ const struct plug_function_table *fn;
/* the above variable absolutely *must* be the first in this structure */
Proxy_Socket proxy_socket;
extern int proxy_http_negotiate (Proxy_Socket, int);
extern int proxy_telnet_negotiate (Proxy_Socket, int);
-extern int proxy_socks_negotiate (Proxy_Socket, int);
+extern int proxy_socks4_negotiate (Proxy_Socket, int);
+extern int proxy_socks5_negotiate (Proxy_Socket, int);
#endif