X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Ftest_transport_api_manipulation_send_tcp.c;h=408301b0fab698df679abfcb20b4f7ecfabcfb44;hb=14537ef71b43ac47fe342c4e88f7bd3675ed1e39;hp=7e73f0b9c9ee8e65916240798205a81c2bb8abc6;hpb=0979ddcbd310b856b7c36c6ed9c8dc17c0b032db;p=oweals%2Fgnunet.git diff --git a/src/transport/test_transport_api_manipulation_send_tcp.c b/src/transport/test_transport_api_manipulation_send_tcp.c index 7e73f0b9c..408301b0f 100644 --- a/src/transport/test_transport_api_manipulation_send_tcp.c +++ b/src/transport/test_transport_api_manipulation_send_tcp.c @@ -2,20 +2,20 @@ This file is part of GNUnet. Copyright (C) 2009, 2010, 2016 GNUnet e.V. - 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 free software: you can redistribute it and/or modify it + under the terms of the GNU Affero General Public License as published + by the Free Software Foundation, either version 3 of the License, + 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. + Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . - 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. + SPDX-License-Identifier: AGPL3.0-or-later */ /** * @file transport/test_transport_api_manipulation_send_tcp.c @@ -36,9 +36,6 @@ */ #define TIMEOUT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) -#define TEST_MESSAGE_SIZE 2600 - - static struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc; static int messages_recv; @@ -52,46 +49,59 @@ static struct GNUNET_TIME_Absolute start_delayed; static struct GNUNET_TIME_Relative dur_delayed; -static size_t -get_size (unsigned int cnt_down) +static void +do_free (void *cls) +{ + struct GNUNET_TRANSPORT_TESTING_SendClosure *sc = cls; + + GNUNET_free (sc); +} + + +static void +delayed_transmit (void *cls) { - return TEST_MESSAGE_SIZE; + struct GNUNET_TRANSPORT_TESTING_SendClosure *sc = cls; + + start_delayed = GNUNET_TIME_absolute_get (); + GNUNET_TRANSPORT_TESTING_large_send (sc); } static void sendtask (void *cls) { + struct GNUNET_TRANSPORT_TESTING_SendClosure *sc; struct GNUNET_TIME_Relative delay; struct GNUNET_ATS_Properties prop; - struct GNUNET_TRANSPORT_TESTING_SendClosure sc = { - .num_messages = 1, - .get_size_cb = &get_size, - .ccc = ccc - }; + sc = GNUNET_new (struct GNUNET_TRANSPORT_TESTING_SendClosure); + sc->num_messages = 1; + sc->ccc = ccc; + sc->cont = &do_free; + sc->cont_cls = sc; if (0 == messages_recv) { start_normal = GNUNET_TIME_absolute_get (); } if (1 == messages_recv) { - memset (&prop, 0, sizeof (prop)); + memset (&prop, + 0, + sizeof (prop)); delay = GNUNET_TIME_UNIT_SECONDS; - GNUNET_TRANSPORT_set_traffic_metric (ccc->p[1]->th, - &ccc->p[0]->id, - &prop, - GNUNET_TIME_UNIT_ZERO, - delay); - prop.distance = 10; - GNUNET_TRANSPORT_set_traffic_metric (ccc->p[0]->th, - &ccc->p[1]->id, - &prop, - delay, - delay); - start_delayed = GNUNET_TIME_absolute_get(); + GNUNET_TRANSPORT_manipulation_set (ccc->p[0]->tmh, + &ccc->p[1]->id, + &prop, + GNUNET_TIME_UNIT_ZERO, + delay); + /* wait 1s to allow manipulation to go into effect */ + GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_SECONDS, + &delayed_transmit, + sc); + return; } - GNUNET_TRANSPORT_TESTING_simple_send (&sc); + GNUNET_TRANSPORT_TESTING_large_send (sc); } @@ -99,7 +109,7 @@ static void notify_receive (void *cls, struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver, const struct GNUNET_PeerIdentity *sender, - const struct GNUNET_MessageHeader *message) + const struct GNUNET_TRANSPORT_TESTING_TestMessage *message) { { char *ps = GNUNET_strdup (GNUNET_i2s (&receiver->id)); @@ -108,19 +118,14 @@ notify_receive (void *cls, "Peer %u (`%s') received message of type %d and size %u size from peer %s)!\n", receiver->no, ps, - ntohs (message->type), - ntohs (message->size), + ntohs (message->header.type), + ntohs (message->header.size), GNUNET_i2s (sender)); GNUNET_free (ps); } - if ( (GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE == ntohs (message->type)) && - (TEST_MESSAGE_SIZE == ntohs (message->size)) ) - { - if (GNUNET_NO == ccc->global_ret) - ccc->global_ret = GNUNET_OK; - } - else + if ( (GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE != ntohs (message->header.type)) || + (GNUNET_TRANSPORT_TESTING_LARGE_MESSAGE_SIZE != ntohs (message->header.size)) ) { GNUNET_break (0); ccc->global_ret = GNUNET_SYSERR; @@ -131,7 +136,7 @@ notify_receive (void *cls, if (0 == messages_recv) { /* Received non-delayed message */ - dur_normal = GNUNET_TIME_absolute_get_duration(start_normal); + dur_normal = GNUNET_TIME_absolute_get_duration (start_normal); GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Received non-delayed message %u after %s\n", messages_recv, @@ -139,28 +144,30 @@ notify_receive (void *cls, GNUNET_YES)); GNUNET_SCHEDULER_add_now (&sendtask, NULL); + messages_recv++; + return; } - if (1 == messages_recv) + /* Received manipulated message */ + dur_delayed = GNUNET_TIME_absolute_get_duration(start_delayed); + GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, + "Received delayed message %u after %s\n", + messages_recv, + GNUNET_STRINGS_relative_time_to_string (dur_delayed, + GNUNET_YES)); + if (dur_delayed.rel_value_us < GNUNET_TIME_UNIT_SECONDS.rel_value_us) { - /* Received manipulated message */ - dur_delayed = GNUNET_TIME_absolute_get_duration(start_delayed); - GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, - "Received delayed message %u after %s\n", - messages_recv, - GNUNET_STRINGS_relative_time_to_string (dur_delayed, - GNUNET_YES)); - if (dur_delayed.rel_value_us < GNUNET_TIME_UNIT_SECONDS.rel_value_us) - { - GNUNET_break (0); - ccc->global_ret = GNUNET_SYSERR; - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - "Delayed message was not delayed correctly: took only %s\n", - GNUNET_STRINGS_relative_time_to_string (dur_delayed, - GNUNET_YES)); - } - GNUNET_SCHEDULER_shutdown (); + GNUNET_break (0); + ccc->global_ret = GNUNET_SYSERR; + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + "Delayed message was not delayed correctly: took only %s\n", + GNUNET_STRINGS_relative_time_to_string (dur_delayed, + GNUNET_YES)); + } + else + { + ccc->global_ret = GNUNET_OK; } - messages_recv++; + GNUNET_SCHEDULER_shutdown (); }