]> asedeno.scripts.mit.edu Git - PuTTY.git/blobdiff - proxy.h
first pass
[PuTTY.git] / proxy.h
diff --git a/proxy.h b/proxy.h
index c74c89c8039bb341a7a79a1db5bd7c7a919d8383..2e2324c078343ae5d2229a79e5b08d20659b10d0 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
 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;
+    const char *error;
 
     Socket sub_socket;
     Plug plug;
@@ -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,14 +78,23 @@ struct Socket_proxy_tag {
     int sent_bufsize;
 
     /* accepting */
-    void *accepting_sock;
+    accept_fn_t accepting_constructor;
+    accept_ctx_t accepting_ctx;
 
+    /* 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;
@@ -96,6 +105,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