Exemple #1
0
static void
_peer_shutdown (CcnetPeer *peer)
{
    peer->in_shutdown = 1;

    if (peer->net_state == PEER_CONNECTED) {
        peer->last_down = time(NULL);
        ccnet_packet_io_free (peer->io);
        peer->io = NULL;
        g_object_set (peer, "can-connect", 0, NULL);
    }
    peer->is_ready = 0;
    g_free (peer->dns_addr);
    peer->dns_addr = NULL;
    peer->dns_done = 0;

    /* clear session key when peer down  */
    peer->encrypt_channel = 0;
    g_free (peer->session_key);
    peer->session_key = NULL;

    ccnet_debug ("Shutdown all processors for peer %s\n", peer->name);
    shutdown_processors (peer);
    remove_write_callbacks (peer);

    ccnet_peer_set_net_state (peer, PEER_DOWN);

    g_signal_emit (peer, signals[DOWN_SIG], 0);

    peer->in_shutdown = 0;
}
Exemple #2
0
static void recv_ok(CcnetProcessor *processor, 
                    char *code, char *code_msg,
                    char *content, int clen)
{
    USE_PRIV;

    if (processor->state != INIT) {
        close_processor(processor);
        return;
    }

    /* check version */
    if (clen != 0) {
        int v = get_version(content);
        if ((priv->used_version = get_used_version(v)) == -1) {
            ccnet_processor_send_error_update(processor, SC_VERSION_MISMATCH,
                                              SS_VERSION_MISMATCH);
            close_processor(processor);
            return;
        }
    } else {
        ccnet_processor_send_error_update(processor, SC_VERSION_MISMATCH,
                                          SS_VERSION_MISMATCH);
        close_processor(processor);
        return;
    }

    if (processor->peer->net_state == PEER_DOWN)
        ccnet_peer_set_net_state (processor->peer, PEER_INDIRECT);
    
    if (processor->peer->pubkey)
        send_challenge(processor);
    else
        get_pubkey(processor);
}
Exemple #3
0
static void on_peer_connected (CcnetPeer *peer, CcnetPacketIO *io)
{
    g_assert (peer->net_state == PEER_DOWN);

    ccnet_peer_set_io (peer, io);
    ccnet_peer_set_net_state (peer, PEER_CONNECTED);
    start_keepalive (peer);
}
Exemple #4
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);
}
Exemple #5
0
static void accept_local_client (int fd, short event, void *vsession)
{
    CcnetSession *session = vsession;
    CcnetPacketIO *io;
    int connfd;
    CcnetPeer *peer;
    static int local_id = 0;

    connfd = accept (fd, NULL, 0);

    ccnet_message ("Accepted a local client\n");

    io = ccnet_packet_io_new_incoming (session, NULL, connfd);
    peer = ccnet_peer_new (session->base.id);
    peer->name = g_strdup_printf("local-%d", local_id++);
    peer->is_local = TRUE;
    ccnet_peer_set_io (peer, io);
    ccnet_peer_set_net_state (peer, PEER_CONNECTED);
    ccnet_peer_manager_add_local_peer (session->peer_mgr, peer);
    g_object_unref (peer);
}