gnunet-service-messenger_basement.c 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758
  1. /*
  2. This file is part of GNUnet.
  3. Copyright (C) 2020 GNUnet e.V.
  4. GNUnet is free software: you can redistribute it and/or modify it
  5. under the terms of the GNU Affero General Public License as published
  6. by the Free Software Foundation, either version 3 of the License,
  7. or (at your option) any later version.
  8. GNUnet is distributed in the hope that it will be useful, but
  9. WITHOUT ANY WARRANTY; without even the implied warranty of
  10. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  11. Affero General Public License for more details.
  12. You should have received a copy of the GNU Affero General Public License
  13. along with this program. If not, see <http://www.gnu.org/licenses/>.
  14. SPDX-License-Identifier: AGPL3.0-or-later
  15. */
  16. /**
  17. * @author Tobias Frisch
  18. * @file src/messenger/gnunet-service-messenger_basement.c
  19. * @brief GNUnet MESSENGER service
  20. */
  21. #include "gnunet-service-messenger_basement.h"
  22. size_t
  23. count_of_tunnels (const struct GNUNET_MESSENGER_ListTunnels *tunnels)
  24. {
  25. const struct GNUNET_MESSENGER_ListTunnel *element;
  26. size_t count = 0;
  27. for (element = tunnels->head; element; element = element->next)
  28. count++;
  29. return count;
  30. }
  31. int
  32. should_connect_tunnel_to (size_t count, size_t src, size_t dst)
  33. {
  34. if ((src + 1) % count == dst % count)
  35. return GNUNET_YES;
  36. return GNUNET_NO;
  37. }
  38. int
  39. required_connection_between (size_t count, size_t src, size_t dst)
  40. {
  41. if (GNUNET_YES == should_connect_tunnel_to (count, src, dst))
  42. return GNUNET_YES;
  43. if (GNUNET_YES == should_connect_tunnel_to (count, dst, src))
  44. return GNUNET_YES;
  45. return GNUNET_NO;
  46. }