aboutsummaryrefslogtreecommitdiff
path: root/src/rps/gnunet-service-rps.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/rps/gnunet-service-rps.c')
-rw-r--r--src/rps/gnunet-service-rps.c173
1 files changed, 105 insertions, 68 deletions
diff --git a/src/rps/gnunet-service-rps.c b/src/rps/gnunet-service-rps.c
index 08f2450f5..05d5c91c3 100644
--- a/src/rps/gnunet-service-rps.c
+++ b/src/rps/gnunet-service-rps.c
@@ -11,7 +11,7 @@
11 WITHOUT ANY WARRANTY; without even the implied warranty of 11 WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Affero General Public License for more details. 13 Affero General Public License for more details.
14 14
15 You should have received a copy of the GNU Affero General Public License 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/>. 16 along with this program. If not, see <http://www.gnu.org/licenses/>.
17 17
@@ -261,7 +261,7 @@ struct ChannelCtx
261}; 261};
262 262
263 263
264#ifdef ENABLE_MALICIOUS 264#if ENABLE_MALICIOUS
265 265
266/** 266/**
267 * If type is 2 This struct is used to store the attacked peers in a DLL 267 * If type is 2 This struct is used to store the attacked peers in a DLL
@@ -492,7 +492,7 @@ static struct GNUNET_PEERINFO_Handle *peerinfo_handle;
492static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify_handle; 492static struct GNUNET_PEERINFO_NotifyContext *peerinfo_notify_handle;
493 493
494 494
495#ifdef ENABLE_MALICIOUS 495#if ENABLE_MALICIOUS
496/** 496/**
497 * Type of malicious peer 497 * Type of malicious peer
498 * 498 *
@@ -1379,6 +1379,7 @@ mq_notify_sent_cb (void *cls)
1379 if (0 == strncmp ("PUSH", pending_msg->type, 4)) 1379 if (0 == strncmp ("PUSH", pending_msg->type, 4))
1380 GNUNET_STATISTICS_update(stats, "# pushes sent", 1, GNUNET_NO); 1380 GNUNET_STATISTICS_update(stats, "# pushes sent", 1, GNUNET_NO);
1381 if (0 == strncmp ("PULL REQUEST", pending_msg->type, 12) && 1381 if (0 == strncmp ("PULL REQUEST", pending_msg->type, 12) &&
1382 NULL != map_single_hop &&
1382 GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop, 1383 GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop,
1383 &pending_msg->peer_ctx->peer_id)) 1384 &pending_msg->peer_ctx->peer_id))
1384 GNUNET_STATISTICS_update(stats, 1385 GNUNET_STATISTICS_update(stats,
@@ -2576,7 +2577,7 @@ insert_in_sampler (void *cls,
2576 * messages to it */ 2577 * messages to it */
2577 //indicate_sending_intention (peer); 2578 //indicate_sending_intention (peer);
2578 } 2579 }
2579 #ifdef TO_FILE 2580#ifdef TO_FILE
2580 sub->num_observed_peers++; 2581 sub->num_observed_peers++;
2581 GNUNET_CONTAINER_multipeermap_put 2582 GNUNET_CONTAINER_multipeermap_put
2582 (sub->observed_unique_peers, 2583 (sub->observed_unique_peers,
@@ -2590,7 +2591,7 @@ insert_in_sampler (void *cls,
2590 sub->num_observed_peers, 2591 sub->num_observed_peers,
2591 num_observed_unique_peers, 2592 num_observed_unique_peers,
2592 1.0*num_observed_unique_peers/sub->num_observed_peers) 2593 1.0*num_observed_unique_peers/sub->num_observed_peers)
2593 #endif /* TO_FILE */ 2594#endif /* TO_FILE */
2594} 2595}
2595 2596
2596 2597
@@ -2675,11 +2676,23 @@ static void
2675remove_peer (struct Sub *sub, 2676remove_peer (struct Sub *sub,
2676 const struct GNUNET_PeerIdentity *peer) 2677 const struct GNUNET_PeerIdentity *peer)
2677{ 2678{
2678 (void) View_remove_peer (sub->view, peer); 2679 (void) View_remove_peer (sub->view,
2679 CustomPeerMap_remove_peer (sub->pull_map, peer); 2680 peer);
2680 CustomPeerMap_remove_peer (sub->push_map, peer); 2681 CustomPeerMap_remove_peer (sub->pull_map,
2681 RPS_sampler_reinitialise_by_value (sub->sampler, peer); 2682 peer);
2682 destroy_peer (get_peer_ctx (sub->peer_map, peer)); 2683 CustomPeerMap_remove_peer (sub->push_map,
2684 peer);
2685 RPS_sampler_reinitialise_by_value (sub->sampler,
2686 peer);
2687 /* We want to destroy the peer now.
2688 * Sometimes, it just seems that it's already been removed from the peer_map,
2689 * so check the peer_map first. */
2690 if (GNUNET_YES == check_peer_known (sub->peer_map,
2691 peer))
2692 {
2693 destroy_peer (get_peer_ctx (sub->peer_map,
2694 peer));
2695 }
2683} 2696}
2684 2697
2685 2698
@@ -2701,15 +2714,19 @@ clean_peer (struct Sub *sub,
2701 LOG (GNUNET_ERROR_TYPE_DEBUG, 2714 LOG (GNUNET_ERROR_TYPE_DEBUG,
2702 "Going to remove send channel to peer %s\n", 2715 "Going to remove send channel to peer %s\n",
2703 GNUNET_i2s (peer)); 2716 GNUNET_i2s (peer));
2704 #ifdef ENABLE_MALICIOUS 2717 #if ENABLE_MALICIOUS
2705 if (0 != GNUNET_CRYPTO_cmp_peer_identity (&attacked_peer, peer)) 2718 if (0 != GNUNET_CRYPTO_cmp_peer_identity (&attacked_peer,
2706 (void) destroy_sending_channel (get_peer_ctx (sub->peer_map, peer)); 2719 peer))
2720 (void) destroy_sending_channel (get_peer_ctx (sub->peer_map,
2721 peer));
2707 #else /* ENABLE_MALICIOUS */ 2722 #else /* ENABLE_MALICIOUS */
2708 (void) destroy_sending_channel (get_peer_ctx (sub->peer_map, peer)); 2723 (void) destroy_sending_channel (get_peer_ctx (sub->peer_map,
2724 peer));
2709 #endif /* ENABLE_MALICIOUS */ 2725 #endif /* ENABLE_MALICIOUS */
2710 } 2726 }
2711 2727
2712 if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (sub->peer_map, peer)) 2728 if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (sub->peer_map,
2729 peer))
2713 { 2730 {
2714 /* Peer was already removed by callback on destroyed channel */ 2731 /* Peer was already removed by callback on destroyed channel */
2715 LOG (GNUNET_ERROR_TYPE_WARNING, 2732 LOG (GNUNET_ERROR_TYPE_WARNING,
@@ -2846,19 +2863,15 @@ new_sub (const struct GNUNET_HashCode *hash,
2846 { 2863 {
2847 char *tmp_filename_valid_peers; 2864 char *tmp_filename_valid_peers;
2848 char str_hash[105]; 2865 char str_hash[105];
2849 uint32_t len_filename_valid_peers; 2866
2850 2867 GNUNET_snprintf (str_hash,
2851 (void) GNUNET_snprintf (str_hash, 105, GNUNET_h2s_full (hash)); 2868 sizeof (str_hash),
2852 tmp_filename_valid_peers = GNUNET_strdup (sub->filename_valid_peers); 2869 GNUNET_h2s_full (hash));
2853 GNUNET_free (sub->filename_valid_peers); 2870 tmp_filename_valid_peers = sub->filename_valid_peers;
2854 len_filename_valid_peers = strlen (tmp_filename_valid_peers) + 105; /* Len of full hash + 1 */ 2871 GNUNET_asprintf (&sub->filename_valid_peers,
2855 sub->filename_valid_peers = GNUNET_malloc (len_filename_valid_peers); 2872 "%s%s",
2856 strncat (sub->filename_valid_peers, 2873 tmp_filename_valid_peers,
2857 tmp_filename_valid_peers, 2874 str_hash);
2858 len_filename_valid_peers);
2859 strncat (sub->filename_valid_peers,
2860 str_hash,
2861 len_filename_valid_peers);
2862 GNUNET_free (tmp_filename_valid_peers); 2875 GNUNET_free (tmp_filename_valid_peers);
2863 } 2876 }
2864 sub->peer_map = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO); 2877 sub->peer_map = GNUNET_CONTAINER_multipeermap_create (4, GNUNET_NO);
@@ -2874,7 +2887,7 @@ new_sub (const struct GNUNET_HashCode *hash,
2874 2887
2875 /* Logging of internals */ 2888 /* Logging of internals */
2876 sub->file_name_view_log = store_prefix_file_name (&own_identity, "view"); 2889 sub->file_name_view_log = store_prefix_file_name (&own_identity, "view");
2877 #ifdef TO_FILE 2890#ifdef TO_FILE
2878 sub->file_name_observed_log = store_prefix_file_name (&own_identity, 2891 sub->file_name_observed_log = store_prefix_file_name (&own_identity,
2879 "observed"); 2892 "observed");
2880 sub->file_name_push_recv = store_prefix_file_name (&own_identity, 2893 sub->file_name_push_recv = store_prefix_file_name (&own_identity,
@@ -2884,7 +2897,7 @@ new_sub (const struct GNUNET_HashCode *hash,
2884 sub->num_observed_peers = 0; 2897 sub->num_observed_peers = 0;
2885 sub->observed_unique_peers = GNUNET_CONTAINER_multipeermap_create (1, 2898 sub->observed_unique_peers = GNUNET_CONTAINER_multipeermap_create (1,
2886 GNUNET_NO); 2899 GNUNET_NO);
2887 #endif /* TO_FILE */ 2900#endif /* TO_FILE */
2888 2901
2889 /* Set up data structures for gossip */ 2902 /* Set up data structures for gossip */
2890 sub->push_map = CustomPeerMap_create (4); 2903 sub->push_map = CustomPeerMap_create (4);
@@ -2915,8 +2928,10 @@ static void
2915destroy_sub (struct Sub *sub) 2928destroy_sub (struct Sub *sub)
2916{ 2929{
2917#ifdef TO_FILE 2930#ifdef TO_FILE
2918 char push_recv_str[1536] = ""; /* 256 * 6 (1 whitespace, 1 comma, up to 4 chars) */ 2931#define SIZE_DUMP_FILE 1536 /* 256 * 6 (1 whitespace, 1 comma, up to 4 chars) */
2919 char pull_delays_str[1536] = ""; /* 256 * 6 (1 whitespace, 1 comma, up to 4 chars) */ 2932 char push_recv_str[SIZE_DUMP_FILE + 1] = "";
2933 char pull_delays_str[SIZE_DUMP_FILE + 1] = "";
2934 char *recv_str_iter;
2920#endif /* TO_FILE */ 2935#endif /* TO_FILE */
2921 GNUNET_assert (NULL != sub); 2936 GNUNET_assert (NULL != sub);
2922 GNUNET_assert (NULL != sub->do_round_task); 2937 GNUNET_assert (NULL != sub->do_round_task);
@@ -2945,36 +2960,49 @@ destroy_sub (struct Sub *sub)
2945 sub->file_name_observed_log = NULL; 2960 sub->file_name_observed_log = NULL;
2946 2961
2947 /* Write push frequencies to disk */ 2962 /* Write push frequencies to disk */
2963 recv_str_iter = push_recv_str;
2948 for (uint32_t i = 0; i < 256; i++) 2964 for (uint32_t i = 0; i < 256; i++)
2949 { 2965 {
2950 char push_recv_str_tmp[8]; 2966 char push_recv_str_tmp[8];
2951 (void) snprintf (push_recv_str_tmp, 8, "%" PRIu32 "\n", sub->push_recv[i]); 2967
2952 (void) strncat (push_recv_str, 2968 GNUNET_snprintf (push_recv_str_tmp,
2953 push_recv_str_tmp, 2969 sizeof (push_recv_str_tmp),
2954 1535 - strnlen (push_recv_str, 1536)); 2970 "%" PRIu32 "\n",
2955 } 2971 sub->push_recv[i]);
2956 (void) strncat (push_recv_str, 2972 recv_str_iter = stpncpy (recv_str_iter,
2957 "\n", 2973 push_recv_str_tmp,
2958 1535 - strnlen (push_recv_str, 1536)); 2974 6);
2959 LOG (GNUNET_ERROR_TYPE_DEBUG, "Writing push stats to disk\n"); 2975 }
2960 to_file_w_len (sub->file_name_push_recv, 1535, push_recv_str); 2976 (void) stpcpy (recv_str_iter,
2977 "\n");
2978 LOG (GNUNET_ERROR_TYPE_DEBUG,
2979 "Writing push stats to disk\n");
2980 to_file_w_len (sub->file_name_push_recv,
2981 SIZE_DUMP_FILE,
2982 push_recv_str);
2961 GNUNET_free (sub->file_name_push_recv); 2983 GNUNET_free (sub->file_name_push_recv);
2962 sub->file_name_push_recv = NULL; 2984 sub->file_name_push_recv = NULL;
2963 2985
2964 /* Write pull delays to disk */ 2986 /* Write pull delays to disk */
2987 recv_str_iter = pull_delays_str;
2965 for (uint32_t i = 0; i < 256; i++) 2988 for (uint32_t i = 0; i < 256; i++)
2966 { 2989 {
2967 char pull_delays_str_tmp[8]; 2990 char pull_delays_str_tmp[8];
2968 (void) snprintf (pull_delays_str_tmp, 8, "%" PRIu32 "\n", sub->pull_delays[i]); 2991
2969 (void) strncat (pull_delays_str, 2992 GNUNET_snprintf (pull_delays_str_tmp,
2970 pull_delays_str_tmp, 2993 sizeof (pull_delays_str_tmp),
2971 1535 - strnlen (pull_delays_str, 1536)); 2994 "%" PRIu32 "\n",
2972 } 2995 sub->pull_delays[i]);
2973 (void) strncat (pull_delays_str, 2996 recv_str_iter = stpncpy (recv_str_iter,
2974 "\n", 2997 pull_delays_str_tmp,
2975 1535 - strnlen (pull_delays_str, 1536)); 2998 6);
2999 }
3000 (void) stpcpy (recv_str_iter,
3001 "\n");
2976 LOG (GNUNET_ERROR_TYPE_DEBUG, "Writing pull delays to disk\n"); 3002 LOG (GNUNET_ERROR_TYPE_DEBUG, "Writing pull delays to disk\n");
2977 to_file_w_len (sub->file_name_pull_delays, 1535, pull_delays_str); 3003 to_file_w_len (sub->file_name_pull_delays,
3004 SIZE_DUMP_FILE,
3005 pull_delays_str);
2978 GNUNET_free (sub->file_name_pull_delays); 3006 GNUNET_free (sub->file_name_pull_delays);
2979 sub->file_name_pull_delays = NULL; 3007 sub->file_name_pull_delays = NULL;
2980 3008
@@ -3028,8 +3056,11 @@ core_connects (void *cls,
3028 (void) cls; 3056 (void) cls;
3029 (void) mq; 3057 (void) mq;
3030 3058
3031 GNUNET_CONTAINER_multipeermap_put (map_single_hop, peer, NULL, 3059 GNUNET_assert (GNUNET_YES ==
3032 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY); 3060 GNUNET_CONTAINER_multipeermap_put (map_single_hop,
3061 peer,
3062 NULL,
3063 GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
3033 return NULL; 3064 return NULL;
3034} 3065}
3035 3066
@@ -3436,7 +3467,7 @@ handle_peer_push (void *cls,
3436 GNUNET_STATISTICS_update(stats, "# push message received", 1, GNUNET_NO); 3467 GNUNET_STATISTICS_update(stats, "# push message received", 1, GNUNET_NO);
3437 } 3468 }
3438 3469
3439 #ifdef ENABLE_MALICIOUS 3470 #if ENABLE_MALICIOUS
3440 struct AttackedPeer *tmp_att_peer; 3471 struct AttackedPeer *tmp_att_peer;
3441 3472
3442 if ( (1 == mal_type) || 3473 if ( (1 == mal_type) ||
@@ -3512,7 +3543,7 @@ handle_peer_pull_request (void *cls,
3512 } 3543 }
3513 } 3544 }
3514 3545
3515 #ifdef ENABLE_MALICIOUS 3546 #if ENABLE_MALICIOUS
3516 if (1 == mal_type 3547 if (1 == mal_type
3517 || 3 == mal_type) 3548 || 3 == mal_type)
3518 { /* Try to maximise representation */ 3549 { /* Try to maximise representation */
@@ -3606,7 +3637,7 @@ handle_peer_pull_reply (void *cls,
3606 const struct GNUNET_PeerIdentity *peers; 3637 const struct GNUNET_PeerIdentity *peers;
3607 struct Sub *sub = channel_ctx->peer_ctx->sub; 3638 struct Sub *sub = channel_ctx->peer_ctx->sub;
3608 uint32_t i; 3639 uint32_t i;
3609#ifdef ENABLE_MALICIOUS 3640#if ENABLE_MALICIOUS
3610 struct AttackedPeer *tmp_att_peer; 3641 struct AttackedPeer *tmp_att_peer;
3611#endif /* ENABLE_MALICIOUS */ 3642#endif /* ENABLE_MALICIOUS */
3612 3643
@@ -3618,7 +3649,8 @@ handle_peer_pull_reply (void *cls,
3618 "# pull reply messages received", 3649 "# pull reply messages received",
3619 1, 3650 1,
3620 GNUNET_NO); 3651 GNUNET_NO);
3621 if (GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop, 3652 if (NULL != map_single_hop &&
3653 GNUNET_NO == GNUNET_CONTAINER_multipeermap_contains (map_single_hop,
3622 &channel_ctx->peer_ctx->peer_id)) 3654 &channel_ctx->peer_ctx->peer_id))
3623 { 3655 {
3624 GNUNET_STATISTICS_update (stats, 3656 GNUNET_STATISTICS_update (stats,
@@ -3628,7 +3660,7 @@ handle_peer_pull_reply (void *cls,
3628 } 3660 }
3629 } 3661 }
3630 3662
3631 #ifdef ENABLE_MALICIOUS 3663 #if ENABLE_MALICIOUS
3632 // We shouldn't even receive pull replies as we're not sending 3664 // We shouldn't even receive pull replies as we're not sending
3633 if (2 == mal_type) 3665 if (2 == mal_type)
3634 { 3666 {
@@ -3649,7 +3681,7 @@ handle_peer_pull_reply (void *cls,
3649 i, 3681 i,
3650 GNUNET_i2s (&peers[i])); 3682 GNUNET_i2s (&peers[i]));
3651 3683
3652 #ifdef ENABLE_MALICIOUS 3684 #if ENABLE_MALICIOUS
3653 if ((NULL != att_peer_set) && 3685 if ((NULL != att_peer_set) &&
3654 (1 == mal_type || 3 == mal_type)) 3686 (1 == mal_type || 3 == mal_type))
3655 { /* Add attacked peer to local list */ 3687 { /* Add attacked peer to local list */
@@ -3670,25 +3702,30 @@ handle_peer_pull_reply (void *cls,
3670 } 3702 }
3671 #endif /* ENABLE_MALICIOUS */ 3703 #endif /* ENABLE_MALICIOUS */
3672 /* Make sure we 'know' about this peer */ 3704 /* Make sure we 'know' about this peer */
3673 (void) insert_peer (channel_ctx->peer_ctx->sub, &peers[i]); 3705 (void) insert_peer (channel_ctx->peer_ctx->sub,
3706 &peers[i]);
3674 3707
3675 if (GNUNET_YES == check_peer_valid (channel_ctx->peer_ctx->sub->valid_peers, 3708 if (GNUNET_YES == check_peer_valid (channel_ctx->peer_ctx->sub->valid_peers,
3676 &peers[i])) 3709 &peers[i]))
3677 { 3710 {
3678 CustomPeerMap_put (channel_ctx->peer_ctx->sub->pull_map, &peers[i]); 3711 CustomPeerMap_put (channel_ctx->peer_ctx->sub->pull_map,
3712 &peers[i]);
3679 } 3713 }
3680 else 3714 else
3681 { 3715 {
3682 schedule_operation (channel_ctx->peer_ctx, 3716 schedule_operation (channel_ctx->peer_ctx,
3683 insert_in_pull_map, 3717 insert_in_pull_map,
3684 channel_ctx->peer_ctx->sub); /* cls */ 3718 channel_ctx->peer_ctx->sub); /* cls */
3685 (void) issue_peer_online_check (channel_ctx->peer_ctx->sub, &peers[i]); 3719 (void) issue_peer_online_check (channel_ctx->peer_ctx->sub,
3720 &peers[i]);
3686 } 3721 }
3687 } 3722 }
3688 3723
3689 UNSET_PEER_FLAG (get_peer_ctx (channel_ctx->peer_ctx->sub->peer_map, sender), 3724 UNSET_PEER_FLAG (get_peer_ctx (channel_ctx->peer_ctx->sub->peer_map,
3725 sender),
3690 Peers_PULL_REPLY_PENDING); 3726 Peers_PULL_REPLY_PENDING);
3691 clean_peer (channel_ctx->peer_ctx->sub, sender); 3727 clean_peer (channel_ctx->peer_ctx->sub,
3728 sender);
3692 3729
3693 GNUNET_break_op (check_peer_known (channel_ctx->peer_ctx->sub->peer_map, 3730 GNUNET_break_op (check_peer_known (channel_ctx->peer_ctx->sub->peer_map,
3694 sender)); 3731 sender));
@@ -3812,7 +3849,7 @@ send_push (struct PeerContext *peer_ctx)
3812} 3849}
3813 3850
3814 3851
3815#ifdef ENABLE_MALICIOUS 3852#if ENABLE_MALICIOUS
3816 3853
3817 3854
3818/** 3855/**
@@ -4534,7 +4571,7 @@ shutdown_task (void *cls)
4534 } 4571 }
4535 GNUNET_CADET_disconnect (cadet_handle); 4572 GNUNET_CADET_disconnect (cadet_handle);
4536 cadet_handle = NULL; 4573 cadet_handle = NULL;
4537#ifdef ENABLE_MALICIOUS 4574#if ENABLE_MALICIOUS
4538 struct AttackedPeer *tmp_att_peer; 4575 struct AttackedPeer *tmp_att_peer;
4539 GNUNET_array_grow (mal_peers, 4576 GNUNET_array_grow (mal_peers,
4540 num_mal_peers, 4577 num_mal_peers,
@@ -4647,7 +4684,7 @@ run (void *cls,
4647 GNUNET_log (GNUNET_ERROR_TYPE_INFO, 4684 GNUNET_log (GNUNET_ERROR_TYPE_INFO,
4648 "STARTING SERVICE (rps) for peer [%s]\n", 4685 "STARTING SERVICE (rps) for peer [%s]\n",
4649 GNUNET_i2s (&own_identity)); 4686 GNUNET_i2s (&own_identity));
4650#ifdef ENABLE_MALICIOUS 4687#if ENABLE_MALICIOUS
4651 GNUNET_log (GNUNET_ERROR_TYPE_WARNING, 4688 GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
4652 "Malicious execution compiled in.\n"); 4689 "Malicious execution compiled in.\n");
4653#endif /* ENABLE_MALICIOUS */ 4690#endif /* ENABLE_MALICIOUS */
@@ -4740,7 +4777,7 @@ GNUNET_SERVICE_MAIN
4740 GNUNET_MESSAGE_TYPE_RPS_CS_SEED, 4777 GNUNET_MESSAGE_TYPE_RPS_CS_SEED,
4741 struct GNUNET_RPS_CS_SeedMessage, 4778 struct GNUNET_RPS_CS_SeedMessage,
4742 NULL), 4779 NULL),
4743#ifdef ENABLE_MALICIOUS 4780#if ENABLE_MALICIOUS
4744 GNUNET_MQ_hd_var_size (client_act_malicious, 4781 GNUNET_MQ_hd_var_size (client_act_malicious,
4745 GNUNET_MESSAGE_TYPE_RPS_ACT_MALICIOUS, 4782 GNUNET_MESSAGE_TYPE_RPS_ACT_MALICIOUS,
4746 struct GNUNET_RPS_CS_ActMaliciousMessage, 4783 struct GNUNET_RPS_CS_ActMaliciousMessage,