GNUnet  0.11.x
gnunet-service-messenger_contact.c
Go to the documentation of this file.
1 /*
2  This file is part of GNUnet.
3  Copyright (C) 2020 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  */
27 
30 {
32 
33  contact->name = NULL;
34  contact->rc = 0;
35 
36  GNUNET_memcpy(&(contact->public_key), key, sizeof(contact->public_key));
37 
38  return contact;
39 }
40 
41 void
43 {
44  if (contact->name)
45  GNUNET_free(contact->name);
46 
47  GNUNET_free(contact);
48 }
49 
50 const char*
52 {
53  return contact->name;
54 }
55 
56 void
57 set_contact_name (struct GNUNET_MESSENGER_SrvContact *contact, const char *name)
58 {
59  GNUNET_assert(name);
60 
61  if (contact->name)
62  GNUNET_free(contact->name);
63 
64  contact->name = GNUNET_strdup(name);
65 }
66 
67 const struct GNUNET_IDENTITY_PublicKey*
69 {
70  return &(contact->public_key);
71 }
72 
73 void
75 {
76  contact->rc++;
77 }
78 
79 int
81 {
82  if (contact->rc > 0)
83  contact->rc--;
84 
85  return contact->rc ? GNUNET_NO : GNUNET_YES;
86 }
87 
88 const struct GNUNET_HashCode*
90 {
91  static struct GNUNET_HashCode id;
92 
93  GNUNET_CRYPTO_hash (&(contact->public_key), sizeof(contact->public_key), &id);
94 
95  return &id;
96 }
void destroy_contact(struct GNUNET_MESSENGER_SrvContact *contact)
Destroys a contact and frees its memory fully.
#define GNUNET_assert(cond)
Use this for fatal errors that cannot be handled.
int decrease_contact_rc(struct GNUNET_MESSENGER_SrvContact *contact)
Decreases the reference counter if possible (can not underflow!) of a given contact and returns GNUNE...
const char * get_contact_name(const struct GNUNET_MESSENGER_SrvContact *contact)
Returns the current name of a given contact or NULL if no valid name was assigned yet...
struct GNUNET_MESSENGER_SrvContact * create_contact(const struct GNUNET_IDENTITY_PublicKey *key)
Creates and allocates a new contact with a given public key from an EGO.
#define GNUNET_memcpy(dst, src, n)
Call memcpy() but check for n being 0 first.
static struct GNUNET_IDENTITY_Handle * id
Handle to identity service.
#define GNUNET_new(type)
Allocate a struct or union of the given type.
#define GNUNET_strdup(a)
Wrapper around GNUNET_xstrdup_.
void increase_contact_rc(struct GNUNET_MESSENGER_SrvContact *contact)
Increases the reference counter of a given contact which is zero as default.
void set_contact_name(struct GNUNET_MESSENGER_SrvContact *contact, const char *name)
Changes the current name of a given contact by copying it from the parameter name.
void GNUNET_CRYPTO_hash(const void *block, size_t size, struct GNUNET_HashCode *ret)
Compute hash of a given block.
Definition: crypto_hash.c:48
A 512-bit hashcode.
const struct GNUNET_IDENTITY_PublicKey * get_contact_key(const struct GNUNET_MESSENGER_SrvContact *contact)
Returns the public key of a given contact.
struct GNUNET_HashCode key
The key used in the DHT.
const struct GNUNET_HashCode * get_contact_id_from_key(const struct GNUNET_MESSENGER_SrvContact *contact)
Returns the resulting hashcode of the public key from a given contact.
struct GNUNET_IDENTITY_PublicKey public_key
An identity key as per LSD0001.
const char * name
GNUnet MESSENGER service.
#define GNUNET_free(ptr)
Wrapper around free.