2 This file is part of GNUnet
3 Copyright (C) 2014, 2015, 2016 GNUnet e.V.
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.
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.
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/>.
19 * @file json/json_generator.c
20 * @brief helper functions for generating JSON from GNUnet data structures
21 * @author Sree Harsha Totakura <sreeharsha@totakura.in>
24 #include "gnunet_util_lib.h"
25 #include "gnunet_json_lib.h"
29 * Convert binary data to a JSON string
30 * with the base32crockford encoding.
32 * @param data binary data
33 * @param size size of @a data in bytes
34 * @return json string that encodes @a data
37 GNUNET_JSON_from_data (const void *data,
43 buf = GNUNET_STRINGS_data_to_string_alloc (data, size);
44 json = json_string (buf);
51 * Convert absolute timestamp to a json string.
53 * @param stamp the time stamp
54 * @return a json string with the timestamp in @a stamp
57 GNUNET_JSON_from_time_abs (struct GNUNET_TIME_Absolute stamp)
63 GNUNET_assert (GNUNET_OK ==
64 GNUNET_TIME_round_abs (&stamp));
65 if (stamp.abs_value_us == GNUNET_TIME_UNIT_FOREVER_ABS.abs_value_us)
66 return json_string ("/never/");
67 ret = GNUNET_asprintf (&mystr,
69 (unsigned long long) (stamp.abs_value_us / (1000LL * 1000LL)));
70 GNUNET_assert (ret > 0);
71 j = json_string (mystr);
78 * Convert absolute timestamp to a json string.
80 * @param stamp the time stamp
81 * @return a json string with the timestamp in @a stamp
84 GNUNET_JSON_from_time_abs_nbo (struct GNUNET_TIME_AbsoluteNBO stamp)
86 return GNUNET_JSON_from_time_abs (GNUNET_TIME_absolute_ntoh (stamp));
91 * Convert relative timestamp to a json string.
93 * @param stamp the time stamp
94 * @return a json string with the timestamp in @a stamp
97 GNUNET_JSON_from_time_rel (struct GNUNET_TIME_Relative stamp)
103 GNUNET_assert (GNUNET_OK ==
104 GNUNET_TIME_round_rel (&stamp));
105 if (stamp.rel_value_us == GNUNET_TIME_UNIT_FOREVER_REL.rel_value_us)
106 return json_string ("/forever/");
107 ret = GNUNET_asprintf (&mystr,
109 (unsigned long long) (stamp.rel_value_us / (1000LL * 1000LL)));
110 GNUNET_assert (ret > 0);
111 j = json_string (mystr);
118 * Convert RSA public key to JSON.
120 * @param pk public key to convert
121 * @return corresponding JSON encoding
124 GNUNET_JSON_from_rsa_public_key (const struct GNUNET_CRYPTO_RsaPublicKey *pk)
130 buf_len = GNUNET_CRYPTO_rsa_public_key_encode (pk,
132 ret = GNUNET_JSON_from_data (buf,
140 * Convert RSA signature to JSON.
142 * @param sig signature to convert
143 * @return corresponding JSON encoding
146 GNUNET_JSON_from_rsa_signature (const struct GNUNET_CRYPTO_RsaSignature *sig)
152 buf_len = GNUNET_CRYPTO_rsa_signature_encode (sig,
154 ret = GNUNET_JSON_from_data (buf,
161 * Convert Gns record to JSON.
163 * @param rname name of record
164 * @param rd record data
165 * @return corresponding JSON encoding
168 GNUNET_JSON_from_gns_record (const char* rname,
169 const struct GNUNET_GNSRECORD_Data *rd)
171 struct GNUNET_TIME_Absolute expiration_time;
172 const char *expiration_time_str;
173 const char *record_type_str;
178 value_str = GNUNET_GNSRECORD_value_to_string(rd->record_type,rd->data,rd->data_size);
179 expiration_time = GNUNET_GNSRECORD_record_get_expiration_time(1, rd);
180 expiration_time_str = GNUNET_STRINGS_absolute_time_to_string(expiration_time);
181 flags = (int)rd->flags; //maybe necessary
182 record_type_str = GNUNET_GNSRECORD_number_to_typename(rd->record_type);
184 // ? for possible NULL values
185 ret = json_pack("{s:s?,s:s?,s:s?,s:i,s:s?}",
187 "type", record_type_str,
188 "expiration_time", expiration_time_str,
191 GNUNET_free_non_null(value_str);
196 /* End of json/json_generator.c */