aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/libssh/priv.h2
-rw-r--r--src/connect.c171
2 files changed, 0 insertions, 173 deletions
diff --git a/include/libssh/priv.h b/include/libssh/priv.h
index 2a1ddb44..ce74465a 100644
--- a/include/libssh/priv.h
+++ b/include/libssh/priv.h
@@ -272,8 +272,6 @@ int ssh_auth_reply_success(ssh_session session, int partial);
int ssh_send_banner(ssh_session session, int is_server);
/* 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,
const char *bind_addr, int port);
diff --git a/src/connect.c b/src/connect.c
index 477b29e6..549fd127 100644
--- a/src/connect.c
+++ b/src/connect.c
@@ -139,84 +139,6 @@ static int getai(const char *host, int port, struct addrinfo **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)
{
int opt = 1;
@@ -231,99 +153,6 @@ static int set_tcp_nodelay(socket_t socket)
/**
* @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
- *
* @brief Launches a nonblocking connect to an IPv4 or IPv6 host
* specified by its IP address or hostname.
*