Пример #1
0
static void on_get_unauth_peer_pub_info_done (CcnetProcessor *processor,
                                              gboolean success, void *data)
{
    if (success) {
        notify_found_peer (processor->session, processor->peer);
        start_keepalive (processor->peer);
    } else
        ccnet_peer_shutdown (processor->peer);
}
Пример #2
0
static void close_processor(CcnetProcessor *processor)
{
    CcnetPeer *peer = processor->peer;

    ccnet_timer_free (&processor->retry_timer);
    ccnet_processor_done (processor, FALSE);
    ccnet_peer_shutdown (peer);
    peer->num_fails++;
}
Пример #3
0
static void close_processor_in_timeout(CcnetProcessor *processor)
{
    CcnetPeer *peer = processor->peer;

    ccnet_debug ("[Conn] keepalive timeout current state is %d\n",
                 processor->state);

    ccnet_processor_done (processor, FALSE);
    ccnet_peer_shutdown (peer);
    peer->num_fails++;
}
Пример #4
0
void
ccnet_session_shutdown_network (CcnetSession *session)
{
    GList *peers, *ptr;
    
    peers = ccnet_peer_manager_get_peer_list(session->peer_mgr);
    for (ptr = peers; ptr; ptr = ptr->next)
        ccnet_peer_shutdown ((CcnetPeer *)ptr->data);
    g_list_free (peers);

    ccnet_conn_manager_stop (session->connMgr);
}
Пример #5
0
static void on_unauthed_peer_connected (CcnetPeer *peer, CcnetPacketIO *io)
{
    CcnetProcessor *processor;
    CcnetProcFactory *factory = peer->manager->session->proc_factory;

    ccnet_peer_set_io (peer, io);              
    ccnet_peer_set_net_state (peer, PEER_CONNECTED);

    processor = ccnet_proc_factory_create_master_processor (
        factory, "get-pubinfo", peer);
    if (processor == NULL) {
        ccnet_warning ("Create get-pubinfo processor failed\n");
        ccnet_peer_shutdown (peer);
        return;
    }
    g_signal_connect (processor, "done",
                      G_CALLBACK(on_get_unauth_peer_pub_info_done), NULL);

    ccnet_processor_startl (processor, NULL);
}
Пример #6
0
static void proc_shutdown (CcnetProcessor *processor)
{
    CcnetPeer *peer = processor->peer;

    if (IS_SLAVE(processor))
        return;

    if (peer->net_state == PEER_INDIRECT) {
        /* In indirect connection, we may receive SC_PROC_DEAD,
         * which cause shutdown be called.
         */
        /* detach from the peer */
        ccnet_peer_remove_processor (processor->peer, processor);
        ccnet_peer_shutdown (peer);
        peer->num_fails++;
    } else {
        /* Otherwise the shutdown of keepalive is only be called in
         * peer shutdown */
        g_assert (peer->in_shutdown);
    }
}
Пример #7
0
void
ccnet_peer_free (CcnetPeer *peer)
{
    ccnet_peer_shutdown (peer);
    g_object_unref (peer);
}
Пример #8
0
static void
myHandshakeDoneCB (CcnetHandshake *handshake,
                   CcnetPacketIO  *io,
                   int             is_connected,
                   const char     *peer_id,
                   void           *vmanager)
{
    CcnetConnManager *manager = vmanager;
    CcnetPeerManager *peerMgr = manager->session->peer_mgr;
    CcnetPeer *peer;

    if (!is_connected) {
        if (ccnet_packet_io_is_incoming (io)) {
            ccnet_warning ("[conn] incoming handshake fails.\n");
            ccnet_packet_io_free (io);
            return;
        }

        /* temporally use peer, so don't need to increase the reference */
        peer = handshake->peer;
        if (peer->num_fails == 0) {
            /* print error for the first time */
            ccnet_message ("[Conn] peer %s(%.10s) connection fails\n", 
                         peer->name, peer->id);
        } else {
            ccnet_debug ("[Conn] peer %s(%.10s) connection fails\n", 
                         peer->name, peer->id);
        }
        if (peer->net_state == PEER_CONNECTED) {
            ccnet_debug ("[Conn] But Peer %s(%.10s) is already connected me.\n",
                         peer->name, peer->id);
        } else if (peer->net_state == PEER_DOWN){
            ccnet_peer_shutdown(peer);
        }

        ccnet_packet_io_free (io);

        peer->num_fails++;
        peer->in_connection = 0;
        return;
    }

    if (!ccnet_packet_io_is_incoming (io)) {
        peer = handshake->peer;
        peer->in_connection = 0;
        
        if (peer->to_resolve) {
            if (!peer_id_valid(peer_id)) {
                /* TODO: Remove the peer */
                ccnet_warning ("[Conn] Resolving: Received invalid peer id\n");
                return;
            }
            ccnet_debug ("[Conn] Resolving: Peer %.8s is resolved\n", peer_id);
            memcpy (peer->id, peer_id, 40);
            peer->id[40] = '\0';
            on_resolve_peer_connected (peer, io);
            return;
        }
        /* ref for using the peer below */
        g_object_ref (peer);
    } else {
        /* incoming */
        if (peer_id == NULL) {
            ccnet_warning ("Unknown peer (no-id) connecting\n");
            ccnet_packet_io_free (io);
            return;
        }
        peer = ccnet_peer_manager_get_peer (peerMgr, peer_id);
        if (!peer) {
            ccnet_message ("Unknown peer %s connecting\n", peer_id);
            peer = ccnet_peer_new (peer_id);
            ccnet_peer_manager_add_peer (peerMgr, peer);
            set_peer_address_from_socket(peer, io);
            peer->last_up = time(NULL);
            on_unauthed_peer_connected (peer, io);
            g_object_unref (peer);
            return;
        }
        set_peer_address_from_socket(peer, io);
        peer->last_up = time(NULL);
    }
    /* hold a reference on the peer */

    if (peer->net_state == PEER_CONNECTED) {
        ccnet_message ("[Conn] Peer %s (%.10s) is already connected. "
                       "Discarding this handshake.\n", 
                       peer->name, peer->id);
        ccnet_packet_io_free (io);
        g_object_unref (peer);
        return;
    }

    ccnet_message ("[Conn] Peer %s (%.10s) connected\n",
                   peer->name, peer->id);
    peer->num_fails = 0;
    on_peer_connected (peer, io);
    g_object_unref (peer);
}