Increase FONT_MAXNO from 0x2f to 0x40, to ensure the fonts[] array
[u/mdw/putty] / proxy.h
diff --git a/proxy.h b/proxy.h
index 43d92cb..10a8c67 100644 (file)
--- a/proxy.h
+++ b/proxy.h
@@ -4,8 +4,7 @@
  * 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
@@ -17,7 +16,7 @@
 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;
@@ -31,6 +30,7 @@ struct Socket_proxy_tag {
     bufchain pending_oob_output_data;
     int pending_flush;
     bufchain pending_input_data;
+    int pending_eof;
 
 #define PROXY_STATE_NEW    -1
 #define PROXY_STATE_ACTIVE  0
@@ -65,7 +65,7 @@ struct Socket_proxy_tag {
      */
 
     /* closing */
-    char *closing_error_msg;
+    const char *closing_error_msg;
     int closing_error_code;
     int closing_calling_back;
 
@@ -78,32 +78,22 @@ struct Socket_proxy_tag {
     int sent_bufsize;
 
     /* 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.
-     */
+    OSSocket accepting_sock;
 
-    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 */
+    Conf *conf;
 
+    /* CHAP transient data */
+    int chap_num_attributes;
+    int chap_num_attributes_processed;
+    int chap_current_attribute;
+    int chap_current_datalen;
 };
 
 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;
@@ -114,6 +104,21 @@ extern void proxy_activate (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);
+
+/*
+ * This may be reused by local-command proxies on individual
+ * platforms.
+ */
+char *format_telnet_command(SockAddr addr, int port, Conf *conf);
+
+/*
+ * These are implemented in cproxy.c or nocproxy.c, depending on
+ * whether encrypted proxy authentication is available.
+ */
+extern void proxy_socks5_offerencryptedauth(char *command, int *len);
+extern int proxy_socks5_handlechap (Proxy_Socket p);
+extern int proxy_socks5_selectchap(Proxy_Socket p);
 
 #endif