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);
 | 
			
		||||
 | 
			
		||||
/* 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);
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										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);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
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;
 | 
			
		||||
@@ -228,99 +150,6 @@ static int set_tcp_nodelay(socket_t socket)
 | 
			
		||||
                      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
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user