aboutsummaryrefslogtreecommitdiff
path: root/src/identity/gnunet-service-identity.c
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2020-05-02 00:08:38 +0200
committerChristian Grothoff <christian@grothoff.org>2020-05-02 00:08:38 +0200
commitf38bc10411d68d2246919d57d043ee8bf0ca804a (patch)
treed28ac8f609fe78dc0bb1ffdcc81e417198dc5c00 /src/identity/gnunet-service-identity.c
parentd3ec11c5a2dc7521efbd308e273dccc26c0e4bb4 (diff)
downloadgnunet-f38bc10411d68d2246919d57d043ee8bf0ca804a.tar.gz
gnunet-f38bc10411d68d2246919d57d043ee8bf0ca804a.zip
fix gnunet-identity performance
Diffstat (limited to 'src/identity/gnunet-service-identity.c')
-rw-r--r--src/identity/gnunet-service-identity.c102
1 files changed, 65 insertions, 37 deletions
diff --git a/src/identity/gnunet-service-identity.c b/src/identity/gnunet-service-identity.c
index 42ad94df1..bdacf3ba0 100644
--- a/src/identity/gnunet-service-identity.c
+++ b/src/identity/gnunet-service-identity.c
@@ -140,7 +140,9 @@ client_disconnect_cb (void *cls,
140 struct GNUNET_SERVICE_Client *client, 140 struct GNUNET_SERVICE_Client *client,
141 void *app_ctx) 141 void *app_ctx)
142{ 142{
143 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Client %p disconnected\n", client); 143 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
144 "Client %p disconnected\n",
145 client);
144} 146}
145 147
146 148
@@ -189,7 +191,9 @@ shutdown_task (void *cls)
189 ego_directory = NULL; 191 ego_directory = NULL;
190 while (NULL != (e = ego_head)) 192 while (NULL != (e = ego_head))
191 { 193 {
192 GNUNET_CONTAINER_DLL_remove (ego_head, ego_tail, e); 194 GNUNET_CONTAINER_DLL_remove (ego_head,
195 ego_tail,
196 e);
193 GNUNET_free (e->identifier); 197 GNUNET_free (e->identifier);
194 GNUNET_free (e); 198 GNUNET_free (e);
195 } 199 }
@@ -260,7 +264,8 @@ create_update_message (struct Ego *ego)
260 * @return corresponding set default message 264 * @return corresponding set default message
261 */ 265 */
262static struct GNUNET_MQ_Envelope * 266static struct GNUNET_MQ_Envelope *
263create_set_default_message (struct Ego *ego, const char *servicename) 267create_set_default_message (struct Ego *ego,
268 const char *servicename)
264{ 269{
265 struct SetDefaultMessage *sdm; 270 struct SetDefaultMessage *sdm;
266 struct GNUNET_MQ_Envelope *env; 271 struct GNUNET_MQ_Envelope *env;
@@ -288,26 +293,34 @@ create_set_default_message (struct Ego *ego, const char *servicename)
288 * @param message the message received 293 * @param message the message received
289 */ 294 */
290static void 295static void
291handle_start_message (void *cls, const struct GNUNET_MessageHeader *message) 296handle_start_message (void *cls,
297 const struct GNUNET_MessageHeader *message)
292{ 298{
293 struct GNUNET_SERVICE_Client *client = cls; 299 struct GNUNET_SERVICE_Client *client = cls;
294 struct UpdateMessage *ume;
295 struct GNUNET_MQ_Envelope *env;
296 struct Ego *ego;
297 300
298 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received START message from client\n"); 301 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
302 "Received START message from client\n");
299 GNUNET_SERVICE_client_mark_monitor (client); 303 GNUNET_SERVICE_client_mark_monitor (client);
300 GNUNET_SERVICE_client_disable_continue_warning (client); 304 GNUNET_SERVICE_client_disable_continue_warning (client);
301 GNUNET_notification_context_add (nc, GNUNET_SERVICE_client_get_mq (client)); 305 GNUNET_notification_context_add (nc,
302 for (ego = ego_head; NULL != ego; ego = ego->next) 306 GNUNET_SERVICE_client_get_mq (client));
307 for (struct Ego *ego = ego_head; NULL != ego; ego = ego->next)
303 { 308 {
304 env = create_update_message (ego); 309 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
305 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env); 310 create_update_message (ego));
311 }
312 {
313 struct UpdateMessage *ume;
314 struct GNUNET_MQ_Envelope *env;
315
316 env = GNUNET_MQ_msg_extra (ume,
317 0,
318 GNUNET_MESSAGE_TYPE_IDENTITY_UPDATE);
319 ume->end_of_list = htons (GNUNET_YES);
320 ume->name_len = htons (0);
321 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client),
322 env);
306 } 323 }
307 env = GNUNET_MQ_msg_extra (ume, 0, GNUNET_MESSAGE_TYPE_IDENTITY_UPDATE);
308 ume->end_of_list = htons (GNUNET_YES);
309 ume->name_len = htons (0);
310 GNUNET_MQ_send (GNUNET_SERVICE_client_get_mq (client), env);
311 GNUNET_SERVICE_client_continue (client); 324 GNUNET_SERVICE_client_continue (client);
312} 325}
313 326
@@ -321,7 +334,8 @@ handle_start_message (void *cls, const struct GNUNET_MessageHeader *message)
321 * @return #GNUNET_SYSERR if message was ill-formed 334 * @return #GNUNET_SYSERR if message was ill-formed
322 */ 335 */
323static int 336static int
324check_lookup_message (void *cls, const struct LookupMessage *message) 337check_lookup_message (void *cls,
338 const struct LookupMessage *message)
325{ 339{
326 GNUNET_MQ_check_zero_termination (message); 340 GNUNET_MQ_check_zero_termination (message);
327 return GNUNET_OK; 341 return GNUNET_OK;
@@ -336,14 +350,16 @@ check_lookup_message (void *cls, const struct LookupMessage *message)
336 * @param message the message received 350 * @param message the message received
337 */ 351 */
338static void 352static void
339handle_lookup_message (void *cls, const struct LookupMessage *message) 353handle_lookup_message (void *cls,
354 const struct LookupMessage *message)
340{ 355{
341 struct GNUNET_SERVICE_Client *client = cls; 356 struct GNUNET_SERVICE_Client *client = cls;
342 const char *name; 357 const char *name;
343 struct GNUNET_MQ_Envelope *env; 358 struct GNUNET_MQ_Envelope *env;
344 struct Ego *ego; 359 struct Ego *ego;
345 360
346 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received LOOKUP message from client\n"); 361 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
362 "Received LOOKUP message from client\n");
347 name = (const char *) &message[1]; 363 name = (const char *) &message[1];
348 for (ego = ego_head; NULL != ego; ego = ego->next) 364 for (ego = ego_head; NULL != ego; ego = ego->next)
349 { 365 {
@@ -368,7 +384,8 @@ handle_lookup_message (void *cls, const struct LookupMessage *message)
368 * @return #GNUNET_SYSERR if message was ill-formed 384 * @return #GNUNET_SYSERR if message was ill-formed
369 */ 385 */
370static int 386static int
371check_lookup_by_suffix_message (void *cls, const struct LookupMessage *message) 387check_lookup_by_suffix_message (void *cls,
388 const struct LookupMessage *message)
372{ 389{
373 GNUNET_MQ_check_zero_termination (message); 390 GNUNET_MQ_check_zero_termination (message);
374 return GNUNET_OK; 391 return GNUNET_OK;
@@ -383,7 +400,8 @@ check_lookup_by_suffix_message (void *cls, const struct LookupMessage *message)
383 * @param message the message received 400 * @param message the message received
384 */ 401 */
385static void 402static void
386handle_lookup_by_suffix_message (void *cls, const struct LookupMessage *message) 403handle_lookup_by_suffix_message (void *cls,
404 const struct LookupMessage *message)
387{ 405{
388 struct GNUNET_SERVICE_Client *client = cls; 406 struct GNUNET_SERVICE_Client *client = cls;
389 const char *name; 407 const char *name;
@@ -428,7 +446,8 @@ handle_lookup_by_suffix_message (void *cls, const struct LookupMessage *message)
428 * @return #GNUNET_OK if @a msg is well-formed 446 * @return #GNUNET_OK if @a msg is well-formed
429 */ 447 */
430static int 448static int
431check_get_default_message (void *cls, const struct GetDefaultMessage *msg) 449check_get_default_message (void *cls,
450 const struct GetDefaultMessage *msg)
432{ 451{
433 uint16_t size; 452 uint16_t size;
434 uint16_t name_len; 453 uint16_t name_len;
@@ -461,31 +480,32 @@ check_get_default_message (void *cls, const struct GetDefaultMessage *msg)
461 * @param message the message received 480 * @param message the message received
462 */ 481 */
463static void 482static void
464handle_get_default_message (void *cls, const struct GetDefaultMessage *gdm) 483handle_get_default_message (void *cls,
484 const struct GetDefaultMessage *gdm)
465{ 485{
466 struct GNUNET_MQ_Envelope *env; 486 struct GNUNET_MQ_Envelope *env;
467 struct GNUNET_SERVICE_Client *client = cls; 487 struct GNUNET_SERVICE_Client *client = cls;
468 struct Ego *ego;
469 char *name; 488 char *name;
470 char *identifier; 489 char *identifier;
471 490
472
473 name = GNUNET_strdup ((const char *) &gdm[1]); 491 name = GNUNET_strdup ((const char *) &gdm[1]);
474 GNUNET_STRINGS_utf8_tolower ((const char *) &gdm[1], name); 492 GNUNET_STRINGS_utf8_tolower ((const char *) &gdm[1],
493 name);
475 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, 494 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
476 "Received GET_DEFAULT for service `%s' from client\n", 495 "Received GET_DEFAULT for service `%s' from client\n",
477 name); 496 name);
478 if (GNUNET_OK != GNUNET_CONFIGURATION_get_value_string (subsystem_cfg, 497 if (GNUNET_OK !=
479 name, 498 GNUNET_CONFIGURATION_get_value_string (subsystem_cfg,
480 "DEFAULT_IDENTIFIER", 499 name,
481 &identifier)) 500 "DEFAULT_IDENTIFIER",
501 &identifier))
482 { 502 {
483 send_result_code (client, 1, gettext_noop ("no default known")); 503 send_result_code (client, 1, gettext_noop ("no default known"));
484 GNUNET_SERVICE_client_continue (client); 504 GNUNET_SERVICE_client_continue (client);
485 GNUNET_free (name); 505 GNUNET_free (name);
486 return; 506 return;
487 } 507 }
488 for (ego = ego_head; NULL != ego; ego = ego->next) 508 for (struct Ego *ego = ego_head; NULL != ego; ego = ego->next)
489 { 509 {
490 if (0 == strcmp (ego->identifier, identifier)) 510 if (0 == strcmp (ego->identifier, identifier))
491 { 511 {
@@ -498,7 +518,9 @@ handle_get_default_message (void *cls, const struct GetDefaultMessage *gdm)
498 } 518 }
499 } 519 }
500 GNUNET_free (identifier); 520 GNUNET_free (identifier);
501 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Failed to find ego `%s'\n", name); 521 GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
522 "Failed to find ego `%s'\n",
523 name);
502 GNUNET_free (name); 524 GNUNET_free (name);
503 send_result_code (client, 525 send_result_code (client,
504 1, 526 1,
@@ -531,7 +553,8 @@ key_cmp (const struct GNUNET_CRYPTO_EcdsaPrivateKey *pk1,
531 * @return #GNUNET_OK if @a msg is well-formed 553 * @return #GNUNET_OK if @a msg is well-formed
532 */ 554 */
533static int 555static int
534check_set_default_message (void *cls, const struct SetDefaultMessage *msg) 556check_set_default_message (void *cls,
557 const struct SetDefaultMessage *msg)
535{ 558{
536 uint16_t size; 559 uint16_t size;
537 uint16_t name_len; 560 uint16_t name_len;
@@ -569,7 +592,8 @@ check_set_default_message (void *cls, const struct SetDefaultMessage *msg)
569 * @param message the message received 592 * @param message the message received
570 */ 593 */
571static void 594static void
572handle_set_default_message (void *cls, const struct SetDefaultMessage *sdm) 595handle_set_default_message (void *cls,
596 const struct SetDefaultMessage *sdm)
573{ 597{
574 struct Ego *ego; 598 struct Ego *ego;
575 struct GNUNET_SERVICE_Client *client = cls; 599 struct GNUNET_SERVICE_Client *client = cls;
@@ -642,7 +666,8 @@ notify_listeners (struct Ego *ego)
642 * @return #GNUNET_OK if @a msg is well-formed 666 * @return #GNUNET_OK if @a msg is well-formed
643 */ 667 */
644static int 668static int
645check_create_message (void *cls, const struct CreateRequestMessage *msg) 669check_create_message (void *cls,
670 const struct CreateRequestMessage *msg)
646{ 671{
647 uint16_t size; 672 uint16_t size;
648 uint16_t name_len; 673 uint16_t name_len;
@@ -680,7 +705,8 @@ check_create_message (void *cls, const struct CreateRequestMessage *msg)
680 * @param message the message received 705 * @param message the message received
681 */ 706 */
682static void 707static void
683handle_create_message (void *cls, const struct CreateRequestMessage *crm) 708handle_create_message (void *cls,
709 const struct CreateRequestMessage *crm)
684{ 710{
685 struct GNUNET_SERVICE_Client *client = cls; 711 struct GNUNET_SERVICE_Client *client = cls;
686 struct Ego *ego; 712 struct Ego *ego;
@@ -706,7 +732,9 @@ handle_create_message (void *cls, const struct CreateRequestMessage *crm)
706 ego = GNUNET_new (struct Ego); 732 ego = GNUNET_new (struct Ego);
707 ego->pk = crm->private_key; 733 ego->pk = crm->private_key;
708 ego->identifier = GNUNET_strdup (str); 734 ego->identifier = GNUNET_strdup (str);
709 GNUNET_CONTAINER_DLL_insert (ego_head, ego_tail, ego); 735 GNUNET_CONTAINER_DLL_insert (ego_head,
736 ego_tail,
737 ego);
710 send_result_code (client, 0, NULL); 738 send_result_code (client, 0, NULL);
711 fn = get_ego_filename (ego); 739 fn = get_ego_filename (ego);
712 (void) GNUNET_DISK_directory_create_for_file (fn); 740 (void) GNUNET_DISK_directory_create_for_file (fn);