1999-01-08 16:02:13 +03:00
|
|
|
#ifndef PUTTY_PUTTY_H
|
|
|
|
#define PUTTY_PUTTY_H
|
|
|
|
|
2002-11-10 03:03:55 +03:00
|
|
|
#include <stddef.h> /* for wchar_t */
|
2001-08-25 23:33:33 +04:00
|
|
|
|
2002-10-07 20:45:23 +04:00
|
|
|
/*
|
|
|
|
* Global variables. Most modules declare these `extern', but
|
|
|
|
* window.c will do `#define PUTTY_DO_GLOBALS' before including this
|
|
|
|
* module, and so will get them properly defined.
|
|
|
|
*/
|
|
|
|
#ifndef GLOBAL
|
|
|
|
#ifdef PUTTY_DO_GLOBALS
|
|
|
|
#define GLOBAL
|
|
|
|
#else
|
|
|
|
#define GLOBAL extern
|
|
|
|
#endif
|
|
|
|
#endif
|
|
|
|
|
2002-10-26 16:58:13 +04:00
|
|
|
#ifndef DONE_TYPEDEFS
|
|
|
|
#define DONE_TYPEDEFS
|
2002-10-07 20:45:23 +04:00
|
|
|
typedef struct config_tag Config;
|
2002-10-09 22:09:42 +04:00
|
|
|
typedef struct backend_tag Backend;
|
2002-10-22 20:11:33 +04:00
|
|
|
typedef struct terminal_tag Terminal;
|
2002-10-26 16:58:13 +04:00
|
|
|
#endif
|
2000-10-23 14:32:37 +04:00
|
|
|
|
2002-10-07 20:45:23 +04:00
|
|
|
#include "puttyps.h"
|
|
|
|
#include "network.h"
|
2003-02-01 15:54:40 +03:00
|
|
|
#include "misc.h"
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2001-05-10 12:34:20 +04:00
|
|
|
/* Three attribute types:
|
2003-01-28 15:05:38 +03:00
|
|
|
* The ATTRs (normal attributes) are stored with the characters in
|
|
|
|
* the main display arrays
|
2001-05-10 12:34:20 +04:00
|
|
|
*
|
2003-01-28 15:05:38 +03:00
|
|
|
* The TATTRs (temporary attributes) are generated on the fly, they
|
|
|
|
* can overlap with characters but not with normal attributes.
|
2001-05-10 12:34:20 +04:00
|
|
|
*
|
2003-01-28 15:05:38 +03:00
|
|
|
* The LATTRs (line attributes) are an entirely disjoint space of
|
|
|
|
* flags.
|
2001-05-10 12:34:20 +04:00
|
|
|
*
|
|
|
|
* ATTR_INVALID is an illegal colour combination.
|
|
|
|
*/
|
|
|
|
|
|
|
|
#define TATTR_ACTCURS 0x4UL /* active cursor (block) */
|
|
|
|
#define TATTR_PASCURS 0x2UL /* passive cursor (box) */
|
|
|
|
#define TATTR_RIGHTCURS 0x1UL /* cursor-on-RHS */
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2000-07-26 16:13:51 +04:00
|
|
|
#define LATTR_NORM 0x00000000UL
|
|
|
|
#define LATTR_WIDE 0x01000000UL
|
|
|
|
#define LATTR_TOP 0x02000000UL
|
|
|
|
#define LATTR_BOT 0x03000000UL
|
|
|
|
#define LATTR_MODE 0x03000000UL
|
2001-05-10 12:34:20 +04:00
|
|
|
#define LATTR_WRAPPED 0x10000000UL
|
2003-01-02 19:20:29 +03:00
|
|
|
#define LATTR_WRAPPED2 0x20000000UL
|
2001-05-10 12:34:20 +04:00
|
|
|
|
2003-01-28 15:05:38 +03:00
|
|
|
#define ATTR_INVALID 0x03FF0000UL
|
2001-05-10 12:34:20 +04:00
|
|
|
|
|
|
|
/* Like Linux use the F000 page for direct to font. */
|
|
|
|
#define ATTR_OEMCP 0x0000F000UL /* OEM Codepage DTF */
|
|
|
|
#define ATTR_ACP 0x0000F100UL /* Ansi Codepage DTF */
|
|
|
|
|
|
|
|
/* These are internal use overlapping with the UTF-16 surrogates */
|
|
|
|
#define ATTR_ASCII 0x0000D800UL /* normal ASCII charset ESC ( B */
|
|
|
|
#define ATTR_LINEDRW 0x0000D900UL /* line drawing charset ESC ( 0 */
|
2001-05-19 18:12:41 +04:00
|
|
|
#define ATTR_SCOACS 0x0000DA00UL /* SCO Alternate charset */
|
2001-05-10 12:34:20 +04:00
|
|
|
#define ATTR_GBCHR 0x0000DB00UL /* UK variant charset ESC ( A */
|
|
|
|
#define CSET_MASK 0x0000FF00UL /* Character set mask; MUST be 0xFF00 */
|
|
|
|
|
|
|
|
#define DIRECT_CHAR(c) ((c&0xFC00)==0xD800)
|
|
|
|
#define DIRECT_FONT(c) ((c&0xFE00)==0xF000)
|
|
|
|
|
|
|
|
#define UCSERR (ATTR_LINEDRW|'a') /* UCS Format error character. */
|
2003-01-02 19:20:29 +03:00
|
|
|
/*
|
|
|
|
* UCSWIDE is a special value used in the terminal data to signify
|
|
|
|
* the character cell containing the right-hand half of a CJK wide
|
|
|
|
* character. We use 0xDFFF because it's part of the surrogate
|
|
|
|
* range and hence won't be used for anything else (it's impossible
|
|
|
|
* to input it via UTF-8 because our UTF-8 decoder correctly
|
|
|
|
* rejects surrogates).
|
|
|
|
*/
|
|
|
|
#define UCSWIDE 0xDFFF
|
2001-05-10 12:34:20 +04:00
|
|
|
|
2003-01-28 02:03:31 +03:00
|
|
|
#define ATTR_NARROW 0x80000000UL
|
|
|
|
#define ATTR_WIDE 0x40000000UL
|
|
|
|
#define ATTR_BOLD 0x04000000UL
|
|
|
|
#define ATTR_UNDER 0x08000000UL
|
|
|
|
#define ATTR_REVERSE 0x10000000UL
|
|
|
|
#define ATTR_BLINK 0x20000000UL
|
|
|
|
#define ATTR_FGMASK 0x001F0000UL
|
|
|
|
#define ATTR_BGMASK 0x03E00000UL
|
|
|
|
#define ATTR_COLOURS 0x03FF0000UL
|
2001-05-10 12:34:20 +04:00
|
|
|
#define ATTR_FGSHIFT 16
|
2003-01-28 02:03:31 +03:00
|
|
|
#define ATTR_BGSHIFT 21
|
2001-05-10 12:34:20 +04:00
|
|
|
|
2003-01-28 15:05:38 +03:00
|
|
|
#define ATTR_DEFAULT 0x01280000UL /* bg 9, fg 8 */
|
2001-05-10 12:34:20 +04:00
|
|
|
#define ATTR_DEFFG 0x00080000UL
|
2003-01-28 02:03:31 +03:00
|
|
|
#define ATTR_DEFBG 0x01200000UL
|
2001-05-19 19:21:05 +04:00
|
|
|
#define ERASE_CHAR (ATTR_DEFAULT | ATTR_ASCII | ' ')
|
1999-01-08 16:02:13 +03:00
|
|
|
#define ATTR_MASK 0xFFFFFF00UL
|
|
|
|
#define CHAR_MASK 0x000000FFUL
|
2001-05-10 12:34:20 +04:00
|
|
|
|
|
|
|
#define ATTR_CUR_AND (~(ATTR_BOLD|ATTR_REVERSE|ATTR_BLINK|ATTR_COLOURS))
|
2003-01-28 02:03:31 +03:00
|
|
|
#define ATTR_CUR_XOR 0x016A0000UL
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2002-10-30 21:12:46 +03:00
|
|
|
struct sesslist {
|
|
|
|
int nsessions;
|
|
|
|
char **sessions;
|
|
|
|
char *buffer; /* so memory can be freed later */
|
|
|
|
};
|
2002-10-09 22:09:42 +04:00
|
|
|
|
2003-01-14 21:28:23 +03:00
|
|
|
struct unicode_data {
|
|
|
|
char **uni_tbl;
|
|
|
|
int dbcs_screenfont;
|
|
|
|
int font_codepage;
|
|
|
|
int line_codepage;
|
|
|
|
wchar_t unitab_scoacs[256];
|
|
|
|
wchar_t unitab_line[256];
|
|
|
|
wchar_t unitab_font[256];
|
|
|
|
wchar_t unitab_xterm[256];
|
|
|
|
wchar_t unitab_oemcp[256];
|
|
|
|
unsigned char unitab_ctrl[256];
|
|
|
|
};
|
2001-05-10 12:34:20 +04:00
|
|
|
|
2001-05-06 18:35:20 +04:00
|
|
|
#define LGXF_OVR 1 /* existing logfile overwrite */
|
|
|
|
#define LGXF_APN 0 /* existing logfile append */
|
|
|
|
#define LGXF_ASK -1 /* existing logfile ask */
|
|
|
|
#define LGTYP_NONE 0 /* logmode: no logging */
|
|
|
|
#define LGTYP_ASCII 1 /* logmode: pure ascii */
|
2001-12-14 17:57:50 +03:00
|
|
|
#define LGTYP_DEBUG 2 /* logmode: all chars of traffic */
|
|
|
|
#define LGTYP_PACKETS 3 /* logmode: SSH data packets */
|
1999-11-30 14:22:30 +03:00
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
typedef enum {
|
|
|
|
TS_AYT, TS_BRK, TS_SYNCH, TS_EC, TS_EL, TS_GA, TS_NOP, TS_ABORT,
|
2001-05-09 19:12:26 +04:00
|
|
|
TS_AO, TS_IP, TS_SUSP, TS_EOR, TS_EOF, TS_LECHO, TS_RECHO, TS_PING,
|
|
|
|
TS_EOL
|
1999-01-08 16:02:13 +03:00
|
|
|
} Telnet_Special;
|
|
|
|
|
2003-04-05 00:21:05 +04:00
|
|
|
struct telnet_special {
|
|
|
|
const char *name; /* NULL==end, ""==separator */
|
|
|
|
int code;
|
|
|
|
};
|
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
typedef enum {
|
2001-05-06 18:20:41 +04:00
|
|
|
MBT_NOTHING,
|
|
|
|
MBT_LEFT, MBT_MIDDLE, MBT_RIGHT, /* `raw' button designations */
|
|
|
|
MBT_SELECT, MBT_EXTEND, MBT_PASTE, /* `cooked' button designations */
|
|
|
|
MBT_WHEEL_UP, MBT_WHEEL_DOWN /* mouse wheel */
|
1999-01-08 16:02:13 +03:00
|
|
|
} Mouse_Button;
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
MA_NOTHING, MA_CLICK, MA_2CLK, MA_3CLK, MA_DRAG, MA_RELEASE
|
|
|
|
} Mouse_Action;
|
|
|
|
|
2003-01-27 03:39:01 +03:00
|
|
|
/* Keyboard modifiers -- keys the user is actually holding down */
|
|
|
|
|
|
|
|
#define PKM_SHIFT 0x01
|
|
|
|
#define PKM_CONTROL 0x02
|
|
|
|
#define PKM_META 0x04
|
|
|
|
#define PKM_ALT 0x08
|
|
|
|
|
|
|
|
/* Keyboard flags that aren't really modifiers */
|
|
|
|
#define PKF_CAPSLOCK 0x10
|
|
|
|
#define PKF_NUMLOCK 0x20
|
|
|
|
#define PKF_REPEAT 0x40
|
|
|
|
|
|
|
|
/* Stand-alone keysyms for function keys */
|
|
|
|
|
|
|
|
typedef enum {
|
|
|
|
PK_NULL, /* No symbol for this key */
|
|
|
|
/* Main keypad keys */
|
|
|
|
PK_ESCAPE, PK_TAB, PK_BACKSPACE, PK_RETURN, PK_COMPOSE,
|
|
|
|
/* Editing keys */
|
|
|
|
PK_HOME, PK_INSERT, PK_DELETE, PK_END, PK_PAGEUP, PK_PAGEDOWN,
|
|
|
|
/* Cursor keys */
|
|
|
|
PK_UP, PK_DOWN, PK_RIGHT, PK_LEFT, PK_REST,
|
|
|
|
/* Numeric keypad */ /* Real one looks like: */
|
|
|
|
PK_PF1, PK_PF2, PK_PF3, PK_PF4, /* PF1 PF2 PF3 PF4 */
|
|
|
|
PK_KPCOMMA, PK_KPMINUS, PK_KPDECIMAL, /* 7 8 9 - */
|
|
|
|
PK_KP0, PK_KP1, PK_KP2, PK_KP3, PK_KP4, /* 4 5 6 , */
|
|
|
|
PK_KP5, PK_KP6, PK_KP7, PK_KP8, PK_KP9, /* 1 2 3 en- */
|
|
|
|
PK_KPBIGPLUS, PK_KPENTER, /* 0 . ter */
|
|
|
|
/* Top row */
|
|
|
|
PK_F1, PK_F2, PK_F3, PK_F4, PK_F5,
|
|
|
|
PK_F6, PK_F7, PK_F8, PK_F9, PK_F10,
|
|
|
|
PK_F11, PK_F12, PK_F13, PK_F14, PK_F15,
|
|
|
|
PK_F16, PK_F17, PK_F18, PK_F19, PK_F20,
|
|
|
|
PK_PAUSE
|
|
|
|
} Key_Sym;
|
|
|
|
|
|
|
|
#define PK_ISEDITING(k) ((k) >= PK_HOME && (k) <= PK_PAGEDOWN)
|
|
|
|
#define PK_ISCURSOR(k) ((k) >= PK_UP && (k) <= PK_REST)
|
|
|
|
#define PK_ISKEYPAD(k) ((k) >= PK_PF1 && (k) <= PK_KPENTER)
|
|
|
|
#define PK_ISFKEY(k) ((k) >= PK_F1 && (k) <= PK_F20)
|
|
|
|
|
2003-01-27 21:02:24 +03:00
|
|
|
enum {
|
2001-05-10 12:34:20 +04:00
|
|
|
VT_XWINDOWS, VT_OEMANSI, VT_OEMONLY, VT_POORMAN, VT_UNICODE
|
2003-01-27 21:02:24 +03:00
|
|
|
};
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2001-08-25 23:33:33 +04:00
|
|
|
enum {
|
|
|
|
/*
|
|
|
|
* SSH ciphers (both SSH1 and SSH2)
|
|
|
|
*/
|
|
|
|
CIPHER_WARN, /* pseudo 'cipher' */
|
|
|
|
CIPHER_3DES,
|
|
|
|
CIPHER_BLOWFISH,
|
|
|
|
CIPHER_AES, /* (SSH 2 only) */
|
2001-11-22 02:40:46 +03:00
|
|
|
CIPHER_DES,
|
2001-08-25 23:33:33 +04:00
|
|
|
CIPHER_MAX /* no. ciphers (inc warn) */
|
|
|
|
};
|
|
|
|
|
2001-01-24 17:08:20 +03:00
|
|
|
enum {
|
|
|
|
/*
|
2003-01-27 21:02:24 +03:00
|
|
|
* Several different bits of the PuTTY configuration seem to be
|
|
|
|
* three-way settings whose values are `always yes', `always
|
|
|
|
* no', and `decide by some more complex automated means'. This
|
|
|
|
* is true of line discipline options (local echo and line
|
|
|
|
* editing), proxy DNS, Close On Exit, and SSH server bug
|
|
|
|
* workarounds. Accordingly I supply a single enum here to deal
|
|
|
|
* with them all.
|
2001-01-24 17:08:20 +03:00
|
|
|
*/
|
2003-01-27 21:02:24 +03:00
|
|
|
FORCE_ON, FORCE_OFF, AUTO
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
/*
|
|
|
|
* Proxy types.
|
|
|
|
*/
|
2003-05-07 16:07:23 +04:00
|
|
|
PROXY_NONE, PROXY_SOCKS4, PROXY_SOCKS5,
|
|
|
|
PROXY_HTTP, PROXY_TELNET, PROXY_CMD
|
2001-01-24 17:08:20 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
/*
|
|
|
|
* Line discipline options which the backend might try to control.
|
|
|
|
*/
|
2001-05-06 18:35:20 +04:00
|
|
|
LD_EDIT, /* local line editing */
|
|
|
|
LD_ECHO /* local echo */
|
2001-01-24 17:08:20 +03:00
|
|
|
};
|
|
|
|
|
2001-02-05 16:08:18 +03:00
|
|
|
enum {
|
2003-01-27 21:02:24 +03:00
|
|
|
/* Protocol back ends. (cfg.protocol) */
|
|
|
|
PROT_RAW, PROT_TELNET, PROT_RLOGIN, PROT_SSH
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
/* Bell settings (cfg.beep) */
|
2003-05-24 16:31:32 +04:00
|
|
|
BELL_DISABLED, BELL_DEFAULT, BELL_VISUAL, BELL_WAVEFILE, BELL_PCSPEAKER
|
2003-01-27 21:02:24 +03:00
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
/* Taskbar flashing indication on bell (cfg.beep_ind) */
|
|
|
|
B_IND_DISABLED, B_IND_FLASH, B_IND_STEADY
|
|
|
|
};
|
|
|
|
|
|
|
|
enum {
|
|
|
|
/* Resize actions (cfg.resize_action) */
|
|
|
|
RESIZE_TERM, RESIZE_DISABLED, RESIZE_FONT, RESIZE_EITHER
|
2001-02-05 16:08:18 +03:00
|
|
|
};
|
|
|
|
|
2003-01-27 03:39:01 +03:00
|
|
|
enum {
|
|
|
|
/* Function key types (cfg.funky_type) */
|
|
|
|
FUNKY_TILDE,
|
|
|
|
FUNKY_LINUX,
|
|
|
|
FUNKY_XTERM,
|
|
|
|
FUNKY_VT400,
|
|
|
|
FUNKY_VT100P,
|
|
|
|
FUNKY_SCO
|
|
|
|
};
|
|
|
|
|
2002-10-09 22:09:42 +04:00
|
|
|
struct backend_tag {
|
2003-05-04 18:18:18 +04:00
|
|
|
const char *(*init) (void *frontend_handle, void **backend_handle,
|
|
|
|
Config *cfg,
|
2004-06-20 21:07:38 +04:00
|
|
|
char *host, int port, char **realhost, int nodelay,
|
|
|
|
int keepalive);
|
2003-01-16 02:30:21 +03:00
|
|
|
void (*free) (void *handle);
|
2003-01-12 17:48:29 +03:00
|
|
|
/* back->reconfig() passes in a replacement configuration. */
|
|
|
|
void (*reconfig) (void *handle, Config *cfg);
|
2001-08-25 21:09:23 +04:00
|
|
|
/* back->send() returns the current amount of buffered data. */
|
2002-10-25 15:30:33 +04:00
|
|
|
int (*send) (void *handle, char *buf, int len);
|
2001-08-25 21:09:23 +04:00
|
|
|
/* back->sendbuffer() does the same thing but without attempting a send */
|
2002-10-25 15:30:33 +04:00
|
|
|
int (*sendbuffer) (void *handle);
|
|
|
|
void (*size) (void *handle, int width, int height);
|
|
|
|
void (*special) (void *handle, Telnet_Special code);
|
2003-04-05 00:21:05 +04:00
|
|
|
const struct telnet_special *(*get_specials) (void *handle);
|
2002-10-25 15:30:33 +04:00
|
|
|
Socket(*socket) (void *handle);
|
|
|
|
int (*exitcode) (void *handle);
|
|
|
|
int (*sendok) (void *handle);
|
|
|
|
int (*ldisc) (void *handle, int);
|
2002-10-26 14:16:19 +04:00
|
|
|
void (*provide_ldisc) (void *handle, void *ldisc);
|
2002-10-26 16:58:13 +04:00
|
|
|
void (*provide_logctx) (void *handle, void *logctx);
|
2001-08-25 21:09:23 +04:00
|
|
|
/*
|
|
|
|
* back->unthrottle() tells the back end that the front end
|
|
|
|
* buffer is clearing.
|
|
|
|
*/
|
2002-10-25 15:30:33 +04:00
|
|
|
void (*unthrottle) (void *handle, int);
|
2000-10-04 18:35:15 +04:00
|
|
|
int default_port;
|
2002-10-09 22:09:42 +04:00
|
|
|
};
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2000-06-22 12:41:25 +04:00
|
|
|
extern struct backend_list {
|
2000-03-15 18:08:48 +03:00
|
|
|
int protocol;
|
|
|
|
char *name;
|
|
|
|
Backend *backend;
|
|
|
|
} backends[];
|
|
|
|
|
2003-01-15 23:47:50 +03:00
|
|
|
/*
|
|
|
|
* Suggested default protocol provided by the backend link module.
|
|
|
|
* The application is free to ignore this.
|
|
|
|
*/
|
|
|
|
extern const int be_default_protocol;
|
|
|
|
|
2003-04-05 20:05:00 +04:00
|
|
|
/*
|
|
|
|
* Name of this particular application, for use in the config box
|
|
|
|
* and other pieces of text.
|
|
|
|
*/
|
|
|
|
extern const char *const appname;
|
|
|
|
|
2003-01-27 21:02:24 +03:00
|
|
|
/*
|
|
|
|
* 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
|
|
|
|
* of the code will want to pass around `int *' pointers to them
|
|
|
|
* and we can't run the risk of porting to some system on which the
|
|
|
|
* enum comes out as a different size from int.
|
|
|
|
*/
|
2002-10-07 20:45:23 +04:00
|
|
|
struct config_tag {
|
1999-01-08 16:02:13 +03:00
|
|
|
/* Basic options */
|
|
|
|
char host[512];
|
|
|
|
int port;
|
2003-01-27 21:02:24 +03:00
|
|
|
int protocol;
|
1999-01-08 16:02:13 +03:00
|
|
|
int close_on_exit;
|
1999-11-05 12:50:49 +03:00
|
|
|
int warn_on_close;
|
2001-05-06 18:35:20 +04:00
|
|
|
int ping_interval; /* in seconds */
|
2001-11-30 00:47:11 +03:00
|
|
|
int tcp_nodelay;
|
2004-06-20 21:07:38 +04:00
|
|
|
int tcp_keepalives;
|
2002-03-23 20:47:21 +03:00
|
|
|
/* Proxy options */
|
|
|
|
char proxy_exclude_list[512];
|
2003-01-27 21:02:24 +03:00
|
|
|
int proxy_dns;
|
2002-12-18 15:18:54 +03:00
|
|
|
int even_proxy_localhost;
|
2003-01-27 21:02:24 +03:00
|
|
|
int proxy_type;
|
2002-03-23 20:47:21 +03:00
|
|
|
char proxy_host[512];
|
|
|
|
int proxy_port;
|
2004-08-30 17:11:17 +04:00
|
|
|
char proxy_username[128];
|
|
|
|
char proxy_password[128];
|
2002-03-23 20:47:21 +03:00
|
|
|
char proxy_telnet_command[512];
|
1999-01-15 14:30:40 +03:00
|
|
|
/* SSH options */
|
2000-09-08 19:24:19 +04:00
|
|
|
char remote_cmd[512];
|
2001-08-26 22:32:28 +04:00
|
|
|
char remote_cmd2[512]; /* fallback if the first fails
|
|
|
|
* (used internally for scp) */
|
2001-05-06 18:35:20 +04:00
|
|
|
char *remote_cmd_ptr; /* might point to a larger command
|
|
|
|
* but never for loading/saving */
|
2001-08-26 22:32:28 +04:00
|
|
|
char *remote_cmd_ptr2; /* might point to a larger command
|
|
|
|
* but never for loading/saving */
|
1999-01-15 14:30:40 +03:00
|
|
|
int nopty;
|
2000-11-02 00:34:21 +03:00
|
|
|
int compression;
|
2000-09-15 15:26:18 +04:00
|
|
|
int agentfwd;
|
2001-12-12 00:00:01 +03:00
|
|
|
int change_username; /* allow username switching in SSH2 */
|
2001-08-25 23:33:33 +04:00
|
|
|
int ssh_cipherlist[CIPHER_MAX];
|
2003-02-01 15:54:40 +03:00
|
|
|
Filename keyfile;
|
2001-05-06 18:35:20 +04:00
|
|
|
int sshprot; /* use v1 or v2 when both available */
|
2001-11-30 02:58:02 +03:00
|
|
|
int ssh2_des_cbc; /* "des-cbc" nonstandard SSH2 cipher */
|
1999-11-08 20:42:12 +03:00
|
|
|
int try_tis_auth;
|
2001-11-29 23:34:06 +03:00
|
|
|
int try_ki_auth;
|
2001-02-24 19:08:56 +03:00
|
|
|
int ssh_subsys; /* run a subsystem rather than a command */
|
2001-08-26 22:32:28 +04:00
|
|
|
int ssh_subsys2; /* fallback to go with remote_cmd2 */
|
1999-01-08 16:02:13 +03:00
|
|
|
/* Telnet options */
|
|
|
|
char termtype[32];
|
|
|
|
char termspeed[32];
|
2001-05-06 18:35:20 +04:00
|
|
|
char environmt[1024]; /* VAR\tvalue\0VAR\tvalue\0\0 */
|
2002-09-12 20:05:05 +04:00
|
|
|
char username[100];
|
|
|
|
char localusername[100];
|
1999-01-08 16:02:13 +03:00
|
|
|
int rfc_environ;
|
2001-05-09 17:51:07 +04:00
|
|
|
int passive_telnet;
|
1999-01-08 16:02:13 +03:00
|
|
|
/* Keyboard options */
|
|
|
|
int bksp_is_delete;
|
|
|
|
int rxvt_homeend;
|
2000-07-26 16:13:51 +04:00
|
|
|
int funky_type;
|
2001-05-06 18:35:20 +04:00
|
|
|
int no_applic_c; /* totally disable app cursor keys */
|
|
|
|
int no_applic_k; /* totally disable app keypad */
|
2002-03-09 14:47:39 +03:00
|
|
|
int no_mouse_rep; /* totally disable mouse reporting */
|
2002-03-07 02:04:20 +03:00
|
|
|
int no_remote_resize; /* disable remote resizing */
|
|
|
|
int no_alt_screen; /* disable alternate screen */
|
|
|
|
int no_remote_wintitle; /* disable remote retitling */
|
|
|
|
int no_dbackspace; /* disable destructive backspace */
|
|
|
|
int no_remote_charset; /* disable remote charset config */
|
2003-04-12 12:59:06 +04:00
|
|
|
int no_remote_qtitle; /* disable remote win title query */
|
1999-01-08 16:02:13 +03:00
|
|
|
int app_cursor;
|
|
|
|
int app_keypad;
|
1999-11-09 14:10:04 +03:00
|
|
|
int nethack_keypad;
|
2001-05-09 19:12:26 +04:00
|
|
|
int telnet_keyboard;
|
2001-12-29 20:21:26 +03:00
|
|
|
int telnet_newline;
|
1999-11-09 14:10:04 +03:00
|
|
|
int alt_f4; /* is it special? */
|
|
|
|
int alt_space; /* is it special? */
|
2000-10-21 20:30:58 +04:00
|
|
|
int alt_only; /* is it special? */
|
2001-01-24 17:08:20 +03:00
|
|
|
int localecho;
|
|
|
|
int localedit;
|
2000-10-27 13:46:04 +04:00
|
|
|
int alwaysontop;
|
2001-09-13 22:24:51 +04:00
|
|
|
int fullscreenonaltenter;
|
2000-07-26 16:13:51 +04:00
|
|
|
int scroll_on_key;
|
2000-10-21 20:30:58 +04:00
|
|
|
int scroll_on_disp;
|
2003-03-06 15:51:12 +03:00
|
|
|
int erase_to_scrollback;
|
2000-10-21 20:30:58 +04:00
|
|
|
int compose_key;
|
2001-04-09 16:52:43 +04:00
|
|
|
int ctrlaltkeys;
|
2001-05-06 18:35:20 +04:00
|
|
|
char wintitle[256]; /* initial window title */
|
1999-01-08 16:02:13 +03:00
|
|
|
/* Terminal options */
|
|
|
|
int savelines;
|
|
|
|
int dec_om;
|
|
|
|
int wrap_mode;
|
1999-01-15 14:30:40 +03:00
|
|
|
int lfhascr;
|
2001-01-17 19:57:33 +03:00
|
|
|
int cursor_type; /* 0=block 1=underline 2=vertical */
|
2000-07-26 16:13:51 +04:00
|
|
|
int blink_cur;
|
2003-01-27 21:02:24 +03:00
|
|
|
int beep;
|
|
|
|
int beep_ind;
|
2001-04-13 14:52:36 +04:00
|
|
|
int bellovl; /* bell overload protection active? */
|
|
|
|
int bellovl_n; /* number of bells to cause overload */
|
|
|
|
int bellovl_t; /* time interval for overload (seconds) */
|
|
|
|
int bellovl_s; /* period of silence to re-enable bell (s) */
|
2003-02-01 15:54:40 +03:00
|
|
|
Filename bell_wavefile;
|
2000-07-26 16:13:51 +04:00
|
|
|
int scrollbar;
|
2001-10-18 01:21:03 +04:00
|
|
|
int scrollbar_in_fullscreen;
|
2003-01-27 21:02:24 +03:00
|
|
|
int resize_action;
|
2000-07-26 16:13:51 +04:00
|
|
|
int bce;
|
|
|
|
int blinktext;
|
1999-01-08 16:02:13 +03:00
|
|
|
int win_name_always;
|
|
|
|
int width, height;
|
2003-02-01 15:54:40 +03:00
|
|
|
FontSpec font;
|
|
|
|
Filename logfilename;
|
2001-01-07 21:24:59 +03:00
|
|
|
int logtype;
|
2001-04-16 19:58:43 +04:00
|
|
|
int logxfovr;
|
2004-10-02 04:33:27 +04:00
|
|
|
int logomitpass;
|
|
|
|
int logomitdata;
|
2001-01-22 19:38:43 +03:00
|
|
|
int hide_mouseptr;
|
2001-04-28 22:02:19 +04:00
|
|
|
int sunken_edge;
|
2001-09-15 19:54:24 +04:00
|
|
|
int window_border;
|
2001-04-09 16:43:46 +04:00
|
|
|
char answerback[256];
|
2002-03-09 20:59:15 +03:00
|
|
|
char printer[128];
|
2004-05-22 14:36:50 +04:00
|
|
|
int arabicshaping;
|
|
|
|
int bidi;
|
1999-01-08 16:02:13 +03:00
|
|
|
/* Colour options */
|
2003-09-04 00:14:38 +04:00
|
|
|
int system_colour;
|
1999-01-08 16:02:13 +03:00
|
|
|
int try_palette;
|
|
|
|
int bold_colour;
|
|
|
|
unsigned char colours[22][3];
|
|
|
|
/* Selection options */
|
|
|
|
int mouse_is_xterm;
|
2001-10-31 21:50:09 +03:00
|
|
|
int rect_select;
|
2001-04-09 15:59:35 +04:00
|
|
|
int rawcnp;
|
2001-11-08 01:22:53 +03:00
|
|
|
int rtf_paste;
|
2001-09-08 00:35:38 +04:00
|
|
|
int mouse_override;
|
1999-01-08 16:02:13 +03:00
|
|
|
short wordness[256];
|
2000-07-26 16:13:51 +04:00
|
|
|
/* translations */
|
2003-01-27 21:02:24 +03:00
|
|
|
int vtmode;
|
2001-10-30 12:50:40 +03:00
|
|
|
char line_codepage[128];
|
2001-09-18 22:51:10 +04:00
|
|
|
int xlat_capslockcyr;
|
2001-01-22 14:34:52 +03:00
|
|
|
/* X11 forwarding */
|
|
|
|
int x11_forward;
|
|
|
|
char x11_display[128];
|
2003-01-12 17:11:38 +03:00
|
|
|
int x11_auth;
|
2001-08-09 00:44:35 +04:00
|
|
|
/* port forwarding */
|
2001-12-15 15:15:24 +03:00
|
|
|
int lport_acceptall; /* accept conns from hosts other than localhost */
|
|
|
|
int rport_acceptall; /* same for remote forwarded ports (SSH2 only) */
|
2003-04-05 15:45:21 +04:00
|
|
|
/*
|
|
|
|
* 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];
|
2002-09-08 17:28:38 +04:00
|
|
|
/* SSH bug compatibility modes */
|
2003-01-27 21:02:24 +03:00
|
|
|
int sshbug_ignore1, sshbug_plainpw1, sshbug_rsa1,
|
2002-09-26 22:37:33 +04:00
|
|
|
sshbug_hmac2, sshbug_derivekey2, sshbug_rsapad2,
|
2003-02-04 16:02:51 +03:00
|
|
|
sshbug_dhgex2, sshbug_pksessid2;
|
2002-10-15 17:07:18 +04:00
|
|
|
/* Options for pterm. Should split out into platform-dependent part. */
|
|
|
|
int stamp_utmp;
|
|
|
|
int login_shell;
|
2002-10-16 13:28:17 +04:00
|
|
|
int scrollbar_on_left;
|
2003-08-21 22:39:17 +04:00
|
|
|
int shadowbold;
|
2003-02-01 15:54:40 +03:00
|
|
|
FontSpec boldfont;
|
|
|
|
FontSpec widefont;
|
|
|
|
FontSpec wideboldfont;
|
2002-10-17 20:51:01 +04:00
|
|
|
int shadowboldoffset;
|
2002-10-07 20:45:23 +04:00
|
|
|
};
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2000-09-08 18:45:20 +04:00
|
|
|
/*
|
|
|
|
* Some global flags denoting the type of application.
|
2000-09-21 18:34:32 +04:00
|
|
|
*
|
|
|
|
* FLAG_VERBOSE is set when the user requests verbose details.
|
|
|
|
*
|
|
|
|
* FLAG_STDERR is set in command-line applications (which have a
|
|
|
|
* functioning stderr that it makes sense to write to) and not in
|
|
|
|
* GUI applications (which don't).
|
|
|
|
*
|
|
|
|
* FLAG_INTERACTIVE is set when a full interactive shell session is
|
|
|
|
* being run, _either_ because no remote command has been provided
|
|
|
|
* _or_ because the application is GUI and can't run non-
|
|
|
|
* interactively.
|
2002-10-30 21:12:46 +03:00
|
|
|
*
|
|
|
|
* 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.
|
2003-04-28 17:59:32 +04:00
|
|
|
*
|
|
|
|
* Note that additional flags may be defined in platform-specific
|
|
|
|
* headers. It's probably best if those ones start from 0x1000, to
|
|
|
|
* avoid collision.
|
2000-09-08 18:45:20 +04:00
|
|
|
*/
|
2000-09-21 18:34:32 +04:00
|
|
|
#define FLAG_VERBOSE 0x0001
|
|
|
|
#define FLAG_STDERR 0x0002
|
|
|
|
#define FLAG_INTERACTIVE 0x0004
|
2000-09-08 18:45:20 +04:00
|
|
|
GLOBAL int flags;
|
|
|
|
|
2002-10-30 21:12:46 +03:00
|
|
|
/*
|
|
|
|
* Likewise, these two variables are set up when the application
|
|
|
|
* initialises, and inform all default-settings accesses after
|
|
|
|
* that.
|
|
|
|
*/
|
1999-10-27 18:28:11 +04:00
|
|
|
GLOBAL int default_protocol;
|
|
|
|
GLOBAL int default_port;
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2004-07-25 18:00:26 +04:00
|
|
|
/*
|
|
|
|
* This is set TRUE by cmdline.c iff a session is loaded with "-load".
|
|
|
|
*/
|
|
|
|
GLOBAL int loaded_session;
|
|
|
|
|
1999-11-15 13:31:06 +03:00
|
|
|
struct RSAKey; /* be a little careful of scope */
|
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
/*
|
|
|
|
* Exports from window.c.
|
|
|
|
*/
|
2002-10-26 16:58:13 +04:00
|
|
|
void request_resize(void *frontend, int, int);
|
2001-05-06 18:35:20 +04:00
|
|
|
void do_text(Context, int, int, char *, int, unsigned long, int);
|
2001-05-10 12:34:20 +04:00
|
|
|
void do_cursor(Context, int, int, char *, int, unsigned long, int);
|
2002-11-10 00:46:21 +03:00
|
|
|
int char_width(Context ctx, int uc);
|
2002-11-23 16:07:29 +03:00
|
|
|
#ifdef OPTIMISE_SCROLL
|
2003-02-01 15:26:33 +03:00
|
|
|
void do_scroll(Context, int, int, int);
|
2002-11-23 16:07:29 +03:00
|
|
|
#endif
|
2002-10-26 16:58:13 +04:00
|
|
|
void set_title(void *frontend, char *);
|
|
|
|
void set_icon(void *frontend, char *);
|
|
|
|
void set_sbar(void *frontend, int, int, int);
|
|
|
|
Context get_ctx(void *frontend);
|
2001-05-06 18:35:20 +04:00
|
|
|
void free_ctx(Context);
|
2002-10-26 16:58:13 +04:00
|
|
|
void palette_set(void *frontend, int, int, int, int);
|
|
|
|
void palette_reset(void *frontend);
|
|
|
|
void write_aclip(void *frontend, char *, int, int);
|
|
|
|
void write_clip(void *frontend, wchar_t *, int, int);
|
|
|
|
void get_clip(void *frontend, wchar_t **, int *);
|
|
|
|
void optimised_move(void *frontend, int, int, int);
|
|
|
|
void set_raw_mouse_mode(void *frontend, int);
|
|
|
|
void connection_fatal(void *frontend, char *, ...);
|
2001-05-06 18:35:20 +04:00
|
|
|
void fatalbox(char *, ...);
|
2002-10-09 22:09:42 +04:00
|
|
|
void modalfatalbox(char *, ...);
|
2002-12-29 16:21:12 +03:00
|
|
|
#ifdef macintosh
|
|
|
|
#pragma noreturn(fatalbox)
|
|
|
|
#pragma noreturn(modalfatalbox)
|
|
|
|
#endif
|
2002-10-26 16:58:13 +04:00
|
|
|
void beep(void *frontend, int);
|
|
|
|
void begin_session(void *frontend);
|
|
|
|
void sys_cursor(void *frontend, int x, int y);
|
|
|
|
void request_paste(void *frontend);
|
2002-10-26 14:16:19 +04:00
|
|
|
void frontend_keypress(void *frontend);
|
|
|
|
void ldisc_update(void *frontend, int echo, int edit);
|
2003-04-05 00:21:05 +04:00
|
|
|
void update_specials_menu(void *frontend);
|
Rationalisation of the system of frontend handles. Most modular bits
of PuTTY (terminal, backend, logctx etc) take a `void *' handle
passed to them from the frontend, and used as a context for all
their callbacks. Most of these point at the frontend structure
itself (on platforms where this is meaningful), except that the
handle passed to the backend has always pointed at the terminal
because from_backend() was implemented in terminal.c. This has
finally bitten Unix PuTTY, because both backend and logctx have
been passing their respective and very different frontend handles to
logevent(), so I've fixed it.
from_backend() is now a function supplied by the _frontend_ itself,
in all cases, and the frontend handle passed to backends must be the
same as that passed to everything else. What was from_backend() in
terminal.c is now called term_data(), and the typical implementation
of from_backend() in a GUI frontend will just extract the terminal
handle from the frontend structure and delegate to that.
This appears to work on Unix and Windows, but has most likely broken
the Mac build.
[originally from svn r3100]
2003-04-11 22:36:27 +04:00
|
|
|
int from_backend(void *frontend, int is_stderr, const char *data, int len);
|
1999-01-08 16:02:13 +03:00
|
|
|
#define OPTIMISE_IS_SCROLL 1
|
|
|
|
|
2002-10-26 16:58:13 +04:00
|
|
|
void set_iconic(void *frontend, int iconic);
|
|
|
|
void move_window(void *frontend, int x, int y);
|
|
|
|
void set_zorder(void *frontend, int top);
|
|
|
|
void refresh_window(void *frontend);
|
|
|
|
void set_zoomed(void *frontend, int zoomed);
|
|
|
|
int is_iconic(void *frontend);
|
|
|
|
void get_window_pos(void *frontend, int *x, int *y);
|
|
|
|
void get_window_pixels(void *frontend, int *x, int *y);
|
|
|
|
char *get_window_title(void *frontend, int icon);
|
2001-11-25 18:21:25 +03:00
|
|
|
|
2002-03-06 23:13:22 +03:00
|
|
|
void cleanup_exit(int);
|
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
/*
|
|
|
|
* Exports from noise.c.
|
|
|
|
*/
|
2001-05-06 18:35:20 +04:00
|
|
|
void noise_get_heavy(void (*func) (void *, int));
|
|
|
|
void noise_get_light(void (*func) (void *, int));
|
2000-10-23 19:20:05 +04:00
|
|
|
void noise_regular(void);
|
2002-10-07 20:45:23 +04:00
|
|
|
void noise_ultralight(unsigned long data);
|
1999-01-08 16:02:13 +03:00
|
|
|
void random_save_seed(void);
|
2000-09-25 19:47:57 +04:00
|
|
|
void random_destroy_seed(void);
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2000-10-06 17:21:36 +04:00
|
|
|
/*
|
|
|
|
* Exports from settings.c.
|
|
|
|
*/
|
2003-04-01 22:10:25 +04:00
|
|
|
char *save_settings(char *section, int do_host, Config * cfg);
|
2003-01-18 23:09:21 +03:00
|
|
|
void save_open_settings(void *sesskey, int do_host, Config *cfg);
|
2001-05-06 18:35:20 +04:00
|
|
|
void load_settings(char *section, int do_host, Config * cfg);
|
2002-12-30 21:21:17 +03:00
|
|
|
void load_open_settings(void *sesskey, int do_host, Config *cfg);
|
2002-10-30 21:12:46 +03:00
|
|
|
void get_sesslist(struct sesslist *, int allocate);
|
2002-10-09 22:09:42 +04:00
|
|
|
void do_defaults(char *, Config *);
|
|
|
|
void registry_cleanup(void);
|
2000-10-06 17:21:36 +04:00
|
|
|
|
2003-01-09 21:06:29 +03:00
|
|
|
/*
|
|
|
|
* Functions used by settings.c to provide platform-specific
|
|
|
|
* default settings.
|
|
|
|
*
|
|
|
|
* (The integer one is expected to return `def' if it has no clear
|
|
|
|
* opinion of its own. This is because there's no integer value
|
|
|
|
* which I can reliably set aside to indicate `nil'. The string
|
2003-02-01 15:54:40 +03:00
|
|
|
* function is perfectly all right returning NULL, of course. The
|
|
|
|
* Filename and FontSpec functions are _not allowed_ to fail to
|
|
|
|
* return, since these defaults _must_ be per-platform.)
|
2003-01-09 21:06:29 +03:00
|
|
|
*/
|
2003-01-14 21:43:45 +03:00
|
|
|
char *platform_default_s(const char *name);
|
|
|
|
int platform_default_i(const char *name, int def);
|
2003-02-01 15:54:40 +03:00
|
|
|
Filename platform_default_filename(const char *name);
|
|
|
|
FontSpec platform_default_fontspec(const char *name);
|
2003-01-09 21:06:29 +03:00
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
/*
|
|
|
|
* Exports from terminal.c.
|
|
|
|
*/
|
|
|
|
|
2003-01-14 21:28:23 +03:00
|
|
|
Terminal *term_init(Config *, struct unicode_data *, void *);
|
2003-01-16 02:30:21 +03:00
|
|
|
void term_free(Terminal *);
|
2002-10-22 20:11:33 +04:00
|
|
|
void term_size(Terminal *, int, int, int);
|
|
|
|
void term_out(Terminal *);
|
2002-10-26 18:06:52 +04:00
|
|
|
void term_paint(Terminal *, Context, int, int, int, int, int);
|
2002-10-22 20:11:33 +04:00
|
|
|
void term_scroll(Terminal *, int, int);
|
|
|
|
void term_pwron(Terminal *);
|
|
|
|
void term_clrsb(Terminal *);
|
2003-01-25 19:16:45 +03:00
|
|
|
void term_mouse(Terminal *, Mouse_Button, Mouse_Button, Mouse_Action,
|
|
|
|
int,int,int,int,int);
|
2003-01-27 03:39:01 +03:00
|
|
|
void term_key(Terminal *, Key_Sym, wchar_t *, size_t, unsigned int,
|
|
|
|
unsigned int);
|
2002-10-22 20:11:33 +04:00
|
|
|
void term_deselect(Terminal *);
|
|
|
|
void term_update(Terminal *);
|
|
|
|
void term_invalidate(Terminal *);
|
|
|
|
void term_blink(Terminal *, int set_cursor);
|
|
|
|
void term_do_paste(Terminal *);
|
|
|
|
int term_paste_pending(Terminal *);
|
|
|
|
void term_paste(Terminal *);
|
|
|
|
void term_nopaste(Terminal *);
|
|
|
|
int term_ldisc(Terminal *, int option);
|
|
|
|
void term_copyall(Terminal *);
|
2003-01-12 17:30:02 +03:00
|
|
|
void term_reconfig(Terminal *, Config *);
|
2002-10-22 20:11:33 +04:00
|
|
|
void term_seen_key_event(Terminal *);
|
Rationalisation of the system of frontend handles. Most modular bits
of PuTTY (terminal, backend, logctx etc) take a `void *' handle
passed to them from the frontend, and used as a context for all
their callbacks. Most of these point at the frontend structure
itself (on platforms where this is meaningful), except that the
handle passed to the backend has always pointed at the terminal
because from_backend() was implemented in terminal.c. This has
finally bitten Unix PuTTY, because both backend and logctx have
been passing their respective and very different frontend handles to
logevent(), so I've fixed it.
from_backend() is now a function supplied by the _frontend_ itself,
in all cases, and the frontend handle passed to backends must be the
same as that passed to everything else. What was from_backend() in
terminal.c is now called term_data(), and the typical implementation
of from_backend() in a GUI frontend will just extract the terminal
handle from the frontend structure and delegate to that.
This appears to work on Unix and Windows, but has most likely broken
the Mac build.
[originally from svn r3100]
2003-04-11 22:36:27 +04:00
|
|
|
int term_data(Terminal *, int is_stderr, const char *data, int len);
|
2002-10-25 15:30:33 +04:00
|
|
|
void term_provide_resize_fn(Terminal *term,
|
|
|
|
void (*resize_fn)(void *, int, int),
|
|
|
|
void *resize_ctx);
|
2002-10-26 16:58:13 +04:00
|
|
|
void term_provide_logctx(Terminal *term, void *logctx);
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2001-12-14 17:57:50 +03:00
|
|
|
/*
|
|
|
|
* Exports from logging.c.
|
|
|
|
*/
|
2003-01-12 18:10:27 +03:00
|
|
|
void *log_init(void *frontend, Config *cfg);
|
2003-01-16 02:30:21 +03:00
|
|
|
void log_free(void *logctx);
|
2003-01-12 18:10:27 +03:00
|
|
|
void log_reconfig(void *logctx, Config *cfg);
|
2002-10-26 16:58:13 +04:00
|
|
|
void logfopen(void *logctx);
|
|
|
|
void logfclose(void *logctx);
|
|
|
|
void logtraffic(void *logctx, unsigned char c, int logmode);
|
2004-08-12 05:02:01 +04:00
|
|
|
void logflush(void *logctx);
|
2003-05-04 18:18:18 +04:00
|
|
|
void log_eventlog(void *logctx, const char *string);
|
2001-12-14 17:57:50 +03:00
|
|
|
enum { PKT_INCOMING, PKT_OUTGOING };
|
2004-10-02 04:33:27 +04:00
|
|
|
enum { PKTLOG_EMIT, PKTLOG_BLANK, PKTLOG_OMIT };
|
|
|
|
struct logblank_t {
|
|
|
|
int offset;
|
|
|
|
int len;
|
|
|
|
int type;
|
|
|
|
};
|
2002-10-26 16:58:13 +04:00
|
|
|
void log_packet(void *logctx, int direction, int type,
|
2004-10-02 04:33:27 +04:00
|
|
|
char *texttype, void *data, int len,
|
|
|
|
int n_blanks, const struct logblank_t *blanks);
|
2001-12-14 17:57:50 +03:00
|
|
|
|
2002-11-19 05:13:46 +03:00
|
|
|
/*
|
|
|
|
* Exports from testback.c
|
|
|
|
*/
|
|
|
|
|
|
|
|
extern Backend null_backend;
|
|
|
|
extern Backend loop_backend;
|
|
|
|
|
1999-11-01 19:40:40 +03:00
|
|
|
/*
|
|
|
|
* Exports from raw.c.
|
|
|
|
*/
|
|
|
|
|
1999-11-10 12:14:08 +03:00
|
|
|
extern Backend raw_backend;
|
1999-11-01 19:40:40 +03:00
|
|
|
|
2001-01-19 13:10:37 +03:00
|
|
|
/*
|
|
|
|
* Exports from rlogin.c.
|
|
|
|
*/
|
|
|
|
|
|
|
|
extern Backend rlogin_backend;
|
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
/*
|
|
|
|
* Exports from telnet.c.
|
|
|
|
*/
|
|
|
|
|
1999-07-12 14:28:18 +04:00
|
|
|
extern Backend telnet_backend;
|
1999-01-08 16:02:13 +03:00
|
|
|
|
|
|
|
/*
|
2002-08-05 01:18:56 +04:00
|
|
|
* Exports from ssh.c. (NB the getline variables have to be GLOBAL
|
|
|
|
* so that PuTTYtel will still compile - otherwise it would depend
|
|
|
|
* on ssh.c.)
|
1999-01-08 16:02:13 +03:00
|
|
|
*/
|
|
|
|
|
2002-08-05 01:18:56 +04:00
|
|
|
GLOBAL int (*ssh_get_line) (const char *prompt, char *str, int maxlen,
|
2001-05-06 18:35:20 +04:00
|
|
|
int is_pw);
|
2002-08-05 01:18:56 +04:00
|
|
|
GLOBAL int ssh_getline_pw_only;
|
1999-07-12 14:28:18 +04:00
|
|
|
extern Backend ssh_backend;
|
1999-01-08 16:02:13 +03:00
|
|
|
|
1999-11-09 15:05:34 +03:00
|
|
|
/*
|
|
|
|
* Exports from ldisc.c.
|
|
|
|
*/
|
2002-11-23 23:02:38 +03:00
|
|
|
void *ldisc_create(Config *, Terminal *, Backend *, void *, void *);
|
2003-01-16 02:30:21 +03:00
|
|
|
void ldisc_free(void *);
|
2002-10-26 14:16:19 +04:00
|
|
|
void ldisc_send(void *handle, char *buf, int len, int interactive);
|
1999-11-09 15:05:34 +03:00
|
|
|
|
2002-10-26 15:08:59 +04:00
|
|
|
/*
|
|
|
|
* Exports from ldiscucs.c.
|
|
|
|
*/
|
|
|
|
void lpage_send(void *, int codepage, char *buf, int len, int interactive);
|
|
|
|
void luni_send(void *, wchar_t * widebuf, int len, int interactive);
|
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
/*
|
|
|
|
* Exports from sshrand.c.
|
|
|
|
*/
|
|
|
|
|
|
|
|
void random_add_noise(void *noise, int length);
|
|
|
|
void random_init(void);
|
|
|
|
int random_byte(void);
|
|
|
|
void random_get_savedata(void **data, int *len);
|
2002-03-06 23:13:22 +03:00
|
|
|
extern int random_active;
|
1999-01-08 16:02:13 +03:00
|
|
|
|
|
|
|
/*
|
|
|
|
* Exports from misc.c.
|
|
|
|
*/
|
|
|
|
|
2001-04-28 13:24:19 +04:00
|
|
|
#include "misc.h"
|
1999-01-08 16:02:13 +03:00
|
|
|
|
1999-02-09 18:18:34 +03:00
|
|
|
/*
|
|
|
|
* Exports from version.c.
|
|
|
|
*/
|
|
|
|
extern char ver[];
|
|
|
|
|
1999-11-08 14:08:09 +03:00
|
|
|
/*
|
2001-05-10 12:34:20 +04:00
|
|
|
* Exports from unicode.c.
|
1999-11-08 14:08:09 +03:00
|
|
|
*/
|
2001-05-10 12:34:20 +04:00
|
|
|
#ifndef CP_UTF8
|
|
|
|
#define CP_UTF8 65001
|
|
|
|
#endif
|
2003-01-02 01:25:25 +03:00
|
|
|
/* void init_ucs(void); -- this is now in platform-specific headers */
|
2002-10-26 15:08:59 +04:00
|
|
|
int is_dbcs_leadbyte(int codepage, char byte);
|
|
|
|
int mb_to_wc(int codepage, int flags, char *mbstr, int mblen,
|
|
|
|
wchar_t *wcstr, int wclen);
|
|
|
|
int wc_to_mb(int codepage, int flags, wchar_t *wcstr, int wclen,
|
2003-01-14 21:28:23 +03:00
|
|
|
char *mbstr, int mblen, char *defchr, int *defused,
|
|
|
|
struct unicode_data *ucsdata);
|
2001-09-18 22:51:10 +04:00
|
|
|
wchar_t xlat_uskbd2cyrllic(int ch);
|
2001-05-10 12:34:20 +04:00
|
|
|
int check_compose(int first, int second);
|
|
|
|
int decode_codepage(char *cp_name);
|
2003-04-05 20:36:11 +04:00
|
|
|
const char *cp_enumerate (int index);
|
|
|
|
const char *cp_name(int codepage);
|
2001-11-08 01:22:53 +03:00
|
|
|
void get_unitab(int codepage, wchar_t * unitab, int ftype);
|
1999-11-08 14:08:09 +03:00
|
|
|
|
2002-12-29 18:08:27 +03:00
|
|
|
/*
|
|
|
|
* Exports from wcwidth.c
|
|
|
|
*/
|
|
|
|
int wcwidth(wchar_t ucs);
|
|
|
|
int wcswidth(const wchar_t *pwcs, size_t n);
|
|
|
|
|
2000-03-24 12:45:49 +03:00
|
|
|
/*
|
|
|
|
* Exports from mscrypto.c
|
|
|
|
*/
|
|
|
|
#ifdef MSCRYPTOAPI
|
|
|
|
int crypto_startup();
|
|
|
|
void crypto_wrapup();
|
|
|
|
#endif
|
|
|
|
|
2000-09-14 19:02:50 +04:00
|
|
|
/*
|
2003-04-28 15:41:39 +04:00
|
|
|
* 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.
|
2000-09-14 19:02:50 +04:00
|
|
|
*/
|
2003-04-28 15:41:39 +04:00
|
|
|
int agent_query(void *in, int inlen, void **out, int *outlen,
|
|
|
|
void (*callback)(void *, void *, int), void *callback_ctx);
|
2000-09-14 19:02:50 +04:00
|
|
|
int agent_exists(void);
|
|
|
|
|
2001-08-27 14:17:41 +04:00
|
|
|
/*
|
|
|
|
* Exports from wildcard.c
|
|
|
|
*/
|
|
|
|
const char *wc_error(int value);
|
|
|
|
int wc_match(const char *wildcard, const char *target);
|
|
|
|
int wc_unescape(char *output, const char *wildcard);
|
1999-01-08 16:02:13 +03:00
|
|
|
|
2002-10-09 22:09:42 +04:00
|
|
|
/*
|
|
|
|
* Exports from windlg.c
|
|
|
|
*/
|
2003-05-04 18:18:18 +04:00
|
|
|
void logevent(void *frontend, const char *);
|
2002-10-26 16:58:13 +04:00
|
|
|
void verify_ssh_host_key(void *frontend, char *host, int port, char *keytype,
|
2002-10-09 22:09:42 +04:00
|
|
|
char *keystr, char *fingerprint);
|
2002-10-26 16:58:13 +04:00
|
|
|
void askcipher(void *frontend, char *ciphername, int cs);
|
2003-02-01 15:54:40 +03:00
|
|
|
int askappend(void *frontend, Filename filename);
|
2002-10-09 22:09:42 +04:00
|
|
|
|
2001-12-31 19:15:19 +03:00
|
|
|
/*
|
|
|
|
* Exports from console.c (that aren't equivalents to things in
|
|
|
|
* windlg.c).
|
|
|
|
*/
|
|
|
|
extern int console_batch_mode;
|
|
|
|
int console_get_line(const char *prompt, char *str, int maxlen, int is_pw);
|
2003-01-21 22:18:06 +03:00
|
|
|
void console_provide_logctx(void *logctx);
|
2004-01-22 22:15:32 +03:00
|
|
|
int is_interactive(void);
|
2001-12-31 19:15:19 +03:00
|
|
|
|
2002-03-09 20:59:15 +03:00
|
|
|
/*
|
|
|
|
* Exports from printing.c.
|
|
|
|
*/
|
|
|
|
typedef struct printer_enum_tag printer_enum;
|
|
|
|
typedef struct printer_job_tag printer_job;
|
|
|
|
printer_enum *printer_start_enum(int *nprinters);
|
|
|
|
char *printer_get_name(printer_enum *, int);
|
|
|
|
void printer_finish_enum(printer_enum *);
|
|
|
|
printer_job *printer_start_job(char *printer);
|
|
|
|
void printer_job_data(printer_job *, void *, int);
|
|
|
|
void printer_finish_job(printer_job *);
|
|
|
|
|
2002-08-05 01:18:56 +04:00
|
|
|
/*
|
|
|
|
* Exports from cmdline.c (and also cmdline_error(), which is
|
|
|
|
* defined differently in various places and required _by_
|
|
|
|
* cmdline.c).
|
|
|
|
*/
|
2003-01-12 17:17:03 +03:00
|
|
|
int cmdline_process_param(char *, char *, int, Config *);
|
|
|
|
void cmdline_run_saved(Config *);
|
2003-12-19 15:44:46 +03:00
|
|
|
void cmdline_cleanup(void);
|
2002-08-05 01:18:56 +04:00
|
|
|
extern char *cmdline_password;
|
|
|
|
#define TOOLTYPE_FILETRANSFER 1
|
2003-03-31 16:10:53 +04:00
|
|
|
#define TOOLTYPE_NONNETWORK 2
|
2002-08-05 01:18:56 +04:00
|
|
|
extern int cmdline_tooltype;
|
|
|
|
|
|
|
|
void cmdline_error(char *, ...);
|
|
|
|
|
2003-03-06 15:41:39 +03:00
|
|
|
/*
|
|
|
|
* Exports from config.c.
|
|
|
|
*/
|
2003-03-06 15:58:01 +03:00
|
|
|
struct controlbox;
|
2003-03-06 15:41:39 +03:00
|
|
|
void setup_config_box(struct controlbox *b, struct sesslist *sesslist,
|
|
|
|
int midsession, int protocol);
|
|
|
|
|
2004-05-22 14:36:50 +04:00
|
|
|
/*
|
|
|
|
* Exports from minibidi.c.
|
|
|
|
*/
|
|
|
|
typedef struct bidi_char {
|
|
|
|
wchar_t origwc, wc;
|
|
|
|
unsigned short index;
|
|
|
|
} bidi_char;
|
|
|
|
int do_bidi(bidi_char *line, int count);
|
|
|
|
int do_shape(bidi_char *line, bidi_char *to, int count);
|
|
|
|
|
2003-01-10 21:33:35 +03:00
|
|
|
/*
|
|
|
|
* X11 auth mechanisms we know about.
|
|
|
|
*/
|
|
|
|
enum {
|
|
|
|
X11_NO_AUTH,
|
|
|
|
X11_MIT, /* MIT-MAGIC-COOKIE-1 */
|
2003-01-11 12:31:54 +03:00
|
|
|
X11_XDM, /* XDM-AUTHORIZATION-1 */
|
2003-01-10 21:33:35 +03:00
|
|
|
X11_NAUTHS
|
|
|
|
};
|
|
|
|
extern const char *const x11_authnames[]; /* declared in x11fwd.c */
|
|
|
|
|
2003-02-01 15:54:40 +03:00
|
|
|
/*
|
|
|
|
* Miscellaneous exports from the platform-specific code.
|
|
|
|
*/
|
2003-02-01 20:24:27 +03:00
|
|
|
Filename filename_from_str(const char *string);
|
|
|
|
const char *filename_to_str(const Filename *fn);
|
2003-02-01 15:54:40 +03:00
|
|
|
int filename_equal(Filename f1, Filename f2);
|
|
|
|
int filename_is_null(Filename fn);
|
2003-08-25 17:53:41 +04:00
|
|
|
char *get_username(void); /* return value needs freeing */
|
2004-01-22 22:15:32 +03:00
|
|
|
char *get_random_data(int bytes); /* used in cmdgen.c */
|
2003-02-01 15:54:40 +03:00
|
|
|
|
1999-01-08 16:02:13 +03:00
|
|
|
#endif
|