commit 57e859b9915959d6ba7601c35761eeb2e6ebe46d
parent 5d649fb886893d2ab393473188854add22114d0c
Author: TheJackiMonster <thejackimonster@gmail.com>
Date: Mon, 10 Jan 2022 17:56:36 +0100
Added sending a file message after publication completed
Signed-off-by: TheJackiMonster <thejackimonster@gmail.com>
Diffstat:
3 files changed, 67 insertions(+), 33 deletions(-)
diff --git a/src/gnunet_chat_file.c b/src/gnunet_chat_file.c
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2021 GNUnet e.V.
+ Copyright (C) 2021--2022 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -24,11 +24,13 @@
#include "gnunet_chat_file.h"
+#include "gnunet_chat_context.h"
+
#include <limits.h>
struct GNUNET_CHAT_File*
file_create_from_message (struct GNUNET_CHAT_Handle *handle,
- const struct GNUNET_MESSENGER_MessageFile* message)
+ const struct GNUNET_MESSENGER_MessageFile *message)
{
GNUNET_assert((handle) &&
(message) &&
@@ -66,7 +68,8 @@ file_create_from_message (struct GNUNET_CHAT_Handle *handle,
struct GNUNET_CHAT_File*
file_create_from_disk (struct GNUNET_CHAT_Handle *handle,
- const char *name, const struct GNUNET_HashCode *hash,
+ const char *name,
+ const struct GNUNET_HashCode *hash,
const struct GNUNET_CRYPTO_SymmetricSessionKey *key)
{
GNUNET_assert((handle) &&
@@ -105,7 +108,7 @@ file_create_from_disk (struct GNUNET_CHAT_Handle *handle,
}
void
-file_destroy (struct GNUNET_CHAT_File* file)
+file_destroy (struct GNUNET_CHAT_File *file)
{
GNUNET_assert(file);
@@ -164,8 +167,10 @@ file_destroy (struct GNUNET_CHAT_File* file)
}
void
-file_bind_upload (struct GNUNET_CHAT_File* file,
- GNUNET_CHAT_FileUploadCallback cb, void *cls)
+file_bind_upload (struct GNUNET_CHAT_File *file,
+ struct GNUNET_CHAT_Context *context,
+ GNUNET_CHAT_FileUploadCallback cb,
+ void *cls)
{
GNUNET_assert(file);
@@ -173,6 +178,7 @@ file_bind_upload (struct GNUNET_CHAT_File* file,
struct GNUNET_CHAT_FileUpload
);
+ upload->context = context;
upload->callback = cb;
upload->cls = cls;
@@ -184,8 +190,9 @@ file_bind_upload (struct GNUNET_CHAT_File* file,
}
void
-file_bind_downlaod (struct GNUNET_CHAT_File* file,
- GNUNET_CHAT_FileDownloadCallback cb, void *cls)
+file_bind_downlaod (struct GNUNET_CHAT_File *file,
+ GNUNET_CHAT_FileDownloadCallback cb,
+ void *cls)
{
GNUNET_assert(file);
@@ -204,8 +211,9 @@ file_bind_downlaod (struct GNUNET_CHAT_File* file,
}
void
-file_bind_unindex (struct GNUNET_CHAT_File* file,
- GNUNET_CHAT_FileUnindexCallback cb, void *cls)
+file_bind_unindex (struct GNUNET_CHAT_File *file,
+ GNUNET_CHAT_FileUnindexCallback cb,
+ void *cls)
{
GNUNET_assert(file);
@@ -224,7 +232,8 @@ file_bind_unindex (struct GNUNET_CHAT_File* file,
}
void
-file_update_upload (struct GNUNET_CHAT_File* file, uint64_t completed,
+file_update_upload (struct GNUNET_CHAT_File *file,
+ uint64_t completed,
uint64_t size)
{
GNUNET_assert(file);
@@ -242,10 +251,22 @@ file_update_upload (struct GNUNET_CHAT_File* file, uint64_t completed,
if (completed < size)
return;
+ struct GNUNET_MESSENGER_Message message;
+ message.header.kind = GNUNET_MESSENGER_KIND_FILE;
+
+ memcpy(&(message.body.file.key), &(file->key), sizeof(file->key));
+ memcpy(&(message.body.file.hash), &(file->hash), sizeof(file->hash));
+
+ strncpy(message.body.file.name, file->name, NAME_MAX);
+
+ message.body.file.uri = GNUNET_FS_uri_to_string(file->uri);
+
while (file->upload_head)
{
upload = file->upload_head;
+ GNUNET_MESSENGER_send_message(upload->context->room, &message, NULL);
+
GNUNET_CONTAINER_DLL_remove(
file->upload_head,
file->upload_tail,
@@ -254,10 +275,13 @@ file_update_upload (struct GNUNET_CHAT_File* file, uint64_t completed,
GNUNET_free(upload);
}
+
+ GNUNET_free(message.body.file.uri);
}
void
-file_update_download (struct GNUNET_CHAT_File* file, uint64_t completed,
+file_update_download (struct GNUNET_CHAT_File *file,
+ uint64_t completed,
uint64_t size)
{
GNUNET_assert(file);
@@ -290,7 +314,8 @@ file_update_download (struct GNUNET_CHAT_File* file, uint64_t completed,
}
void
-file_update_unindex (struct GNUNET_CHAT_File* file, uint64_t completed,
+file_update_unindex (struct GNUNET_CHAT_File *file,
+ uint64_t completed,
uint64_t size)
{
GNUNET_assert(file);
diff --git a/src/gnunet_chat_file.h b/src/gnunet_chat_file.h
@@ -1,6 +1,6 @@
/*
This file is part of GNUnet.
- Copyright (C) 2021 GNUnet e.V.
+ Copyright (C) 2021--2022 GNUnet e.V.
GNUnet is free software: you can redistribute it and/or modify it
under the terms of the GNU Affero General Public License as published
@@ -36,9 +36,10 @@
struct GNUNET_CHAT_FileUpload
{
- struct GNUNET_CHAT_FileUpload* prev;
- struct GNUNET_CHAT_FileUpload* next;
+ struct GNUNET_CHAT_FileUpload *prev;
+ struct GNUNET_CHAT_FileUpload *next;
+ struct GNUNET_CHAT_Context *context;
GNUNET_CHAT_FileUploadCallback callback;
void *cls;
@@ -46,8 +47,8 @@ struct GNUNET_CHAT_FileUpload
struct GNUNET_CHAT_FileDownload
{
- struct GNUNET_CHAT_FileDownload* prev;
- struct GNUNET_CHAT_FileDownload* next;
+ struct GNUNET_CHAT_FileDownload *prev;
+ struct GNUNET_CHAT_FileDownload *next;
GNUNET_CHAT_FileDownloadCallback callback;
@@ -56,8 +57,8 @@ struct GNUNET_CHAT_FileDownload
struct GNUNET_CHAT_FileUnindex
{
- struct GNUNET_CHAT_FileUnindex* prev;
- struct GNUNET_CHAT_FileUnindex* next;
+ struct GNUNET_CHAT_FileUnindex *prev;
+ struct GNUNET_CHAT_FileUnindex *next;
GNUNET_CHAT_FileUnindexCallback callback;
@@ -96,38 +97,46 @@ struct GNUNET_CHAT_File
struct GNUNET_CHAT_File*
file_create_from_message (struct GNUNET_CHAT_Handle *handle,
- const struct GNUNET_MESSENGER_MessageFile* message);
+ const struct GNUNET_MESSENGER_MessageFile *message);
struct GNUNET_CHAT_File*
file_create_from_disk (struct GNUNET_CHAT_Handle *handle,
- const char *name, const struct GNUNET_HashCode *hash,
+ const char *name,
+ const struct GNUNET_HashCode *hash,
const struct GNUNET_CRYPTO_SymmetricSessionKey *key);
void
-file_destroy (struct GNUNET_CHAT_File* file);
+file_destroy (struct GNUNET_CHAT_File *file);
void
-file_bind_upload (struct GNUNET_CHAT_File* file,
- GNUNET_CHAT_FileUploadCallback cb, void *cls);
+file_bind_upload (struct GNUNET_CHAT_File *file,
+ struct GNUNET_CHAT_Context *context,
+ GNUNET_CHAT_FileUploadCallback cb,
+ void *cls);
void
-file_bind_downlaod (struct GNUNET_CHAT_File* file,
- GNUNET_CHAT_FileDownloadCallback cb, void *cls);
+file_bind_downlaod (struct GNUNET_CHAT_File *file,
+ GNUNET_CHAT_FileDownloadCallback cb,
+ void *cls);
void
-file_bind_unindex (struct GNUNET_CHAT_File* file,
- GNUNET_CHAT_FileUnindexCallback cb, void *cls);
+file_bind_unindex (struct GNUNET_CHAT_File *file,
+ GNUNET_CHAT_FileUnindexCallback cb,
+ void *cls);
void
-file_update_upload (struct GNUNET_CHAT_File* file, uint64_t completed,
+file_update_upload (struct GNUNET_CHAT_File *file,
+ uint64_t completed,
uint64_t size);
void
-file_update_download (struct GNUNET_CHAT_File* file, uint64_t completed,
+file_update_download (struct GNUNET_CHAT_File *file,
+ uint64_t completed,
uint64_t size);
void
-file_update_unindex (struct GNUNET_CHAT_File* file, uint64_t completed,
+file_update_unindex (struct GNUNET_CHAT_File *file,
+ uint64_t completed,
uint64_t size);
#endif /* GNUNET_CHAT_FILE_H_ */
diff --git a/src/gnunet_chat_lib.c b/src/gnunet_chat_lib.c
@@ -678,7 +678,7 @@ GNUNET_CHAT_context_send_file (struct GNUNET_CHAT_Context *context,
}
file_upload:
- file_bind_upload(file, callback, cls);
+ file_bind_upload(file, context, callback, cls);
struct GNUNET_FS_BlockOptions bo;