Example #1
0
int Ctcs::Connect()
{
  ssize_t r;
  m_last_timestamp = now;

  if( _s2sin(m_host, m_port, &m_sin) < 0 ){
    CONSOLE.Warning(2, "warn, get CTCS ip address failed.");
    return -1;
  }

  m_sock = socket(AF_INET, SOCK_STREAM, 0);
  if( INVALID_SOCKET == m_sock ) return -1;

  if( setfd_nonblock(m_sock) < 0 ){
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }

  r = connect_nonb(m_sock, (struct sockaddr *)&m_sin);
  if( r == -1 ){
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }else if( r == -2 ){
    m_status = DT_TRACKER_CONNECTING;
  }else{
    m_status = DT_TRACKER_READY;
    if(*cfg_verbose) CONSOLE.Debug("Connected to CTCS");
    if( Send_Protocol() != 0 && errno != EINPROGRESS ){
      CONSOLE.Warning(2, "warn, send protocol to CTCS failed:  %s",
        strerror(errno));
      return -1;
    }
    if( Send_Auth() != 0 && errno != EINPROGRESS ){
      CONSOLE.Warning(2, "warn, send password to CTCS failed:  %s",
        strerror(errno));
      return -1;
    }
    if( Send_Torrent(BTCONTENT.GetPeerId(), BTCONTENT.GetMetainfoFile()) < 0 &&
        errno != EINPROGRESS ){
      CONSOLE.Warning(2, "warn, send torrent to CTCS failed:  %s",
        strerror(errno));
      return -1;
    }
  }
  return 0;
}
Example #2
0
int btTracker::Connect()
{
	ssize_t r;
	time(&m_last_timestamp);

	if (_s2sin(m_host, m_port, &m_sin) < 0) {
		CONSOLE.Warning(2, "warn, get tracker's ip address failed.");
		return -1;
	}

	m_sock = socket(AF_INET, SOCK_STREAM, 0);
	if (INVALID_SOCKET == m_sock)
		return -1;

	// we only need to bind if we have specified an ip
	// we need it to bind here before the connect!!!!
	if (cfg_listen_ip != 0) {
		struct sockaddr_in addr;
		// clear the struct as requested in the manpages
		memset(&addr, 0, sizeof(sockaddr_in));
		// set the type
		addr.sin_family = AF_INET;
		// we want the system to choose port
		addr.sin_port = 0;
		// set the defined ip from the commandline
		addr.sin_addr.s_addr = cfg_listen_ip;
		// bind it or return...
		if (bind
			(m_sock, (struct sockaddr *) &addr,
			sizeof(struct sockaddr_in)) != 0) {
			CONSOLE.Warning(1,
				"warn, can't set up tracker connection:  %s",
				strerror(errno));
			return -1;
		}
	}

	if (setfd_nonblock(m_sock) < 0) {
		CLOSE_SOCKET(m_sock);
		return -1;
	}

	r = connect_nonb(m_sock, (struct sockaddr *) &m_sin);

	if (r == -1) {
		CLOSE_SOCKET(m_sock);
		return -1;
	} else if (r == -2)
		m_status = T_CONNECTING;
	else {
		if (arg_verbose)
			CONSOLE.Debug("Connected to tracker");
		if (0 == SendRequest())
			m_status = T_READY;
		else {
			CLOSE_SOCKET(m_sock);
			return -1;
		}
	}
	return 0;
}
Example #3
0
int btTracker::Connect()
{
  struct sockaddr_in sin;
  ssize_t r;

  m_result = DT_NORMAL;
  m_last_timestamp = now;

  if( _s2sin(m_spec->host, m_spec->port, &sin) < 0 ){
    CONSOLE.Warning(2, "warn, get tracker's ip address failed.");
    return -1;
  }

  m_sock = socket(AF_INET, SOCK_STREAM, 0);
  if( INVALID_SOCKET == m_sock ){
    CONSOLE.Warning(2, "warn, tracker socket allocation failed:  %s",
      strerror(errno));
    return -1;
  }

  /* we only need to bind if we have specified an ip
     we need it to bind here before the connect! */
  if( *cfg_listen_ip != 0 ){
    struct sockaddr_in addr;
    // clear the struct as requested in the manpages
    memset(&addr, 0, sizeof(sockaddr_in));
    // set the type
    addr.sin_family = AF_INET;
    // we want the system to choose port
    addr.sin_port = 0;
    // set the defined ip from the commandline
    addr.sin_addr.s_addr = *cfg_listen_ip;
    // bind it or return...
    if( bind(m_sock, (struct sockaddr *)&addr, sizeof(struct sockaddr_in))
          != 0 ){
      CONSOLE.Warning(1, "warn, can't set up tracker connection:  %s",
        strerror(errno));
      return -1;
    }
  }

  if( setfd_nonblock(m_sock) < 0 ){
    CONSOLE.Warning(2, "warn, tracker socket setup failed:  %s",
      strerror(errno));
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }

  r = connect_nonb(m_sock, (struct sockaddr *)&sin);
  if( r == -1 ){
    CONSOLE.Warning(2, "warn, connect to tracker at %s failed:  %s",
      m_spec->url, strerror(errno));
    CLOSE_SOCKET(m_sock);
    m_sock = INVALID_SOCKET;
    return -1;
  }else if( r == -2 ){
    if(*cfg_verbose) CONSOLE.Debug("Connecting to tracker at %s", m_spec->url);
    m_status = DT_TRACKER_CONNECTING;
  }else{
    if(*cfg_verbose) CONSOLE.Debug("Connected to tracker at %s", m_spec->url);
    if( 0 == SendRequest() ) m_status = DT_TRACKER_READY;
    else{
      CLOSE_SOCKET(m_sock);
      m_sock = INVALID_SOCKET;
      return -1;
    }
  }
  return 0;
}