X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fdht%2Fplugin_dhtlog_mysql.c;h=b31a41f4c184f5fd63609d4bb552323296d828b4;hb=b7c95147188502651e4cb2b60c7062137f73e878;hp=6bdc7d023dbafcea60df4e581cf55cb4ac46faa0;hpb=0cd34604e5497edad8fa3a761ef626ad7168c90a;p=oweals%2Fgnunet.git diff --git a/src/dht/plugin_dhtlog_mysql.c b/src/dht/plugin_dhtlog_mysql.c index 6bdc7d023..b31a41f4c 100644 --- a/src/dht/plugin_dhtlog_mysql.c +++ b/src/dht/plugin_dhtlog_mysql.c @@ -32,7 +32,7 @@ #include -#define DEBUG_DHTLOG GNUNET_NO +#define DEBUG_DHTLOG GNUNET_YES /** * Maximum number of supported parameters for a prepared @@ -91,8 +91,8 @@ static unsigned long long current_trial = 0; /* I like to assign 0, just to r */ static MYSQL *conn; -#define INSERT_QUERIES_STMT "INSERT INTO queries (trialuid, querytype, hops, dhtkeyuid, dhtqueryid, succeeded, nodeuid) "\ - "VALUES (?, ?, ?, ?, ?, ?, ?)" +#define INSERT_QUERIES_STMT "INSERT INTO queries (trialuid, querytype, hops, dhtkeyuid, dhtqueryid, succeeded, nodeuid, time) "\ + "VALUES (?, ?, ?, ?, ?, ?, ?, NOW())" static struct StatementHandle *insert_query; #define INSERT_ROUTES_STMT "INSERT INTO routes (trialuid, querytype, hops, dhtkeyuid, dhtqueryid, succeeded, nodeuid, from_node, to_node) "\ @@ -103,14 +103,21 @@ static struct StatementHandle *insert_route; "VALUES (?, ?, ?)" static struct StatementHandle *insert_node; +#define INSERT_ROUNDS_STMT "INSERT INTO rounds (trialuid, round_type, round_count, starttime) "\ + "VALUES (?, ?, ?, NOW())" + +static struct StatementHandle *insert_round; + #define INSERT_TRIALS_STMT "INSERT INTO trials"\ - "(starttime, numnodes, topology,"\ + "(starttime, other_trial_identifier, numnodes, topology,"\ "topology_percentage, topology_probability,"\ "blacklist_topology, connect_topology, connect_topology_option,"\ "connect_topology_option_modifier, puts, gets, "\ "concurrent, settle_time, num_rounds, malicious_getters,"\ - "malicious_putters, malicious_droppers, message) "\ - "VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" + "malicious_putters, malicious_droppers, malicious_get_frequency,"\ + "malicious_put_frequency, stop_closest, stop_found, strict_kademlia, "\ + "gets_succeeded, message) "\ + "VALUES (NOW(), ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)" static struct StatementHandle *insert_trial; @@ -125,11 +132,16 @@ static struct StatementHandle *insert_trial; static struct StatementHandle *insert_stat; +#define INSERT_GENERIC_STAT_STMT "INSERT INTO generic_stats" \ + "(trialuid, nodeuid, section, name, value)"\ + "VALUES (?, ?, ?, ?, ?)" +static struct StatementHandle *insert_generic_stat; + #define INSERT_DHTKEY_STMT "INSERT INTO dhtkeys (dhtkey, trialuid, keybits) "\ "VALUES (?, ?, ?)" static struct StatementHandle *insert_dhtkey; -#define UPDATE_TRIALS_STMT "UPDATE trials set endtime=NOW(), total_messages_dropped = ?, total_bytes_dropped = ?, unknownPeers = ? where trialuid = ?" +#define UPDATE_TRIALS_STMT "UPDATE trials set endtime=NOW(), gets_succeeded = ? where trialuid = ?" static struct StatementHandle *update_trial; #define UPDATE_CONNECTIONS_STMT "UPDATE trials set totalConnections = ? where trialuid = ?" @@ -155,6 +167,9 @@ static struct StatementHandle *insert_topology; "VALUES (?, ?, ?)" static struct StatementHandle *extend_topology; +#define SET_MALICIOUS_STMT "update nodes set malicious_dropper = 1 where trialuid = ? and nodeid = ?" +static struct StatementHandle *update_node_malicious; + #define UPDATE_TOPOLOGY_STMT "update topology set connections = ? where topology_uid = ?" static struct StatementHandle *update_topology; @@ -233,30 +248,38 @@ itable () return GNUNET_SYSERR; if (MRUNS ("CREATE TABLE IF NOT EXISTS `trials` (" - "`trialuid` int(10) unsigned NOT NULL auto_increment," - "`numnodes` int(10) unsigned NOT NULL," - "`topology` int(10) NOT NULL," - "`starttime` datetime NOT NULL," - "`endtime` datetime NOT NULL," - "`puts` int(10) unsigned NOT NULL," - "`gets` int(10) unsigned NOT NULL," - "`concurrent` int(10) unsigned NOT NULL," - "`settle_time` int(10) unsigned NOT NULL," - "`totalConnections` int(10) unsigned NOT NULL," - "`message` text NOT NULL," - "`num_rounds` int(10) unsigned NOT NULL," - "`malicious_getters` int(10) unsigned NOT NULL," - "`malicious_putters` int(10) unsigned NOT NULL," - "`malicious_droppers` int(10) unsigned NOT NULL," - "`totalMessagesDropped` int(10) unsigned NOT NULL," - "`totalBytesDropped` int(10) unsigned NOT NULL," - "`topology_modifier` double NOT NULL," - "`logNMultiplier` double NOT NULL," - "`maxnetbps` bigint(20) unsigned NOT NULL," - "`unknownPeers` int(10) unsigned NOT NULL," - "PRIMARY KEY (`trialuid`)," - "UNIQUE KEY `trialuid` (`trialuid`)" - ") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1")) + "`trialuid` int(10) unsigned NOT NULL auto_increment," + "`other_trial_identifier` int(10) unsigned NOT NULL default '0'," + "`numnodes` int(10) unsigned NOT NULL," + "`topology` int(10) NOT NULL," + "`blacklist_topology` int(11) NOT NULL," + "`connect_topology` int(11) NOT NULL," + "`connect_topology_option` int(11) NOT NULL," + "`topology_percentage` float NOT NULL," + "`topology_probability` float NOT NULL," + "`connect_topology_option_modifier` float NOT NULL," + "`starttime` datetime NOT NULL," + "`endtime` datetime NOT NULL," + "`puts` int(10) unsigned NOT NULL," + "`gets` int(10) unsigned NOT NULL," + "`concurrent` int(10) unsigned NOT NULL," + "`settle_time` int(10) unsigned NOT NULL," + "`totalConnections` int(10) unsigned NOT NULL," + "`message` text NOT NULL," + "`num_rounds` int(10) unsigned NOT NULL," + "`malicious_getters` int(10) unsigned NOT NULL," + "`malicious_putters` int(10) unsigned NOT NULL," + "`malicious_droppers` int(10) unsigned NOT NULL," + "`topology_modifier` double NOT NULL," + "`malicious_get_frequency` int(10) unsigned NOT NULL," + "`malicious_put_frequency` int(10) unsigned NOT NULL," + "`stop_closest` int(10) unsigned NOT NULL," + "`stop_found` int(10) unsigned NOT NULL," + "`strict_kademlia` int(10) unsigned NOT NULL," + "`gets_succeeded` int(10) unsigned NOT NULL," + "PRIMARY KEY (`trialuid`)," + "UNIQUE KEY `trialuid` (`trialuid`)" + ") ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1")) return GNUNET_SYSERR; if (MRUNS ("CREATE TABLE IF NOT EXISTS `topology` (" @@ -430,7 +453,9 @@ iopen (struct GNUNET_DHTLOG_Plugin *plugin) if (PINIT (insert_query, INSERT_QUERIES_STMT) || PINIT (insert_route, INSERT_ROUTES_STMT) || PINIT (insert_trial, INSERT_TRIALS_STMT) || + PINIT (insert_round, INSERT_ROUNDS_STMT) || PINIT (insert_stat, INSERT_STAT_STMT) || + PINIT (insert_generic_stat, INSERT_GENERIC_STAT_STMT) || PINIT (insert_node, INSERT_NODES_STMT) || PINIT (insert_dhtkey, INSERT_DHTKEY_STMT) || PINIT (update_trial, UPDATE_TRIALS_STMT) || @@ -439,9 +464,10 @@ iopen (struct GNUNET_DHTLOG_Plugin *plugin) PINIT (update_connection, UPDATE_CONNECTIONS_STMT) || PINIT (get_trial, GET_TRIAL_STMT) || PINIT (get_topology, GET_TOPOLOGY_STMT) || - PINIT (insert_topology, INSERT_TOPOLOGY_STMT)|| - PINIT (update_topology, UPDATE_TOPOLOGY_STMT)|| - PINIT (extend_topology, EXTEND_TOPOLOGY_STMT)) + PINIT (insert_topology, INSERT_TOPOLOGY_STMT) || + PINIT (update_topology, UPDATE_TOPOLOGY_STMT) || + PINIT (extend_topology, EXTEND_TOPOLOGY_STMT) || + PINIT (update_node_malicious, SET_MALICIOUS_STMT) ) { return GNUNET_SYSERR; } @@ -569,7 +595,8 @@ init_params (struct StatementHandle *s, va_list ap) /** * Run a prepared SELECT statement. * - * @param result_size number of elements in results array + * @param s handle to the statement we should execute + * @param result_size number of results in set * @param results pointer to already initialized MYSQL_BIND * array (of sufficient size) for passing results * @param processor function to call on each result @@ -577,12 +604,13 @@ init_params (struct StatementHandle *s, va_list ap) * @param ... pairs and triplets of "MYSQL_TYPE_XXX" keys and their respective * values (size + buffer-reference for pointers); terminated * with "-1" + * * @return GNUNET_SYSERR on error, otherwise * the number of successfully affected (or queried) rows */ int -prepared_statement_run_select (struct StatementHandle - *s, unsigned int result_size, +prepared_statement_run_select (struct StatementHandle *s, + unsigned int result_size, MYSQL_BIND * results, GNUNET_MysqlDataProcessor processor, void *processor_cls, @@ -738,7 +766,9 @@ get_dhtkey_uid (unsigned long long *dhtkeyuid, const GNUNET_HashCode * key) rbind[0].buffer = dhtkeyuid; GNUNET_CRYPTO_hash_to_enc (key, &encKey); k_len = strlen ((char *) &encKey); - +#if DEBUG_DHTLOG + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Searching for dhtkey `%s' in trial %llu\n", GNUNET_h2s(key), current_trial); +#endif if ((GNUNET_OK != prepared_statement_run_select (get_dhtkeyuid, 1, @@ -761,11 +791,13 @@ get_dhtkey_uid (unsigned long long *dhtkeyuid, const GNUNET_HashCode * key) /** * Run a prepared statement that does NOT produce results. * + * @param s handle to the statement we should execute + * @param insert_id NULL or address where to store the row ID of whatever + * was inserted (only for INSERT statements!) * @param ... pairs and triplets of "MYSQL_TYPE_XXX" keys and their respective * values (size + buffer-reference for pointers); terminated * with "-1" - * @param insert_id NULL or address where to store the row ID of whatever - * was inserted (only for INSERT statements!) + * * @return GNUNET_SYSERR on error, otherwise * the number of successfully affected rows */ @@ -805,94 +837,45 @@ prepared_statement_run (struct StatementHandle *s, /* * Inserts the specified trial into the dhttests.trials table * - * @param trialuid return the trialuid of the newly inserted trial - * @param num_nodes how many nodes are in the trial - * @param topology integer representing topology for this trial - * @param blacklist_topology integer representing blacklist topology for this trial - * @param connect_topology integer representing connect topology for this trial - * @param connect_topology_option integer representing connect topology option - * @param connect_topology_option_modifier float to modify connect option - * @param topology_percentage percentage modifier for certain topologies - * @param topology_probability probability modifier for certain topologies - * @param puts number of puts to perform - * @param gets number of gets to perform - * @param concurrent number of concurrent requests - * @param settle_time time to wait between creating topology and starting testing - * @param num_rounds number of times to repeat the trial - * @param malicious_getters number of malicious GET peers in the trial - * @param malicious_putters number of malicious PUT peers in the trial - * @param malicious_droppers number of malicious DROP peers in the trial - * @param message string to put into DB for this trial + * @param trial_info struct containing the data to insert about this trial * * @return GNUNET_OK on success, GNUNET_SYSERR on failure */ -int -add_trial (unsigned long long *trialuid, int num_nodes, int topology, - int blacklist_topology, int connect_topology, - int connect_topology_option, float connect_topology_option_modifier, - float topology_percentage, float topology_probability, - int puts, int gets, int concurrent, int settle_time, - int num_rounds, int malicious_getters, int malicious_putters, - int malicious_droppers, char *message) +int add_trial (struct GNUNET_DHTLOG_TrialInfo *trial_info) { MYSQL_STMT *stmt; int ret; unsigned long long m_len; - m_len = strlen (message); + m_len = strlen (trial_info->message); stmt = mysql_stmt_init(conn); if (GNUNET_OK != - (ret = prepared_statement_run (insert_trial, - trialuid, - MYSQL_TYPE_LONG, - &num_nodes, - GNUNET_YES, - MYSQL_TYPE_LONG, - &topology, - GNUNET_YES, - MYSQL_TYPE_FLOAT, - &topology_percentage, - MYSQL_TYPE_FLOAT, - &topology_probability, - MYSQL_TYPE_LONG, - &blacklist_topology, - GNUNET_YES, - MYSQL_TYPE_LONG, - &connect_topology, - GNUNET_YES, - MYSQL_TYPE_LONG, - &connect_topology_option, - GNUNET_YES, - MYSQL_TYPE_FLOAT, - &connect_topology_option_modifier, - MYSQL_TYPE_LONG, - &puts, - GNUNET_YES, - MYSQL_TYPE_LONG, - &gets, - GNUNET_YES, - MYSQL_TYPE_LONG, - &concurrent, - GNUNET_YES, - MYSQL_TYPE_LONG, - &settle_time, - GNUNET_YES, - MYSQL_TYPE_LONG, - &num_rounds, - GNUNET_YES, - MYSQL_TYPE_LONG, - &malicious_getters, - GNUNET_YES, - MYSQL_TYPE_LONG, - &malicious_putters, - GNUNET_YES, - MYSQL_TYPE_LONG, - &malicious_droppers, - GNUNET_YES, - MYSQL_TYPE_BLOB, - message, - max_varchar_len + - max_varchar_len, &m_len, + (ret = prepared_statement_run (insert_trial, &trial_info->trialuid, + MYSQL_TYPE_LONG, &trial_info->other_identifier, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->num_nodes, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->topology, GNUNET_YES, + MYSQL_TYPE_FLOAT, &trial_info->topology_percentage, + MYSQL_TYPE_FLOAT, &trial_info->topology_probability, + MYSQL_TYPE_LONG, &trial_info->blacklist_topology, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->connect_topology, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->connect_topology_option, GNUNET_YES, + MYSQL_TYPE_FLOAT, &trial_info->connect_topology_option_modifier, + MYSQL_TYPE_LONG, &trial_info->puts, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->gets, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->concurrent, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->settle_time, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->num_rounds, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->malicious_getters, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->malicious_putters, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->malicious_droppers, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->malicious_get_frequency, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->malicious_put_frequency, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->stop_closest, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->stop_found, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->strict_kademlia, GNUNET_YES, + MYSQL_TYPE_LONG, &trial_info->gets_succeeded, GNUNET_YES, + MYSQL_TYPE_BLOB, trial_info->message, max_varchar_len + + max_varchar_len, &m_len, -1))) { if (ret == GNUNET_SYSERR) @@ -908,6 +891,31 @@ add_trial (unsigned long long *trialuid, int num_nodes, int topology, return GNUNET_OK; } +/* + * Inserts the specified round into the dhttests.rounds table + * + * @param round_type the type of round that is being started + * @param round_count counter for the round (if applicable) + * + * @return GNUNET_OK on success, GNUNET_SYSERR on failure + */ +int add_round (unsigned int round_type, unsigned int round_count) +{ + + MYSQL_STMT *stmt; + int ret; + + stmt = mysql_stmt_init(conn); + ret = prepared_statement_run (insert_round, + NULL, + MYSQL_TYPE_LONGLONG, ¤t_trial, GNUNET_YES, + MYSQL_TYPE_LONG, &round_type, GNUNET_YES, + MYSQL_TYPE_LONG, &round_count, GNUNET_YES, -1); + mysql_stmt_close(stmt); + if (ret != GNUNET_OK) + return GNUNET_SYSERR; + return ret; +} /* * Inserts the specified stats into the dhttests.node_statistics table @@ -990,6 +998,54 @@ add_stat (const struct GNUNET_PeerIdentity *peer, unsigned int route_requests, return GNUNET_OK; } +/* + * Inserts the specified stats into the dhttests.generic_stats table + * + * @param peer the peer inserting the statistic + * @param name the name of the statistic + * @param section the section of the statistic + * @param value the value of the statistic + * + * @return GNUNET_OK on success, GNUNET_SYSERR on failure + */ +int +add_generic_stat (const struct GNUNET_PeerIdentity *peer, + const char *name, + const char *section, uint64_t value) +{ + unsigned long long peer_uid; + unsigned long long section_len; + unsigned long long name_len; + int ret; + if (peer == NULL) + return GNUNET_SYSERR; + + if (GNUNET_OK != get_node_uid (&peer_uid, &peer->hashPubKey)) + { + return GNUNET_SYSERR; + } + + section_len = strlen(section); + name_len = strlen(name); + + if (GNUNET_OK != + (ret = prepared_statement_run (insert_generic_stat, + NULL, + MYSQL_TYPE_LONGLONG, ¤t_trial, GNUNET_YES, + MYSQL_TYPE_LONGLONG, &peer_uid, GNUNET_YES, + MYSQL_TYPE_VAR_STRING, §ion, max_varchar_len, §ion_len, + MYSQL_TYPE_VAR_STRING, &name, max_varchar_len, &name_len, + MYSQL_TYPE_LONGLONG, &value, GNUNET_YES, + -1))) + { + if (ret == GNUNET_SYSERR) + { + return GNUNET_SYSERR; + } + } + return GNUNET_OK; +} + /* * Inserts the specified dhtkey into the dhttests.dhtkeys table, * stores return value of dhttests.dhtkeys.dhtkeyuid into dhtkeyuid @@ -1019,6 +1075,12 @@ add_dhtkey (unsigned long long *dhtkeyuid, const GNUNET_HashCode * dhtkey) *dhtkeyuid = curr_dhtkeyuid; return GNUNET_OK; } + else if (ret == GNUNET_SYSERR) + { +#if DEBUG_DHTLOG + GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, "Failed to get dhtkeyuid!\n"); +#endif + } if (GNUNET_OK != (ret = prepared_statement_run (insert_dhtkey, @@ -1070,18 +1132,11 @@ add_node (unsigned long long *nodeuid, struct GNUNET_PeerIdentity * node) h_len = sizeof (GNUNET_HashCode); if (GNUNET_OK != (ret = prepared_statement_run (insert_node, - nodeuid, - MYSQL_TYPE_LONGLONG, - ¤t_trial, - GNUNET_YES, - MYSQL_TYPE_VAR_STRING, - &encPeer, - max_varchar_len, - &p_len, - MYSQL_TYPE_BLOB, - &node->hashPubKey, - sizeof (GNUNET_HashCode), - &h_len, -1))) + nodeuid, + MYSQL_TYPE_LONGLONG, ¤t_trial, GNUNET_YES, + MYSQL_TYPE_VAR_STRING, &encPeer, max_varchar_len, &p_len, + MYSQL_TYPE_BLOB, &node->hashPubKey, sizeof (GNUNET_HashCode), + &h_len, -1))) { if (ret == GNUNET_SYSERR) { @@ -1095,34 +1150,22 @@ add_node (unsigned long long *nodeuid, struct GNUNET_PeerIdentity * node) * Update dhttests.trials table with current server time as end time * * @param trialuid trial to update - * @param totalMessagesDropped stats value for messages dropped - * @param totalBytesDropped stats value for total bytes dropped - * @param unknownPeers stats value for unknown peers + * @param gets_succeeded how many gets did the testcase report as successful * * @return GNUNET_OK on success, GNUNET_SYSERR on failure. */ int update_trials (unsigned long long trialuid, - unsigned long long totalMessagesDropped, - unsigned long long totalBytesDropped, - unsigned long long unknownPeers) + unsigned int gets_succeeded) { int ret; if (GNUNET_OK != (ret = prepared_statement_run (update_trial, NULL, - MYSQL_TYPE_LONGLONG, - &totalMessagesDropped, - GNUNET_YES, - MYSQL_TYPE_LONGLONG, - &totalBytesDropped, - GNUNET_YES, - MYSQL_TYPE_LONGLONG, - &unknownPeers, - GNUNET_YES, - MYSQL_TYPE_LONGLONG, - &trialuid, GNUNET_YES, -1))) + MYSQL_TYPE_LONG, &gets_succeeded, GNUNET_YES, + MYSQL_TYPE_LONGLONG, &trialuid, GNUNET_YES, + -1))) { if (ret == GNUNET_SYSERR) { @@ -1136,6 +1179,39 @@ update_trials (unsigned long long trialuid, } +/* + * Update dhttests.nodes table setting the identified + * node as a malicious dropper. + * + * @param peer the peer that was set to be malicious + * + * @return GNUNET_OK on success, GNUNET_SYSERR on failure. + */ +int set_malicious (struct GNUNET_PeerIdentity *peer) +{ + unsigned long long p_len; + int ret; + char *temp_str; + + temp_str = GNUNET_strdup(GNUNET_h2s_full(&peer->hashPubKey)); + p_len = strlen(temp_str); + + if (GNUNET_OK != + (ret = prepared_statement_run (update_node_malicious, + NULL, + MYSQL_TYPE_LONGLONG, ¤t_trial, GNUNET_YES, + MYSQL_TYPE_VAR_STRING, temp_str, max_varchar_len, &p_len, + -1))) + { + if (ret == GNUNET_SYSERR) + { + return GNUNET_SYSERR; + } + } + return GNUNET_OK; +} + + /* * Update dhttests.trials table with total connections information * @@ -1400,12 +1476,9 @@ add_topology (int num_connections) if (GNUNET_OK != (ret = prepared_statement_run (insert_topology, NULL, - MYSQL_TYPE_LONGLONG, - ¤t_trial, - GNUNET_YES, - MYSQL_TYPE_LONG, - &num_connections, - GNUNET_YES, -1))) + MYSQL_TYPE_LONGLONG, ¤t_trial, GNUNET_YES, + MYSQL_TYPE_LONG, &num_connections, GNUNET_YES, + -1))) { if (ret == GNUNET_SYSERR) { @@ -1497,6 +1570,8 @@ libgnunet_plugin_dhtlog_mysql_init (void * cls) plugin->dhtlog_api = GNUNET_malloc(sizeof(struct GNUNET_DHTLOG_Handle)); plugin->dhtlog_api->insert_trial = &add_trial; plugin->dhtlog_api->insert_stat = &add_stat; + plugin->dhtlog_api->insert_round = &add_round; + plugin->dhtlog_api->add_generic_stat = &add_generic_stat; plugin->dhtlog_api->insert_query = &add_query; plugin->dhtlog_api->update_trial = &update_trials; plugin->dhtlog_api->insert_route = &add_route; @@ -1506,6 +1581,8 @@ libgnunet_plugin_dhtlog_mysql_init (void * cls) plugin->dhtlog_api->insert_topology = &add_topology; plugin->dhtlog_api->update_topology = &update_current_topology; plugin->dhtlog_api->insert_extended_topology = &add_extended_topology; + plugin->dhtlog_api->set_malicious = &set_malicious; + plugin->dhtlog_api->add_generic_stat = &add_generic_stat; get_current_trial (¤t_trial); return plugin; @@ -1525,6 +1602,7 @@ libgnunet_plugin_dhtlog_mysql_done (void * cls) prepared_statement_close(insert_query); prepared_statement_close(insert_route); prepared_statement_close(insert_trial); + prepared_statement_close(insert_round); prepared_statement_close(insert_node); prepared_statement_close(insert_dhtkey); prepared_statement_close(update_trial); @@ -1536,6 +1614,7 @@ libgnunet_plugin_dhtlog_mysql_done (void * cls) prepared_statement_close(insert_topology); prepared_statement_close(update_topology); prepared_statement_close(extend_topology); + prepared_statement_close(update_node_malicious); if (conn != NULL) mysql_close (conn);