GNUnet 0.25.2-11-g84e94e98c
 
Loading...
Searching...
No Matches
pq_query_helper.c
Go to the documentation of this file.
1/*
2 This file is part of GNUnet
3 Copyright (C) 2014, 2015, 2016, 2020, 2025 GNUnet e.V.
4
5 GNUnet is free software: you can redistribute it and/or modify it
6 under the terms of the GNU Affero General Public License as published
7 by the Free Software Foundation, either version 3 of the License,
8 or (at your option) any later version.
9
10 GNUnet is distributed in the hope that it will be useful, but
11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details.
14
15 You should have received a copy of the GNU Affero General Public License
16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17
18 SPDX-License-Identifier: AGPL3.0-or-later
19 */
26#include "platform.h"
27#include "gnunet_common.h"
28#include "gnunet_pq_lib.h"
29#include "gnunet_time_lib.h"
30#include "pq.h"
31
46static int
47qconv_null (void *cls,
48 const void *data,
49 size_t data_len,
50 void *param_values[],
51 int param_lengths[],
52 int param_formats[],
53 unsigned int param_length,
54 void *scratch[],
55 unsigned int scratch_length)
56{
57 (void) scratch;
58 (void) scratch_length;
59 (void) data;
60 (void) data_len;
61 GNUNET_break (NULL == cls);
62 if (1 != param_length)
63 return -1;
64 param_values[0] = NULL;
65 param_lengths[0] = 0;
66 param_formats[0] = 1;
67 return 0;
68}
69
70
73{
74 struct GNUNET_PQ_QueryParam res = {
75 .conv = &qconv_null,
76 .num_params = 1
77 };
78
79 return res;
80}
81
82
97static int
98qconv_fixed (void *cls,
99 const void *data,
100 size_t data_len,
101 void *param_values[],
102 int param_lengths[],
103 int param_formats[],
104 unsigned int param_length,
105 void *scratch[],
106 unsigned int scratch_length)
107{
108 (void) scratch;
109 (void) scratch_length;
110 GNUNET_break (NULL == cls);
111 if (1 != param_length)
112 return -1;
113 param_values[0] = (void *) data;
114 param_lengths[0] = data_len;
115 param_formats[0] = 1;
116 return 0;
117}
118
119
122 size_t ptr_size)
123{
124 struct GNUNET_PQ_QueryParam res = {
125 .conv = &qconv_fixed,
126 .conv_cls = NULL,
127 .data = ptr,
128 .size = ptr_size,
129 .num_params = 1
130 };
131
132 return res;
133}
134
135
138{
140 strlen (ptr));
141}
142
143
146{
147 static uint8_t bt = 1;
148 static uint8_t bf = 0;
149
150 return GNUNET_PQ_query_param_fixed_size (b ? &bt : &bf,
151 sizeof (uint8_t));
152}
153
154
169static int
170qconv_uint16 (void *cls,
171 const void *data,
172 size_t data_len,
173 void *param_values[],
174 int param_lengths[],
175 int param_formats[],
176 unsigned int param_length,
177 void *scratch[],
178 unsigned int scratch_length)
179{
180 const uint16_t *u_hbo = data;
181 uint16_t *u_nbo;
182
183 (void) scratch;
184 (void) scratch_length;
185 GNUNET_break (NULL == cls);
186 if (1 != param_length)
187 return -1;
188 u_nbo = GNUNET_new (uint16_t);
189 scratch[0] = u_nbo;
190 *u_nbo = htons (*u_hbo);
191 param_values[0] = (void *) u_nbo;
192 param_lengths[0] = sizeof(uint16_t);
193 param_formats[0] = 1;
194 return 1;
195}
196
197
200{
201 struct GNUNET_PQ_QueryParam res = {
202 .conv = &qconv_uint16,
203 .data = x,
204 .size = sizeof(*x),
205 .num_params = 1
206 };
207
208 return res;
209}
210
211
226static int
227qconv_uint32 (void *cls,
228 const void *data,
229 size_t data_len,
230 void *param_values[],
231 int param_lengths[],
232 int param_formats[],
233 unsigned int param_length,
234 void *scratch[],
235 unsigned int scratch_length)
236{
237 const uint32_t *u_hbo = data;
238 uint32_t *u_nbo;
239
240 (void) scratch;
241 (void) scratch_length;
242 GNUNET_break (NULL == cls);
243 if (1 != param_length)
244 return -1;
245 u_nbo = GNUNET_new (uint32_t);
246 scratch[0] = u_nbo;
247 *u_nbo = htonl (*u_hbo);
248 param_values[0] = (void *) u_nbo;
249 param_lengths[0] = sizeof(uint32_t);
250 param_formats[0] = 1;
251 return 1;
252}
253
254
257{
258 struct GNUNET_PQ_QueryParam res = {
259 .conv = &qconv_uint32,
260 .data = x,
261 .size = sizeof(*x),
262 .num_params = 1
263 };
264
265 return res;
266}
267
268
283static int
284qconv_uint64 (void *cls,
285 const void *data,
286 size_t data_len,
287 void *param_values[],
288 int param_lengths[],
289 int param_formats[],
290 unsigned int param_length,
291 void *scratch[],
292 unsigned int scratch_length)
293{
294 const uint64_t *u_hbo = data;
295 uint64_t *u_nbo;
296
297 (void) scratch;
298 (void) scratch_length;
299 GNUNET_break (NULL == cls);
300 if (1 != param_length)
301 return -1;
302 u_nbo = GNUNET_new (uint64_t);
303 scratch[0] = u_nbo;
304 *u_nbo = GNUNET_htonll (*u_hbo);
305 param_values[0] = (void *) u_nbo;
306 param_lengths[0] = sizeof(uint64_t);
307 param_formats[0] = 1;
308 return 1;
309}
310
311
314{
315 struct GNUNET_PQ_QueryParam res = {
316 .conv = &qconv_uint64,
317 .data = x,
318 .size = sizeof(*x),
319 .num_params = 1
320 };
321
322 return res;
323}
324
325
340static int
341qconv_int16 (void *cls,
342 const void *data,
343 size_t data_len,
344 void *param_values[],
345 int param_lengths[],
346 int param_formats[],
347 unsigned int param_length,
348 void *scratch[],
349 unsigned int scratch_length)
350{
351 const int16_t *u_hbo = data;
352 int16_t *u_nbo;
353
354 (void) scratch;
355 (void) scratch_length;
356 GNUNET_break (NULL == cls);
357 if (1 != param_length)
358 return -1;
359 u_nbo = GNUNET_new (int16_t);
360 scratch[0] = u_nbo;
361 *u_nbo = GNUNET_htobe16 (*u_hbo);
362 param_values[0] = (void *) u_nbo;
363 param_lengths[0] = sizeof(int16_t);
364 param_formats[0] = 1;
365 return 1;
366}
367
368
371{
372 struct GNUNET_PQ_QueryParam res = {
373 .conv = &qconv_int16,
374 .data = x,
375 .size = sizeof(*x),
376 .num_params = 1
377 };
378
379 return res;
380}
381
382
397static int
398qconv_int64 (void *cls,
399 const void *data,
400 size_t data_len,
401 void *param_values[],
402 int param_lengths[],
403 int param_formats[],
404 unsigned int param_length,
405 void *scratch[],
406 unsigned int scratch_length)
407{
408 const int64_t *u_hbo = data;
409 int64_t *u_nbo;
410
411 (void) scratch;
412 (void) scratch_length;
413 GNUNET_break (NULL == cls);
414 if (1 != param_length)
415 return -1;
416 u_nbo = GNUNET_new (int64_t);
417 scratch[0] = u_nbo;
418 *u_nbo = GNUNET_htonll (*u_hbo);
419 param_values[0] = (void *) u_nbo;
420 param_lengths[0] = sizeof(int64_t);
421 param_formats[0] = 1;
422 return 1;
423}
424
425
428{
429 struct GNUNET_PQ_QueryParam res = {
430 .conv = &qconv_int64,
431 .data = x,
432 .size = sizeof(*x),
433 .num_params = 1
434 };
435
436 return res;
437}
438
439
454static int
456 const void *data,
457 size_t data_len,
458 void *param_values[],
459 int param_lengths[],
460 int param_formats[],
461 unsigned int param_length,
462 void *scratch[],
463 unsigned int scratch_length)
464{
465 const struct GNUNET_CRYPTO_RsaPublicKey *rsa = data;
466 void *buf;
467 size_t buf_size;
468
469 GNUNET_break (NULL == cls);
470 if (1 != param_length)
471 return -1;
473 &buf);
474 scratch[0] = buf;
475 param_values[0] = (void *) buf;
476 param_lengths[0] = buf_size;
477 param_formats[0] = 1;
478 return 1;
479}
480
481
484 const struct GNUNET_CRYPTO_RsaPublicKey *x)
485{
486 struct GNUNET_PQ_QueryParam res = {
488 .data = x,
489 .num_params = 1
490 };
491
492 return res;
493}
494
495
510static int
512 const void *data,
513 size_t data_len,
514 void *param_values[],
515 int param_lengths[],
516 int param_formats[],
517 unsigned int param_length,
518 void *scratch[],
519 unsigned int scratch_length)
520{
521 const struct GNUNET_CRYPTO_RsaSignature *sig = data;
522 void *buf;
523 size_t buf_size;
524
525 GNUNET_break (NULL == cls);
526 if (1 != param_length)
527 return -1;
529 &buf);
530 scratch[0] = buf;
531 param_values[0] = (void *) buf;
532 param_lengths[0] = buf_size;
533 param_formats[0] = 1;
534 return 1;
535}
536
537
540{
541 struct GNUNET_PQ_QueryParam res = {
543 .data = x,
544 .num_params = 1
545 };
546
547 return res;
548}
549
550
565static int
566qconv_rel_time (void *cls,
567 const void *data,
568 size_t data_len,
569 void *param_values[],
570 int param_lengths[],
571 int param_formats[],
572 unsigned int param_length,
573 void *scratch[],
574 unsigned int scratch_length)
575{
576 const struct GNUNET_TIME_Relative *u = data;
577 struct GNUNET_TIME_Relative rel;
578 uint64_t *u_nbo;
579
580 GNUNET_break (NULL == cls);
581 if (1 != param_length)
582 return -1;
583 rel = *u;
584 if (rel.rel_value_us > INT64_MAX)
585 rel.rel_value_us = INT64_MAX;
586 u_nbo = GNUNET_new (uint64_t);
587 scratch[0] = u_nbo;
588 *u_nbo = GNUNET_htonll (rel.rel_value_us);
589 param_values[0] = (void *) u_nbo;
590 param_lengths[0] = sizeof(uint64_t);
591 param_formats[0] = 1;
592 return 1;
593}
594
595
598{
599 struct GNUNET_PQ_QueryParam res = {
601 .data = x,
602 .size = sizeof(*x),
603 .num_params = 1
604 };
605
606 return res;
607}
608
609
624static int
625qconv_abs_time (void *cls,
626 const void *data,
627 size_t data_len,
628 void *param_values[],
629 int param_lengths[],
630 int param_formats[],
631 unsigned int param_length,
632 void *scratch[],
633 unsigned int scratch_length)
634{
635 const struct GNUNET_TIME_Absolute *u = data;
636 struct GNUNET_TIME_Absolute abs;
637 uint64_t *u_nbo;
638
639 GNUNET_break (NULL == cls);
640 if (1 != param_length)
641 return -1;
642 abs = *u;
643 if (abs.abs_value_us > INT64_MAX)
644 abs.abs_value_us = INT64_MAX;
645 u_nbo = GNUNET_new (uint64_t);
646 scratch[0] = u_nbo;
647 *u_nbo = GNUNET_htonll (abs.abs_value_us);
648 param_values[0] = (void *) u_nbo;
649 param_lengths[0] = sizeof(uint64_t);
650 param_formats[0] = 1;
651 return 1;
652}
653
654
657{
658 struct GNUNET_PQ_QueryParam res = {
660 .data = x,
661 .size = sizeof(*x),
662 .num_params = 1
663 };
664
665 return res;
666}
667
668
671 const struct GNUNET_TIME_AbsoluteNBO *x)
672{
673 return GNUNET_PQ_query_param_auto_from_type (&x->abs_value_us__);
674}
675
676
682
683
690
691
699{
706 const size_t *sizes;
707
712 size_t same_size;
713
720
725
729 Oid oid;
730};
731
736static void
738{
739 GNUNET_free (cls);
740}
741
742
761static int
763 void *cls,
764 const void *data,
765 size_t data_len,
766 void *param_values[],
767 int param_lengths[],
768 int param_formats[],
769 unsigned int param_length,
770 void *scratch[],
771 unsigned int scratch_length)
772{
773 struct qconv_array_cls *meta = cls;
774 size_t num = data_len;
775 size_t total_size;
776 const size_t *sizes;
777 bool same_sized;
778 size_t *string_lengths = NULL;
779 void *elements = NULL;
780 bool noerror = true;
781 bool has_nulls = false;
782 bool is_null[num];
783
784 (void) (param_length);
785 (void) (scratch_length);
786
787 GNUNET_assert (NULL != meta);
788 GNUNET_assert (num < INT_MAX);
789
790 sizes = meta->sizes;
791 same_sized = (0 != meta->same_size);
792 memset (is_null, 0, sizeof (is_null));
793
794#define RETURN_UNLESS(cond) \
795 do { \
796 if (! (cond)) \
797 { \
798 GNUNET_break ((cond)); \
799 noerror = false; \
800 goto DONE; \
801 } \
802 } while (0)
803
804 /* Calculate sizes and check bounds */
805 {
806 /* num * length-field */
807 size_t x = sizeof(uint32_t);
808 size_t y = x * num; /* for hsz headers of each element */
809
810 RETURN_UNLESS ((0 == num) || (y / num == x));
811
812 /* size of header */
813 total_size = x = sizeof(struct pq_array_header);
814 total_size += y;
815 RETURN_UNLESS (total_size >= x);
816
817 /* sizes of elements */
818 if (same_sized)
819 {
820 if (meta->continuous)
821 {
822 x = num * meta->same_size;
823 RETURN_UNLESS ((0 == num) || (x / num == meta->same_size));
824
825 y = total_size;
826 total_size += x;
827 RETURN_UNLESS (total_size >= y);
828 }
829 else
830 {
831 /* Not continuous, but same sized.
832 * There might be NULL pointers in the array, though. */
833 for (unsigned int i = 0; i < num; i++)
834 {
835 const void **ptr = (const void **) data;
836
837 if (NULL != ptr[i])
838 {
839 total_size += meta->same_size;
840 RETURN_UNLESS (total_size >= meta->same_size);
841 }
842 else
843 {
844 has_nulls = true;
845 is_null[i] = true;
846 }
847 }
848 }
849 }
850 else /* sizes are different per element, provided in sizes[] */
851 {
852 /* For an array of strings we need to get their length's first */
853 if (array_of_string == meta->typ)
854 {
855 string_lengths = GNUNET_new_array (num, size_t);
856
857 if (meta->continuous)
858 {
859 const char *ptr = data;
860
861 for (unsigned int i = 0; i < num; i++)
862 {
863 size_t len = strlen (ptr);
864
865 RETURN_UNLESS (len < INT_MAX);
866 string_lengths[i] = len;
867 ptr += len + 1;
868 }
869 }
870 else
871 {
872 const char **str = (const char **) data;
873
874 for (unsigned int i = 0; i < num; i++)
875 {
876 if (NULL != str[i])
877 {
878 size_t len = strlen (str[i]);
879
880 RETURN_UNLESS (len < INT_MAX);
881 string_lengths[i] = len;
882 }
883 else
884 {
885 has_nulls = true;
886 string_lengths[i] = 0;
887 is_null[i] = true;
888 }
889 }
890 }
891 sizes = string_lengths;
892 }
893 else
894 {
895 /* Ensure consistency between NULL elements and sizes */
896 for (unsigned int i = 0; i < num; i++)
897 {
898 const char **ptr = (const char **) data;
899
900 if (NULL == ptr[i])
901 {
902 RETURN_UNLESS (sizes[i] == 0);
903 has_nulls = true;
904 is_null[i] = true;
905 }
906 else
907 {
908 RETURN_UNLESS (sizes[i] < INT_MAX);
909 }
910 }
911 }
912
913 for (unsigned int i = 0; i < num; i++)
914 {
915 x = total_size;
916 total_size += sizes[i];
917 RETURN_UNLESS (total_size >= x);
918 }
919 }
920
921 RETURN_UNLESS (total_size < INT_MAX);
923 elements = GNUNET_malloc (total_size);
924 }
925
926 /* Write data */
927 {
928 char *in = (char *) data;
929 char *out = elements;
930 struct pq_array_header h = {
931 .ndim = htonl (1), /* We only support one-dimensional arrays */
932 .has_nulls = has_nulls ? htonl (1) : 0,
933 .lbound = htonl (1), /* Default start index value */
934 .dim = htonl (num),
935 .oid = htonl (meta->oid),
936 };
937
938 /* Write header */
939 GNUNET_memcpy (out,
940 &h,
941 sizeof(h));
942 out += sizeof(h);
943
944 /* Write elements */
945 for (unsigned int i = 0; i < num; i++)
946 {
947 size_t sz = same_sized ? meta->same_size : sizes[i];
948 uint32_t hsz = is_null[i] ? htonl (-1) : htonl (sz);
949
950 GNUNET_memcpy (out,
951 &hsz,
952 sizeof(hsz));
953 out += sizeof(uint32_t);
954
955 switch (meta->typ)
956 {
957 case array_of_bool:
958 {
959 GNUNET_assert (sizeof(bool) == sz);
960 *(bool *) out = (*(bool *) in);
961 in += sz;
962 break;
963 }
964 case array_of_uint16:
965 {
966 GNUNET_assert (sizeof(uint16_t) == sz);
967 *(uint16_t *) out = htons (*(uint16_t *) in);
968 in += sz;
969 break;
970 }
971 case array_of_uint32:
972 {
973 uint32_t v;
974
975 GNUNET_assert (sizeof(uint32_t) == sz);
976 v = htonl (*(uint32_t *) in);
977 GNUNET_memcpy (out,
978 &v,
979 sizeof(v));
980 in += sz;
981 break;
982 }
983 case array_of_uint64:
984 {
985 uint64_t tmp;
986
987 GNUNET_assert (sizeof(uint64_t) == sz);
988 tmp = GNUNET_htonll (*(uint64_t *) in);
989 GNUNET_memcpy (out,
990 &tmp,
991 sizeof(tmp));
992 in += sz;
993 break;
994 }
995 case array_of_byte:
996 case array_of_string:
997 if (! is_null[i])
998 {
999 const void *ptr;
1000
1001 if (meta->continuous)
1002 {
1003 size_t nullbyte = (array_of_string == meta->typ) ? 1 : 0;
1004
1005 ptr = in;
1006 in += sz + nullbyte;
1007 }
1008 else
1009 {
1010 ptr = ((const char **) data)[i];
1011 }
1012 RETURN_UNLESS (NULL != ptr);
1013 GNUNET_memcpy (out,
1014 ptr,
1015 sz);
1016 }
1017 break;
1018 case array_of_abs_time:
1019 case array_of_rel_time:
1020 case array_of_timestamp:
1021 if (! is_null [i])
1022 {
1023 uint64_t val;
1024
1025 switch (meta->typ)
1026 {
1027 case array_of_abs_time:
1028 {
1029 const struct GNUNET_TIME_Absolute *abs =
1030 (const struct GNUNET_TIME_Absolute *) in;
1031
1032 GNUNET_assert (sizeof(struct GNUNET_TIME_Absolute) == sz);
1033
1034 if (! meta->continuous)
1035 abs = ((const struct GNUNET_TIME_Absolute **) data)[i];
1036
1037 RETURN_UNLESS (NULL != abs);
1038 val = abs->abs_value_us;
1039 break;
1040 }
1041 case array_of_rel_time:
1042 {
1043 const struct GNUNET_TIME_Relative *rel =
1044 (const struct GNUNET_TIME_Relative *) in;
1045
1046 GNUNET_assert (sizeof(struct GNUNET_TIME_Relative) == sz);
1047
1048 if (! meta->continuous)
1049 rel = ((const struct GNUNET_TIME_Relative **) data)[i];
1050
1051 RETURN_UNLESS (NULL != rel);
1052 val = rel->rel_value_us;
1053 break;
1054 }
1055 case array_of_timestamp:
1056 {
1057 const struct GNUNET_TIME_Timestamp *ts =
1058 (const struct GNUNET_TIME_Timestamp *) in;
1059
1060 GNUNET_assert (sizeof(struct GNUNET_TIME_Timestamp) == sz);
1061
1062 if (! meta->continuous)
1063 ts = ((const struct GNUNET_TIME_Timestamp **) data)[i];
1064
1065 RETURN_UNLESS (NULL != ts);
1066 val = ts->abs_time.abs_value_us;
1067 break;
1068 }
1069 default:
1070 {
1071 GNUNET_assert (0);
1072 }
1073 }
1074
1075 val = val > INT64_MAX ? INT64_MAX : val;
1076 val = GNUNET_htonll (val);
1077 GNUNET_memcpy (out,
1078 &val,
1079 sizeof(val));
1080
1081 if (meta->continuous)
1082 in += sz;
1083 }
1084 break;
1085 default:
1086 GNUNET_assert (0);
1087 break;
1088 }
1089
1090 if (! is_null[i])
1091 out += sz;
1092 }
1093 }
1094
1095 param_values[0] = elements;
1096 param_lengths[0] = total_size;
1097 param_formats[0] = 1;
1098 scratch[0] = elements;
1099
1100DONE:
1101 GNUNET_free (string_lengths);
1102
1103 if (noerror)
1104 return 1;
1105
1106 return -1;
1107}
1108
1109
1122static struct GNUNET_PQ_QueryParam
1124 unsigned int num,
1125 bool continuous,
1126 const void *elements,
1127 const size_t *sizes,
1128 size_t same_size,
1129 enum array_types typ,
1130 Oid oid)
1131{
1133
1134 meta->typ = typ;
1135 meta->oid = oid;
1136 meta->sizes = sizes;
1137 meta->same_size = same_size;
1138 meta->continuous = continuous;
1139
1140 {
1141 struct GNUNET_PQ_QueryParam res = {
1142 .conv = qconv_array,
1143 .conv_cls = meta,
1144 .conv_cls_cleanup = &qconv_array_cls_cleanup,
1145 .data = elements,
1146 .size = num,
1147 .num_params = 1,
1148 };
1149
1150 return res;
1151 }
1152}
1153
1154
1157 unsigned int num,
1158 const bool *elements,
1159 struct GNUNET_PQ_Context *db)
1160{
1161 Oid oid;
1162
1165 "bool",
1166 &oid));
1168 true,
1169 elements,
1170 NULL,
1171 sizeof(bool),
1173 oid);
1174}
1175
1176
1179 unsigned int num,
1180 const uint16_t *elements,
1181 struct GNUNET_PQ_Context *db)
1182{
1183 Oid oid;
1184
1187 "int2",
1188 &oid));
1190 true,
1191 elements,
1192 NULL,
1193 sizeof(uint16_t),
1195 oid);
1196}
1197
1198
1201 unsigned int num,
1202 const uint32_t *elements,
1203 struct GNUNET_PQ_Context *db)
1204{
1205 Oid oid;
1206
1209 "int4",
1210 &oid));
1212 true,
1213 elements,
1214 NULL,
1215 sizeof(uint32_t),
1217 oid);
1218}
1219
1220
1223 unsigned int num,
1224 const uint64_t *elements,
1225 struct GNUNET_PQ_Context *db)
1226{
1227 Oid oid;
1228
1231 "int8",
1232 &oid));
1234 true,
1235 elements,
1236 NULL,
1237 sizeof(uint64_t),
1239 oid);
1240}
1241
1242
1245 unsigned int num,
1246 const void *elements,
1247 const size_t *sizes,
1248 struct GNUNET_PQ_Context *db)
1249{
1250 Oid oid;
1251
1254 "bytea",
1255 &oid));
1257 true,
1258 elements,
1259 sizes,
1260 0,
1262 oid);
1263}
1264
1265
1268 unsigned int num,
1269 const void *elements[static num],
1270 const size_t *sizes,
1271 struct GNUNET_PQ_Context *db)
1272{
1273 Oid oid;
1274
1277 "bytea",
1278 &oid));
1280 false,
1281 elements,
1282 sizes,
1283 0,
1285 oid);
1286}
1287
1288
1291 unsigned int num,
1292 const void *elements,
1293 size_t same_size,
1294 struct GNUNET_PQ_Context *db)
1295{
1296 Oid oid;
1297
1300 "bytea",
1301 &oid));
1303 true,
1304 elements,
1305 NULL,
1306 same_size,
1308 oid);
1309}
1310
1311
1314 unsigned int num,
1315 const void *elements[static num],
1316 size_t same_size,
1317 struct GNUNET_PQ_Context *db)
1318{
1319 Oid oid;
1320
1323 "bytea",
1324 &oid));
1326 false,
1327 elements,
1328 NULL,
1329 same_size,
1331 oid);
1332}
1333
1334
1337 unsigned int num,
1338 const char *elements,
1339 struct GNUNET_PQ_Context *db)
1340{
1341 Oid oid;
1342
1345 "text",
1346 &oid));
1348 true,
1349 elements,
1350 NULL,
1351 0,
1353 oid);
1354}
1355
1356
1359 unsigned int num,
1360 const char *elements[static num],
1361 struct GNUNET_PQ_Context *db)
1362{
1363 Oid oid;
1364
1367 "text",
1368 &oid));
1370 false,
1371 elements,
1372 NULL,
1373 0,
1375 oid);
1376}
1377
1378
1381 unsigned int num,
1382 const struct GNUNET_TIME_Absolute *elements,
1383 struct GNUNET_PQ_Context *db)
1384{
1385 Oid oid;
1386
1389 "int8",
1390 &oid));
1392 true,
1393 elements,
1394 NULL,
1395 sizeof(struct GNUNET_TIME_Absolute),
1397 oid);
1398}
1399
1400
1403 unsigned int num,
1404 const struct GNUNET_TIME_Absolute *elements[],
1405 struct GNUNET_PQ_Context *db)
1406{
1407 Oid oid;
1408
1411 "int8",
1412 &oid));
1414 false,
1415 elements,
1416 NULL,
1417 sizeof(struct GNUNET_TIME_Absolute),
1419 oid);
1420}
1421
1422
1425 unsigned int num,
1426 const struct GNUNET_TIME_Relative *elements,
1427 struct GNUNET_PQ_Context *db)
1428{
1429 Oid oid;
1430
1433 "int8",
1434 &oid));
1436 true,
1437 elements,
1438 NULL,
1439 sizeof(struct GNUNET_TIME_Relative),
1441 oid);
1442}
1443
1444
1447 unsigned int num,
1448 const struct GNUNET_TIME_Relative *elements[],
1449 struct GNUNET_PQ_Context *db)
1450{
1451 Oid oid;
1452
1455 "int8",
1456 &oid));
1458 false,
1459 elements,
1460 NULL,
1461 sizeof(struct GNUNET_TIME_Relative),
1463 oid);
1464}
1465
1466
1469 unsigned int num,
1470 const struct GNUNET_TIME_Timestamp *elements,
1471 struct GNUNET_PQ_Context *db)
1472{
1473 Oid oid;
1474
1477 "int8",
1478 &oid));
1480 true,
1481 elements,
1482 NULL,
1483 sizeof(struct GNUNET_TIME_Timestamp),
1485 oid);
1486}
1487
1488
1491 unsigned int num,
1492 const struct GNUNET_TIME_Timestamp *elements[],
1493 struct GNUNET_PQ_Context *db)
1494{
1495 Oid oid;
1496
1499 "int8",
1500 &oid));
1502 false,
1503 elements,
1504 NULL,
1505 sizeof(struct GNUNET_TIME_Timestamp),
1507 oid);
1508}
1509
1510
1525static int
1527 const void *data,
1528 size_t data_len,
1529 void *param_values[],
1530 int param_lengths[],
1531 int param_formats[],
1532 unsigned int param_length,
1533 void *scratch[],
1534 unsigned int scratch_length)
1535{
1536 const struct GNUNET_CRYPTO_BlindSignPublicKey *public_key = data;
1537 size_t tlen;
1538 size_t len;
1539 uint32_t be;
1540 char *buf;
1541 void *tbuf;
1542
1543 (void) cls;
1544 (void) data_len;
1545 GNUNET_assert (1 == param_length);
1546 GNUNET_assert (scratch_length > 0);
1547 GNUNET_break (NULL == cls);
1548 be = htonl ((uint32_t) public_key->cipher);
1549 switch (public_key->cipher)
1550 {
1553 public_key->details.rsa_public_key,
1554 &tbuf);
1555 break;
1557 tlen = sizeof (public_key->details.cs_public_key);
1558 break;
1559 default:
1560 GNUNET_assert (0);
1561 }
1562 len = tlen + sizeof (be);
1563 buf = GNUNET_malloc (len);
1564 GNUNET_memcpy (buf,
1565 &be,
1566 sizeof (be));
1567 switch (public_key->cipher)
1568 {
1570 GNUNET_memcpy (&buf[sizeof (be)],
1571 tbuf,
1572 tlen);
1573 GNUNET_free (tbuf);
1574 break;
1576 GNUNET_memcpy (&buf[sizeof (be)],
1577 &public_key->details.cs_public_key,
1578 tlen);
1579 break;
1580 default:
1581 GNUNET_assert (0);
1582 }
1583
1584 scratch[0] = buf;
1585 param_values[0] = (void *) buf;
1586 param_lengths[0] = len;
1587 param_formats[0] = 1;
1588 return 1;
1589}
1590
1591
1600{
1601 struct GNUNET_PQ_QueryParam res = {
1603 .data = pub,
1604 .num_params = 1
1605 };
1606
1607 return res;
1608}
1609
1610
1625static int
1627 const void *data,
1628 size_t data_len,
1629 void *param_values[],
1630 int param_lengths[],
1631 int param_formats[],
1632 unsigned int param_length,
1633 void *scratch[],
1634 unsigned int scratch_length)
1635{
1636 const struct GNUNET_CRYPTO_BlindSignPrivateKey *private_key = data;
1637 size_t tlen;
1638 size_t len;
1639 uint32_t be;
1640 char *buf;
1641 void *tbuf;
1642
1643 (void) cls;
1644 (void) data_len;
1645 GNUNET_assert (1 == param_length);
1646 GNUNET_assert (scratch_length > 0);
1647 GNUNET_break (NULL == cls);
1648 be = htonl ((uint32_t) private_key->cipher);
1649 switch (private_key->cipher)
1650 {
1653 private_key->details.rsa_private_key,
1654 &tbuf);
1655 break;
1657 tlen = sizeof (private_key->details.cs_private_key);
1658 break;
1659 default:
1660 GNUNET_assert (0);
1661 }
1662 len = tlen + sizeof (be);
1663 buf = GNUNET_malloc (len);
1664 GNUNET_memcpy (buf,
1665 &be,
1666 sizeof (be));
1667 switch (private_key->cipher)
1668 {
1670 GNUNET_memcpy (&buf[sizeof (be)],
1671 tbuf,
1672 tlen);
1673 GNUNET_free (tbuf);
1674 break;
1676 GNUNET_memcpy (&buf[sizeof (be)],
1677 &private_key->details.cs_private_key,
1678 tlen);
1679 break;
1680 default:
1681 GNUNET_assert (0);
1682 }
1683
1684 scratch[0] = buf;
1685 param_values[0] = (void *) buf;
1686 param_lengths[0] = len;
1687 param_formats[0] = 1;
1688 return 1;
1689}
1690
1691
1699 const struct GNUNET_CRYPTO_BlindSignPrivateKey *priv)
1700{
1701 struct GNUNET_PQ_QueryParam res = {
1703 .data = priv,
1704 .num_params = 1
1705 };
1706
1707 return res;
1708}
1709
1710
1725static int
1727 const void *data,
1728 size_t data_len,
1729 void *param_values[],
1730 int param_lengths[],
1731 int param_formats[],
1732 unsigned int param_length,
1733 void *scratch[],
1734 unsigned int scratch_length)
1735{
1736 const struct GNUNET_CRYPTO_UnblindedSignature *ubs = data;
1737 size_t tlen;
1738 size_t len;
1739 uint32_t be[2];
1740 char *buf;
1741 void *tbuf;
1742
1743 (void) cls;
1744 (void) data_len;
1745 GNUNET_assert (1 == param_length);
1746 GNUNET_assert (scratch_length > 0);
1747 GNUNET_break (NULL == cls);
1748 be[0] = htonl ((uint32_t) ubs->cipher);
1749 be[1] = htonl (0x00); /* magic marker: unblinded */
1750 switch (ubs->cipher)
1751 {
1755 &tbuf);
1756 break;
1758 tlen = sizeof (ubs->details.cs_signature);
1759 break;
1760 default:
1761 GNUNET_assert (0);
1762 }
1763 len = tlen + sizeof (be);
1764 buf = GNUNET_malloc (len);
1765 GNUNET_memcpy (buf,
1766 &be,
1767 sizeof (be));
1768 switch (ubs->cipher)
1769 {
1771 GNUNET_memcpy (&buf[sizeof (be)],
1772 tbuf,
1773 tlen);
1774 GNUNET_free (tbuf);
1775 break;
1777 GNUNET_memcpy (&buf[sizeof (be)],
1778 &ubs->details.cs_signature,
1779 tlen);
1780 break;
1781 default:
1782 GNUNET_assert (0);
1783 }
1784
1785 scratch[0] = buf;
1786 param_values[0] = (void *) buf;
1787 param_lengths[0] = len;
1788 param_formats[0] = 1;
1789 return 1;
1790}
1791
1792
1800 const struct GNUNET_CRYPTO_UnblindedSignature *sig)
1801{
1802 struct GNUNET_PQ_QueryParam res = {
1804 .data = sig,
1805 .num_params = 1
1806 };
1807
1808 return res;
1809}
1810
1811
1826static int
1828 const void *data,
1829 size_t data_len,
1830 void *param_values[],
1831 int param_lengths[],
1832 int param_formats[],
1833 unsigned int param_length,
1834 void *scratch[],
1835 unsigned int scratch_length)
1836{
1837 const struct GNUNET_CRYPTO_BlindedSignature *bs = data;
1838 size_t tlen;
1839 size_t len;
1840 uint32_t be[2];
1841 char *buf;
1842 void *tbuf;
1843
1844 (void) cls;
1845 (void) data_len;
1846 GNUNET_assert (1 == param_length);
1847 GNUNET_assert (scratch_length > 0);
1848 GNUNET_break (NULL == cls);
1849 be[0] = htonl ((uint32_t) bs->cipher);
1850 be[1] = htonl (0x01); /* magic marker: blinded */
1851 switch (bs->cipher)
1852 {
1856 &tbuf);
1857 break;
1859 tlen = sizeof (bs->details.blinded_cs_answer);
1860 break;
1861 default:
1862 GNUNET_assert (0);
1863 }
1864 len = tlen + sizeof (be);
1865 buf = GNUNET_malloc (len);
1866 GNUNET_memcpy (buf,
1867 &be,
1868 sizeof (be));
1869 switch (bs->cipher)
1870 {
1872 GNUNET_memcpy (&buf[sizeof (be)],
1873 tbuf,
1874 tlen);
1875 GNUNET_free (tbuf);
1876 break;
1878 GNUNET_memcpy (&buf[sizeof (be)],
1880 tlen);
1881 break;
1882 default:
1883 GNUNET_assert (0);
1884 }
1885
1886 scratch[0] = buf;
1887 param_values[0] = (void *) buf;
1888 param_lengths[0] = len;
1889 param_formats[0] = 1;
1890 return 1;
1891}
1892
1893
1901 const struct GNUNET_CRYPTO_BlindedSignature *b_sig)
1902{
1903 struct GNUNET_PQ_QueryParam res = {
1905 .data = b_sig,
1906 .num_params = 1
1907 };
1908
1909 return res;
1910}
1911
1912
1913/* end of pq_query_helper.c */
#define INT_MAX
static mp_limb_t u[(((256)+GMP_NUMB_BITS - 1)/GMP_NUMB_BITS)]
static struct GNUNET_ARM_Handle * h
Connection with ARM.
Definition gnunet-arm.c:98
static char * data
The data to insert into the dht.
static char * res
Currently read line or NULL on EOF.
static struct GNUNET_FS_MetaData * meta
Meta-data provided via command-line option.
static struct GNUNET_CRYPTO_EddsaPublicKey pub
static struct GNUNET_FS_DirectoryBuilder * db
commonly used definitions; globals in this file are exempt from the rule that the module name ("commo...
helper functions for Postgres DB interactions
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_fixed_size(const void *ptr, size_t ptr_size)
Generate query parameter for a buffer ptr of ptr_size bytes.
#define GNUNET_PQ_query_param_auto_from_type(x)
Generate fixed-size query parameter with size determined by variable type.
uint32_t oid
enum GNUNET_GenericReturnValue GNUNET_PQ_get_oid_by_name(struct GNUNET_PQ_Context *db, const char *name, Oid *oid)
Returns the oid for a given datatype by name.
Definition pq_connect.c:461
Functions related to time.
size_t GNUNET_CRYPTO_rsa_public_key_encode(const struct GNUNET_CRYPTO_RsaPublicKey *key, void **buffer)
Encode the public key in a format suitable for storing it into a file.
Definition crypto_rsa.c:325
uint64_t GNUNET_htonll(uint64_t n)
Convert unsigned 64-bit integer to network byte order.
size_t GNUNET_CRYPTO_rsa_signature_encode(const struct GNUNET_CRYPTO_RsaSignature *sig, void **buffer)
Encode the given signature in a format suitable for storing it into a file.
#define GNUNET_htobe16(x)
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
size_t GNUNET_CRYPTO_rsa_private_key_encode(const struct GNUNET_CRYPTO_RsaPrivateKey *key, void **buffer)
Encode the private key in a format suitable for storing it into a file.
Definition crypto_rsa.c:181
@ GNUNET_CRYPTO_BSA_CS
Clause Blind Schnorr signature.
@ GNUNET_CRYPTO_BSA_RSA
RSA blind signature.
@ GNUNET_OK
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
#define GNUNET_break(cond)
Use this for internal assertion violations that are not fatal (can be handled) but should not occur.
#define GNUNET_MAX_MALLOC_CHECKED
Maximum allocation with GNUNET_malloc macro.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_malloc(size)
Wrapper around malloc.
#define GNUNET_new_array(n, type)
Allocate a size n array with structs or unions of the given type.
#define GNUNET_free(ptr)
Wrapper around free.
shared internal data structures of libgnunetpq
uint32_t has_nulls
Definition pq.h:1
array_types
Internal types that are supported as array types.
Definition pq.h:148
@ array_of_byte
Definition pq.h:153
@ array_of_uint32
Definition pq.h:151
@ array_of_string
Definition pq.h:154
@ array_of_rel_time
Definition pq.h:156
@ array_of_uint16
Definition pq.h:150
@ array_of_uint64
Definition pq.h:152
@ array_of_abs_time
Definition pq.h:155
@ array_of_timestamp
Definition pq.h:157
@ array_of_bool
Definition pq.h:149
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_fixed_size(const void *ptr, size_t ptr_size)
Generate query parameter for a buffer ptr of ptr_size bytes.
static int qconv_fixed(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_ptrs_rel_time(unsigned int num, const struct GNUNET_TIME_Relative *elements[], struct GNUNET_PQ_Context *db)
Generate query parameter for an array of relative time stamps (pointers)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_uint64(const uint64_t *x)
Generate query parameter for an uint64_t in host byte order.
static int qconv_rel_time(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_abs_time(unsigned int num, const struct GNUNET_TIME_Absolute *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of absolute time stamps (continuous)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_null(void)
Generate query parameter to create a NULL value.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_ptrs_timestamp(unsigned int num, const struct GNUNET_TIME_Timestamp *elements[], struct GNUNET_PQ_Context *db)
Generate query parameter for an array of time stamps (pointers)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_blind_sign_pub(const struct GNUNET_CRYPTO_BlindSignPublicKey *pub)
Generate query parameter for a blind sign public key of variable size.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_ptrs_abs_time(unsigned int num, const struct GNUNET_TIME_Absolute *elements[], struct GNUNET_PQ_Context *db)
Generate query parameter for an array of absolute time stamps (pointers)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_uint32(unsigned int num, const uint32_t *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of uint32_t in host byte order.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_unblinded_sig(const struct GNUNET_CRYPTO_UnblindedSignature *sig)
Generate query parameter for an unblinded signature of variable size.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_ptrs_bytes(unsigned int num, const void *elements[static num], const size_t *sizes, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of buffers elements, with sizes sizes.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_absolute_time(const struct GNUNET_TIME_Absolute *x)
Generate query parameter for an absolute time value.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_relative_time(const struct GNUNET_TIME_Relative *x)
Generate query parameter for a relative time value.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_uint64(unsigned int num, const uint64_t *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of uint64 in host byte order.
#define RETURN_UNLESS(cond)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_int64(const int64_t *x)
Generate query parameter for an int64_t in host byte order.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_uint16(const uint16_t *x)
Generate query parameter for an uint16_t in host byte order.
static int qconv_unblinded_sig(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_rsa_public_key(const struct GNUNET_CRYPTO_RsaPublicKey *x)
Generate query parameter for an RSA public key.
static int qconv_blinded_sig(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static int qconv_null(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static int qconv_blind_sign_pub(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_bool(unsigned int num, const bool *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of bool in host byte order.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_absolute_time_nbo(const struct GNUNET_TIME_AbsoluteNBO *x)
Generate query parameter for an absolute time value.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_ptrs_string(unsigned int num, const char *elements[static num], struct GNUNET_PQ_Context *db)
Generate query parameter for an array of strings (pointers)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_bytes(unsigned int num, const void *elements, const size_t *sizes, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of buffers elements, each of corresponding size given in sizes.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_bool(bool b)
Pass a boolean into a query.
static void qconv_array_cls_cleanup(void *cls)
Callback to cleanup a qconv_array_cls to be used during GNUNET_PQ_cleanup_query_params_closures.
static int qconv_uint64(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static int qconv_blind_sign_priv(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static int qconv_uint32(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static int qconv_int16(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static int qconv_array(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters for arrays.
static int qconv_abs_time(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_blind_sign_priv(const struct GNUNET_CRYPTO_BlindSignPrivateKey *priv)
Generate query parameter for a blind sign private key of variable size.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_blinded_sig(const struct GNUNET_CRYPTO_BlindedSignature *b_sig)
Generate query parameter for a blinded signature of variable size.
static int qconv_rsa_signature(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_timestamp(unsigned int num, const struct GNUNET_TIME_Timestamp *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of time stamps (continuous)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_rel_time(unsigned int num, const struct GNUNET_TIME_Relative *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of relative time stamps (continuous)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_uint16(unsigned int num, const uint16_t *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of uint16_t in host byte order.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_uint32(const uint32_t *x)
Generate query parameter for an uint32_t in host byte order.
static int qconv_uint16(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_timestamp(const struct GNUNET_TIME_Timestamp *x)
Generate query parameter for a timestamp.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_int16(const int16_t *x)
Generate query parameter for an int16_t in host byte order.
static int qconv_rsa_public_key(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_timestamp_nbo(const struct GNUNET_TIME_TimestampNBO *x)
Generate query parameter for a timestamp in NBO.
static int qconv_int64(void *cls, const void *data, size_t data_len, void *param_values[], int param_lengths[], int param_formats[], unsigned int param_length, void *scratch[], unsigned int scratch_length)
Function called to convert input argument into SQL parameters.
static struct GNUNET_PQ_QueryParam query_param_array_generic(unsigned int num, bool continuous, const void *elements, const size_t *sizes, size_t same_size, enum array_types typ, Oid oid)
Function to generate a typ specific query parameter and corresponding closure.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_ptrs_bytes_same_size(unsigned int num, const void *elements[static num], size_t same_size, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of pointers to buffers elements, each of the same size size.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_string(unsigned int num, const char *elements, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of strings (continuous)
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_string(const char *ptr)
Generate query parameter for a string.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_array_bytes_same_size(unsigned int num, const void *elements, size_t same_size, struct GNUNET_PQ_Context *db)
Generate query parameter for an array of buffers elements, each of the same size size.
struct GNUNET_PQ_QueryParam GNUNET_PQ_query_param_rsa_signature(const struct GNUNET_CRYPTO_RsaSignature *x)
Generate query parameter for an RSA signature.
Type of private signing keys for blind signing.
struct GNUNET_CRYPTO_CsPrivateKey cs_private_key
If we use GNUNET_CRYPTO_BSA_CS in cipher.
struct GNUNET_CRYPTO_RsaPrivateKey * rsa_private_key
If we use GNUNET_CRYPTO_BSA_RSA in cipher.
enum GNUNET_CRYPTO_BlindSignatureAlgorithm cipher
Type of the public key.
union GNUNET_CRYPTO_BlindSignPrivateKey::@21 details
Details, depending on cipher.
Type of public signing keys for blind signatures.
union GNUNET_CRYPTO_BlindSignPublicKey::@20 details
Details, depending on cipher.
struct GNUNET_CRYPTO_CsPublicKey cs_public_key
If we use GNUNET_CRYPTO_BSA_CS in cipher.
enum GNUNET_CRYPTO_BlindSignatureAlgorithm cipher
Type of the public key.
struct GNUNET_CRYPTO_RsaPublicKey * rsa_public_key
If we use GNUNET_CRYPTO_BSA_RSA in cipher.
Type for blinded signatures.
struct GNUNET_CRYPTO_CsBlindSignature blinded_cs_answer
If we use GNUNET_CRYPTO_BSA_CS in cipher.
enum GNUNET_CRYPTO_BlindSignatureAlgorithm cipher
Type of the signature.
struct GNUNET_CRYPTO_RsaSignature * blinded_rsa_signature
If we use GNUNET_CRYPTO_BSA_RSA in cipher.
union GNUNET_CRYPTO_BlindedSignature::@19 details
Details, depending on cipher.
The public information of an RSA key pair.
Definition crypto_rsa.c:53
Type of (unblinded) signatures.
union GNUNET_CRYPTO_UnblindedSignature::@18 details
Details, depending on cipher.
struct GNUNET_CRYPTO_RsaSignature * rsa_signature
If we use GNUNET_CRYPTO_BSA_RSA in cipher.
struct GNUNET_CRYPTO_CsSignature cs_signature
If we use GNUNET_CRYPTO_BSA_CS in cipher.
enum GNUNET_CRYPTO_BlindSignatureAlgorithm cipher
Type of the signature.
Handle to Postgres database.
Definition pq.h:36
unsigned int num
Definition pq.h:128
Description of a DB query parameter.
GNUNET_PQ_QueryConverter conv
Function for how to handle this type of entry.
size_t size
Size of data.
Time for absolute time used by GNUnet, in microseconds and in network byte order.
Time for absolute times used by GNUnet, in microseconds.
uint64_t abs_value_us
The actual value.
Time for relative time used by GNUnet, in microseconds.
uint64_t rel_value_us
The actual value.
Time for timestamps used by GNUnet, in seconds and in network byte order.
Time for timestamps used by GNUnet, in microseconds rounded to seconds.
struct GNUNET_TIME_Absolute abs_time
The actual value.
The header for a postgresql array in binary format.
Definition pq.h:167
Closure for the array type handlers.
const size_t * sizes
If not null, contains the array of sizes (the size of the array is the .size field in the ambient GNU...
enum array_types typ
Type of the array elements.
size_t same_size
If size and c_sizes are NULL, this field defines the same size for each element in the array.
Oid oid
Oid of the array elements.
bool continuous
If true, the array parameter to the data pointer to the qconv_array is a continuous byte array of dat...
const char * str
Definition time.c:1252