Joe Yates's memory leak patches.
[u/mdw/putty] / putty.h
diff --git a/putty.h b/putty.h
index 5490a72..de1b770 100644 (file)
--- a/putty.h
+++ b/putty.h
@@ -134,6 +134,11 @@ typedef enum {
     TS_EOL
 } Telnet_Special;
 
+struct telnet_special {
+    const char *name;                 /* NULL==end, ""==separator */
+    int code;
+};
+
 typedef enum {
     MBT_NOTHING,
     MBT_LEFT, MBT_MIDDLE, MBT_RIGHT,   /* `raw' button designations */
@@ -219,7 +224,8 @@ enum {
     /*
      * Proxy types.
      */
-    PROXY_NONE, PROXY_HTTP, PROXY_SOCKS, PROXY_TELNET
+    PROXY_NONE, PROXY_SOCKS4, PROXY_SOCKS5,
+    PROXY_HTTP, PROXY_TELNET, PROXY_CMD
 };
 
 enum {
@@ -237,7 +243,7 @@ enum {
 
 enum {
     /* Bell settings (cfg.beep) */
-    BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE
+    BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE, BELL_PCSPEAKER
 };
 
 enum {
@@ -261,8 +267,9 @@ enum {
 };
 
 struct backend_tag {
-    char *(*init) (void *frontend_handle, void **backend_handle, Config *cfg,
-                  char *host, int port, char **realhost, int nodelay);
+    const char *(*init) (void *frontend_handle, void **backend_handle,
+                        Config *cfg,
+                        char *host, int port, char **realhost, int nodelay);
     void (*free) (void *handle);
     /* back->reconfig() passes in a replacement configuration. */
     void (*reconfig) (void *handle, Config *cfg);
@@ -272,6 +279,7 @@ struct backend_tag {
     int (*sendbuffer) (void *handle);
     void (*size) (void *handle, int width, int height);
     void (*special) (void *handle, Telnet_Special code);
+    const struct telnet_special *(*get_specials) (void *handle);
     Socket(*socket) (void *handle);
     int (*exitcode) (void *handle);
     int (*sendok) (void *handle);
@@ -299,6 +307,12 @@ extern struct backend_list {
 extern const int be_default_protocol;
 
 /*
+ * Name of this particular application, for use in the config box
+ * and other pieces of text.
+ */
+extern const char *const appname;
+
+/*
  * IMPORTANT POLICY POINT: everything in this structure which wants
  * to be treated like an integer must be an actual, honest-to-
  * goodness `int'. No enum-typed variables. This is because parts
@@ -325,7 +339,6 @@ struct config_tag {
     char proxy_username[32];
     char proxy_password[32];
     char proxy_telnet_command[512];
-    int proxy_socks_version;
     /* SSH options */
     char remote_cmd[512];
     char remote_cmd2[512];            /* fallback if the first fails
@@ -366,6 +379,7 @@ struct config_tag {
     int no_remote_wintitle;           /* disable remote retitling */
     int no_dbackspace;                /* disable destructive backspace */
     int no_remote_charset;            /* disable remote charset config */
+    int no_remote_qtitle;             /* disable remote win title query */
     int app_cursor;
     int app_keypad;
     int nethack_keypad;
@@ -415,6 +429,7 @@ struct config_tag {
     char answerback[256];
     char printer[128];
     /* Colour options */
+    int system_colour;
     int try_palette;
     int bold_colour;
     unsigned char colours[22][3];
@@ -436,7 +451,18 @@ struct config_tag {
     /* port forwarding */
     int lport_acceptall; /* accept conns from hosts other than localhost */
     int rport_acceptall; /* same for remote forwarded ports (SSH2 only) */
-    char portfwd[1024]; /* [LR]localport\thost:port\000[LR]localport\thost:port\000\000 */
+    /*
+     * The port forwarding string contains a number of
+     * NUL-terminated substrings, terminated in turn by an empty
+     * string (i.e. a second NUL immediately after the previous
+     * one). Each string can be of one of the following forms:
+     * 
+     *   [LR]localport\thost:port
+     *   [LR]localaddr:localport\thost:port
+     *   Dlocalport
+     *   Dlocaladdr:localport
+     */
+    char portfwd[1024];
     /* SSH bug compatibility modes */
     int sshbug_ignore1, sshbug_plainpw1, sshbug_rsa1,
        sshbug_hmac2, sshbug_derivekey2, sshbug_rsapad2,
@@ -445,6 +471,7 @@ struct config_tag {
     int stamp_utmp;
     int login_shell;
     int scrollbar_on_left;
+    int shadowbold;
     FontSpec boldfont;
     FontSpec widefont;
     FontSpec wideboldfont;
@@ -468,6 +495,10 @@ struct config_tag {
  * These flags describe the type of _application_ - they wouldn't
  * vary between individual sessions - and so it's OK to have this
  * variable be GLOBAL.
+ * 
+ * Note that additional flags may be defined in platform-specific
+ * headers. It's probably best if those ones start from 0x1000, to
+ * avoid collision.
  */
 #define FLAG_VERBOSE     0x0001
 #define FLAG_STDERR      0x0002
@@ -519,6 +550,8 @@ void sys_cursor(void *frontend, int x, int y);
 void request_paste(void *frontend);
 void frontend_keypress(void *frontend);
 void ldisc_update(void *frontend, int echo, int edit);
+void update_specials_menu(void *frontend);
+int from_backend(void *frontend, int is_stderr, const char *data, int len);
 #define OPTIMISE_IS_SCROLL 1
 
 void set_iconic(void *frontend, int iconic);
@@ -546,7 +579,7 @@ void random_destroy_seed(void);
 /*
  * Exports from settings.c.
  */
-void save_settings(char *section, int do_host, Config * cfg);
+char *save_settings(char *section, int do_host, Config * cfg);
 void save_open_settings(void *sesskey, int do_host, Config *cfg);
 void load_settings(char *section, int do_host, Config * cfg);
 void load_open_settings(void *sesskey, int do_host, Config *cfg);
@@ -598,7 +631,7 @@ int term_ldisc(Terminal *, int option);
 void term_copyall(Terminal *);
 void term_reconfig(Terminal *, Config *);
 void term_seen_key_event(Terminal *); 
-int from_backend(void *, int is_stderr, const char *data, int len);
+int term_data(Terminal *, int is_stderr, const char *data, int len);
 void term_provide_resize_fn(Terminal *term,
                            void (*resize_fn)(void *, int, int),
                            void *resize_ctx);
@@ -613,7 +646,7 @@ void log_reconfig(void *logctx, Config *cfg);
 void logfopen(void *logctx);
 void logfclose(void *logctx);
 void logtraffic(void *logctx, unsigned char c, int logmode);
-void log_eventlog(void *logctx, char *string);
+void log_eventlog(void *logctx, const char *string);
 enum { PKT_INCOMING, PKT_OUTGOING };
 void log_packet(void *logctx, int direction, int type,
                char *texttype, void *data, int len);
@@ -704,8 +737,8 @@ int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
 wchar_t xlat_uskbd2cyrllic(int ch);
 int check_compose(int first, int second);
 int decode_codepage(char *cp_name);
-char *cp_enumerate (int index);
-char *cp_name(int codepage);
+const char *cp_enumerate (int index);
+const char *cp_name(int codepage);
 void get_unitab(int codepage, wchar_t * unitab, int ftype);
 
 /*
@@ -723,9 +756,19 @@ void crypto_wrapup();
 #endif
 
 /*
- * Exports from pageantc.c
+ * Exports from pageantc.c.
+ * 
+ * agent_query returns 1 for here's-a-response, and 0 for query-in-
+ * progress. In the latter case there will be a call to `callback'
+ * at some future point, passing callback_ctx as the first
+ * parameter and the actual reply data as the second and third.
+ * 
+ * The response may be a NULL pointer (in either of the synchronous
+ * or asynchronous cases), which indicates failure to receive a
+ * response.
  */
-void agent_query(void *in, int inlen, void **out, int *outlen);
+int agent_query(void *in, int inlen, void **out, int *outlen,
+               void (*callback)(void *, void *, int), void *callback_ctx);
 int agent_exists(void);
 
 /*
@@ -738,7 +781,7 @@ int wc_unescape(char *output, const char *wildcard);
 /*
  * Exports from windlg.c
  */
-void logevent(void *frontend, char *);
+void logevent(void *frontend, const char *);
 void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
                         char *keystr, char *fingerprint);
 void askcipher(void *frontend, char *ciphername, int cs);
@@ -771,8 +814,10 @@ void printer_finish_job(printer_job *);
  */
 int cmdline_process_param(char *, char *, int, Config *);
 void cmdline_run_saved(Config *);
+void cmdline_cleanup(void);
 extern char *cmdline_password;
 #define TOOLTYPE_FILETRANSFER 1
+#define TOOLTYPE_NONNETWORK 2
 extern int cmdline_tooltype;
 
 void cmdline_error(char *, ...);
@@ -780,6 +825,7 @@ void cmdline_error(char *, ...);
 /*
  * Exports from config.c.
  */
+struct controlbox;
 void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
                      int midsession, int protocol);
 
@@ -801,5 +847,6 @@ Filename filename_from_str(const char *string);
 const char *filename_to_str(const Filename *fn);
 int filename_equal(Filename f1, Filename f2);
 int filename_is_null(Filename fn);
+char *get_username(void);             /* return value needs freeing */
 
 #endif