diff options
author | TheJackiMonster <thejackimonster@gmail.com> | 2022-03-21 13:37:46 +0100 |
---|---|---|
committer | TheJackiMonster <thejackimonster@gmail.com> | 2022-03-21 13:37:46 +0100 |
commit | 4df66ae0839555369313675df5391146083827e8 (patch) | |
tree | 3a08ccef83272e204061c112c5d46e1cd381ae3e | |
parent | 66c08d87a9785e4725a401aff69501d7b72be8f9 (diff) | |
download | libgnunetchat-4df66ae0839555369313675df5391146083827e8.tar.gz libgnunetchat-4df66ae0839555369313675df5391146083827e8.zip |
Updated to use new room details record
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
-rw-r--r-- | src/gnunet_chat_context.c | 71 | ||||
-rw-r--r-- | src/gnunet_chat_context.h | 5 | ||||
-rw-r--r-- | src/gnunet_chat_handle.c | 11 | ||||
-rw-r--r-- | src/gnunet_chat_lib.c | 16 |
4 files changed, 58 insertions, 45 deletions
diff --git a/src/gnunet_chat_context.c b/src/gnunet_chat_context.c index c1e792c..961de47 100644 --- a/src/gnunet_chat_context.c +++ b/src/gnunet_chat_context.c | |||
@@ -40,7 +40,7 @@ context_create_from_room (struct GNUNET_CHAT_Handle *handle, | |||
40 | context->handle = handle; | 40 | context->handle = handle; |
41 | 41 | ||
42 | context->type = GNUNET_CHAT_CONTEXT_TYPE_UNKNOWN; | 42 | context->type = GNUNET_CHAT_CONTEXT_TYPE_UNKNOWN; |
43 | context->nick = NULL; | 43 | context->nick[0] = '\0'; |
44 | context->topic = NULL; | 44 | context->topic = NULL; |
45 | context->deleted = GNUNET_NO; | 45 | context->deleted = GNUNET_NO; |
46 | 46 | ||
@@ -74,7 +74,7 @@ context_create_from_contact (struct GNUNET_CHAT_Handle *handle, | |||
74 | context->handle = handle; | 74 | context->handle = handle; |
75 | 75 | ||
76 | context->type = GNUNET_CHAT_CONTEXT_TYPE_CONTACT; | 76 | context->type = GNUNET_CHAT_CONTEXT_TYPE_CONTACT; |
77 | context->nick = NULL; | 77 | context->nick[0] = '\0'; |
78 | context->topic = NULL; | 78 | context->topic = NULL; |
79 | context->deleted = GNUNET_NO; | 79 | context->deleted = GNUNET_NO; |
80 | 80 | ||
@@ -131,9 +131,6 @@ context_destroy (struct GNUNET_CHAT_Context *context) | |||
131 | if (context->topic) | 131 | if (context->topic) |
132 | GNUNET_free(context->topic); | 132 | GNUNET_free(context->topic); |
133 | 133 | ||
134 | if (context->nick) | ||
135 | GNUNET_free(context->nick); | ||
136 | |||
137 | GNUNET_free(context); | 134 | GNUNET_free(context); |
138 | } | 135 | } |
139 | 136 | ||
@@ -179,7 +176,12 @@ context_update_nick (struct GNUNET_CHAT_Context *context, | |||
179 | { | 176 | { |
180 | GNUNET_assert(context); | 177 | GNUNET_assert(context); |
181 | 178 | ||
182 | util_set_name_field(nick, &(context->nick)); | 179 | size_t len = nick? strlen(nick) : 0; |
180 | if (len >= sizeof(context->nick)) | ||
181 | len = sizeof(context->nick) - 1; | ||
182 | |||
183 | GNUNET_memcpy(context->nick, nick, len); | ||
184 | context->nick[len] = '\0'; | ||
183 | 185 | ||
184 | if (!(context->handle)) | 186 | if (!(context->handle)) |
185 | return; | 187 | return; |
@@ -203,24 +205,28 @@ context_read_records (struct GNUNET_CHAT_Context *context, | |||
203 | 205 | ||
204 | char *nick = NULL; | 206 | char *nick = NULL; |
205 | char *topic = NULL; | 207 | char *topic = NULL; |
208 | uint32_t flags = 0; | ||
206 | 209 | ||
207 | for (unsigned int i = 0; i < count; i++) | 210 | for (unsigned int i = 0; i < count; i++) |
208 | { | 211 | { |
209 | if (!(GNUNET_GNSRECORD_RF_SUPPLEMENTAL & data[i].flags)) | 212 | if (!(GNUNET_GNSRECORD_RF_SUPPLEMENTAL & data[i].flags)) |
210 | continue; | 213 | continue; |
211 | 214 | ||
212 | if (GNUNET_GNSRECORD_TYPE_NICK == data[i].record_type) | 215 | if (GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS == data[i].record_type) |
213 | { | 216 | { |
214 | if (nick) | 217 | if (nick) |
215 | continue; | 218 | continue; |
219 | |||
220 | const struct GNUNET_MESSENGER_RoomDetailsRecord *record = data[i].data; | ||
216 | 221 | ||
217 | nick = GNUNET_strndup(data[i].data, data[i].data_size); | 222 | nick = GNUNET_strndup(record->name, sizeof(record->name)); |
223 | flags = record->flags; | ||
218 | } | 224 | } |
219 | 225 | ||
220 | if (GNUNET_DNSPARSER_TYPE_TXT == data[i].record_type) | 226 | if (GNUNET_DNSPARSER_TYPE_TXT == data[i].record_type) |
221 | { | 227 | { |
222 | if (topic) | 228 | if (topic) |
223 | continue; | 229 | continue; |
224 | 230 | ||
225 | topic = GNUNET_strndup(data[i].data, data[i].data_size); | 231 | topic = GNUNET_strndup(data[i].data, data[i].data_size); |
226 | } | 232 | } |
@@ -280,16 +286,16 @@ context_write_records (struct GNUNET_CHAT_Context *context) | |||
280 | 286 | ||
281 | struct GNUNET_TIME_Absolute expiration = GNUNET_TIME_absolute_get_forever_(); | 287 | struct GNUNET_TIME_Absolute expiration = GNUNET_TIME_absolute_get_forever_(); |
282 | 288 | ||
283 | struct GNUNET_MESSENGER_RoomEntryRecord room; | 289 | struct GNUNET_MESSENGER_RoomEntryRecord room_entry; |
284 | GNUNET_CRYPTO_get_peer_identity(context->handle->cfg, &(room.door)); | 290 | GNUNET_CRYPTO_get_peer_identity(context->handle->cfg, &(room_entry.door)); |
285 | 291 | ||
286 | GNUNET_memcpy( | 292 | GNUNET_memcpy( |
287 | &(room.key), | 293 | &(room_entry.key), |
288 | hash, | 294 | hash, |
289 | sizeof(room.key) | 295 | sizeof(room_entry.key) |
290 | ); | 296 | ); |
291 | 297 | ||
292 | const char *nick = context->nick; | 298 | struct GNUNET_MESSENGER_RoomDetailsRecord room_details; |
293 | const char *topic = context->topic; | 299 | const char *topic = context->topic; |
294 | 300 | ||
295 | if (topic) | 301 | if (topic) |
@@ -310,18 +316,21 @@ context_write_records (struct GNUNET_CHAT_Context *context) | |||
310 | if (GNUNET_YES == context->deleted) | 316 | if (GNUNET_YES == context->deleted) |
311 | goto skip_record_data; | 317 | goto skip_record_data; |
312 | 318 | ||
313 | data[0].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY; | 319 | data[count].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY; |
314 | data[0].data = &room; | 320 | data[count].data = &room_entry; |
315 | data[0].data_size = sizeof(room); | 321 | data[count].data_size = sizeof(room_entry); |
316 | data[0].expiration_time = expiration.abs_value_us; | 322 | data[count].expiration_time = expiration.abs_value_us; |
317 | data[0].flags = GNUNET_GNSRECORD_RF_PRIVATE; | 323 | data[count].flags = GNUNET_GNSRECORD_RF_PRIVATE; |
318 | count++; | 324 | count++; |
319 | 325 | ||
320 | if (nick) | 326 | if (context->nick) |
321 | { | 327 | { |
322 | data[count].record_type = GNUNET_GNSRECORD_TYPE_NICK; | 328 | GNUNET_memcpy(room_details.name, context->nick, sizeof(room_details.name)); |
323 | data[count].data = nick; | 329 | room_details.flags = 0; |
324 | data[count].data_size = strlen(nick); | 330 | |
331 | data[count].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS; | ||
332 | data[count].data = &room_details; | ||
333 | data[count].data_size = sizeof(room_details); | ||
325 | data[count].expiration_time = expiration.abs_value_us; | 334 | data[count].expiration_time = expiration.abs_value_us; |
326 | data[count].flags = ( | 335 | data[count].flags = ( |
327 | GNUNET_GNSRECORD_RF_PRIVATE | | 336 | GNUNET_GNSRECORD_RF_PRIVATE | |
@@ -346,7 +355,10 @@ context_write_records (struct GNUNET_CHAT_Context *context) | |||
346 | } | 355 | } |
347 | 356 | ||
348 | skip_record_data: | 357 | skip_record_data: |
349 | GNUNET_NAMESTORE_records_store( | 358 | if (context->query) |
359 | GNUNET_NAMESTORE_cancel(context->query); | ||
360 | |||
361 | context->query = GNUNET_NAMESTORE_records_store( | ||
350 | context->handle->namestore, | 362 | context->handle->namestore, |
351 | zone, | 363 | zone, |
352 | label, | 364 | label, |
@@ -358,12 +370,3 @@ skip_record_data: | |||
358 | 370 | ||
359 | GNUNET_free(label); | 371 | GNUNET_free(label); |
360 | } | 372 | } |
361 | |||
362 | void | ||
363 | context_delete_records (struct GNUNET_CHAT_Context *context) | ||
364 | { | ||
365 | GNUNET_assert(context); | ||
366 | |||
367 | context->deleted = GNUNET_YES; | ||
368 | context_write_records(context); | ||
369 | } | ||
diff --git a/src/gnunet_chat_context.h b/src/gnunet_chat_context.h index cc6d5cc..5bafe53 100644 --- a/src/gnunet_chat_context.h +++ b/src/gnunet_chat_context.h | |||
@@ -42,7 +42,7 @@ struct GNUNET_CHAT_Context | |||
42 | struct GNUNET_CHAT_Handle *handle; | 42 | struct GNUNET_CHAT_Handle *handle; |
43 | 43 | ||
44 | enum GNUNET_CHAT_ContextType type; | 44 | enum GNUNET_CHAT_ContextType type; |
45 | char *nick; | 45 | char nick [256 + 1]; |
46 | char *topic; | 46 | char *topic; |
47 | int deleted; | 47 | int deleted; |
48 | 48 | ||
@@ -89,7 +89,4 @@ context_read_records (struct GNUNET_CHAT_Context *context, | |||
89 | void | 89 | void |
90 | context_write_records (struct GNUNET_CHAT_Context *context); | 90 | context_write_records (struct GNUNET_CHAT_Context *context); |
91 | 91 | ||
92 | void | ||
93 | context_delete_records (struct GNUNET_CHAT_Context *context); | ||
94 | |||
95 | #endif /* GNUNET_CHAT_CONTEXT_H_ */ | 92 | #endif /* GNUNET_CHAT_CONTEXT_H_ */ |
diff --git a/src/gnunet_chat_handle.c b/src/gnunet_chat_handle.c index 7b84673..45f7861 100644 --- a/src/gnunet_chat_handle.c +++ b/src/gnunet_chat_handle.c | |||
@@ -473,14 +473,21 @@ check_type: | |||
473 | check.contact, | 473 | check.contact, |
474 | context))) | 474 | context))) |
475 | { | 475 | { |
476 | context_delete_records(context); | 476 | context->deleted = GNUNET_YES; |
477 | context_write_records(context); | ||
478 | |||
477 | context->type = GNUNET_CHAT_CONTEXT_TYPE_CONTACT; | 479 | context->type = GNUNET_CHAT_CONTEXT_TYPE_CONTACT; |
480 | context->deleted = GNUNET_NO; | ||
481 | |||
478 | context_write_records(context); | 482 | context_write_records(context); |
479 | } | 483 | } |
480 | else if (checks >= 2) | 484 | else if (checks >= 2) |
481 | { | 485 | { |
482 | context_delete_records(context); | 486 | context->deleted = GNUNET_YES; |
487 | context_write_records(context); | ||
488 | |||
483 | context->type = GNUNET_CHAT_CONTEXT_TYPE_GROUP; | 489 | context->type = GNUNET_CHAT_CONTEXT_TYPE_GROUP; |
490 | context->deleted = GNUNET_NO; | ||
484 | 491 | ||
485 | if (context->contact) | 492 | if (context->contact) |
486 | { | 493 | { |
diff --git a/src/gnunet_chat_lib.c b/src/gnunet_chat_lib.c index 25e670d..8ec7499 100644 --- a/src/gnunet_chat_lib.c +++ b/src/gnunet_chat_lib.c | |||
@@ -553,7 +553,9 @@ GNUNET_CHAT_contact_delete (struct GNUNET_CHAT_Contact *contact) | |||
553 | ); | 553 | ); |
554 | 554 | ||
555 | GNUNET_MESSENGER_close_room(contact->context->room); | 555 | GNUNET_MESSENGER_close_room(contact->context->room); |
556 | context_delete_records(contact->context); | 556 | |
557 | contact->context->deleted = GNUNET_YES; | ||
558 | context_write_records(contact->context); | ||
557 | 559 | ||
558 | context_destroy(contact->context); | 560 | context_destroy(contact->context); |
559 | contact_destroy(contact); | 561 | contact_destroy(contact); |
@@ -581,7 +583,7 @@ GNUNET_CHAT_contact_get_name (const struct GNUNET_CHAT_Contact *contact) | |||
581 | if (!contact) | 583 | if (!contact) |
582 | return NULL; | 584 | return NULL; |
583 | 585 | ||
584 | if ((contact->context) && (contact->context->nick)) | 586 | if ((contact->context) && (contact->context->nick[0])) |
585 | return contact->context->nick; | 587 | return contact->context->nick; |
586 | 588 | ||
587 | return GNUNET_MESSENGER_contact_get_name(contact->member); | 589 | return GNUNET_MESSENGER_contact_get_name(contact->member); |
@@ -671,7 +673,9 @@ GNUNET_CHAT_group_leave (struct GNUNET_CHAT_Group *group) | |||
671 | ); | 673 | ); |
672 | 674 | ||
673 | GNUNET_MESSENGER_close_room(group->context->room); | 675 | GNUNET_MESSENGER_close_room(group->context->room); |
674 | context_delete_records(group->context); | 676 | |
677 | group->context->deleted = GNUNET_YES; | ||
678 | context_write_records(group->context); | ||
675 | 679 | ||
676 | context_destroy(group->context); | 680 | context_destroy(group->context); |
677 | group_destroy(group); | 681 | group_destroy(group); |
@@ -687,7 +691,9 @@ GNUNET_CHAT_group_set_name (struct GNUNET_CHAT_Group *group, | |||
687 | return; | 691 | return; |
688 | 692 | ||
689 | context_update_nick(group->context, name); | 693 | context_update_nick(group->context, name); |
690 | context_write_records(group->context); | 694 | |
695 | if (group->context->room) | ||
696 | context_write_records(group->context); | ||
691 | } | 697 | } |
692 | 698 | ||
693 | 699 | ||
@@ -697,7 +703,7 @@ GNUNET_CHAT_group_get_name (const struct GNUNET_CHAT_Group *group) | |||
697 | if ((!group) || (!(group->context))) | 703 | if ((!group) || (!(group->context))) |
698 | return NULL; | 704 | return NULL; |
699 | 705 | ||
700 | if (group->context->nick) | 706 | if (group->context->nick[0]) |
701 | return group->context->nick; | 707 | return group->context->nick; |
702 | 708 | ||
703 | return group->context->topic; | 709 | return group->context->topic; |