aboutsummaryrefslogtreecommitdiff
path: root/src/zklaim/gnunet-service-zklaim.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/zklaim/gnunet-service-zklaim.c')
-rw-r--r--src/zklaim/gnunet-service-zklaim.c46
1 files changed, 32 insertions, 14 deletions
diff --git a/src/zklaim/gnunet-service-zklaim.c b/src/zklaim/gnunet-service-zklaim.c
index ac8455364..91e70fc99 100644
--- a/src/zklaim/gnunet-service-zklaim.c
+++ b/src/zklaim/gnunet-service-zklaim.c
@@ -237,10 +237,14 @@ handle_create_context_message (void *cls,
237{ 237{
238 struct CreateContextHandle *cch; 238 struct CreateContextHandle *cch;
239 struct ZkClient *zkc = cls; 239 struct ZkClient *zkc = cls;
240 size_t data_len; 240 struct GNUNET_GNSRECORD_Data ctx_record;
241 size_t str_len;
241 char *tmp; 242 char *tmp;
242 char *pos; 243 char *pos;
243 unsigned char *data; 244 unsigned char *data;
245 char *rdata;
246 size_t data_len;
247 size_t rdata_len;
244 int num_attrs; 248 int num_attrs;
245 int num_pl; 249 int num_pl;
246 int i; 250 int i;
@@ -249,13 +253,13 @@ handle_create_context_message (void *cls,
249 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 253 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
250 "Received CREATE_REQUEST message\n"); 254 "Received CREATE_REQUEST message\n");
251 255
252 data_len = ntohs (crm->name_len); 256 str_len = ntohs (crm->name_len);
253 257
254 cch = GNUNET_new (struct CreateContextHandle); 258 cch = GNUNET_new (struct CreateContextHandle);
255 cch->name = GNUNET_strndup ((char*)&crm[1], data_len-1); 259 cch->name = GNUNET_strndup ((char*)&crm[1], str_len-1);
256 data_len = ntohs(crm->attrs_len); 260 str_len = ntohs(crm->attrs_len);
257 cch->attrs = GNUNET_strndup (((char*)&crm[1]) + strlen (cch->name) + 1, 261 cch->attrs = GNUNET_strndup (((char*)&crm[1]) + strlen (cch->name) + 1,
258 data_len-1); 262 str_len-1);
259 cch->private_key = crm->private_key; 263 cch->private_key = crm->private_key;
260 GNUNET_CRYPTO_ecdsa_key_get_public (&crm->private_key, 264 GNUNET_CRYPTO_ecdsa_key_get_public (&crm->private_key,
261 &cch->public_key); 265 &cch->public_key);
@@ -297,16 +301,30 @@ handle_create_context_message (void *cls,
297 zklaim_ctx_free (ctx); 301 zklaim_ctx_free (ctx);
298 return; 302 return;
299 } 303 }
300 if (0 != zklaim_ctx_serialize (ctx, &data)) 304 data_len = zklaim_ctx_serialize (ctx, &data);
301 { 305 rdata_len = data_len + strlen (cch->attrs) + 1;
302 GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
303 "Context serialization failed.\n");
304 send_result(GNUNET_SYSERR, cch);
305 zklaim_ctx_free (ctx);
306 return;
307 }
308 zklaim_ctx_free (ctx); 306 zklaim_ctx_free (ctx);
309 // store ctx,attrs as GNS record 307 rdata = GNUNET_malloc (rdata_len);
308 memcpy (rdata,
309 cch->attrs,
310 strlen (cch->attrs) + 1);
311 memcpy (rdata + strlen (cch->attrs) + 1,
312 data,
313 data_len);
314 ctx_record.data_size = rdata_len;
315 ctx_record.data = rdata;
316 ctx_record.expiration_time = GNUNET_TIME_UNIT_DAYS.rel_value_us; //TODO config
317 ctx_record.record_type = GNUNET_GNSRECORD_TYPE_ZKLAIM_CTX;
318 ctx_record.flags = GNUNET_GNSRECORD_RF_RELATIVE_EXPIRATION;
319 cch->ns_qe = GNUNET_NAMESTORE_records_store (ns_handle,
320 &cch->private_key,
321 cch->name,
322 1,
323 &ctx_record,
324 &context_store_cont,
325 cch);
326 GNUNET_free (rdata);
327 GNUNET_free (data);
310} 328}
311 329
312 330