X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=putty.h;h=520de49086be668ac05686eb52e7b02aa09324f1;hb=5904545cc18289541702da284b00490cb25a753e;hp=d1a5daeb6a37bd2468463aabdf07686c1e215067;hpb=75c79e318fffc6db076861856c1320fcea849bf2;p=PuTTY.git diff --git a/putty.h b/putty.h index d1a5daeb..520de490 100644 --- a/putty.h +++ b/putty.h @@ -253,6 +253,7 @@ enum { KEX_DHGROUP14, KEX_DHGEX, KEX_RSA, + KEX_ECDH, KEX_MAX }; @@ -601,7 +602,7 @@ void begin_session(void *frontend); 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 frontend_echoedit_update(void *frontend, int echo, int edit); /* It's the backend's responsibility to invoke this at the start of a * connection, if necessary; it can also invoke it later if the set of * special commands changes. It does not need to invoke it at session @@ -838,12 +839,22 @@ void cleanup_exit(int); X(INT, NONE, sshbug_maxpkt2) \ X(INT, NONE, sshbug_ignore2) \ X(INT, NONE, sshbug_winadj) \ + X(INT, NONE, sshbug_chanreq) \ /* \ * ssh_simple means that we promise never to open any channel \ * other than the main one, which means it can safely use a very \ * large window in SSH-2. \ */ \ X(INT, NONE, ssh_simple) \ + X(INT, NONE, ssh_connection_sharing) \ + X(INT, NONE, ssh_connection_sharing_upstream) \ + X(INT, NONE, ssh_connection_sharing_downstream) \ + /* + * ssh_manual_hostkeys is conceptually a set rather than a + * dictionary: the string subkeys are the important thing, and the + * actual values to which those subkeys map are all "". + */ \ + X(STR, STR, ssh_manual_hostkeys) \ /* Options for pterm. Should split out into platform-dependent part. */ \ X(INT, NONE, stamp_utmp) \ X(INT, NONE, login_shell) \ @@ -977,8 +988,6 @@ 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 *); @@ -1018,7 +1027,8 @@ struct logblank_t { void log_packet(void *logctx, int direction, int type, char *texttype, const void *data, int len, int n_blanks, const struct logblank_t *blanks, - const unsigned long *sequence); + const unsigned long *sequence, + unsigned downstream_id, const char *additional_log_text); /* * Exports from testback.c @@ -1057,6 +1067,7 @@ void *ldisc_create(Conf *, Terminal *, Backend *, void *, void *); void ldisc_configure(void *, Conf *); void ldisc_free(void *); void ldisc_send(void *handle, char *buf, int len, int interactive); +void ldisc_echoedit_update(void *handle); /* * Exports from ldiscucs.c. @@ -1405,11 +1416,16 @@ void timer_change_notify(unsigned long next); * top-level event loop. However, if a front end doesn't have control * over its own event loop (e.g. because it's using GTK) then it can * instead request notifications when a callback is available, so that - * it knows to ask its delegate event loop to do the same thing. + * it knows to ask its delegate event loop to do the same thing. Also, + * if a front end needs to know whether a callback is pending without + * actually running it (e.g. so as to put a zero timeout on a select() + * call) then it can call toplevel_callback_pending(), which will + * return true if at least one callback is in the queue. */ typedef void (*toplevel_callback_fn_t)(void *ctx); void queue_toplevel_callback(toplevel_callback_fn_t fn, void *ctx); void run_toplevel_callbacks(void); +int toplevel_callback_pending(void); typedef void (*toplevel_callback_notify_fn_t)(void *frontend); void request_callback_notifications(toplevel_callback_notify_fn_t notify, @@ -1427,12 +1443,14 @@ void request_callback_notifications(toplevel_callback_notify_fn_t notify, #endif /* SURROGATE PAIR */ -#ifndef IS_HIGH_SURROGATE #define HIGH_SURROGATE_START 0xd800 #define HIGH_SURROGATE_END 0xdbff #define LOW_SURROGATE_START 0xdc00 #define LOW_SURROGATE_END 0xdfff +/* These macros exist in the Windows API, so the environment may + * provide them. If not, define them in terms of the above. */ +#ifndef IS_HIGH_SURROGATE #define IS_HIGH_SURROGATE(wch) (((wch) >= HIGH_SURROGATE_START) && \ ((wch) <= HIGH_SURROGATE_END)) #define IS_LOW_SURROGATE(wch) (((wch) >= LOW_SURROGATE_START) && \