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; }
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); }
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); }
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); }
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); }