From: Christian Grothoff Date: Tue, 15 Sep 2009 15:58:09 +0000 (+0000) Subject: move X-Git-Tag: initial-import-from-subversion-38251~23483 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=b7d63eaae6bfb3e72a452d1841e808a0159be173;p=oweals%2Fgnunet.git move --- diff --git a/configure.ac b/configure.ac index 20bff6c6a..28094e057 100644 --- a/configure.ac +++ b/configure.ac @@ -753,7 +753,6 @@ src/hello/Makefile src/include/Makefile src/include/gnunet_directories.h src/hostlist/Makefile -src/peer/Makefile src/peerinfo/Makefile src/resolver/Makefile src/statistics/Makefile diff --git a/src/Makefile.am b/src/Makefile.am index a394944d2..7e92437c6 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -13,7 +13,6 @@ SUBDIRS = \ arm \ fragmentation \ hello \ - peer \ peerinfo \ resolver \ statistics \ diff --git a/src/fs/Makefile.am b/src/fs/Makefile.am index a91459e64..e2f2e6267 100644 --- a/src/fs/Makefile.am +++ b/src/fs/Makefile.am @@ -88,7 +88,6 @@ gnunet_service_fs_LDADD = \ $(top_builddir)/src/fs/libgnunetfs.la \ $(top_builddir)/src/datastore/libgnunetdatastore.la \ $(top_builddir)/src/core/libgnunetcore.la \ - $(top_builddir)/src/peer/libgnunetpeer.la \ $(top_builddir)/src/util/libgnunetutil.la \ $(GN_LIBINTL) diff --git a/src/include/gnunet_util_lib.h b/src/include/gnunet_util_lib.h index 6bb87bf4d..1c5e1d7a1 100644 --- a/src/include/gnunet_util_lib.h +++ b/src/include/gnunet_util_lib.h @@ -47,6 +47,7 @@ extern "C" #include "gnunet_getopt_lib.h" #include "gnunet_network_lib.h" #include "gnunet_os_lib.h" +#include "gnunet_peer_lib.h" #include "gnunet_plugin_lib.h" #include "gnunet_program_lib.h" #include "gnunet_protocols.h" diff --git a/src/peer/Makefile.am b/src/peer/Makefile.am deleted file mode 100644 index bd268cf39..000000000 --- a/src/peer/Makefile.am +++ /dev/null @@ -1,29 +0,0 @@ -INCLUDES = -I$(top_srcdir)/src/include - -if MINGW - WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols -endif - -if USE_COVERAGE - AM_CFLAGS = --coverage -O0 - XLIB = -lgcov -endif - -lib_LTLIBRARIES = libgnunetpeer.la - -libgnunetpeer_la_SOURCES = \ - peer.c -libgnunetpeer_la_LIBADD = \ - $(top_builddir)/src/util/libgnunetutil.la $(XLIB) - -#check_PROGRAMS = \ -# test_peer -# -#TESTS = $(check_PROGRAMS) -# -#test_peer_SOURCES = \ -# test_peer.c -#test_peer_LDADD = \ -# $(top_builddir)/src/peer/libgnunetpeer.la \ -# $(top_builddir)/src/util/libgnunetutil.la - diff --git a/src/peer/peer.c b/src/peer/peer.c deleted file mode 100644 index 02c95f4db..000000000 --- a/src/peer/peer.c +++ /dev/null @@ -1,212 +0,0 @@ -/* - This file is part of GNUnet - (C) 2006, 2008, 2009 Christian Grothoff (and other contributing authors) - - GNUnet is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published - by the Free Software Foundation; either version 2, 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 - General Public License for more details. - - You should have received a copy of the GNU General Public License - along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, - Boston, MA 02110-1301, USA. - */ - -/** - * @file peer/peer.c - * @brief peer-ID table that assigns integer IDs to peer-IDs to save memory - * @author Christian Grothoff - */ - -#include "platform.h" -#include "gnunet_peer_lib.h" - - -struct PeerEntry -{ - /** - * the identifier itself - */ - struct GNUNET_PeerIdentity id; - - /** - * Short version of the identifier; - * if the RC==0, then index of next - * free slot in table, otherwise - * equal to this slot in the table. - */ - GNUNET_PEER_Id pid; - - /** - * Reference counter, 0 if this slot - * is not used. - */ - unsigned int rc; -}; - - -/** - * Table with our interned peer IDs. - */ -static struct PeerEntry *table; - -/** - * Hashmap of PeerIdentities to "struct PeerEntry" - * (for fast lookup). NULL until the library - * is actually being used. - */ -static struct GNUNET_CONTAINER_MultiHashMap *map; - -/** - * Size of the "table". - */ -static unsigned int size; - -/** - * Index of the beginning of the free list in the table; set to "size" - * if no slots are free in the table. - */ -static unsigned int free_list_start; - - -/** - * Intern an peer identity. If the identity is already known, its - * reference counter will be increased by one. - * - * @param pid identity to intern - * @return the interned identity. - */ -GNUNET_PEER_Id -GNUNET_PEER_intern (const struct GNUNET_PeerIdentity * pid) -{ - GNUNET_PEER_Id ret; - struct PeerEntry *e; - unsigned int i; - - if (pid == NULL) - return 0; - if (NULL == map) - map = GNUNET_CONTAINER_multihashmap_create (32); - e = GNUNET_CONTAINER_multihashmap_get (map, - &pid->hashPubKey); - if (e != NULL) - { - GNUNET_assert (e->rc > 0); - e->rc++; - return e->pid; - } - ret = free_list_start; - if (ret == size) - { - GNUNET_array_grow (table, size, size + 16); - for (i=ret;ihashPubKey, - &table[ret], - GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); - return ret; -} - - -/** - * Decrement multiple RCs of peer identities by one. - * - * @param ids array of PIDs to decrement the RCs of - * @param count size of the ids array - */ -void -GNUNET_PEER_decrement_rcs (const GNUNET_PEER_Id * ids, - unsigned int count) -{ - int i; - GNUNET_PEER_Id id; - - if (count == 0) - return; - for (i = count - 1; i >= 0; i--) - { - id = ids[i]; - GNUNET_assert (id < size); - GNUNET_assert (table[id].rc > 0); - table[id].rc--; - if (table[id].rc == 0) - { - GNUNET_CONTAINER_multihashmap_remove (map, - &table[id].id.hashPubKey, - &table[id]); - table[id].pid = free_list_start; - free_list_start = id; - } - } -} - - -/** - * Change the reference counter of an interned PID. - * - * @param id identity to change the RC of - * @param delta how much to change the RC - */ -void -GNUNET_PEER_change_rc (GNUNET_PEER_Id id, int delta) -{ - if (id == 0) - return; - GNUNET_assert (id < size); - GNUNET_assert (table[id].rc > 0); - GNUNET_assert ((delta >= 0) || (table[id].rc >= -delta)); - table[id].rc += delta; - if (table[id].rc == 0) - { - GNUNET_CONTAINER_multihashmap_remove (map, - &table[id].id.hashPubKey, - &table[id]); - table[id].pid = free_list_start; - free_list_start = id; - } -} - - -/** - * Convert an interned PID to a normal peer identity. - * - * @param id interned PID to convert - * @param pid where to write the normal peer identity - */ -void -GNUNET_PEER_resolve (GNUNET_PEER_Id id, - struct GNUNET_PeerIdentity * pid) -{ - if (id == 0) - { - memset (pid, 0, sizeof (struct GNUNET_PeerIdentity)); - GNUNET_break (0); - return; - } - GNUNET_assert (id < size); - GNUNET_assert (table[id].rc > 0); - *pid = table[id].id; -} - - -/* end of peer.c */ diff --git a/src/util/Makefile.am b/src/util/Makefile.am index a4e633eb9..d7e5ada54 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -41,6 +41,7 @@ libgnunetutil_la_SOURCES = \ os_load.c \ os_network.c \ os_priority.c \ + peer.c \ plugin.c \ program.c \ pseudonym.c \ diff --git a/src/util/peer.c b/src/util/peer.c new file mode 100644 index 000000000..acb1b3922 --- /dev/null +++ b/src/util/peer.c @@ -0,0 +1,212 @@ +/* + This file is part of GNUnet + (C) 2006, 2008, 2009 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 2, 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 + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. + */ + +/** + * @file util/peer.c + * @brief peer-ID table that assigns integer IDs to peer-IDs to save memory + * @author Christian Grothoff + */ + +#include "platform.h" +#include "gnunet_peer_lib.h" + + +struct PeerEntry +{ + /** + * the identifier itself + */ + struct GNUNET_PeerIdentity id; + + /** + * Short version of the identifier; + * if the RC==0, then index of next + * free slot in table, otherwise + * equal to this slot in the table. + */ + GNUNET_PEER_Id pid; + + /** + * Reference counter, 0 if this slot + * is not used. + */ + unsigned int rc; +}; + + +/** + * Table with our interned peer IDs. + */ +static struct PeerEntry *table; + +/** + * Hashmap of PeerIdentities to "struct PeerEntry" + * (for fast lookup). NULL until the library + * is actually being used. + */ +static struct GNUNET_CONTAINER_MultiHashMap *map; + +/** + * Size of the "table". + */ +static unsigned int size; + +/** + * Index of the beginning of the free list in the table; set to "size" + * if no slots are free in the table. + */ +static unsigned int free_list_start; + + +/** + * Intern an peer identity. If the identity is already known, its + * reference counter will be increased by one. + * + * @param pid identity to intern + * @return the interned identity. + */ +GNUNET_PEER_Id +GNUNET_PEER_intern (const struct GNUNET_PeerIdentity * pid) +{ + GNUNET_PEER_Id ret; + struct PeerEntry *e; + unsigned int i; + + if (pid == NULL) + return 0; + if (NULL == map) + map = GNUNET_CONTAINER_multihashmap_create (32); + e = GNUNET_CONTAINER_multihashmap_get (map, + &pid->hashPubKey); + if (e != NULL) + { + GNUNET_assert (e->rc > 0); + e->rc++; + return e->pid; + } + ret = free_list_start; + if (ret == size) + { + GNUNET_array_grow (table, size, size + 16); + for (i=ret;ihashPubKey, + &table[ret], + GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); + return ret; +} + + +/** + * Decrement multiple RCs of peer identities by one. + * + * @param ids array of PIDs to decrement the RCs of + * @param count size of the ids array + */ +void +GNUNET_PEER_decrement_rcs (const GNUNET_PEER_Id * ids, + unsigned int count) +{ + int i; + GNUNET_PEER_Id id; + + if (count == 0) + return; + for (i = count - 1; i >= 0; i--) + { + id = ids[i]; + GNUNET_assert (id < size); + GNUNET_assert (table[id].rc > 0); + table[id].rc--; + if (table[id].rc == 0) + { + GNUNET_CONTAINER_multihashmap_remove (map, + &table[id].id.hashPubKey, + &table[id]); + table[id].pid = free_list_start; + free_list_start = id; + } + } +} + + +/** + * Change the reference counter of an interned PID. + * + * @param id identity to change the RC of + * @param delta how much to change the RC + */ +void +GNUNET_PEER_change_rc (GNUNET_PEER_Id id, int delta) +{ + if (id == 0) + return; + GNUNET_assert (id < size); + GNUNET_assert (table[id].rc > 0); + GNUNET_assert ((delta >= 0) || (table[id].rc >= -delta)); + table[id].rc += delta; + if (table[id].rc == 0) + { + GNUNET_CONTAINER_multihashmap_remove (map, + &table[id].id.hashPubKey, + &table[id]); + table[id].pid = free_list_start; + free_list_start = id; + } +} + + +/** + * Convert an interned PID to a normal peer identity. + * + * @param id interned PID to convert + * @param pid where to write the normal peer identity + */ +void +GNUNET_PEER_resolve (GNUNET_PEER_Id id, + struct GNUNET_PeerIdentity * pid) +{ + if (id == 0) + { + memset (pid, 0, sizeof (struct GNUNET_PeerIdentity)); + GNUNET_break (0); + return; + } + GNUNET_assert (id < size); + GNUNET_assert (table[id].rc > 0); + *pid = table[id].id; +} + + +/* end of peer.c */