mirror of
https://git.libssh.org/projects/libssh.git
synced 2025-11-03 21:53:14 +03:00
connect: Removed unused code
The internal function ssh_connect_host() is not used. Signed-off-by: Anderson Toshiyuki Sasaki <ansasaki@redhat.com> Reviewed-by: Andreas Schneider <asn@cryptomilk.org>
This commit is contained in:
committed by
Andreas Schneider
parent
6a9185636f
commit
a82993b320
@@ -272,8 +272,6 @@ int ssh_auth_reply_success(ssh_session session, int partial);
|
|||||||
int ssh_send_banner(ssh_session session, int is_server);
|
int ssh_send_banner(ssh_session session, int is_server);
|
||||||
|
|
||||||
/* connect.c */
|
/* connect.c */
|
||||||
socket_t ssh_connect_host(ssh_session session, const char *host,const char
|
|
||||||
*bind_addr, int port, long timeout, long usec);
|
|
||||||
socket_t ssh_connect_host_nonblocking(ssh_session session, const char *host,
|
socket_t ssh_connect_host_nonblocking(ssh_session session, const char *host,
|
||||||
const char *bind_addr, int port);
|
const char *bind_addr, int port);
|
||||||
|
|
||||||
|
|||||||
171
src/connect.c
171
src/connect.c
@@ -139,84 +139,6 @@ static int getai(const char *host, int port, struct addrinfo **ai) {
|
|||||||
return getaddrinfo(host, service, &hints, ai);
|
return getaddrinfo(host, service, &hints, ai);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int ssh_connect_ai_timeout(ssh_session session, const char *host,
|
|
||||||
int port, struct addrinfo *ai, long timeout, long usec, socket_t s) {
|
|
||||||
int timeout_ms;
|
|
||||||
ssh_pollfd_t fds;
|
|
||||||
int rc = 0;
|
|
||||||
int ret;
|
|
||||||
socklen_t len = sizeof(rc);
|
|
||||||
|
|
||||||
/* I know we're losing some precision. But it's not like poll-like family
|
|
||||||
* type of mechanisms are precise up to the microsecond.
|
|
||||||
*/
|
|
||||||
timeout_ms=timeout * 1000 + usec / 1000;
|
|
||||||
|
|
||||||
rc = ssh_socket_set_nonblocking(s);
|
|
||||||
if (rc < 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Failed to set socket non-blocking for %s:%d", host, port);
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
SSH_LOG(SSH_LOG_RARE, "Trying to connect to host: %s:%d with "
|
|
||||||
"timeout %d ms", host, port, timeout_ms);
|
|
||||||
|
|
||||||
/* The return value is checked later */
|
|
||||||
connect(s, ai->ai_addr, ai->ai_addrlen);
|
|
||||||
freeaddrinfo(ai);
|
|
||||||
|
|
||||||
fds.fd=s;
|
|
||||||
fds.revents=0;
|
|
||||||
fds.events=POLLOUT;
|
|
||||||
#ifdef _WIN32
|
|
||||||
fds.events |= POLLWRNORM;
|
|
||||||
#endif
|
|
||||||
rc = ssh_poll(&fds,1,timeout_ms);
|
|
||||||
|
|
||||||
if (rc == 0) {
|
|
||||||
/* timeout */
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Timeout while connecting to %s:%d", host, port);
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (rc < 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"poll error: %s", strerror(errno));
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
rc = -1;
|
|
||||||
|
|
||||||
/* Get connect(2) return code. Zero means no error */
|
|
||||||
ret = getsockopt(s, SOL_SOCKET, SO_ERROR,(char *) &rc, &len);
|
|
||||||
if (ret < 0 || rc != 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Connect to %s:%d failed: %s", host, port, strerror(rc));
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* s is connected ? */
|
|
||||||
SSH_LOG(SSH_LOG_PACKET, "Socket connected with timeout");
|
|
||||||
ret = ssh_socket_set_blocking(s);
|
|
||||||
if (ret < 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Failed to set socket as blocking connecting to %s:%d failed: %s",
|
|
||||||
host, port, strerror(errno));
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int set_tcp_nodelay(socket_t socket)
|
static int set_tcp_nodelay(socket_t socket)
|
||||||
{
|
{
|
||||||
int opt = 1;
|
int opt = 1;
|
||||||
@@ -228,99 +150,6 @@ static int set_tcp_nodelay(socket_t socket)
|
|||||||
sizeof(opt));
|
sizeof(opt));
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @internal
|
|
||||||
*
|
|
||||||
* @brief Connect to an IPv4 or IPv6 host specified by its IP address or
|
|
||||||
* hostname.
|
|
||||||
*
|
|
||||||
* @returns A file descriptor, < 0 on error.
|
|
||||||
*/
|
|
||||||
socket_t ssh_connect_host(ssh_session session, const char *host,
|
|
||||||
const char *bind_addr, int port, long timeout, long usec) {
|
|
||||||
socket_t s = -1;
|
|
||||||
int rc;
|
|
||||||
struct addrinfo *ai;
|
|
||||||
struct addrinfo *itr;
|
|
||||||
|
|
||||||
rc = getai(host, port, &ai);
|
|
||||||
if (rc != 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Failed to resolve hostname %s (%s)", host, gai_strerror(rc));
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (itr = ai; itr != NULL; itr = itr->ai_next){
|
|
||||||
/* create socket */
|
|
||||||
s = socket(itr->ai_family, itr->ai_socktype, itr->ai_protocol);
|
|
||||||
if (s < 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Socket create failed: %s", strerror(errno));
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (bind_addr) {
|
|
||||||
struct addrinfo *bind_ai;
|
|
||||||
struct addrinfo *bind_itr;
|
|
||||||
|
|
||||||
SSH_LOG(SSH_LOG_PACKET, "Resolving %s", bind_addr);
|
|
||||||
|
|
||||||
rc = getai(bind_addr, 0, &bind_ai);
|
|
||||||
if (rc != 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Failed to resolve bind address %s (%s)",
|
|
||||||
bind_addr,
|
|
||||||
gai_strerror(rc));
|
|
||||||
freeaddrinfo(ai);
|
|
||||||
close(s);
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (bind_itr = bind_ai; bind_itr != NULL; bind_itr = bind_itr->ai_next) {
|
|
||||||
if (bind(s, bind_itr->ai_addr, bind_itr->ai_addrlen) < 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL,
|
|
||||||
"Binding local address: %s", strerror(errno));
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
freeaddrinfo(bind_ai);
|
|
||||||
|
|
||||||
/* Cannot bind to any local addresses */
|
|
||||||
if (bind_itr == NULL) {
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
s = -1;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (timeout || usec) {
|
|
||||||
socket_t ret = ssh_connect_ai_timeout(session, host, port, itr,
|
|
||||||
timeout, usec, s);
|
|
||||||
|
|
||||||
freeaddrinfo(ai);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (connect(s, itr->ai_addr, itr->ai_addrlen) < 0) {
|
|
||||||
ssh_set_error(session, SSH_FATAL, "Connect failed: %s", strerror(errno));
|
|
||||||
ssh_connect_socket_close(s);
|
|
||||||
s = -1;
|
|
||||||
continue;
|
|
||||||
} else {
|
|
||||||
/* We are connected */
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
freeaddrinfo(ai);
|
|
||||||
|
|
||||||
return s;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @internal
|
* @internal
|
||||||
*
|
*
|
||||||
|
|||||||
Reference in New Issue
Block a user