void ccnet_peer_update_address (CcnetPeer *peer, const char *addr_str, unsigned short port) { if (!is_valid_ipaddr (addr_str)) return; ccnet_peer_set_addr_str (peer, addr_str); if (port == 0) return; peer->port = port; }
/** * return %TRUE if an outgoing connection is started, %FALSE otherwise. * * When peer's ip address is not looked up yet, an dns request will be sent, * and when dns done, this function will be called again. */ gboolean ccnet_conn_manager_connect_peer (CcnetConnManager *manager, CcnetPeer *peer) { CcnetPacketIO *io; /* int interval; */ const char *addr = NULL; int port = 0; if (peer->in_connection) return FALSE; /* time_t now = time(NULL); */ if (peer->net_state == PEER_CONNECTED) return FALSE; if (peer->dns_addr) addr = peer->dns_addr; else if (!peer->redirected) { if (!peer->public_addr) goto err_connect; if (is_valid_ipaddr(peer->public_addr)) addr = peer->public_addr; else { dns_lookup_peer (peer); return TRUE; /* same as out going is started */ } } else { if (!peer->redirect_addr) goto err_connect; if (is_valid_ipaddr(peer->redirect_addr)) addr = peer->redirect_addr; else { dns_lookup_peer (peer); return TRUE; /* same as out going is started */ } } if (!addr) goto err_connect; if (!peer->redirected) port = peer->public_port; else port = peer->redirect_port; ccnet_peer_update_address (peer, addr, port); /* interval = get_reconnect_interval_secs (peer); */ /* if (now - peer->last_try_time < interval) { */ /* ccnet_debug ("[Conn] Less than interval: (%d - %d = %d, %d)\n", */ /* now, peer->last_try_time, now - peer->last_try_time, */ /* interval); */ /* return FALSE; */ /* } */ /* peer->last_try_time = now; */ if (peer->num_fails == 0) { /* print log for the first time */ ccnet_message ("[Conn] Start outgoing connect to %s(%.10s) %s:%d\n", peer->name, peer->id, addr, port); } else { ccnet_debug ("[Conn] Start outgoing connect to %s(%.10s) %s:%d\n", peer->name, peer->id, addr, port); } io = ccnet_packet_io_new_outgoing (manager->session, addr, port); if (io == NULL) { /* ccnet_warning ("Failed to create socket for peer %s (%.10s)\n", peer->name, peer->id); */ goto err_connect; } else { peer->in_connection = 1; ccnet_handshake_new (manager->session, peer, io, myHandshakeDoneCB, manager); return TRUE; } err_connect: peer->num_fails++; return FALSE; }