/* This file is part of GNUnet. Copyright (C) 2021 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 by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . SPDX-License-Identifier: AGPL3.0-or-later */ /* * @author Tobias Frisch * @file gnunet_chat_handle.c */ #include "gnunet_chat_handle.h" #include "gnunet_chat_handle_intern.c" struct GNUNET_CHAT_Handle* handle_create_from_config (const struct GNUNET_CONFIGURATION_Handle* cfg, const char* name, GNUNET_CHAT_ContextMessageCallback msg_cb, void *msg_cls, GNUNET_CHAT_WarningCallback warn_cb, void *warn_cls) { struct GNUNET_CHAT_Handle* handle = GNUNET_new(struct GNUNET_CHAT_Handle); handle->cfg = cfg; handle->msg_cb = msg_cb; handle->msg_cls = msg_cls; handle->warn_cb = warn_cb; handle->warn_cls = warn_cls; handle->files = GNUNET_CONTAINER_multihashmap_create(8, GNUNET_NO); handle->contexts = GNUNET_CONTAINER_multihashmap_create(8, GNUNET_NO); handle->contacts = GNUNET_CONTAINER_multishortmap_create(8, GNUNET_NO); handle->groups = GNUNET_CONTAINER_multihashmap_create(8, GNUNET_NO); handle->arm = GNUNET_ARM_connect( handle->cfg, on_handle_arm_connection, handle ); if (handle->arm) on_handle_arm_connection(handle, GNUNET_NO); handle->fs = GNUNET_FS_start( handle->cfg, name, // TODO: raw name? notify_handle_fs_progress, handle, GNUNET_FS_FLAGS_NONE, GNUNET_FS_OPTIONS_END ); handle->messenger = GNUNET_MESSENGER_connect( handle->cfg, name, on_handle_identity, handle, on_handle_message, handle ); return handle; } void handle_destroy (struct GNUNET_CHAT_Handle* handle) { if (handle->messenger) GNUNET_MESSENGER_disconnect(handle->messenger); if (handle->files) GNUNET_FS_stop(handle->fs); if (handle->arm) GNUNET_ARM_disconnect(handle->arm); GNUNET_CONTAINER_multihashmap_destroy(handle->groups); GNUNET_CONTAINER_multishortmap_destroy(handle->contacts); GNUNET_CONTAINER_multihashmap_destroy(handle->contexts); GNUNET_CONTAINER_multihashmap_destroy(handle->files); GNUNET_free(handle); }