X-Git-Url: https://git.distorted.org.uk/u/mdw/putty/blobdiff_plain/7555d6a50b05d96de39b5e95cf11a8f05f0c4fd9..783c82b3c5bb0f07deae79e012a864a54bec8749:/raw.c diff --git a/raw.c b/raw.c index 31d7490c..6eb605d9 100644 --- a/raw.c +++ b/raw.c @@ -1,3 +1,7 @@ +/* + * "Raw" backend. + */ + #include #include @@ -85,7 +89,7 @@ static void raw_sent(Plug plug, int bufsize) * freed by the caller. */ static const char *raw_init(void *frontend_handle, void **backend_handle, - Config *cfg, + Conf *conf, char *host, int port, char **realhost, int nodelay, int keepalive) { @@ -98,6 +102,8 @@ static const char *raw_init(void *frontend_handle, void **backend_handle, SockAddr addr; const char *err; Raw raw; + int addressfamily; + char *loghost; raw = snew(struct raw_backend_data); raw->fn = &fn_table; @@ -106,19 +112,20 @@ static const char *raw_init(void *frontend_handle, void **backend_handle, raw->frontend = frontend_handle; + addressfamily = conf_get_int(conf, CONF_addressfamily); /* * Try to find host. */ { char *buf; buf = dupprintf("Looking up host \"%s\"%s", host, - (cfg->addressfamily == ADDRTYPE_IPV4 ? " (IPv4)" : - (cfg->addressfamily == ADDRTYPE_IPV6 ? " (IPv6)" : + (addressfamily == ADDRTYPE_IPV4 ? " (IPv4)" : + (addressfamily == ADDRTYPE_IPV6 ? " (IPv6)" : ""))); logevent(raw->frontend, buf); sfree(buf); } - addr = name_lookup(host, port, realhost, cfg, cfg->addressfamily); + addr = name_lookup(host, port, realhost, conf, addressfamily); if ((err = sk_addr_error(addr)) != NULL) { sk_addr_free(addr); return err; @@ -131,10 +138,27 @@ static const char *raw_init(void *frontend_handle, void **backend_handle, * Open socket. */ raw->s = new_connection(addr, *realhost, port, 0, 1, nodelay, keepalive, - (Plug) raw, cfg); + (Plug) raw, conf); if ((err = sk_socket_error(raw->s)) != NULL) return err; + loghost = conf_get_str(conf, CONF_loghost); + if (*loghost) { + char *colon; + + sfree(*realhost); + *realhost = dupstr(loghost); + colon = strrchr(*realhost, ':'); + if (colon) { + /* + * FIXME: if we ever update this aspect of ssh.c for + * IPv6 literal management, this should change in line + * with it. + */ + *colon++ = '\0'; + } + } + return NULL; } @@ -150,7 +174,7 @@ static void raw_free(void *handle) /* * Stub routine (we don't have any need to reconfigure this backend). */ -static void raw_reconfig(void *handle, Config *cfg) +static void raw_reconfig(void *handle, Conf *conf) { } @@ -205,10 +229,10 @@ static const struct telnet_special *raw_get_specials(void *handle) return NULL; } -static Socket raw_socket(void *handle) +static int raw_connected(void *handle) { Raw raw = (Raw) handle; - return raw->s; + return raw->s != NULL; } static int raw_sendok(void *handle) @@ -266,7 +290,7 @@ Backend raw_backend = { raw_size, raw_special, raw_get_specials, - raw_socket, + raw_connected, raw_exitcode, raw_sendok, raw_ldisc, @@ -274,5 +298,7 @@ Backend raw_backend = { raw_provide_logctx, raw_unthrottle, raw_cfg_info, - 1 + "raw", + PROT_RAW, + 0 };