From 99c532018cf95dcd4d6319313b4718f7bb2c8297 Mon Sep 17 00:00:00 2001 From: Bart Polot Date: Tue, 14 May 2013 11:59:48 +0000 Subject: [PATCH] - Remove old tree lib --- src/mesh/Makefile.am | 6 +- src/mesh/gnunet-service-mesh-new.c | 4 +- src/mesh/mesh_path.c | 125 +++++++++++++++++++++++++++ src/mesh/mesh_path.h | 133 +++++++++++++++++++++++++++++ 4 files changed, 263 insertions(+), 5 deletions(-) create mode 100644 src/mesh/mesh_path.c create mode 100644 src/mesh/mesh_path.h diff --git a/src/mesh/Makefile.am b/src/mesh/Makefile.am index 84d4838b3..0fae3b356 100644 --- a/src/mesh/Makefile.am +++ b/src/mesh/Makefile.am @@ -1,4 +1,4 @@ -INCLUDES = -I$(top_srcdir)/src/include +NCLUDES = -I$(top_srcdir)/src/include if MINGW WINFLAGS = -Wl,--no-undefined -Wl,--export-all-symbols @@ -102,7 +102,7 @@ gnunet_mesh_DEPENDENCIES = \ gnunet_service_mesh_new_SOURCES = \ gnunet-service-mesh-new.c \ - mesh_tunnel_tree.c \ + mesh_path.c \ mesh_common.c gnunet_service_mesh_new_CFLAGS = $(AM_CFLAGS) gnunet_service_mesh_new_LDADD = \ @@ -156,7 +156,7 @@ test_mesh_api_SOURCES = \ test_mesh_api_LDADD = \ $(top_builddir)/src/util/libgnunetutil.la \ $(top_builddir)/src/testing/libgnunettesting.la \ - $(top_builddir)/src/mesh/libgnunetmesh.la + $(top_builddir)/src/mesh/libgnunetmesh2.la test_mesh_api_DEPENDENCIES = \ libgnunetmesh.la \ $(top_builddir)/src/util/libgnunetutil.la diff --git a/src/mesh/gnunet-service-mesh-new.c b/src/mesh/gnunet-service-mesh-new.c index 697d8275e..a0f5f1a24 100644 --- a/src/mesh/gnunet-service-mesh-new.c +++ b/src/mesh/gnunet-service-mesh-new.c @@ -48,7 +48,7 @@ #include "platform.h" #include "mesh2.h" #include "mesh2_protocol.h" -#include "mesh_tunnel_tree.h" +#include "mesh_path.h" #include "block_mesh.h" #include "gnunet_dht_service.h" #include "gnunet_statistics_service.h" @@ -309,7 +309,7 @@ struct MeshTunnel /** * State of the tunnel. */ - MeshTunnelState state; + enum MeshTunnelState state; /** * Local tunnel number ( >= GNUNET_MESH_LOCAL_TUNNEL_ID_CLI or 0 ) diff --git a/src/mesh/mesh_path.c b/src/mesh/mesh_path.c new file mode 100644 index 000000000..05444655a --- /dev/null +++ b/src/mesh/mesh_path.c @@ -0,0 +1,125 @@ +/* + This file is part of GNUnet. + (C) 2001 - 2013 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 3, 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/** + * @file mesh/mesh_path.c + * @brief Path handling functions + * @author Bartlomiej Polot + */ + +#include "mesh2.h" +#include "mesh_path.h" + + +/** + * Create a new path + * + * @param length How many hops will the path have. + * + * @return A newly allocated path with a peer array of the specified length. + */ +struct MeshPeerPath * +path_new (unsigned int length) +{ + struct MeshPeerPath *p; + + p = GNUNET_malloc (sizeof (struct MeshPeerPath)); + if (length > 0) + { + p->length = length; + p->peers = GNUNET_malloc (length * sizeof (GNUNET_PEER_Id)); + } + return p; +} + + +/** + * Invert the path + * + * @param path the path to invert + */ +void +path_invert (struct MeshPeerPath *path) +{ + GNUNET_PEER_Id aux; + unsigned int i; + + for (i = 0; i < path->length / 2; i++) + { + aux = path->peers[i]; + path->peers[i] = path->peers[path->length - i - 1]; + path->peers[path->length - i - 1] = aux; + } +} + + +/** + * Duplicate a path, incrementing short peer's rc. + * + * @param path The path to duplicate. + */ +struct MeshPeerPath * +path_duplicate (struct MeshPeerPath *path) +{ + struct MeshPeerPath *aux; + unsigned int i; + + aux = path_new (path->length); + memcpy (aux->peers, path->peers, path->length * sizeof (GNUNET_PEER_Id)); + for (i = 0; i < path->length; i++) + GNUNET_PEER_change_rc (path->peers[i], 1); + return aux; +} + + +/** + * Get the length of a path. + * + * @param path The path to measure, with the local peer at any point of it. + * + * @return Number of hops to reach destination. + * UINT_MAX in case the peer is not in the path. + */ +unsigned int +path_get_length (struct MeshPeerPath *path) +{ + if (NULL == path) + return UINT_MAX; + return path->length; +} + + +/** + * Destroy the path and free any allocated resources linked to it + * + * @param p the path to destroy + * + * @return GNUNET_OK on success + */ +int +path_destroy (struct MeshPeerPath *p) +{ + if (NULL == p) + return GNUNET_OK; + GNUNET_PEER_decrement_rcs (p->peers, p->length); + GNUNET_free_non_null (p->peers); + GNUNET_free (p); + return GNUNET_OK; +} diff --git a/src/mesh/mesh_path.h b/src/mesh/mesh_path.h new file mode 100644 index 000000000..c3f3264b0 --- /dev/null +++ b/src/mesh/mesh_path.h @@ -0,0 +1,133 @@ +/* + This file is part of GNUnet. + (C) 2001 - 2013 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 3, 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., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/** + * @file mesh/mesh_path.h + * @brief Path handling functions + * @author Bartlomiej Polot + */ + +#ifndef MESH_PATH_H +#define MESH_PATH_H + +#ifdef __cplusplus +extern "C" +{ + #if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + +#include "mesh2.h" + +/******************************************************************************/ +/************************ DATA STRUCTURES ****************************/ +/******************************************************************************/ + +/** + * Information regarding a possible path to reach a single peer + */ +struct MeshPeerPath +{ + + /** + * Linked list + */ + struct MeshPeerPath *next; + struct MeshPeerPath *prev; + + /** + * List of all the peers that form the path from origin to target. + */ + GNUNET_PEER_Id *peers; + + /** + * Number of peers (hops) in the path + */ + unsigned int length; + +}; + +/******************************************************************************/ +/************************* FUNCTIONS *****************************/ +/******************************************************************************/ + +/** + * Create a new path. + * + * @param length How many hops will the path have. + * + * @return A newly allocated path with a peer array of the specified length. + */ +struct MeshPeerPath * +path_new (unsigned int length); + + +/** + * Invert the path. + * + * @param path The path to invert. + */ +void +path_invert (struct MeshPeerPath *path); + + +/** + * Duplicate a path, incrementing short peer's rc. + * + * @param path The path to duplicate. + */ +struct MeshPeerPath * +path_duplicate (struct MeshPeerPath *path); + + +/** + * Get the length of a path. + * + * @param path The path to measure, with the local peer at any point of it. + * + * @return Number of hops to reach destination. + * UINT_MAX in case the peer is not in the path. + */ +unsigned int +path_get_length (struct MeshPeerPath *path); + + +/** + * Destroy the path and free any allocated resources linked to it + * + * @param p the path to destroy + * + * @return GNUNET_OK on success + */ +int +path_destroy (struct MeshPeerPath *p); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ + #endif + #ifdef __cplusplus +} +#endif + + +/* ifndef MESH_PATH_H */ +#endif \ No newline at end of file -- 2.25.1