gnunet_chat_invitation.c (2264B)
1 /* 2 This file is part of GNUnet. 3 Copyright (C) 2021--2025 GNUnet e.V. 4 5 GNUnet is free software: you can redistribute it and/or modify it 6 under the terms of the GNU Affero General Public License as published 7 by the Free Software Foundation, either version 3 of the License, 8 or (at your option) any later version. 9 10 GNUnet is distributed in the hope that it will be useful, but 11 WITHOUT ANY WARRANTY; without even the implied warranty of 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 13 Affero General Public License for more details. 14 15 You should have received a copy of the GNU Affero General Public License 16 along with this program. If not, see <http://www.gnu.org/licenses/>. 17 18 SPDX-License-Identifier: AGPL3.0-or-later 19 */ 20 /* 21 * @author Tobias Frisch 22 * @file gnunet_chat_invitation.c 23 */ 24 25 #include "gnunet_chat_invitation.h" 26 27 #include "gnunet_chat_context.h" 28 #include <gnunet/gnunet_common.h> 29 #include <gnunet/gnunet_scheduler_lib.h> 30 31 #include "gnunet_chat_invitation_intern.c" 32 33 struct GNUNET_CHAT_Invitation* 34 invitation_create_from_message (struct GNUNET_CHAT_Context *context, 35 const struct GNUNET_HashCode *hash, 36 const struct GNUNET_MESSENGER_MessageInvite *message) 37 { 38 GNUNET_assert((context) && (hash) && (message)); 39 40 struct GNUNET_CHAT_Invitation *invitation = GNUNET_new(struct GNUNET_CHAT_Invitation); 41 42 invitation->context = context; 43 invitation->task = NULL; 44 45 GNUNET_memcpy(&(invitation->hash), hash, sizeof(invitation->hash)); 46 47 GNUNET_memcpy(&(invitation->key), &(message->key), sizeof(invitation->key)); 48 invitation->door = GNUNET_PEER_intern(&(message->door)); 49 50 return invitation; 51 } 52 53 54 void 55 invitation_destroy (struct GNUNET_CHAT_Invitation *invitation) 56 { 57 GNUNET_assert(invitation); 58 59 if (invitation->task) 60 GNUNET_SCHEDULER_cancel(invitation->task); 61 62 GNUNET_PEER_decrement_rcs(&(invitation->door), 1); 63 64 GNUNET_free(invitation); 65 } 66 67 68 void 69 invitation_update (struct GNUNET_CHAT_Invitation *invitation) 70 { 71 GNUNET_assert(invitation); 72 73 if (invitation->task) 74 return; 75 76 invitation->task = GNUNET_SCHEDULER_add_with_priority( 77 GNUNET_SCHEDULER_PRIORITY_BACKGROUND, 78 cb_invitation_update, 79 invitation 80 ); 81 }