diff options
Diffstat (limited to 'src/transport/transport-testing-send.c')
-rw-r--r-- | src/transport/transport-testing-send.c | 98 |
1 files changed, 20 insertions, 78 deletions
diff --git a/src/transport/transport-testing-send.c b/src/transport/transport-testing-send.c index 92d5833b0..24858353e 100644 --- a/src/transport/transport-testing-send.c +++ b/src/transport/transport-testing-send.c | |||
@@ -30,63 +30,6 @@ | |||
30 | #define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) | 30 | #define TIMEOUT_TRANSMIT GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_SECONDS, 30) |
31 | 31 | ||
32 | 32 | ||
33 | static size_t | ||
34 | notify_ready (void *cls, | ||
35 | size_t size, | ||
36 | void *buf) | ||
37 | { | ||
38 | struct TRANSPORT_TESTING_SendJob *sj = cls; | ||
39 | struct GNUNET_TRANSPORT_TESTING_PeerContext *sender = sj->sender; | ||
40 | struct GNUNET_TRANSPORT_TESTING_PeerContext *receiver = sj->receiver; | ||
41 | struct GNUNET_TRANSPORT_TESTING_Handle *tth = sender->tth; | ||
42 | uint16_t msize = sj->msize; | ||
43 | struct GNUNET_TRANSPORT_TESTING_TestMessage *test; | ||
44 | |||
45 | sj->th = NULL; | ||
46 | GNUNET_CONTAINER_DLL_remove (tth->sj_head, | ||
47 | tth->sj_tail, | ||
48 | sj); | ||
49 | if (NULL == buf) | ||
50 | { | ||
51 | GNUNET_log (GNUNET_ERROR_TYPE_ERROR, | ||
52 | "Timeout occurred while waiting for transmit_ready\n"); | ||
53 | GNUNET_SCHEDULER_shutdown (); | ||
54 | GNUNET_free (sj); | ||
55 | return 0; | ||
56 | } | ||
57 | |||
58 | GNUNET_assert (size >= msize); | ||
59 | if (NULL != buf) | ||
60 | { | ||
61 | memset (buf, sj->num, msize); | ||
62 | test = buf; | ||
63 | test->header.size = htons (msize); | ||
64 | test->header.type = htons (sj->mtype); | ||
65 | test->num = htonl (sj->num); | ||
66 | } | ||
67 | |||
68 | { | ||
69 | char *ps = GNUNET_strdup (GNUNET_i2s (&sender->id)); | ||
70 | |||
71 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | ||
72 | "Sending message %u from %u (%s) with type %u and size %u bytes to peer %u (%s)\n", | ||
73 | (unsigned int) sj->num, | ||
74 | sender->no, | ||
75 | ps, | ||
76 | sj->mtype, | ||
77 | msize, | ||
78 | receiver->no, | ||
79 | GNUNET_i2s (&receiver->id)); | ||
80 | GNUNET_free (ps); | ||
81 | } | ||
82 | if (NULL != sj->cont) | ||
83 | GNUNET_SCHEDULER_add_now (sj->cont, | ||
84 | sj->cont_cls); | ||
85 | GNUNET_free (sj); | ||
86 | return msize; | ||
87 | } | ||
88 | |||
89 | |||
90 | /** | 33 | /** |
91 | * Return @a cx in @a cls. | 34 | * Return @a cx in @a cls. |
92 | */ | 35 | */ |
@@ -127,10 +70,10 @@ GNUNET_TRANSPORT_TESTING_send (struct GNUNET_TRANSPORT_TESTING_PeerContext *send | |||
127 | GNUNET_SCHEDULER_TaskCallback cont, | 70 | GNUNET_SCHEDULER_TaskCallback cont, |
128 | void *cont_cls) | 71 | void *cont_cls) |
129 | { | 72 | { |
130 | struct GNUNET_TRANSPORT_TESTING_Handle *tth = sender->tth; | ||
131 | struct TRANSPORT_TESTING_SendJob *sj; | ||
132 | struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cr; | 73 | struct GNUNET_TRANSPORT_TESTING_ConnectRequest *cr; |
133 | 74 | struct GNUNET_MQ_Envelope *env; | |
75 | struct GNUNET_TRANSPORT_TESTING_TestMessage *test; | ||
76 | |||
134 | if (msize < sizeof (struct GNUNET_TRANSPORT_TESTING_TestMessage)) | 77 | if (msize < sizeof (struct GNUNET_TRANSPORT_TESTING_TestMessage)) |
135 | { | 78 | { |
136 | GNUNET_break (0); | 79 | GNUNET_break (0); |
@@ -151,17 +94,11 @@ GNUNET_TRANSPORT_TESTING_send (struct GNUNET_TRANSPORT_TESTING_PeerContext *send | |||
151 | GNUNET_break (0); | 94 | GNUNET_break (0); |
152 | return GNUNET_NO; | 95 | return GNUNET_NO; |
153 | } | 96 | } |
154 | sj = GNUNET_new (struct TRANSPORT_TESTING_SendJob); | 97 | if (NULL == cr->mq) |
155 | sj->num = num; | 98 | { |
156 | sj->sender = sender; | 99 | GNUNET_break (0); |
157 | sj->receiver = receiver; | 100 | return GNUNET_NO; |
158 | sj->cont = cont; | 101 | } |
159 | sj->cont_cls = cont_cls; | ||
160 | sj->mtype = mtype; | ||
161 | sj->msize = msize; | ||
162 | GNUNET_CONTAINER_DLL_insert (tth->sj_head, | ||
163 | tth->sj_tail, | ||
164 | sj); | ||
165 | { | 102 | { |
166 | char *receiver_s = GNUNET_strdup (GNUNET_i2s (&receiver->id)); | 103 | char *receiver_s = GNUNET_strdup (GNUNET_i2s (&receiver->id)); |
167 | 104 | ||
@@ -173,13 +110,18 @@ GNUNET_TRANSPORT_TESTING_send (struct GNUNET_TRANSPORT_TESTING_PeerContext *send | |||
173 | receiver_s); | 110 | receiver_s); |
174 | GNUNET_free (receiver_s); | 111 | GNUNET_free (receiver_s); |
175 | } | 112 | } |
176 | sj->th = GNUNET_TRANSPORT_notify_transmit_ready (sender->th, | 113 | env = GNUNET_MQ_msg_extra (test, |
177 | &receiver->id, | 114 | msize - sizeof (*test), |
178 | msize, | 115 | mtype); |
179 | TIMEOUT_TRANSMIT, | 116 | test->num = htonl (num); |
180 | ¬ify_ready, | 117 | memset (&test[1], |
181 | sj); | 118 | num, |
182 | GNUNET_assert (NULL != sj->th); | 119 | msize - sizeof (*test)); |
120 | GNUNET_MQ_notify_sent (env, | ||
121 | cont, | ||
122 | cont_cls); | ||
123 | GNUNET_MQ_send (cr->mq, | ||
124 | env); | ||
183 | return GNUNET_OK; | 125 | return GNUNET_OK; |
184 | } | 126 | } |
185 | 127 | ||