X-Git-Url: https://asedeno.scripts.mit.edu/gitweb/?a=blobdiff_plain;f=network.h;h=d58635b6246b0162f52acaf0f6f92524ee309fcd;hb=2247065d0fa88daf8499eb937ee60e8e3df22261;hp=675d24c7c5575f3e20e52b7822321f5e157af683;hpb=bb78583ad29084f16db994d66895917e1b20346e;p=PuTTY.git diff --git a/network.h b/network.h index 675d24c7..d58635b6 100644 --- a/network.h +++ b/network.h @@ -38,6 +38,7 @@ struct socket_function_table { void (*set_frozen) (Socket s, int is_frozen); /* ignored by tcp, but vital for ssl */ const char *(*socket_error) (Socket s); + char *(*peer_info) (Socket s); }; typedef union { void *p; int i; } accept_ctx_t; @@ -57,6 +58,11 @@ struct plug_function_table { * fatal error - we may well have other candidate addresses * to fall back to. When it _is_ fatal, the closing() * function will be called. + * - type==2 means that error_msg contains a line of generic + * logging information about setting up the connection. This + * will typically be a wodge of standard-error output from a + * proxy command, so the receiver should probably prefix it to + * indicate this. */ int (*closing) (Plug p, const char *error_msg, int error_code, int calling_back); @@ -92,20 +98,21 @@ struct plug_function_table { /* proxy indirection layer */ /* NB, control of 'addr' is passed via new_connection, which takes * responsibility for freeing it */ -Socket new_connection(SockAddr addr, char *hostname, +Socket new_connection(SockAddr addr, const char *hostname, int port, int privport, int oobinline, int nodelay, int keepalive, Plug plug, Conf *conf); -Socket new_listener(char *srcaddr, int port, Plug plug, int local_host_only, - Conf *conf, int addressfamily); -SockAddr name_lookup(char *host, int port, char **canonicalname, - Conf *conf, int addressfamily); +Socket new_listener(const char *srcaddr, int port, Plug plug, + int local_host_only, Conf *conf, int addressfamily); +SockAddr name_lookup(const char *host, int port, char **canonicalname, + Conf *conf, int addressfamily, void *frontend_for_logging, + const char *lookup_reason_for_logging); int proxy_for_destination (SockAddr addr, const char *hostname, int port, Conf *conf); /* platform-dependent callback from new_connection() */ /* (same caveat about addr as new_connection()) */ -Socket platform_new_connection(SockAddr addr, char *hostname, +Socket platform_new_connection(SockAddr addr, const char *hostname, int port, int privport, int oobinline, int nodelay, int keepalive, Plug plug, Conf *conf); @@ -137,7 +144,8 @@ SockAddr sk_addr_dup(SockAddr addr); Socket sk_new(SockAddr addr, int port, int privport, int oobinline, int nodelay, int keepalive, Plug p); -Socket sk_newlistener(char *srcaddr, int port, Plug plug, int local_host_only, int address_family); +Socket sk_newlistener(const char *srcaddr, int port, Plug plug, + int local_host_only, int address_family); #define sk_plug(s,p) (((*s)->plug) (s, p)) #define sk_close(s) (((*s)->close) (s)) @@ -181,6 +189,13 @@ const char *sk_addr_error(SockAddr addr); */ #define sk_set_frozen(s, is_frozen) (((*s)->set_frozen) (s, is_frozen)) +/* + * Return a (dynamically allocated) string giving some information + * about the other end of the socket, suitable for putting in log + * files. May be NULL if nothing is available at all. + */ +#define sk_peer_info(s) (((*s)->peer_info) (s)) + /* * Simple wrapper on getservbyname(), needed by ssh.c. Returns the * port number, in host byte order (suitable for printf and so on). @@ -202,40 +217,22 @@ char *get_hostname(void); */ Socket new_error_socket(const char *errmsg, Plug plug); -/********** SSL stuff **********/ +/* ---------------------------------------------------------------------- + * Functions defined outside the network code, which have to be + * declared in this header file rather than the main putty.h because + * they use types defined here. + */ /* - * This section is subject to change, but you get the general idea - * of what it will eventually look like. + * Exports from be_misc.c. */ - -typedef struct certificate *Certificate; -typedef struct our_certificate *Our_Certificate; - /* to be defined somewhere else, somehow */ - -typedef struct ssl_client_socket_function_table **SSL_Client_Socket; -typedef struct ssl_client_plug_function_table **SSL_Client_Plug; - -struct ssl_client_socket_function_table { - struct socket_function_table base; - void (*renegotiate) (SSL_Client_Socket s); - /* renegotiate the cipher spec */ -}; - -struct ssl_client_plug_function_table { - struct plug_function_table base; - int (*refuse_cert) (SSL_Client_Plug p, Certificate cert[]); - /* do we accept this certificate chain? If not, why not? */ - /* cert[0] is the server's certificate, cert[] is NULL-terminated */ - /* the last certificate may or may not be the root certificate */ - Our_Certificate(*client_cert) (SSL_Client_Plug p); - /* the server wants us to identify ourselves */ - /* may return NULL if we want anonymity */ -}; - -SSL_Client_Socket sk_ssl_client_over(Socket s, /* pre-existing (tcp) connection */ - SSL_Client_Plug p); - -#define sk_renegotiate(s) (((*s)->renegotiate) (s)) +void backend_socket_log(void *frontend, int type, SockAddr addr, int port, + const char *error_msg, int error_code, Conf *conf, + int session_started); +#ifndef BUFCHAIN_TYPEDEF +typedef struct bufchain_tag bufchain; /* rest of declaration in misc.c */ +#define BUFCHAIN_TYPEDEF +#endif +void log_proxy_stderr(Plug plug, bufchain *buf, const void *vdata, int len); #endif