static void on_peer_auth_done (CcnetPeerManager *manager, CcnetPeer *peer, gpointer user_data) { CcnetSession *session = (CcnetSession *)user_data; CCNET_SESSION_GET_CLASS (session)->on_peer_auth_done(session, peer); }
int ccnet_session_prepare (CcnetSession *session, const char *config_dir_r, gboolean test_config) { char *misc_path; int ret; if (ccnet_session_load_config (session, config_dir_r) < 0) return -1; misc_path = g_build_filename (session->config_dir, "misc", NULL); if (checkdir_with_mkdir (misc_path) < 0) { ccnet_error ("mkdir %s error", misc_path); return -1; } /* config db */ session->config_db = ccnet_session_config_open_db (misc_path); if (!session->config_db) { ccnet_warning ("Failed to open config db.\n"); return -1; } /* call subclass prepare */ ret = CCNET_SESSION_GET_CLASS (session)->prepare(session); if (ret < 0) return ret; /* peer */ ccnet_peer_manager_prepare(session->peer_mgr); g_signal_connect (session->peer_mgr, "peer-auth-done", G_CALLBACK(on_peer_auth_done), session); /* permission manager */ ccnet_perm_manager_prepare (session->perm_mgr); g_free (misc_path); if (test_config) { return 0; } else { /* Open localhost, if failed, then the program will exists. This is used * to prevent two instance of ccnet on the same port. */ listen_on_localhost (session); /* refresh pubinfo on every startup */ save_pubinfo (session); } return 0; }