summaryrefslogtreecommitdiff
path: root/src/gnunet_chat_context.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/gnunet_chat_context.c')
-rw-r--r--src/gnunet_chat_context.c71
1 files changed, 37 insertions, 34 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,
context->handle = handle;
context->type = GNUNET_CHAT_CONTEXT_TYPE_UNKNOWN;
- context->nick = NULL;
+ context->nick[0] = '\0';
context->topic = NULL;
context->deleted = GNUNET_NO;
@@ -74,7 +74,7 @@ context_create_from_contact (struct GNUNET_CHAT_Handle *handle,
context->handle = handle;
context->type = GNUNET_CHAT_CONTEXT_TYPE_CONTACT;
- context->nick = NULL;
+ context->nick[0] = '\0';
context->topic = NULL;
context->deleted = GNUNET_NO;
@@ -131,9 +131,6 @@ context_destroy (struct GNUNET_CHAT_Context *context)
if (context->topic)
GNUNET_free(context->topic);
- if (context->nick)
- GNUNET_free(context->nick);
-
GNUNET_free(context);
}
@@ -179,7 +176,12 @@ context_update_nick (struct GNUNET_CHAT_Context *context,
{
GNUNET_assert(context);
- util_set_name_field(nick, &(context->nick));
+ size_t len = nick? strlen(nick) : 0;
+ if (len >= sizeof(context->nick))
+ len = sizeof(context->nick) - 1;
+
+ GNUNET_memcpy(context->nick, nick, len);
+ context->nick[len] = '\0';
if (!(context->handle))
return;
@@ -203,24 +205,28 @@ context_read_records (struct GNUNET_CHAT_Context *context,
char *nick = NULL;
char *topic = NULL;
+ uint32_t flags = 0;
for (unsigned int i = 0; i < count; i++)
{
if (!(GNUNET_GNSRECORD_RF_SUPPLEMENTAL & data[i].flags))
continue;
- if (GNUNET_GNSRECORD_TYPE_NICK == data[i].record_type)
+ if (GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS == data[i].record_type)
{
if (nick)
- continue;
+ continue;
+
+ const struct GNUNET_MESSENGER_RoomDetailsRecord *record = data[i].data;
- nick = GNUNET_strndup(data[i].data, data[i].data_size);
+ nick = GNUNET_strndup(record->name, sizeof(record->name));
+ flags = record->flags;
}
if (GNUNET_DNSPARSER_TYPE_TXT == data[i].record_type)
{
if (topic)
- continue;
+ continue;
topic = GNUNET_strndup(data[i].data, data[i].data_size);
}
@@ -280,16 +286,16 @@ context_write_records (struct GNUNET_CHAT_Context *context)
struct GNUNET_TIME_Absolute expiration = GNUNET_TIME_absolute_get_forever_();
- struct GNUNET_MESSENGER_RoomEntryRecord room;
- GNUNET_CRYPTO_get_peer_identity(context->handle->cfg, &(room.door));
+ struct GNUNET_MESSENGER_RoomEntryRecord room_entry;
+ GNUNET_CRYPTO_get_peer_identity(context->handle->cfg, &(room_entry.door));
GNUNET_memcpy(
- &(room.key),
+ &(room_entry.key),
hash,
- sizeof(room.key)
+ sizeof(room_entry.key)
);
- const char *nick = context->nick;
+ struct GNUNET_MESSENGER_RoomDetailsRecord room_details;
const char *topic = context->topic;
if (topic)
@@ -310,18 +316,21 @@ context_write_records (struct GNUNET_CHAT_Context *context)
if (GNUNET_YES == context->deleted)
goto skip_record_data;
- data[0].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY;
- data[0].data = &room;
- data[0].data_size = sizeof(room);
- data[0].expiration_time = expiration.abs_value_us;
- data[0].flags = GNUNET_GNSRECORD_RF_PRIVATE;
+ data[count].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_ENTRY;
+ data[count].data = &room_entry;
+ data[count].data_size = sizeof(room_entry);
+ data[count].expiration_time = expiration.abs_value_us;
+ data[count].flags = GNUNET_GNSRECORD_RF_PRIVATE;
count++;
- if (nick)
+ if (context->nick)
{
- data[count].record_type = GNUNET_GNSRECORD_TYPE_NICK;
- data[count].data = nick;
- data[count].data_size = strlen(nick);
+ GNUNET_memcpy(room_details.name, context->nick, sizeof(room_details.name));
+ room_details.flags = 0;
+
+ data[count].record_type = GNUNET_GNSRECORD_TYPE_MESSENGER_ROOM_DETAILS;
+ data[count].data = &room_details;
+ data[count].data_size = sizeof(room_details);
data[count].expiration_time = expiration.abs_value_us;
data[count].flags = (
GNUNET_GNSRECORD_RF_PRIVATE |
@@ -346,7 +355,10 @@ context_write_records (struct GNUNET_CHAT_Context *context)
}
skip_record_data:
- GNUNET_NAMESTORE_records_store(
+ if (context->query)
+ GNUNET_NAMESTORE_cancel(context->query);
+
+ context->query = GNUNET_NAMESTORE_records_store(
context->handle->namestore,
zone,
label,
@@ -358,12 +370,3 @@ skip_record_data:
GNUNET_free(label);
}
-
-void
-context_delete_records (struct GNUNET_CHAT_Context *context)
-{
- GNUNET_assert(context);
-
- context->deleted = GNUNET_YES;
- context_write_records(context);
-}