aboutsummaryrefslogtreecommitdiff
path: root/src/transport/transport-testing-send2.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/transport-testing-send2.c')
-rw-r--r--src/transport/transport-testing-send2.c240
1 files changed, 0 insertions, 240 deletions
diff --git a/src/transport/transport-testing-send2.c b/src/transport/transport-testing-send2.c
deleted file mode 100644
index bd2afb9b0..000000000
--- a/src/transport/transport-testing-send2.c
+++ /dev/null
@@ -1,240 +0,0 @@
1/*
2 This file is part of GNUnet.
3 Copyright (C) 2016 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 */
20/**
21 * @file transport-testing-send.c
22 * @brief convenience transmission function for tests
23 * @author Christian Grothoff
24 */
25#include "transport-testing2.h"
26
27/**
28 * Acceptable transmission delay.
29 */
30#define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply ( \
31 GNUNET_TIME_UNIT_SECONDS, 30)
32
33
34/**
35 * Return @a cx in @a cls.
36 */
37static void
38find_cr (void *cls,
39 struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cx)
40{
41 struct GNUNET_TRANSPORT_TESTING_ConnectRequest **cr = cls;
42
43 if (GNUNET_NO == cx->connected)
44 return;
45 *cr = cx;
46}
47
48
49/**
50 * Send a test message of type @a mtype and size @a msize from
51 * peer @a sender to peer @a receiver. The peers should be
52 * connected when this function is called.
53 *
54 * @param sender the sending peer
55 * @param receiver the receiving peer
56 * @param mtype message type to use
57 * @param msize size of the message, at least `sizeof (struct GNUNET_TRANSPORT_TESTING_TestMessage)`
58 * @param num unique message number
59 * @param cont continuation to call after transmission
60 * @param cont_cls closure for @a cont
61 * @return #GNUNET_OK if message was queued,
62 * #GNUNET_NO if peers are not connected
63 * #GNUNET_SYSERR if @a msize is illegal
64 */
65int
66GNUNET_TRANSPORT_TESTING_send (struct
67 GNUNET_TRANSPORT_TESTING_PeerContext *sender,
68 struct GNUNET_TRANSPORT_TESTING_PeerContext *
69 receiver,
70 uint16_t mtype,
71 uint16_t msize,
72 uint32_t num,
73 GNUNET_SCHEDULER_TaskCallback cont,
74 void *cont_cls)
75{
76 struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cr;
77 struct GNUNET_MQ_Envelope *env;
78 struct GNUNET_TRANSPORT_TESTING_TestMessage *test;
79
80 if (msize < sizeof(struct GNUNET_TRANSPORT_TESTING_TestMessage))
81 {
82 GNUNET_break (0);
83 return GNUNET_SYSERR;
84 }
85 cr = NULL;
86 GNUNET_TRANSPORT_TESTING_find_connecting_context (sender,
87 receiver,
88 &find_cr,
89 &cr);
90 if (NULL == cr)
91 GNUNET_TRANSPORT_TESTING_find_connecting_context (receiver,
92 sender,
93 &find_cr,
94 &cr);
95 if (NULL == cr)
96 {
97 GNUNET_break (0);
98 return GNUNET_NO;
99 }
100 if (NULL == cr->mq)
101 {
102 GNUNET_break (0);
103 return GNUNET_NO;
104 }
105 {
106 char *receiver_s = GNUNET_strdup (GNUNET_i2s (&receiver->id));
107
108 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
109 "Sending message from peer %u (`%s') -> peer %u (`%s') !\n",
110 sender->no,
111 GNUNET_i2s (&sender->id),
112 receiver->no,
113 receiver_s);
114 GNUNET_free (receiver_s);
115 }
116 env = GNUNET_MQ_msg_extra (test,
117 msize - sizeof(*test),
118 mtype);
119 test->num = htonl (num);
120 memset (&test[1],
121 num,
122 msize - sizeof(*test));
123 GNUNET_MQ_notify_sent (env,
124 cont,
125 cont_cls);
126 GNUNET_MQ_send (cr->mq,
127 env);
128 return GNUNET_OK;
129}
130
131
132/**
133 * Task that sends a test message from the
134 * first peer to the second peer.
135 *
136 * @param ccc context which should contain at least two peers, the
137 * first two of which should be currently connected
138 * @param size desired message size
139 * @param cont continuation to call after transmission
140 * @param cont_cls closure for @a cont
141 */
142static void
143do_send (struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext *ccc,
144 uint16_t size,
145 GNUNET_SCHEDULER_TaskCallback cont,
146 void *cont_cls)
147{
148 int ret;
149
150 ccc->global_ret = GNUNET_SYSERR;
151 ret = GNUNET_TRANSPORT_TESTING_send (ccc->p[0],
152 ccc->p[1],
153 GNUNET_TRANSPORT_TESTING_SIMPLE_MTYPE,
154 size,
155 ccc->send_num_gen++,
156 cont,
157 cont_cls);
158 GNUNET_assert (GNUNET_SYSERR != ret);
159 if (GNUNET_NO == ret)
160 {
161 GNUNET_break (0);
162 ccc->global_ret = GNUNET_SYSERR;
163 GNUNET_SCHEDULER_shutdown ();
164 }
165}
166
167
168/**
169 * Task that sends a minimalistic test message from the
170 * first peer to the second peer.
171 *
172 * @param cls the `struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext`
173 * which should contain at least two peers, the first two
174 * of which should be currently connected
175 */
176void
177GNUNET_TRANSPORT_TESTING_simple_send (void *cls)
178{
179 struct GNUNET_TRANSPORT_TESTING_SendClosure *sc = cls;
180 int done;
181 size_t msize;
182
183 if (0 < sc->num_messages)
184 {
185 sc->num_messages--;
186 done = (0 == sc->num_messages);
187 }
188 else
189 {
190 done = 0; /* infinite loop */
191 }
192 msize = sizeof(struct GNUNET_TRANSPORT_TESTING_TestMessage);
193 if (NULL != sc->get_size_cb)
194 msize = sc->get_size_cb (sc->num_messages);
195 /* if this was the last message, call the continuation,
196 otherwise call this function again */
197 do_send (sc->ccc,
198 msize,
199 done ? sc->cont : &GNUNET_TRANSPORT_TESTING_simple_send,
200 done ? sc->cont_cls : sc);
201}
202
203
204/**
205 * Task that sends a large test message from the
206 * first peer to the second peer.
207 *
208 * @param cls the `struct GNUNET_TRANSPORT_TESTING_ConnectCheckContext`
209 * which should contain at least two peers, the first two
210 * of which should be currently connected
211 */
212void
213GNUNET_TRANSPORT_TESTING_large_send (void *cls)
214{
215 struct GNUNET_TRANSPORT_TESTING_SendClosure *sc = cls;
216 int done;
217 size_t msize;
218
219 if (0 < sc->num_messages)
220 {
221 sc->num_messages--;
222 done = (0 == sc->num_messages);
223 }
224 else
225 {
226 done = 0; /* infinite loop */
227 }
228 msize = 2600;
229 if (NULL != sc->get_size_cb)
230 msize = sc->get_size_cb (sc->num_messages);
231 /* if this was the last message, call the continuation,
232 otherwise call this function again */
233 do_send (sc->ccc,
234 msize,
235 done ? sc->cont : &GNUNET_TRANSPORT_TESTING_large_send,
236 done ? sc->cont_cls : sc);
237}
238
239
240/* end of transport-testing-send.c */