aboutsummaryrefslogtreecommitdiff
path: root/src/rps
diff options
context:
space:
mode:
Diffstat (limited to 'src/rps')
-rw-r--r--src/rps/gnunet-rps-profiler.c4
-rw-r--r--src/rps/gnunet-service-rps.c67
-rw-r--r--src/rps/rps-test_util.c80
3 files changed, 106 insertions, 45 deletions
diff --git a/src/rps/gnunet-rps-profiler.c b/src/rps/gnunet-rps-profiler.c
index 16f23e86c..ec73f1803 100644
--- a/src/rps/gnunet-rps-profiler.c
+++ b/src/rps/gnunet-rps-profiler.c
@@ -888,6 +888,7 @@ shutdown_op (void *cls)
888 if (NULL != post_test_task) 888 if (NULL != post_test_task)
889 { 889 {
890 GNUNET_SCHEDULER_cancel (post_test_task); 890 GNUNET_SCHEDULER_cancel (post_test_task);
891 post_test_task = NULL;
891 } 892 }
892 if (NULL != churn_task) 893 if (NULL != churn_task)
893 { 894 {
@@ -899,6 +900,7 @@ shutdown_op (void *cls)
899 if (NULL != rps_peers[i].rps_handle) 900 if (NULL != rps_peers[i].rps_handle)
900 { 901 {
901 GNUNET_RPS_disconnect (rps_peers[i].rps_handle); 902 GNUNET_RPS_disconnect (rps_peers[i].rps_handle);
903 rps_peers[i].rps_handle = NULL;
902 } 904 }
903 if (NULL != rps_peers[i].op) 905 if (NULL != rps_peers[i].op)
904 { 906 {
@@ -2570,7 +2572,7 @@ test_run (void *cls,
2570 if (NULL != churn_task) 2572 if (NULL != churn_task)
2571 GNUNET_SCHEDULER_cancel (churn_task); 2573 GNUNET_SCHEDULER_cancel (churn_task);
2572 post_test_task = GNUNET_SCHEDULER_add_delayed (timeout, &post_test_op, NULL); 2574 post_test_task = GNUNET_SCHEDULER_add_delayed (timeout, &post_test_op, NULL);
2573 timeout = GNUNET_TIME_relative_multiply (timeout, 1 + (0.1 * num_peers)); 2575 timeout = GNUNET_TIME_relative_multiply (timeout, 1.2 + (0.01 * num_peers));
2574 shutdown_task = GNUNET_SCHEDULER_add_shutdown (shutdown_op, NULL); 2576 shutdown_task = GNUNET_SCHEDULER_add_shutdown (shutdown_op, NULL);
2575 shutdown_task = GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_op, NULL); 2577 shutdown_task = GNUNET_SCHEDULER_add_delayed (timeout, &shutdown_op, NULL);
2576 2578
diff --git a/src/rps/gnunet-service-rps.c b/src/rps/gnunet-service-rps.c
index 84fb33be2..db09c68d2 100644
--- a/src/rps/gnunet-service-rps.c
+++ b/src/rps/gnunet-service-rps.c
@@ -1045,12 +1045,10 @@ restore_valid_peers ()
1045 */ 1045 */
1046void 1046void
1047Peers_initialise (char* fn_valid_peers, 1047Peers_initialise (char* fn_valid_peers,
1048 struct GNUNET_CADET_Handle *cadet_h, 1048 struct GNUNET_CADET_Handle *cadet_h)
1049 const struct GNUNET_PeerIdentity *own_id)
1050{ 1049{
1051 filename_valid_peers = GNUNET_strdup (fn_valid_peers); 1050 filename_valid_peers = GNUNET_strdup (fn_valid_peers);
1052 cadet_handle = cadet_h; 1051 cadet_handle = cadet_h;
1053 own_identity = *own_id;
1054 peer_map = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO); 1052 peer_map = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO);
1055 valid_peers = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO); 1053 valid_peers = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO);
1056 restore_valid_peers (); 1054 restore_valid_peers ();
@@ -1136,14 +1134,12 @@ Peers_get_valid_peers (PeersIterator iterator,
1136 * @param peer the new #GNUNET_PeerIdentity 1134 * @param peer the new #GNUNET_PeerIdentity
1137 * 1135 *
1138 * @return #GNUNET_YES if peer was inserted 1136 * @return #GNUNET_YES if peer was inserted
1139 * #GNUNET_NO otherwise (if peer was already known or 1137 * #GNUNET_NO otherwise
1140 * peer was #own_identity)
1141 */ 1138 */
1142int 1139int
1143Peers_insert_peer (const struct GNUNET_PeerIdentity *peer) 1140Peers_insert_peer (const struct GNUNET_PeerIdentity *peer)
1144{ 1141{
1145 if ( (GNUNET_YES == Peers_check_peer_known (peer)) || 1142 if (GNUNET_YES == Peers_check_peer_known (peer))
1146 (0 == GNUNET_CRYPTO_cmp_peer_identity (peer, &own_identity)) )
1147 { 1143 {
1148 return GNUNET_NO; /* We already know this peer - nothing to do */ 1144 return GNUNET_NO; /* We already know this peer - nothing to do */
1149 } 1145 }
@@ -1161,8 +1157,7 @@ Peers_check_peer_flag (const struct GNUNET_PeerIdentity *peer, enum Peers_PeerFl
1161 * 1157 *
1162 * @param peer the peer whose liveliness is to be checked 1158 * @param peer the peer whose liveliness is to be checked
1163 * @return #GNUNET_YES if peer had to be inserted 1159 * @return #GNUNET_YES if peer had to be inserted
1164 * #GNUNET_NO otherwise (if peer was already known or 1160 * #GNUNET_NO otherwise
1165 * peer was #own_identity)
1166 */ 1161 */
1167int 1162int
1168Peers_issue_peer_liveliness_check (const struct GNUNET_PeerIdentity *peer) 1163Peers_issue_peer_liveliness_check (const struct GNUNET_PeerIdentity *peer)
@@ -1170,10 +1165,6 @@ Peers_issue_peer_liveliness_check (const struct GNUNET_PeerIdentity *peer)
1170 struct PeerContext *peer_ctx; 1165 struct PeerContext *peer_ctx;
1171 int ret; 1166 int ret;
1172 1167
1173 if (0 == GNUNET_CRYPTO_cmp_peer_identity (peer, &own_identity))
1174 {
1175 return GNUNET_NO;
1176 }
1177 ret = Peers_insert_peer (peer); 1168 ret = Peers_insert_peer (peer);
1178 peer_ctx = get_peer_ctx (peer); 1169 peer_ctx = get_peer_ctx (peer);
1179 if (GNUNET_NO == Peers_check_peer_flag (peer, Peers_ONLINE)) 1170 if (GNUNET_NO == Peers_check_peer_flag (peer, Peers_ONLINE))
@@ -1666,10 +1657,11 @@ Peers_cleanup_destroyed_channel (void *cls,
1666{ 1657{
1667 struct GNUNET_PeerIdentity *peer = cls; 1658 struct GNUNET_PeerIdentity *peer = cls;
1668 struct PeerContext *peer_ctx; 1659 struct PeerContext *peer_ctx;
1660 uint32_t *channel_flag;
1669 1661
1670 if (GNUNET_NO == Peers_check_peer_known (peer)) 1662 if (GNUNET_NO == Peers_check_peer_known (peer))
1671 {/* We don't want to implicitly create a context that we're about to kill */ 1663 {/* We don't want to implicitly create a context that we're about to kill */
1672 LOG (GNUNET_ERROR_TYPE_DEBUG, 1664 LOG (GNUNET_ERROR_TYPE_WARNING,
1673 "channel (%s) without associated context was destroyed\n", 1665 "channel (%s) without associated context was destroyed\n",
1674 GNUNET_i2s (peer)); 1666 GNUNET_i2s (peer));
1675 return; 1667 return;
@@ -1697,12 +1689,16 @@ Peers_cleanup_destroyed_channel (void *cls,
1697 if (NULL != peer_ctx->send_channel) 1689 if (NULL != peer_ctx->send_channel)
1698 { 1690 {
1699 GNUNET_CADET_channel_destroy (peer_ctx->send_channel); 1691 GNUNET_CADET_channel_destroy (peer_ctx->send_channel);
1692 channel_flag = Peers_get_channel_flag (&peer_ctx->peer_id, Peers_CHANNEL_ROLE_SENDING);
1693 Peers_set_channel_flag (channel_flag, Peers_CHANNEL_DESTROING);
1700 peer_ctx->send_channel = NULL; 1694 peer_ctx->send_channel = NULL;
1701 peer_ctx->mq = NULL; 1695 peer_ctx->mq = NULL;
1702 } 1696 }
1703 if (NULL != peer_ctx->recv_channel) 1697 if (NULL != peer_ctx->recv_channel)
1704 { 1698 {
1705 GNUNET_CADET_channel_destroy (peer_ctx->recv_channel); 1699 GNUNET_CADET_channel_destroy (peer_ctx->recv_channel);
1700 channel_flag = Peers_get_channel_flag (&peer_ctx->peer_id, Peers_CHANNEL_ROLE_RECEIVING);
1701 Peers_set_channel_flag (channel_flag, Peers_CHANNEL_DESTROING);
1706 peer_ctx->recv_channel = NULL; 1702 peer_ctx->recv_channel = NULL;
1707 } 1703 }
1708 /* Set the #Peers_ONLINE flag accordingly */ 1704 /* Set the #Peers_ONLINE flag accordingly */
@@ -1786,10 +1782,6 @@ Peers_schedule_operation (const struct GNUNET_PeerIdentity *peer,
1786 struct PeerPendingOp pending_op; 1782 struct PeerPendingOp pending_op;
1787 struct PeerContext *peer_ctx; 1783 struct PeerContext *peer_ctx;
1788 1784
1789 if (0 == GNUNET_CRYPTO_cmp_peer_identity (peer, &own_identity))
1790 {
1791 return GNUNET_NO;
1792 }
1793 GNUNET_assert (GNUNET_YES == Peers_check_peer_known (peer)); 1785 GNUNET_assert (GNUNET_YES == Peers_check_peer_known (peer));
1794 1786
1795 //TODO if LIVE/ONLINE execute immediately 1787 //TODO if LIVE/ONLINE execute immediately
@@ -3368,9 +3360,7 @@ handle_peer_pull_reply (void *cls,
3368 if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (att_peer_set, 3360 if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (att_peer_set,
3369 &peers[i]) 3361 &peers[i])
3370 && GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (mal_peer_set, 3362 && GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (mal_peer_set,
3371 &peers[i]) 3363 &peers[i]))
3372 && 0 != GNUNET_CRYPTO_cmp_peer_identity (&peers[i],
3373 &own_identity))
3374 { 3364 {
3375 tmp_att_peer = GNUNET_new (struct AttackedPeer); 3365 tmp_att_peer = GNUNET_new (struct AttackedPeer);
3376 tmp_att_peer->peer_id = peers[i]; 3366 tmp_att_peer->peer_id = peers[i];
@@ -3382,21 +3372,17 @@ handle_peer_pull_reply (void *cls,
3382 continue; 3372 continue;
3383 } 3373 }
3384 #endif /* ENABLE_MALICIOUS */ 3374 #endif /* ENABLE_MALICIOUS */
3385 if (0 != GNUNET_CRYPTO_cmp_peer_identity (&own_identity, 3375 /* Make sure we 'know' about this peer */
3386 &peers[i])) 3376 (void) Peers_insert_peer (&peers[i]);
3387 {
3388 /* Make sure we 'know' about this peer */
3389 (void) Peers_insert_peer (&peers[i]);
3390 3377
3391 if (GNUNET_YES == Peers_check_peer_valid (&peers[i])) 3378 if (GNUNET_YES == Peers_check_peer_valid (&peers[i]))
3392 { 3379 {
3393 CustomPeerMap_put (pull_map, &peers[i]); 3380 CustomPeerMap_put (pull_map, &peers[i]);
3394 } 3381 }
3395 else 3382 else
3396 { 3383 {
3397 Peers_schedule_operation (&peers[i], insert_in_pull_map); 3384 Peers_schedule_operation (&peers[i], insert_in_pull_map);
3398 (void) Peers_issue_peer_liveliness_check (&peers[i]); 3385 (void) Peers_issue_peer_liveliness_check (&peers[i]);
3399 }
3400 } 3386 }
3401 } 3387 }
3402 3388
@@ -3831,10 +3817,8 @@ do_round (void *cls)
3831 for (i = 0; i < a_peers; i++) 3817 for (i = 0; i < a_peers; i++)
3832 { 3818 {
3833 peer = view_array[permut[i]]; 3819 peer = view_array[permut[i]];
3834 if (0 != GNUNET_CRYPTO_cmp_peer_identity (&own_identity, &peer)) // TODO 3820 // FIXME if this fails schedule/loop this for later
3835 { // FIXME if this fails schedule/loop this for later 3821 send_push (&peer);
3836 send_push (&peer);
3837 }
3838 } 3822 }
3839 3823
3840 /* Send PULL requests */ 3824 /* Send PULL requests */
@@ -3852,8 +3836,7 @@ do_round (void *cls)
3852 for (i = first_border; i < second_border; i++) 3836 for (i = first_border; i < second_border; i++)
3853 { 3837 {
3854 peer = view_array[permut[i]]; 3838 peer = view_array[permut[i]];
3855 if (0 != GNUNET_CRYPTO_cmp_peer_identity (&own_identity, &peer) && 3839 if ( GNUNET_NO == Peers_check_peer_flag (&peer, Peers_PULL_REPLY_PENDING))
3856 GNUNET_NO == Peers_check_peer_flag (&peer, Peers_PULL_REPLY_PENDING)) // TODO
3857 { // FIXME if this fails schedule/loop this for later 3840 { // FIXME if this fails schedule/loop this for later
3858 send_pull_request (&peer); 3841 send_pull_request (&peer);
3859 } 3842 }
@@ -4367,7 +4350,7 @@ run (void *cls,
4367 4350
4368 4351
4369 peerinfo_handle = GNUNET_PEERINFO_connect (cfg); 4352 peerinfo_handle = GNUNET_PEERINFO_connect (cfg);
4370 Peers_initialise (fn_valid_peers, cadet_handle, &own_identity); 4353 Peers_initialise (fn_valid_peers, cadet_handle);
4371 GNUNET_free (fn_valid_peers); 4354 GNUNET_free (fn_valid_peers);
4372 4355
4373 /* Initialise sampler */ 4356 /* Initialise sampler */
diff --git a/src/rps/rps-test_util.c b/src/rps/rps-test_util.c
index d47e4952f..08fe96097 100644
--- a/src/rps/rps-test_util.c
+++ b/src/rps/rps-test_util.c
@@ -31,6 +31,17 @@
31 31
32#define LOG(kind, ...) GNUNET_log_from(kind,"rps-test_util",__VA_ARGS__) 32#define LOG(kind, ...) GNUNET_log_from(kind,"rps-test_util",__VA_ARGS__)
33 33
34#define B2B_PAT "%c%c%c%c%c%c%c%c"
35#define B2B(byte) \
36 (byte & 0x80 ? '1' : '0'), \
37 (byte & 0x40 ? '1' : '0'), \
38 (byte & 0x20 ? '1' : '0'), \
39 (byte & 0x10 ? '1' : '0'), \
40 (byte & 0x08 ? '1' : '0'), \
41 (byte & 0x04 ? '1' : '0'), \
42 (byte & 0x02 ? '1' : '0'), \
43 (byte & 0x01 ? '1' : '0')
44
34#ifndef TO_FILE 45#ifndef TO_FILE
35#define TO_FILE 46#define TO_FILE
36#endif /* TO_FILE */ 47#endif /* TO_FILE */
@@ -155,6 +166,9 @@ to_file_raw (const char *file_name, const char *buf, size_t size_buf)
155 166
156 return; 167 return;
157 } 168 }
169 LOG (GNUNET_ERROR_TYPE_WARNING,
170 "Wrote %u bytes raw.\n",
171 size_written);
158 if (GNUNET_YES != GNUNET_DISK_file_close (f)) 172 if (GNUNET_YES != GNUNET_DISK_file_close (f))
159 LOG (GNUNET_ERROR_TYPE_WARNING, 173 LOG (GNUNET_ERROR_TYPE_WARNING,
160 "Unable to close file\n"); 174 "Unable to close file\n");
@@ -180,6 +194,8 @@ to_file_raw_unaligned (const char *file_name,
180 // num_bits_buf_unaligned = bits_needed % 8; 194 // num_bits_buf_unaligned = bits_needed % 8;
181 // return; 195 // return;
182 //} 196 //}
197 LOG (GNUNET_ERROR_TYPE_DEBUG,
198 "Was asked to write %u bits\n", bits_needed);
183 199
184 char buf_write[size_buf + 1]; 200 char buf_write[size_buf + 1];
185 const unsigned bytes_iter = (0 != bits_needed % 8? 201 const unsigned bytes_iter = (0 != bits_needed % 8?
@@ -187,6 +203,14 @@ to_file_raw_unaligned (const char *file_name,
187 bits_needed/8); 203 bits_needed/8);
188 // TODO what if no iteration happens? 204 // TODO what if no iteration happens?
189 unsigned size_buf_write = 0; 205 unsigned size_buf_write = 0;
206 LOG (GNUNET_ERROR_TYPE_DEBUG,
207 "num_bits_buf_unaligned: %u\n",
208 num_bits_buf_unaligned);
209 LOG (GNUNET_ERROR_TYPE_DEBUG,
210 "ua args: size_buf: %u, bits_needed: %u -> iter: %u\n",
211 size_buf,
212 bits_needed,
213 bytes_iter);
190 buf_write[0] = buf_unaligned; 214 buf_write[0] = buf_unaligned;
191 /* Iterate over input bytes */ 215 /* Iterate over input bytes */
192 for (unsigned i = 0; i < bytes_iter; i++) 216 for (unsigned i = 0; i < bytes_iter; i++)
@@ -227,17 +251,57 @@ to_file_raw_unaligned (const char *file_name,
227 { 251 {
228 num_bits_needed_iter = 8; 252 num_bits_needed_iter = 8;
229 } 253 }
254 LOG (GNUNET_ERROR_TYPE_DEBUG,
255 "number of bits needed in this iteration: %u\n",
256 num_bits_needed_iter);
230 mask_bits_needed_iter = ((char) 1 << num_bits_needed_iter) - 1; 257 mask_bits_needed_iter = ((char) 1 << num_bits_needed_iter) - 1;
258 LOG (GNUNET_ERROR_TYPE_DEBUG,
259 "mask needed bits (current iter): "B2B_PAT"\n",
260 B2B(mask_bits_needed_iter));
261 LOG (GNUNET_ERROR_TYPE_DEBUG,
262 "Unaligned byte: "B2B_PAT" (%u bits)\n",
263 B2B(buf_unaligned),
264 num_bits_buf_unaligned);
231 byte_input = buf[i]; 265 byte_input = buf[i];
266 LOG (GNUNET_ERROR_TYPE_DEBUG,
267 "next whole input byte: "B2B_PAT"\n",
268 B2B(byte_input));
232 byte_input &= mask_bits_needed_iter; 269 byte_input &= mask_bits_needed_iter;
233 num_bits_to_align = 8 - num_bits_buf_unaligned; 270 num_bits_to_align = 8 - num_bits_buf_unaligned;
271 LOG (GNUNET_ERROR_TYPE_DEBUG,
272 "input byte, needed bits: "B2B_PAT"\n",
273 B2B(byte_input));
274 LOG (GNUNET_ERROR_TYPE_DEBUG,
275 "number of bits needed to align unaligned bit: %u\n",
276 num_bits_to_align);
234 num_bits_to_move = min (num_bits_to_align, num_bits_needed_iter); 277 num_bits_to_move = min (num_bits_to_align, num_bits_needed_iter);
278 LOG (GNUNET_ERROR_TYPE_DEBUG,
279 "number of bits of new byte to move: %u\n",
280 num_bits_to_move);
235 mask_input_to_move = ((char) 1 << num_bits_to_move) - 1; 281 mask_input_to_move = ((char) 1 << num_bits_to_move) - 1;
282 LOG (GNUNET_ERROR_TYPE_DEBUG,
283 "mask of bits of new byte to take for moving: "B2B_PAT"\n",
284 B2B(mask_input_to_move));
236 bits_to_move = byte_input & mask_input_to_move; 285 bits_to_move = byte_input & mask_input_to_move;
286 LOG (GNUNET_ERROR_TYPE_DEBUG,
287 "masked bits of new byte to take for moving: "B2B_PAT"\n",
288 B2B(bits_to_move));
237 distance_shift_bits = num_bits_buf_unaligned; 289 distance_shift_bits = num_bits_buf_unaligned;
290 LOG (GNUNET_ERROR_TYPE_DEBUG,
291 "distance needed to shift bits to their correct spot: %u\n",
292 distance_shift_bits);
238 bits_moving = bits_to_move << distance_shift_bits; 293 bits_moving = bits_to_move << distance_shift_bits;
294 LOG (GNUNET_ERROR_TYPE_DEBUG,
295 "shifted, masked bits of new byte being moved: "B2B_PAT"\n",
296 B2B(bits_moving));
239 byte_to_fill = buf_unaligned | bits_moving; 297 byte_to_fill = buf_unaligned | bits_moving;
240 if (num_bits_buf_unaligned + num_bits_needed_iter > 8) 298 LOG (GNUNET_ERROR_TYPE_DEBUG,
299 "byte being filled: "B2B_PAT"\n",
300 B2B(byte_to_fill));
301 LOG (GNUNET_ERROR_TYPE_DEBUG,
302 "pending bytes: %u\n",
303 num_bits_buf_unaligned + num_bits_needed_iter);
304 if (num_bits_buf_unaligned + num_bits_needed_iter >= 8)
241 { 305 {
242 /* buf_unaligned was aligned by filling 306 /* buf_unaligned was aligned by filling
243 * -> can be written to storage */ 307 * -> can be written to storage */
@@ -246,10 +310,22 @@ to_file_raw_unaligned (const char *file_name,
246 310
247 /* store the leftover, unaligned bits in buffer */ 311 /* store the leftover, unaligned bits in buffer */
248 mask_input_leftover = mask_bits_needed_iter & (~ mask_input_to_move); 312 mask_input_leftover = mask_bits_needed_iter & (~ mask_input_to_move);
313 LOG (GNUNET_ERROR_TYPE_DEBUG,
314 "mask of leftover bits of new byte: "B2B_PAT"\n",
315 B2B(mask_input_leftover));
249 byte_input_leftover = byte_input & mask_input_leftover; 316 byte_input_leftover = byte_input & mask_input_leftover;
317 LOG (GNUNET_ERROR_TYPE_DEBUG,
318 "masked, leftover bits of new byte: "B2B_PAT"\n",
319 B2B(byte_input_leftover));
250 num_bits_leftover = num_bits_needed_iter - num_bits_to_move; 320 num_bits_leftover = num_bits_needed_iter - num_bits_to_move;
251 num_bits_discard = 8 - num_bits_needed_iter; 321 LOG (GNUNET_ERROR_TYPE_DEBUG,
322 "number of unaligned bits left: %u\n",
323 num_bits_leftover);
324 //num_bits_discard = 8 - num_bits_needed_iter;
252 byte_unaligned_new = byte_input_leftover >> num_bits_to_move; 325 byte_unaligned_new = byte_input_leftover >> num_bits_to_move;
326 LOG (GNUNET_ERROR_TYPE_DEBUG,
327 "new unaligned byte: "B2B_PAT"\n",
328 B2B(byte_unaligned_new));
253 buf_unaligned = byte_unaligned_new; 329 buf_unaligned = byte_unaligned_new;
254 num_bits_buf_unaligned = num_bits_leftover % 8; 330 num_bits_buf_unaligned = num_bits_leftover % 8;
255 } 331 }