aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristophe Genevey Metat <genevey.christophe@gmail.com>2016-07-08 14:04:58 +0000
committerChristophe Genevey Metat <genevey.christophe@gmail.com>2016-07-08 14:04:58 +0000
commitdedde9454bd4cb4ce90c5803fcf135968408aaac (patch)
treef681dc4702bb3337c821627499b71e61a7d339a1
parent837043ed07163a8654827676602f30b9132ff4d0 (diff)
downloadgnunet-dedde9454bd4cb4ce90c5803fcf135968408aaac.tar.gz
gnunet-dedde9454bd4cb4ce90c5803fcf135968408aaac.zip
plugin psycstore_mysql
-rw-r--r--src/psycstore/plugin_psycstore_mysql.c410
1 files changed, 254 insertions, 156 deletions
diff --git a/src/psycstore/plugin_psycstore_mysql.c b/src/psycstore/plugin_psycstore_mysql.c
index 5226c296c..abb8ecfb9 100644
--- a/src/psycstore/plugin_psycstore_mysql.c
+++ b/src/psycstore/plugin_psycstore_mysql.c
@@ -40,8 +40,6 @@
40#include "psycstore.h" 40#include "psycstore.h"
41#include "gnunet_my_lib.h" 41#include "gnunet_my_lib.h"
42#include "gnunet_mysql_lib.h" 42#include "gnunet_mysql_lib.h"
43
44#include <sqlite3.h>
45#include <mysql/mysql.h> 43#include <mysql/mysql.h>
46 44
47/** 45/**
@@ -233,9 +231,9 @@ struct Plugin
233#if DEBUG_PSYCSTORE 231#if DEBUG_PSYCSTORE
234 232
235static void 233static void
236sql_trace (void *cls, const char *sql) 234mysql_trace (void *cls, const char *sql)
237{ 235{
238 LOG (GNUNET_ERROR_TYPE_DEBUG, "MYSQL query:\n%s\n", sql); 236 LOG(GNUNET_ERROR_TYPE_DEBUG, "MYSQL query:\n%s\n", sql);
239} 237}
240 238
241#endif 239#endif
@@ -257,10 +255,10 @@ mysql_prepare (struct GNUNET_MYSQL_Context *mc,
257 stmt = GNUNET_MYSQL_statement_prepare (mc, 255 stmt = GNUNET_MYSQL_statement_prepare (mc,
258 sql); 256 sql);
259 257
260 LOG (GNUNET_ERROR_TYPE_DEBUG, 258 LOG(GNUNET_ERROR_TYPE_DEBUG,
261 "Prepared `%s' / %p\n", sql, stmt); 259 "Prepared `%s' / %p\n", sql, stmt);
262 if(NULL == stmt) 260 if(NULL == stmt)
263 LOG (GNUNET_ERROR_TYPE_ERROR, 261 LOG(GNUNET_ERROR_TYPE_ERROR,
264 _("Error preparing SQL query: %s\n %s\n"), 262 _("Error preparing SQL query: %s\n %s\n"),
265 mysql_stmt_error (GNUNET_MYSQL_statement_get_stmt (stmt)), sql); 263 mysql_stmt_error (GNUNET_MYSQL_statement_get_stmt (stmt)), sql);
266 264
@@ -283,10 +281,10 @@ mysql_exec (struct GNUNET_MYSQL_Context *mc,
283 int result; 281 int result;
284 282
285 result = GNUNET_MY_exec_prepared (mc, sh, qp); 283 result = GNUNET_MY_exec_prepared (mc, sh, qp);
286 LOG (GNUNET_ERROR_TYPE_DEBUG, 284 LOG(GNUNET_ERROR_TYPE_DEBUG,
287 "Executed `GNUNET_MY_exec_prepared`' / %d\n", result); 285 "Executed `GNUNET_MY_exec_prepared`' / %d\n", result);
288 if (GNUNET_OK != result) 286 if (GNUNET_OK != result)
289 LOG (GNUNET_ERROR_TYPE_ERROR, 287 LOG(GNUNET_ERROR_TYPE_ERROR,
290 _("Error executing SQL query: %s\n"), 288 _("Error executing SQL query: %s\n"),
291 mysql_stmt_error (GNUNET_MYSQL_statement_get_stmt (sh))); 289 mysql_stmt_error (GNUNET_MYSQL_statement_get_stmt (sh)));
292 return result; 290 return result;
@@ -331,9 +329,8 @@ database_setup (struct Plugin *plugin)
331 329
332 if (NULL == plugin->mc) 330 if (NULL == plugin->mc)
333 { 331 {
334 LOG (GNUNET_ERROR_TYPE_ERROR, 332 LOG(GNUNET_ERROR_TYPE_ERROR,
335 _("Unable to initialize SQLite: %s.\n"), 333 _("Unable to initialize Mysql: .\n"));
336 sqlite3_errmsg (plugin->dbh));
337 return GNUNET_SYSERR; 334 return GNUNET_SYSERR;
338 } 335 }
339 336
@@ -639,20 +636,7 @@ database_setup (struct Plugin *plugin)
639static void 636static void
640database_shutdown (struct Plugin *plugin) 637database_shutdown (struct Plugin *plugin)
641{ 638{
642 int result; 639 GNUNET_MYSQL_statements_invalidate (plugin->mc);
643 sqlite3_stmt *stmt;
644
645 //MYSQL_STMT *stmt;
646
647 while (NULL != (stmt = sqlite3_next_stmt (plugin->dbh, NULL)))
648 {
649 result = sqlite3_finalize (stmt);
650 if (SQLITE_OK != result)
651 LOG (GNUNET_ERROR_TYPE_WARNING,
652 "Failed to close statement %p: %d\n", stmt, result);
653 }
654 if (SQLITE_OK != sqlite3_close (plugin->dbh))
655 LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR, "sqlite3_close");
656 640
657 GNUNET_free_non_null (plugin->fn); 641 GNUNET_free_non_null (plugin->fn);
658} 642}
@@ -676,7 +660,7 @@ exec_channel (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
676 660
677 if (NULL == statement) 661 if (NULL == statement)
678 { 662 {
679 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 663 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
680 "mysql statement invalide", statement); 664 "mysql statement invalide", statement);
681 return GNUNET_SYSERR; 665 return GNUNET_SYSERR;
682 } 666 }
@@ -690,13 +674,13 @@ exec_channel (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
690 stmt, 674 stmt,
691 params)) 675 params))
692 { 676 {
693 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 677 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
694 "mysql exec_channel", stmt); 678 "mysql exec_channel", statement);
695 } 679 }
696 680
697 if (0 != mysql_stmt_reset (statement)) 681 if (0 != mysql_stmt_reset (statement))
698 { 682 {
699 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 683 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
700 "mysql_stmt_reset", statement); 684 "mysql_stmt_reset", statement);
701 return GNUNET_SYSERR; 685 return GNUNET_SYSERR;
702 } 686 }
@@ -718,7 +702,7 @@ transaction_begin (struct Plugin *plugin, enum Transactions transaction)
718 702
719 if (NULL == statement) 703 if (NULL == statement)
720 { 704 {
721 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 705 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
722 "mysql statement invalide", statement); 706 "mysql statement invalide", statement);
723 return GNUNET_SYSERR; 707 return GNUNET_SYSERR;
724 } 708 }
@@ -731,14 +715,14 @@ transaction_begin (struct Plugin *plugin, enum Transactions transaction)
731 stmt, 715 stmt,
732 params)) 716 params))
733 { 717 {
734 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 718 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
735 "mysql extract_result", statement); 719 "mysql extract_result", statement);
736 return GNUNET_SYSERR; 720 return GNUNET_SYSERR;
737 } 721 }
738 722
739 if (0 != mysql_stmt_reset (statement)) 723 if (0 != mysql_stmt_reset (statement))
740 { 724 {
741 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 725 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
742 "mysql_stmt_reset", statement); 726 "mysql_stmt_reset", statement);
743 return GNUNET_SYSERR; 727 return GNUNET_SYSERR;
744 } 728 }
@@ -761,7 +745,7 @@ transaction_commit (struct Plugin *plugin)
761 745
762 if (NULL == statement) 746 if (NULL == statement)
763 { 747 {
764 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 748 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
765 "mysql statement invalide", statement); 749 "mysql statement invalide", statement);
766 return GNUNET_SYSERR; 750 return GNUNET_SYSERR;
767 } 751 }
@@ -774,14 +758,14 @@ transaction_commit (struct Plugin *plugin)
774 stmt, 758 stmt,
775 params)) 759 params))
776 { 760 {
777 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 761 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
778 "mysql extract_result", statement); 762 "mysql extract_result", statement);
779 return GNUNET_SYSERR; 763 return GNUNET_SYSERR;
780 } 764 }
781 765
782 if (0 != mysql_stmt_reset (statement)) 766 if (0 != mysql_stmt_reset (statement))
783 { 767 {
784 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 768 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
785 "mysql_stmt_reset", statement); 769 "mysql_stmt_reset", statement);
786 return GNUNET_SYSERR; 770 return GNUNET_SYSERR;
787 } 771 }
@@ -803,7 +787,7 @@ transaction_rollback (struct Plugin *plugin)
803 statement = GNUNET_MYSQL_statement_get_stmt (stmt); 787 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
804 if (NULL == statement) 788 if (NULL == statement)
805 { 789 {
806 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 790 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
807 "mysql statement invalide", statement); 791 "mysql statement invalide", statement);
808 return GNUNET_SYSERR; 792 return GNUNET_SYSERR;
809 } 793 }
@@ -816,14 +800,14 @@ transaction_rollback (struct Plugin *plugin)
816 stmt, 800 stmt,
817 params)) 801 params))
818 { 802 {
819 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 803 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
820 "mysql extract_result", statement); 804 "mysql extract_result", statement);
821 return GNUNET_SYSERR; 805 return GNUNET_SYSERR;
822 } 806 }
823 807
824 if (0 != mysql_stmt_reset (statement)) 808 if (0 != mysql_stmt_reset (statement))
825 { 809 {
826 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 810 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
827 "mysql_stmt_reset", statement); 811 "mysql_stmt_reset", statement);
828 return GNUNET_SYSERR; 812 return GNUNET_SYSERR;
829 } 813 }
@@ -844,7 +828,7 @@ channel_key_store (struct Plugin *plugin,
844 828
845 if(NULL == statement) 829 if(NULL == statement)
846 { 830 {
847 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 831 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
848 "mysql statement invalide", statement); 832 "mysql statement invalide", statement);
849 return GNUNET_SYSERR; 833 return GNUNET_SYSERR;
850 } 834 }
@@ -858,14 +842,14 @@ channel_key_store (struct Plugin *plugin,
858 stmt, 842 stmt,
859 params)) 843 params))
860 { 844 {
861 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 845 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
862 "mysql extract_result", statement); 846 "mysql extract_result", statement);
863 return GNUNET_SYSERR; 847 return GNUNET_SYSERR;
864 } 848 }
865 849
866 if (0 != mysql_stmt_reset (statement)) 850 if (0 != mysql_stmt_reset (statement))
867 { 851 {
868 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 852 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
869 "mysql_stmt_reset", statement); 853 "mysql_stmt_reset", statement);
870 return GNUNET_SYSERR; 854 return GNUNET_SYSERR;
871 } 855 }
@@ -885,7 +869,7 @@ slave_key_store (struct Plugin *plugin,
885 869
886 if(NULL == statement) 870 if(NULL == statement)
887 { 871 {
888 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 872 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
889 "mysql statement invalide", statement); 873 "mysql statement invalide", statement);
890 return GNUNET_SYSERR; 874 return GNUNET_SYSERR;
891 } 875 }
@@ -899,14 +883,14 @@ slave_key_store (struct Plugin *plugin,
899 stmt, 883 stmt,
900 params)) 884 params))
901 { 885 {
902 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 886 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
903 "mysql extract_result", statement); 887 "mysql extract_result", statement);
904 return GNUNET_SYSERR; 888 return GNUNET_SYSERR;
905 } 889 }
906 890
907 if (0 != mysql_stmt_reset (statement)) 891 if (0 != mysql_stmt_reset (statement))
908 { 892 {
909 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 893 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
910 "mysql_stmt_reset", statement); 894 "mysql_stmt_reset", statement);
911 return GNUNET_SYSERR; 895 return GNUNET_SYSERR;
912 } 896 }
@@ -972,14 +956,14 @@ sqlite_membership_store (void *cls,
972 stmt, 956 stmt,
973 params)) 957 params))
974 { 958 {
975 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 959 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
976 "mysql extract_result", statement); 960 "mysql extract_result", statement);
977 return GNUNET_SYSERR; 961 return GNUNET_SYSERR;
978 } 962 }
979 963
980 if (0 != mysql_stmt_reset (statement)) 964 if (0 != mysql_stmt_reset (statement))
981 { 965 {
982 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 966 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
983 "mysql_stmt_reset", statement); 967 "mysql_stmt_reset", statement);
984 return GNUNET_SYSERR; 968 return GNUNET_SYSERR;
985 } 969 }
@@ -1011,7 +995,7 @@ membership_test (void *cls,
1011 995
1012 if(NULL == statement) 996 if(NULL == statement)
1013 { 997 {
1014 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 998 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1015 "mysql statement invalide", statement); 999 "mysql statement invalide", statement);
1016 return GNUNET_SYSERR; 1000 return GNUNET_SYSERR;
1017 } 1001 }
@@ -1029,7 +1013,7 @@ membership_test (void *cls,
1029 stmt, 1013 stmt,
1030 params_select)) 1014 params_select))
1031 { 1015 {
1032 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1016 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1033 "mysql execute prepared", statement); 1017 "mysql execute prepared", statement);
1034 return GNUNET_SYSERR; 1018 return GNUNET_SYSERR;
1035 } 1019 }
@@ -1042,7 +1026,7 @@ membership_test (void *cls,
1042 if (GNUNET_OK != GNUNET_MY_extract_result (stmt, 1026 if (GNUNET_OK != GNUNET_MY_extract_result (stmt,
1043 results_select)) 1027 results_select))
1044 { 1028 {
1045 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1029 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1046 "mysql extract_result", statement); 1030 "mysql extract_result", statement);
1047 return GNUNET_SYSERR; 1031 return GNUNET_SYSERR;
1048 } 1032 }
@@ -1058,7 +1042,7 @@ membership_test (void *cls,
1058 1042
1059 if (0 != mysql_stmt_reset (statement)) 1043 if (0 != mysql_stmt_reset (statement))
1060 { 1044 {
1061 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1045 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1062 "mysql_stmt_reset", statement); 1046 "mysql_stmt_reset", statement);
1063 return GNUNET_SYSERR; 1047 return GNUNET_SYSERR;
1064 } 1048 }
@@ -1096,7 +1080,7 @@ fragment_store (void *cls,
1096 if (fragment_id > INT64_MAX || fragment_offset > INT64_MAX || 1080 if (fragment_id > INT64_MAX || fragment_offset > INT64_MAX ||
1097 message_id > INT64_MAX || group_generation > INT64_MAX) 1081 message_id > INT64_MAX || group_generation > INT64_MAX)
1098 { 1082 {
1099 LOG (GNUNET_ERROR_TYPE_ERROR, 1083 LOG(GNUNET_ERROR_TYPE_ERROR,
1100 "Tried to store fragment with a field > INT64_MAX: " 1084 "Tried to store fragment with a field > INT64_MAX: "
1101 "%lu, %lu, %lu, %lu\n", fragment_id, fragment_offset, 1085 "%lu, %lu, %lu, %lu\n", fragment_id, fragment_offset,
1102 message_id, group_generation); 1086 message_id, group_generation);
@@ -1109,14 +1093,14 @@ fragment_store (void *cls,
1109 1093
1110 struct GNUNET_MY_QueryParam params_insert[] = { 1094 struct GNUNET_MY_QueryParam params_insert[] = {
1111 GNUNET_MY_query_param_auto_from_type (channel_key), 1095 GNUNET_MY_query_param_auto_from_type (channel_key),
1112 GNUNET_MY_query_param_uint32 (msg->hop_counter), 1096 GNUNET_MY_query_param_uint32 ((const uint32_t *) &msg->hop_counter),
1113 GNUNET_MY_query_param_auto_from_type (&msg->signature), 1097 GNUNET_MY_query_param_auto_from_type (&msg->signature),
1114 GNUNET_MY_query_param_auto_from_type (&msg->purpose), 1098 GNUNET_MY_query_param_auto_from_type (&msg->purpose),
1115 GNUNET_MY_query_param_uint64 (&fragment_id), 1099 GNUNET_MY_query_param_uint64 (&fragment_id),
1116 GNUNET_MY_query_param_uint64 (&fragment_offset), 1100 GNUNET_MY_query_param_uint64 (&fragment_offset),
1117 GNUNET_MY_query_param_uint64 (&message_id), 1101 GNUNET_MY_query_param_uint64 (&message_id),
1118 GNUNET_MY_query_param_uint64 (&group_generation), 1102 GNUNET_MY_query_param_uint64 (&group_generation),
1119 GNUNET_MY_query_param_uint32 ( msg->flags), 1103 GNUNET_MY_query_param_uint32 ( (const uint32_t *) &msg->flags),
1120 GNUNET_MY_query_param_uint32 (&psycstore_flags), 1104 GNUNET_MY_query_param_uint32 (&psycstore_flags),
1121 GNUNET_MY_query_param_auto_from_type (&msg[1]), 1105 GNUNET_MY_query_param_auto_from_type (&msg[1]),
1122 GNUNET_MY_query_param_end 1106 GNUNET_MY_query_param_end
@@ -1126,14 +1110,14 @@ fragment_store (void *cls,
1126 stmt, 1110 stmt,
1127 params_insert)) 1111 params_insert))
1128 { 1112 {
1129 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1113 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1130 "mysql execute prepared", statement); 1114 "mysql execute prepared", statement);
1131 return GNUNET_SYSERR; 1115 return GNUNET_SYSERR;
1132 } 1116 }
1133 1117
1134 if (0 != mysql_stmt_reset (statement)) 1118 if (0 != mysql_stmt_reset (statement))
1135 { 1119 {
1136 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1120 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1137 "mysql_stmt_reset", statement); 1121 "mysql_stmt_reset", statement);
1138 return GNUNET_SYSERR; 1122 return GNUNET_SYSERR;
1139 } 1123 }
@@ -1174,14 +1158,14 @@ message_add_flags (void *cls,
1174 stmt, 1158 stmt,
1175 params_update)) 1159 params_update))
1176 { 1160 {
1177 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1161 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1178 "mysql execute prepared", statement); 1162 "mysql execute prepared", statement);
1179 return GNUNET_SYSERR; 1163 return GNUNET_SYSERR;
1180 } 1164 }
1181 1165
1182 if (0 != mysql_stmt_reset (statement)) 1166 if (0 != mysql_stmt_reset (statement))
1183 { 1167 {
1184 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1168 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1185 "mysql_stmt_reset", statement); 1169 "mysql_stmt_reset", statement);
1186 return GNUNET_SYSERR; 1170 return GNUNET_SYSERR;
1187 } 1171 }
@@ -1189,64 +1173,110 @@ message_add_flags (void *cls,
1189 return ret; 1173 return ret;
1190} 1174}
1191 1175
1192/** Extract result from statement **/
1193static int 1176static int
1194fragment_row (sqlite3_stmt *stmt, GNUNET_PSYCSTORE_FragmentCallback cb, 1177fragment_row (struct GNUNET_MYSQL_StatementHandle *stmt, GNUNET_PSYCSTORE_FragmentCallback cb,
1195 void *cb_cls) 1178 void *cb_cls)
1196{ 1179{
1197 int data_size = sqlite3_column_bytes (stmt, 9); 1180 int data_size = 0 ;
1181 uint64_t data8 = 0;
1182 MYSQL_STMT * statement = NULL;
1183 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
1184
1198 struct GNUNET_MULTICAST_MessageHeader *msg 1185 struct GNUNET_MULTICAST_MessageHeader *msg
1199 = GNUNET_malloc (sizeof (*msg) + data_size); 1186 = GNUNET_malloc (sizeof (*msg) + data_size);
1200 1187
1201 msg->header.size = htons (sizeof (*msg) + data_size); 1188 struct GNUNET_MY_ResultSpec results[] = {
1202 msg->header.type = htons (GNUNET_MESSAGE_TYPE_MULTICAST_MESSAGE); 1189 GNUNET_MY_result_spec_uint32 ((uint32_t *)&msg->hop_counter),
1203 msg->hop_counter = htonl ((uint32_t) sqlite3_column_int64 (stmt, 0)); 1190 GNUNET_MY_result_spec_auto_from_type (&msg->signature),
1204 memcpy (&msg->signature, 1191 GNUNET_MY_result_spec_auto_from_type (&msg->purpose),
1205 sqlite3_column_blob (stmt, 1), 1192 GNUNET_MY_result_spec_uint64 (&msg->fragment_id),
1206 sqlite3_column_bytes (stmt, 1)); 1193 GNUNET_MY_result_spec_uint64 (&msg->fragment_offset),
1207 memcpy (&msg->purpose, 1194 GNUNET_MY_result_spec_uint64 (&msg->message_id),
1208 sqlite3_column_blob (stmt, 2), 1195 GNUNET_MY_result_spec_uint64 (&msg->group_generation),
1209 sqlite3_column_bytes (stmt, 2)); 1196 GNUNET_MY_result_spec_uint32 (&msg->flags),
1210 msg->fragment_id = GNUNET_htonll (sqlite3_column_int64 (stmt, 3)); 1197 GNUNET_MY_result_spec_uint64 (&data8),
1211 msg->fragment_offset = GNUNET_htonll (sqlite3_column_int64 (stmt, 4)); 1198 GNUNET_MY_result_spec_auto_from_type (&msg[1]),
1212 msg->message_id = GNUNET_htonll (sqlite3_column_int64 (stmt, 5)); 1199 GNUNET_MY_result_spec_end
1213 msg->group_generation = GNUNET_htonll (sqlite3_column_int64 (stmt, 6)); 1200 };
1214 msg->flags = htonl (sqlite3_column_int64 (stmt, 7)); 1201
1215 memcpy (&msg[1], sqlite3_column_blob (stmt, 9), data_size); 1202 if (GNUNET_OK != GNUNET_MY_extract_result (stmt,
1216 1203 results))
1217 return cb (cb_cls, (void *) msg, sqlite3_column_int64 (stmt, 8)); 1204 {
1205 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1206 "mysql extract_result", statement);
1207 return GNUNET_SYSERR;
1208 }
1209
1210 return cb (cb_cls, (void *) msg, data8);
1218} 1211}
1219 1212
1220 1213
1221static int 1214static int
1222fragment_select (struct Plugin *plugin, sqlite3_stmt *stmt, 1215fragment_select (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
1216 struct GNUNET_MY_QueryParam *params,
1223 uint64_t *returned_fragments, 1217 uint64_t *returned_fragments,
1224 GNUNET_PSYCSTORE_FragmentCallback cb, void *cb_cls) 1218 GNUNET_PSYCSTORE_FragmentCallback cb, void *cb_cls)
1225{ 1219{
1226 int ret = GNUNET_SYSERR; 1220 int ret = GNUNET_SYSERR;
1227 int sql_ret; 1221 int sql_ret;
1228 1222
1223 MYSQL_STMT *statement = NULL;
1224
1225 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
1226
1227 uint32_t hop_counter = 0;
1228 void *signature = NULL;
1229 void *purpose = NULL;
1230 uint64_t fragment_id = 0 ;
1231 uint64_t fragment_offset = 0;
1232 uint64_t message_id = 0;
1233 uint64_t group_generation = 0;
1234 uint32_t flags = 0;
1235 uint64_t data8;
1236
1237 struct GNUNET_MULTICAST_MessageHeader *msg
1238 = GNUNET_malloc (sizeof (*msg) + 0);
1239
1240 struct GNUNET_MY_ResultSpec results[] = {
1241 GNUNET_MY_result_spec_uint32 (&hop_counter),
1242 GNUNET_MY_result_spec_auto_from_type (&signature),
1243 GNUNET_MY_result_spec_auto_from_type (&purpose),
1244 GNUNET_MY_result_spec_uint64 (&fragment_id),
1245 GNUNET_MY_result_spec_uint64 (&fragment_offset),
1246 GNUNET_MY_result_spec_uint64 (&message_id),
1247 GNUNET_MY_result_spec_uint64 (&group_generation),
1248 GNUNET_MY_result_spec_uint32 (&flags),
1249 GNUNET_MY_result_spec_uint64 (&data8),
1250 GNUNET_MY_result_spec_auto_from_type (&msg[1]),
1251 GNUNET_MY_result_spec_end
1252 };
1253
1229 do 1254 do
1230 { 1255 {
1231 sql_ret = sqlite3_step (stmt); 1256 GNUNET_MY_exec_prepared (plugin->mc,
1257 stmt,
1258 params);
1259
1260 sql_ret = GNUNET_MY_extract_result (stmt,
1261 results);
1232 switch (sql_ret) 1262 switch (sql_ret)
1233 { 1263 {
1234 case SQLITE_DONE: 1264 case GNUNET_NO:
1235 if (ret != GNUNET_OK) 1265 if (ret != GNUNET_OK)
1236 ret = GNUNET_NO; 1266 ret = GNUNET_NO;
1237 break; 1267 break;
1238 case SQLITE_ROW: 1268 case GNUNET_YES:
1239 ret = fragment_row (stmt, cb, cb_cls); 1269 ret = fragment_row (stmt, cb, cb_cls);
1240 (*returned_fragments)++; 1270 (*returned_fragments)++;
1241 if (ret != GNUNET_YES) 1271 if (ret != GNUNET_YES)
1242 sql_ret = SQLITE_DONE; 1272 sql_ret = GNUNET_NO;
1243 break; 1273 break;
1244 default: 1274 default:
1245 LOG_SQLITE (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1275 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1246 "sqlite3_step"); 1276 "mysql extract_result", statement);
1247 } 1277 }
1248 } 1278 }
1249 while (sql_ret == SQLITE_ROW); 1279 while (sql_ret == GNUNET_YES);
1250 1280
1251 return ret; 1281 return ret;
1252} 1282}
@@ -1275,7 +1305,7 @@ fragment_get (void *cls,
1275 statement = GNUNET_MYSQL_statement_get_stmt (stmt); 1305 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
1276 if (NULL == statement) 1306 if (NULL == statement)
1277 { 1307 {
1278 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1308 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1279 "mysql get_stmt", statement); 1309 "mysql get_stmt", statement);
1280 return GNUNET_SYSERR; 1310 return GNUNET_SYSERR;
1281 } 1311 }
@@ -1290,7 +1320,7 @@ fragment_get (void *cls,
1290 GNUNET_MY_query_param_end 1320 GNUNET_MY_query_param_end
1291 }; 1321 };
1292 1322
1293 ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls); 1323 ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
1294 1324
1295 if (0 != mysql_stmt_reset (statement)) 1325 if (0 != mysql_stmt_reset (statement))
1296 { 1326 {
@@ -1334,11 +1364,11 @@ fragment_get_latest (void *cls,
1334 GNUNET_MY_query_param_end 1364 GNUNET_MY_query_param_end
1335 }; 1365 };
1336 1366
1337 ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls); 1367 ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
1338 1368
1339 if (0 != mysql_stmt_reset (statement)) 1369 if (0 != mysql_stmt_reset (statement))
1340 { 1370 {
1341 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1371 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1342 "mysql_stmt_reset", statement); 1372 "mysql_stmt_reset", statement);
1343 return GNUNET_SYSERR; 1373 return GNUNET_SYSERR;
1344 } 1374 }
@@ -1382,11 +1412,11 @@ message_get (void *cls,
1382 GNUNET_MY_query_param_end 1412 GNUNET_MY_query_param_end
1383 }; 1413 };
1384 1414
1385 ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls); 1415 ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
1386 1416
1387 if (0 != mysql_stmt_reset (statement)) 1417 if (0 != mysql_stmt_reset (statement))
1388 { 1418 {
1389 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1419 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1390 "mysql_stmt_reset", statement); 1420 "mysql_stmt_reset", statement);
1391 return GNUNET_SYSERR; 1421 return GNUNET_SYSERR;
1392 } 1422 }
@@ -1427,11 +1457,11 @@ message_get_latest (void *cls,
1427 GNUNET_MY_query_param_end 1457 GNUNET_MY_query_param_end
1428 }; 1458 };
1429 1459
1430 ret = fragment_select (plugin, stmt, returned_fragments, cb, cb_cls); 1460 ret = fragment_select (plugin, stmt, params_select, returned_fragments, cb, cb_cls);
1431 1461
1432 if (0 != mysql_stmt_reset (statement)) 1462 if (0 != mysql_stmt_reset (statement))
1433 { 1463 {
1434 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1464 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1435 "mysql_stmt_reset", statement); 1465 "mysql_stmt_reset", statement);
1436 return GNUNET_SYSERR; 1466 return GNUNET_SYSERR;
1437 } 1467 }
@@ -1476,16 +1506,16 @@ message_get_fragment (void *cls,
1476 stmt, 1506 stmt,
1477 params_select)) 1507 params_select))
1478 { 1508 {
1479 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1509 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1480 "mysql execute prepared", statement); 1510 "mysql execute prepared", statement);
1481 return GNUNET_SYSERR; 1511 return GNUNET_SYSERR;
1482 } 1512 }
1483 1513/****** CHANGER ICI ****/
1484 ret = fragment_row (stmt, cb, cb_cls); 1514 ret = fragment_row (stmt, cb, cb_cls);
1485 1515
1486 if (0 != mysql_stmt_reset (statement)) 1516 if (0 != mysql_stmt_reset (statement))
1487 { 1517 {
1488 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1518 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1489 "mysql_stmt_reset", statement); 1519 "mysql_stmt_reset", statement);
1490 return GNUNET_SYSERR; 1520 return GNUNET_SYSERR;
1491 } 1521 }
@@ -1515,7 +1545,7 @@ counters_message_get (void *cls,
1515 statement = GNUNET_MYSQL_statement_get_stmt (stmt); 1545 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
1516 if (NULL == statement) 1546 if (NULL == statement)
1517 { 1547 {
1518 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1548 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1519 "mysql get statement", statement); 1549 "mysql get statement", statement);
1520 return GNUNET_SYSERR; 1550 return GNUNET_SYSERR;
1521 } 1551 }
@@ -1531,7 +1561,7 @@ counters_message_get (void *cls,
1531 stmt, 1561 stmt,
1532 params_select)) 1562 params_select))
1533 { 1563 {
1534 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1564 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1535 "mysql execute prepared", statement); 1565 "mysql execute prepared", statement);
1536 return GNUNET_SYSERR; 1566 return GNUNET_SYSERR;
1537 } 1567 }
@@ -1548,14 +1578,14 @@ counters_message_get (void *cls,
1548 1578
1549 if (GNUNET_OK != ret) 1579 if (GNUNET_OK != ret)
1550 { 1580 {
1551 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1581 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1552 "mysql extract_result", statement); 1582 "mysql extract_result", statement);
1553 return GNUNET_SYSERR; 1583 return GNUNET_SYSERR;
1554 } 1584 }
1555 1585
1556 if (0 != mysql_stmt_reset (statement)) 1586 if (0 != mysql_stmt_reset (statement))
1557 { 1587 {
1558 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1588 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1559 "mysql_stmt_reset", statement); 1589 "mysql_stmt_reset", statement);
1560 return GNUNET_SYSERR; 1590 return GNUNET_SYSERR;
1561 } 1591 }
@@ -1583,7 +1613,7 @@ counters_state_get (void *cls,
1583 statement = GNUNET_MYSQL_statement_get_stmt (stmt); 1613 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
1584 if (NULL == statement) 1614 if (NULL == statement)
1585 { 1615 {
1586 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1616 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1587 "mysql get_stmt", statement); 1617 "mysql get_stmt", statement);
1588 return GNUNET_SYSERR; 1618 return GNUNET_SYSERR;
1589 } 1619 }
@@ -1599,7 +1629,7 @@ counters_state_get (void *cls,
1599 stmt, 1629 stmt,
1600 params_select)) 1630 params_select))
1601 { 1631 {
1602 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1632 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1603 "mysql execute prepared", statement); 1633 "mysql execute prepared", statement);
1604 return GNUNET_SYSERR; 1634 return GNUNET_SYSERR;
1605 } 1635 }
@@ -1614,14 +1644,14 @@ counters_state_get (void *cls,
1614 1644
1615 if (GNUNET_OK != ret) 1645 if (GNUNET_OK != ret)
1616 { 1646 {
1617 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1647 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1618 "mysql extract_result", statement); 1648 "mysql extract_result", statement);
1619 return GNUNET_SYSERR; 1649 return GNUNET_SYSERR;
1620 } 1650 }
1621 1651
1622 if (0 != mysql_stmt_reset (statement)) 1652 if (0 != mysql_stmt_reset (statement))
1623 { 1653 {
1624 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1654 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1625 "mysql_stmt_reset", statement); 1655 "mysql_stmt_reset", statement);
1626 return GNUNET_SYSERR; 1656 return GNUNET_SYSERR;
1627 } 1657 }
@@ -1647,7 +1677,7 @@ state_assign (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
1647 1677
1648 if (NULL == statement) 1678 if (NULL == statement)
1649 { 1679 {
1650 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1680 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1651 "mysql get_stmt", statement); 1681 "mysql get_stmt", statement);
1652 return GNUNET_SYSERR; 1682 return GNUNET_SYSERR;
1653 } 1683 }
@@ -1655,7 +1685,7 @@ state_assign (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
1655 struct GNUNET_MY_QueryParam params[] = { 1685 struct GNUNET_MY_QueryParam params[] = {
1656 GNUNET_MY_query_param_auto_from_type (channel_key), 1686 GNUNET_MY_query_param_auto_from_type (channel_key),
1657 GNUNET_MY_query_param_string (name), 1687 GNUNET_MY_query_param_string (name),
1658 GNUNET_MY_query_param_auto_from_type (value_size), 1688 GNUNET_MY_query_param_auto_from_type (value),
1659 GNUNET_MY_query_param_end 1689 GNUNET_MY_query_param_end
1660 }; 1690 };
1661 1691
@@ -1665,14 +1695,14 @@ state_assign (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *stmt,
1665 1695
1666 if (GNUNET_OK != ret) 1696 if (GNUNET_OK != ret)
1667 { 1697 {
1668 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1698 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1669 "mysql execute prepared", statement); 1699 "mysql execute prepared", statement);
1670 return GNUNET_SYSERR; 1700 return GNUNET_SYSERR;
1671 } 1701 }
1672 1702
1673 if (0 != mysql_stmt_reset (statement)) 1703 if (0 != mysql_stmt_reset (statement))
1674 { 1704 {
1675 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1705 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1676 "mysql_stmt_reset", statement); 1706 "mysql_stmt_reset", statement);
1677 return GNUNET_SYSERR; 1707 return GNUNET_SYSERR;
1678 } 1708 }
@@ -1691,7 +1721,7 @@ update_message_id (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *s
1691 1721
1692 if (NULL == statement) 1722 if (NULL == statement)
1693 { 1723 {
1694 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1724 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1695 "mysql get_stmt", statement); 1725 "mysql get_stmt", statement);
1696 return GNUNET_SYSERR; 1726 return GNUNET_SYSERR;
1697 } 1727 }
@@ -1706,14 +1736,14 @@ update_message_id (struct Plugin *plugin, struct GNUNET_MYSQL_StatementHandle *s
1706 stmt, 1736 stmt,
1707 params)) 1737 params))
1708 { 1738 {
1709 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1739 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1710 "mysql execute prepared", statement); 1740 "mysql execute prepared", statement);
1711 return GNUNET_SYSERR; 1741 return GNUNET_SYSERR;
1712 } 1742 }
1713 1743
1714 if (0 != mysql_stmt_reset (statement)) 1744 if (0 != mysql_stmt_reset (statement))
1715 { 1745 {
1716 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 1746 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1717 "mysql_stmt_reset", statement); 1747 "mysql_stmt_reset", statement);
1718 return GNUNET_SYSERR; 1748 return GNUNET_SYSERR;
1719 } 1749 }
@@ -1928,6 +1958,7 @@ state_get (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
1928{ 1958{
1929 struct Plugin *plugin = cls; 1959 struct Plugin *plugin = cls;
1930 int ret = GNUNET_SYSERR; 1960 int ret = GNUNET_SYSERR;
1961 int sql_ret ;
1931 1962
1932 struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_state_one; 1963 struct GNUNET_MYSQL_StatementHandle *stmt = plugin->select_state_one;
1933 MYSQL_STMT *statement = NULL; 1964 MYSQL_STMT *statement = NULL;
@@ -1940,19 +1971,39 @@ state_get (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_key,
1940 GNUNET_MY_query_param_end 1971 GNUNET_MY_query_param_end
1941 }; 1972 };
1942 1973
1943 if (GNUNET_OK != GNUNET_MY_exec_prepared (plugin->mc, 1974 void *value_current = NULL;
1944 stmt, 1975 size_t value_size = 0;
1945 params_select))
1946 {
1947 1976
1948 } 1977 struct GNUNET_MY_ResultSpec results[] = {
1978 GNUNET_MY_result_spec_variable_size (&value_current, &value_size),
1979 GNUNET_MY_result_spec_end
1980 };
1981
1982 GNUNET_MY_exec_prepared (plugin->mc,
1983 stmt,
1984 params_select);
1949 1985
1950 ret = cb (cb_cls, name, sqlite3_column_blob (stmt, 0), 1986
1951 sqlite3_column_bytes (stmt, 0)); 1987 sql_ret = GNUNET_MY_extract_result (stmt,
1988 results);
1989
1990 switch (sql_ret)
1991 {
1992 case GNUNET_NO:
1993 ret = GNUNET_NO;
1994 break;
1995 case GNUNET_YES:
1996 ret = cb (cb_cls, name, value_current,
1997 value_size);
1998 break;
1999 default:
2000 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
2001 "mysql extract_result", statement);
2002 }
1952 2003
1953 if (0 != mysql_stmt_reset (statement)) 2004 if (0 != mysql_stmt_reset (statement))
1954 { 2005 {
1955 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2006 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1956 "mysql_stmt_reset", statement); 2007 "mysql_stmt_reset", statement);
1957 return GNUNET_SYSERR; 2008 return GNUNET_SYSERR;
1958 } 2009 }
@@ -1982,7 +2033,7 @@ state_get_prefix (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_
1982 2033
1983 if (NULL == statement) 2034 if (NULL == statement)
1984 { 2035 {
1985 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2036 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
1986 "mysql get_stmt", statement); 2037 "mysql get_stmt", statement);
1987 return GNUNET_SYSERR; 2038 return GNUNET_SYSERR;
1988 } 2039 }
@@ -1997,26 +2048,49 @@ state_get_prefix (void *cls, const struct GNUNET_CRYPTO_EddsaPublicKey *channel_
1997 GNUNET_MY_query_param_end 2048 GNUNET_MY_query_param_end
1998 }; 2049 };
1999 2050
2000 int sql_ret; 2051 char *name2 = "";
2052 void *value_current = NULL;
2053 size_t value_size = 0;
2054
2055 struct GNUNET_MY_ResultSpec results[] = {
2056 GNUNET_MY_result_spec_string (&name2),
2057 GNUNET_MY_result_spec_variable_size (&value_current, &value_size),
2058 GNUNET_MY_result_spec_end
2059 };
2001 2060
2002 sql_ret = GNUNET_MY_exec_prepared (plugin->mc, 2061 int sql_ret;
2003 stmt,
2004 params_select);
2005 2062
2006 if (GNUNET_OK != sql_ret) 2063 do
2007 { 2064 {
2008 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2065 GNUNET_MY_exec_prepared (plugin->mc,
2009 "mysql exec_prepared", statement); 2066 stmt,
2010 return GNUNET_SYSERR; 2067 params_select);
2068 sql_ret = GNUNET_MY_extract_result (stmt,
2069 results);
2070 switch (sql_ret)
2071 {
2072 case GNUNET_NO:
2073 if (ret != GNUNET_OK)
2074 ret = GNUNET_NO;
2075 break;
2076 case GNUNET_YES:
2077 ret = cb (cb_cls, (const char *) name2,
2078 value_current,
2079 value_size);
2080
2081 if (ret != GNUNET_YES)
2082 sql_ret = GNUNET_NO;
2083 break;
2084 default:
2085 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
2086 "mysql extract_result", statement);
2087 }
2011 } 2088 }
2012 2089 while (sql_ret == GNUNET_YES);
2013 ret = cb (cb_cls, (const char *) sqlite3_column_text (stmt, 0),
2014 sqlite3_column_blob (stmt, 1),
2015 sqlite3_column_bytes (stmt, 1));
2016 2090
2017 if (0 != mysql_stmt_reset (statement)) 2091 if (0 != mysql_stmt_reset (statement))
2018 { 2092 {
2019 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2093 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
2020 "mysql_stmt_reset", statement); 2094 "mysql_stmt_reset", statement);
2021 return GNUNET_SYSERR; 2095 return GNUNET_SYSERR;
2022 } 2096 }
@@ -2046,7 +2120,7 @@ state_get_signed (void *cls,
2046 statement = GNUNET_MYSQL_statement_get_stmt (stmt); 2120 statement = GNUNET_MYSQL_statement_get_stmt (stmt);
2047 if (NULL == statement) 2121 if (NULL == statement)
2048 { 2122 {
2049 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2123 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
2050 "mysql get_stmt", statement); 2124 "mysql get_stmt", statement);
2051 return GNUNET_SYSERR; 2125 return GNUNET_SYSERR;
2052 } 2126 }
@@ -2058,24 +2132,48 @@ state_get_signed (void *cls,
2058 2132
2059 int sql_ret; 2133 int sql_ret;
2060 2134
2061 sql_ret = GNUNET_MY_exec_prepared (plugin->mc, 2135 char *name = "";
2062 stmt, 2136 void *value_signed = NULL;
2063 params_select); 2137 size_t value_size = 0;
2138
2139 struct GNUNET_MY_ResultSpec results[] = {
2140 GNUNET_MY_result_spec_string (&name),
2141 GNUNET_MY_result_spec_variable_size (&value_signed, &value_size),
2142 GNUNET_MY_result_spec_end
2143 };
2064 2144
2065 if (GNUNET_OK != sql_ret) 2145 do
2066 { 2146 {
2067 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2147 GNUNET_MY_exec_prepared (plugin->mc,
2068 "mysql_exec_prepared", statement); 2148 stmt,
2069 return GNUNET_SYSERR; 2149 params_select);
2070 } 2150 sql_ret = GNUNET_MY_extract_result (stmt,
2151 results);
2071 2152
2072 ret = cb (cb_cls, (const char *) sqlite3_column_text (stmt, 0), 2153 switch (sql_ret)
2073 sqlite3_column_blob (stmt, 1), 2154 {
2074 sqlite3_column_bytes (stmt, 1)); 2155 case GNUNET_NO:
2156 if (ret != GNUNET_OK)
2157 ret = GNUNET_NO;
2158 break;
2159 case GNUNET_YES:
2160 ret = cb (cb_cls, (const char *) name,
2161 value_signed,
2162 value_size);
2163
2164 if (ret != GNUNET_YES)
2165 sql_ret = GNUNET_NO;
2166 break;
2167 default:
2168 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
2169 "mysql extract_result", statement);
2170 }
2171 }
2172 while (sql_ret == GNUNET_YES);
2075 2173
2076 if (0 != mysql_stmt_reset (statement)) 2174 if (0 != mysql_stmt_reset (statement))
2077 { 2175 {
2078 LOG_MYSQL (plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK, 2176 LOG_MYSQL(plugin, GNUNET_ERROR_TYPE_ERROR | GNUNET_ERROR_TYPE_BULK,
2079 "mysql_stmt_reset", statement); 2177 "mysql_stmt_reset", statement);
2080 return GNUNET_SYSERR; 2178 return GNUNET_SYSERR;
2081 } 2179 }
@@ -2091,7 +2189,7 @@ state_get_signed (void *cls,
2091 * @return NULL on error, otherwise the plugin context 2189 * @return NULL on error, otherwise the plugin context
2092 */ 2190 */
2093void * 2191void *
2094libgnunet_plugin_psycstore_sqlite_init (void *cls) 2192libgnunet_plugin_psycstore_mysql_init (void *cls)
2095{ 2193{
2096 static struct Plugin plugin; 2194 static struct Plugin plugin;
2097 const struct GNUNET_CONFIGURATION_Handle *cfg = cls; 2195 const struct GNUNET_CONFIGURATION_Handle *cfg = cls;
@@ -2143,7 +2241,7 @@ libgnunet_plugin_psycstore_sqlite_init (void *cls)
2143 * @return Always NULL 2241 * @return Always NULL
2144 */ 2242 */
2145void * 2243void *
2146libgnunet_plugin_psycstore_sqlite_done (void *cls) 2244libgnunet_plugin_psycstore_mysql_done (void *cls)
2147{ 2245{
2148 struct GNUNET_PSYCSTORE_PluginFunctions *api = cls; 2246 struct GNUNET_PSYCSTORE_PluginFunctions *api = cls;
2149 struct Plugin *plugin = api->cls; 2247 struct Plugin *plugin = api->cls;