diff options
author | Matthias Wachs <wachs@net.in.tum.de> | 2013-11-19 12:40:04 +0000 |
---|---|---|
committer | Matthias Wachs <wachs@net.in.tum.de> | 2013-11-19 12:40:04 +0000 |
commit | f2554d328813646fe2bf6771ea269578b9961622 (patch) | |
tree | 04e82cd9bb13dac95b91ed9bcaad228ae66d3dcc /src/ats | |
parent | 8dda13088674ec864e3133e8a5770e01704e8409 (diff) | |
download | gnunet-f2554d328813646fe2bf6771ea269578b9961622.tar.gz gnunet-f2554d328813646fe2bf6771ea269578b9961622.zip |
- reduce debug level in proportional
- store pref client in DLL
- remove disconnected clients
Diffstat (limited to 'src/ats')
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.c | 99 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_addresses.h | 14 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_normalization.c | 54 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_normalization.h | 10 | ||||
-rw-r--r-- | src/ats/gnunet-service-ats_performance.c | 3 | ||||
-rw-r--r-- | src/ats/libgnunet_plugin_ats_proportional.c | 6 |
6 files changed, 164 insertions, 22 deletions
diff --git a/src/ats/gnunet-service-ats_addresses.c b/src/ats/gnunet-service-ats_addresses.c index 154838a00..746dbd7e3 100644 --- a/src/ats/gnunet-service-ats_addresses.c +++ b/src/ats/gnunet-service-ats_addresses.c | |||
@@ -249,6 +249,27 @@ struct GAS_Addresses_Suggestion_Requests | |||
249 | struct GNUNET_PeerIdentity id; | 249 | struct GNUNET_PeerIdentity id; |
250 | }; | 250 | }; |
251 | 251 | ||
252 | /** | ||
253 | * Pending Address suggestion requests | ||
254 | */ | ||
255 | struct GAS_Addresses_Preference_Clients | ||
256 | { | ||
257 | /** | ||
258 | * Next in DLL | ||
259 | */ | ||
260 | struct GAS_Addresses_Preference_Clients *next; | ||
261 | |||
262 | /** | ||
263 | * Previous in DLL | ||
264 | */ | ||
265 | struct GAS_Addresses_Preference_Clients *prev; | ||
266 | |||
267 | /** | ||
268 | * Peer ID | ||
269 | */ | ||
270 | void *client; | ||
271 | }; | ||
272 | |||
252 | /** | 273 | /** |
253 | * Handle for ATS address component | 274 | * Handle for ATS address component |
254 | */ | 275 | */ |
@@ -290,6 +311,16 @@ struct GAS_Addresses_Handle | |||
290 | struct GAS_Addresses_Suggestion_Requests *pending_requests_tail; | 311 | struct GAS_Addresses_Suggestion_Requests *pending_requests_tail; |
291 | 312 | ||
292 | /** | 313 | /** |
314 | * Address suggestion requests DLL head | ||
315 | */ | ||
316 | struct GAS_Addresses_Preference_Clients *preference_clients_head; | ||
317 | |||
318 | /** | ||
319 | * Address suggestion requests DLL head | ||
320 | */ | ||
321 | struct GAS_Addresses_Preference_Clients *preference_clients_tail; | ||
322 | |||
323 | /** | ||
293 | * Solver functions | 324 | * Solver functions |
294 | */ | 325 | */ |
295 | struct GNUNET_ATS_PluginEnvironment env; | 326 | struct GNUNET_ATS_PluginEnvironment env; |
@@ -636,7 +667,7 @@ find_exact_address (struct GAS_Addresses_Handle *handle, | |||
636 | const double * | 667 | const double * |
637 | get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id) | 668 | get_preferences_cb (void *cls, const struct GNUNET_PeerIdentity *id) |
638 | { | 669 | { |
639 | return GAS_normalization_get_preferences (id); | 670 | return GAS_normalization_get_preferences_by_peer (id); |
640 | } | 671 | } |
641 | 672 | ||
642 | /** | 673 | /** |
@@ -1365,7 +1396,7 @@ struct RelativityContext { | |||
1365 | struct GAS_Addresses_Handle *ah; | 1396 | struct GAS_Addresses_Handle *ah; |
1366 | }; | 1397 | }; |
1367 | 1398 | ||
1368 | 1399 | #if 0 | |
1369 | static int | 1400 | static int |
1370 | eval_preference_relativity (void *cls, const struct GNUNET_PeerIdentity *id, void *obj) | 1401 | eval_preference_relativity (void *cls, const struct GNUNET_PeerIdentity *id, void *obj) |
1371 | { | 1402 | { |
@@ -1390,6 +1421,7 @@ eval_preference_relativity (void *cls, const struct GNUNET_PeerIdentity *id, voi | |||
1390 | 1421 | ||
1391 | return GNUNET_OK; | 1422 | return GNUNET_OK; |
1392 | } | 1423 | } |
1424 | #endif | ||
1393 | 1425 | ||
1394 | 1426 | ||
1395 | /** | 1427 | /** |
@@ -1401,6 +1433,7 @@ void | |||
1401 | GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) | 1433 | GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) |
1402 | { | 1434 | { |
1403 | struct GAS_Addresses_Suggestion_Requests *cur; | 1435 | struct GAS_Addresses_Suggestion_Requests *cur; |
1436 | struct GAS_Addresses_Preference_Clients *pcur; | ||
1404 | int c; | 1437 | int c; |
1405 | 1438 | ||
1406 | float quality_requests_fulfilled = 0.0; | 1439 | float quality_requests_fulfilled = 0.0; |
@@ -1491,11 +1524,13 @@ GAS_addresses_evaluate_assignment (struct GAS_Addresses_Handle *ah) | |||
1491 | } | 1524 | } |
1492 | 1525 | ||
1493 | /* 3) How well does selection match application requirements */ | 1526 | /* 3) How well does selection match application requirements */ |
1494 | for (cur = ah->pending_requests_head; NULL != cur; cur = cur->next) | 1527 | include_requirements = GNUNET_NO; |
1528 | for (pcur = ah->preference_clients_head; NULL != pcur; pcur = pcur->next) | ||
1495 | { | 1529 | { |
1496 | GNUNET_CONTAINER_multipeermap_get_multiple (ah->addresses, | 1530 | /* V metrics*/ |
1497 | &cur->id, &eval_preference_relativity, ah); | 1531 | { |
1498 | include_requirements = GNUNET_NO; | 1532 | /* V peers */ |
1533 | } | ||
1499 | } | 1534 | } |
1500 | /* GUQ */ | 1535 | /* GUQ */ |
1501 | 1536 | ||
@@ -1656,7 +1691,40 @@ normalized_property_changed_cb (void *cls, struct ATS_Address *address, | |||
1656 | ah->env.sf.s_address_update_property (ah->solver, address, type, 0, prop_rel); | 1691 | ah->env.sf.s_address_update_property (ah->solver, address, type, 0, prop_rel); |
1657 | } | 1692 | } |
1658 | 1693 | ||
1694 | static struct GAS_Addresses_Preference_Clients * | ||
1695 | find_preference_client (struct GAS_Addresses_Handle *handle, void *client) | ||
1696 | { | ||
1697 | struct GAS_Addresses_Preference_Clients *cur; | ||
1698 | |||
1699 | for (cur = handle->preference_clients_head; NULL != cur; cur = cur->next) | ||
1700 | { | ||
1701 | if (cur->client == client) | ||
1702 | return cur; | ||
1703 | } | ||
1704 | return NULL; | ||
1705 | } | ||
1706 | |||
1707 | /** | ||
1708 | * A performance client disconnected | ||
1709 | * | ||
1710 | * @param handle address handle | ||
1711 | * @param client the client | ||
1712 | */ | ||
1713 | |||
1714 | void | ||
1715 | GAS_addresses_preference_client_disconnect (struct GAS_Addresses_Handle *handle, | ||
1716 | void *client) | ||
1717 | { | ||
1718 | struct GAS_Addresses_Preference_Clients * pc; | ||
1719 | if (NULL != (pc = find_preference_client (handle, client))) | ||
1720 | { | ||
1721 | GNUNET_CONTAINER_DLL_remove (handle->preference_clients_head, | ||
1722 | handle->preference_clients_tail, pc); | ||
1723 | GNUNET_free (pc); | ||
1724 | } | ||
1659 | 1725 | ||
1726 | GAS_normalization_preference_client_disconnect (client); | ||
1727 | } | ||
1660 | 1728 | ||
1661 | /** | 1729 | /** |
1662 | * Change the preference for a peer | 1730 | * Change the preference for a peer |
@@ -1668,10 +1736,11 @@ normalized_property_changed_cb (void *cls, struct ATS_Address *address, | |||
1668 | * @param score_abs the new preference score | 1736 | * @param score_abs the new preference score |
1669 | */ | 1737 | */ |
1670 | void | 1738 | void |
1671 | GAS_addresses_change_preference (struct GAS_Addresses_Handle *handle, | 1739 | GAS_addresses_preference_change (struct GAS_Addresses_Handle *handle, |
1672 | void *client, const struct GNUNET_PeerIdentity *peer, | 1740 | void *client, const struct GNUNET_PeerIdentity *peer, |
1673 | enum GNUNET_ATS_PreferenceKind kind, float score_abs) | 1741 | enum GNUNET_ATS_PreferenceKind kind, float score_abs) |
1674 | { | 1742 | { |
1743 | struct GAS_Addresses_Preference_Clients * pc; | ||
1675 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, | 1744 | GNUNET_log(GNUNET_ERROR_TYPE_DEBUG, |
1676 | "Received `%s' for peer `%s' for client %p\n", "CHANGE PREFERENCE", | 1745 | "Received `%s' for peer `%s' for client %p\n", "CHANGE PREFERENCE", |
1677 | GNUNET_i2s (peer), client); | 1746 | GNUNET_i2s (peer), client); |
@@ -1689,6 +1758,14 @@ GAS_addresses_change_preference (struct GAS_Addresses_Handle *handle, | |||
1689 | return; | 1758 | return; |
1690 | } | 1759 | } |
1691 | 1760 | ||
1761 | if (NULL == find_preference_client (handle, client)) | ||
1762 | { | ||
1763 | pc = GNUNET_malloc (sizeof (struct GAS_Addresses_Preference_Clients)); | ||
1764 | pc->client = client; | ||
1765 | GNUNET_CONTAINER_DLL_insert (handle->preference_clients_head, | ||
1766 | handle->preference_clients_tail, pc); | ||
1767 | } | ||
1768 | |||
1692 | handle->env.sf.s_bulk_start (handle->solver); | 1769 | handle->env.sf.s_bulk_start (handle->solver); |
1693 | /* Tell normalization about change, normalization will call callback if preference changed */ | 1770 | /* Tell normalization about change, normalization will call callback if preference changed */ |
1694 | GAS_normalization_normalize_preference (client, peer, kind, score_abs); | 1771 | GAS_normalization_normalize_preference (client, peer, kind, score_abs); |
@@ -2110,6 +2187,7 @@ void | |||
2110 | GAS_addresses_done (struct GAS_Addresses_Handle *handle) | 2187 | GAS_addresses_done (struct GAS_Addresses_Handle *handle) |
2111 | { | 2188 | { |
2112 | struct GAS_Addresses_Suggestion_Requests *cur; | 2189 | struct GAS_Addresses_Suggestion_Requests *cur; |
2190 | struct GAS_Addresses_Preference_Clients *pcur; | ||
2113 | 2191 | ||
2114 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Shutting down addresses\n"); | 2192 | GNUNET_log(GNUNET_ERROR_TYPE_INFO, "Shutting down addresses\n"); |
2115 | GNUNET_assert(NULL != handle); | 2193 | GNUNET_assert(NULL != handle); |
@@ -2123,6 +2201,13 @@ GAS_addresses_done (struct GAS_Addresses_Handle *handle) | |||
2123 | GNUNET_free(cur); | 2201 | GNUNET_free(cur); |
2124 | } | 2202 | } |
2125 | 2203 | ||
2204 | while (NULL != (pcur = handle->preference_clients_head)) | ||
2205 | { | ||
2206 | GNUNET_CONTAINER_DLL_remove (handle->preference_clients_head, | ||
2207 | handle->preference_clients_tail, pcur); | ||
2208 | GNUNET_free (pcur); | ||
2209 | } | ||
2210 | |||
2126 | GNUNET_PLUGIN_unload (handle->plugin, handle->solver); | 2211 | GNUNET_PLUGIN_unload (handle->plugin, handle->solver); |
2127 | GNUNET_free (handle->plugin); | 2212 | GNUNET_free (handle->plugin); |
2128 | GNUNET_free(handle); | 2213 | GNUNET_free(handle); |
diff --git a/src/ats/gnunet-service-ats_addresses.h b/src/ats/gnunet-service-ats_addresses.h index 2f1c58705..887eeee81 100644 --- a/src/ats/gnunet-service-ats_addresses.h +++ b/src/ats/gnunet-service-ats_addresses.h | |||
@@ -523,6 +523,18 @@ void | |||
523 | GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle, | 523 | GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle, |
524 | const struct GNUNET_PeerIdentity *peer); | 524 | const struct GNUNET_PeerIdentity *peer); |
525 | 525 | ||
526 | |||
527 | /** | ||
528 | * A performance client disconnected | ||
529 | * | ||
530 | * @param handle address handle | ||
531 | * @param client the client | ||
532 | */ | ||
533 | |||
534 | void | ||
535 | GAS_addresses_preference_client_disconnect (struct GAS_Addresses_Handle *handle, | ||
536 | void *client); | ||
537 | |||
526 | /** | 538 | /** |
527 | * Change the preference for a peer | 539 | * Change the preference for a peer |
528 | * | 540 | * |
@@ -533,7 +545,7 @@ GAS_addresses_handle_backoff_reset (struct GAS_Addresses_Handle *handle, | |||
533 | * @param score_abs the new preference score | 545 | * @param score_abs the new preference score |
534 | */ | 546 | */ |
535 | void | 547 | void |
536 | GAS_addresses_change_preference (struct GAS_Addresses_Handle *handle, | 548 | GAS_addresses_preference_change (struct GAS_Addresses_Handle *handle, |
537 | void *client, const struct GNUNET_PeerIdentity *peer, | 549 | void *client, const struct GNUNET_PeerIdentity *peer, |
538 | enum GNUNET_ATS_PreferenceKind kind, float score_abs); | 550 | enum GNUNET_ATS_PreferenceKind kind, float score_abs); |
539 | 551 | ||
diff --git a/src/ats/gnunet-service-ats_normalization.c b/src/ats/gnunet-service-ats_normalization.c index 954f2b5f5..96936332a 100644 --- a/src/ats/gnunet-service-ats_normalization.c +++ b/src/ats/gnunet-service-ats_normalization.c | |||
@@ -404,6 +404,7 @@ preference_aging (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) | |||
404 | 404 | ||
405 | } | 405 | } |
406 | 406 | ||
407 | |||
407 | /** | 408 | /** |
408 | * Normalize an updated preference value | 409 | * Normalize an updated preference value |
409 | * | 410 | * |
@@ -502,7 +503,7 @@ GAS_normalization_normalize_preference (void *src, | |||
502 | * default preferences if peer does not exist | 503 | * default preferences if peer does not exist |
503 | */ | 504 | */ |
504 | const double * | 505 | const double * |
505 | GAS_normalization_get_preferences (const struct GNUNET_PeerIdentity *id) | 506 | GAS_normalization_get_preferences_by_peer (const struct GNUNET_PeerIdentity *id) |
506 | { | 507 | { |
507 | GNUNET_assert(NULL != preference_peers); | 508 | GNUNET_assert(NULL != preference_peers); |
508 | GNUNET_assert(NULL != id); | 509 | GNUNET_assert(NULL != id); |
@@ -809,6 +810,48 @@ GAS_normalization_normalize_property (struct GNUNET_CONTAINER_MultiPeerMap *addr | |||
809 | } | 810 | } |
810 | } | 811 | } |
811 | 812 | ||
813 | |||
814 | static void | ||
815 | free_client (struct PreferenceClient *pc) | ||
816 | { | ||
817 | struct PreferencePeer *next_p; | ||
818 | struct PreferencePeer *p; | ||
819 | next_p = pc->p_head; | ||
820 | while (NULL != (p = next_p)) | ||
821 | { | ||
822 | next_p = p->next; | ||
823 | GNUNET_CONTAINER_DLL_remove(pc->p_head, pc->p_tail, p); | ||
824 | GNUNET_free(p); | ||
825 | } | ||
826 | GNUNET_free(pc); | ||
827 | } | ||
828 | |||
829 | |||
830 | /** | ||
831 | * A performance client disconnected | ||
832 | * | ||
833 | * @param client the client | ||
834 | */ | ||
835 | |||
836 | void | ||
837 | GAS_normalization_preference_client_disconnect (void *client) | ||
838 | { | ||
839 | struct PreferenceClient *c_cur; | ||
840 | /* Find preference client */ | ||
841 | |||
842 | for (c_cur = pc_head; NULL != c_cur; c_cur = c_cur->next) | ||
843 | { | ||
844 | if (client == c_cur->client) | ||
845 | break; | ||
846 | } | ||
847 | if (NULL == c_cur) | ||
848 | return; | ||
849 | |||
850 | GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, c_cur); | ||
851 | free_client (c_cur); | ||
852 | } | ||
853 | |||
854 | |||
812 | /** | 855 | /** |
813 | * Start the normalization component | 856 | * Start the normalization component |
814 | * | 857 | * |
@@ -893,14 +936,7 @@ GAS_normalization_stop () | |||
893 | { | 936 | { |
894 | next_pc = pc->next; | 937 | next_pc = pc->next; |
895 | GNUNET_CONTAINER_DLL_remove(pc_head, pc_tail, pc); | 938 | GNUNET_CONTAINER_DLL_remove(pc_head, pc_tail, pc); |
896 | next_p = pc->p_head; | 939 | free_client (pc); |
897 | while (NULL != (p = next_p)) | ||
898 | { | ||
899 | next_p = p->next; | ||
900 | GNUNET_CONTAINER_DLL_remove(pc->p_head, pc->p_tail, p); | ||
901 | GNUNET_free(p); | ||
902 | } | ||
903 | GNUNET_free(pc); | ||
904 | } | 940 | } |
905 | 941 | ||
906 | GNUNET_CONTAINER_multipeermap_iterate (preference_peers, &free_peer, NULL ); | 942 | GNUNET_CONTAINER_multipeermap_iterate (preference_peers, &free_peer, NULL ); |
diff --git a/src/ats/gnunet-service-ats_normalization.h b/src/ats/gnunet-service-ats_normalization.h index 1f0d081d4..43b07910f 100644 --- a/src/ats/gnunet-service-ats_normalization.h +++ b/src/ats/gnunet-service-ats_normalization.h | |||
@@ -55,7 +55,7 @@ typedef void | |||
55 | * with GNUNET_ATS_PreferenceKind, NULL if peer does not exist | 55 | * with GNUNET_ATS_PreferenceKind, NULL if peer does not exist |
56 | */ | 56 | */ |
57 | const double * | 57 | const double * |
58 | GAS_normalization_get_preferences (const struct GNUNET_PeerIdentity *id); | 58 | GAS_normalization_get_preferences_by_peer (const struct GNUNET_PeerIdentity *id); |
59 | 59 | ||
60 | 60 | ||
61 | /** | 61 | /** |
@@ -99,6 +99,14 @@ GAS_normalization_normalize_property (struct GNUNET_CONTAINER_MultiPeerMap *addr | |||
99 | 99 | ||
100 | 100 | ||
101 | /** | 101 | /** |
102 | * A performance client disconnected | ||
103 | * | ||
104 | * @param client the disconnecting client | ||
105 | */ | ||
106 | void | ||
107 | GAS_normalization_preference_client_disconnect (void *client); | ||
108 | |||
109 | /** | ||
102 | * Start the normalization component | 110 | * Start the normalization component |
103 | * | 111 | * |
104 | * @param pref_ch_cb callback to call on relative preference changing | 112 | * @param pref_ch_cb callback to call on relative preference changing |
diff --git a/src/ats/gnunet-service-ats_performance.c b/src/ats/gnunet-service-ats_performance.c index d94b0a7e6..8aad96eea 100644 --- a/src/ats/gnunet-service-ats_performance.c +++ b/src/ats/gnunet-service-ats_performance.c | |||
@@ -129,6 +129,7 @@ GAS_performance_remove_client (struct GNUNET_SERVER_Client *client) | |||
129 | if (NULL == pc) | 129 | if (NULL == pc) |
130 | return; | 130 | return; |
131 | GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, pc); | 131 | GNUNET_CONTAINER_DLL_remove (pc_head, pc_tail, pc); |
132 | GAS_addresses_preference_client_disconnect (GSA_addresses, client); | ||
132 | GNUNET_free (pc); | 133 | GNUNET_free (pc); |
133 | } | 134 | } |
134 | 135 | ||
@@ -639,7 +640,7 @@ GAS_handle_preference_change (void *cls, | |||
639 | 1, GNUNET_NO); | 640 | 1, GNUNET_NO); |
640 | pi = (const struct PreferenceInformation *) &msg[1]; | 641 | pi = (const struct PreferenceInformation *) &msg[1]; |
641 | for (i = 0; i < nump; i++) | 642 | for (i = 0; i < nump; i++) |
642 | GAS_addresses_change_preference (GSA_addresses, | 643 | GAS_addresses_preference_change (GSA_addresses, |
643 | client, | 644 | client, |
644 | &msg->peer, | 645 | &msg->peer, |
645 | (enum GNUNET_ATS_PreferenceKind) | 646 | (enum GNUNET_ATS_PreferenceKind) |
diff --git a/src/ats/libgnunet_plugin_ats_proportional.c b/src/ats/libgnunet_plugin_ats_proportional.c index 39524a17d..6118329b6 100644 --- a/src/ats/libgnunet_plugin_ats_proportional.c +++ b/src/ats/libgnunet_plugin_ats_proportional.c | |||
@@ -479,7 +479,7 @@ libgnunet_plugin_ats_proportional_done (void *cls) | |||
479 | 479 | ||
480 | if (s->network_entries[c].active_addresses > 0) | 480 | if (s->network_entries[c].active_addresses > 0) |
481 | { | 481 | { |
482 | LOG(GNUNET_ERROR_TYPE_ERROR, | 482 | LOG(GNUNET_ERROR_TYPE_DEBUG, |
483 | "Had %u active addresses for network `%s' not deleted during shutdown\n", | 483 | "Had %u active addresses for network `%s' not deleted during shutdown\n", |
484 | s->network_entries[c].active_addresses, s->network_entries[c].desc); | 484 | s->network_entries[c].active_addresses, s->network_entries[c].desc); |
485 | GNUNET_break(0); | 485 | GNUNET_break(0); |
@@ -499,13 +499,13 @@ libgnunet_plugin_ats_proportional_done (void *cls) | |||
499 | } | 499 | } |
500 | if (s->total_addresses > 0) | 500 | if (s->total_addresses > 0) |
501 | { | 501 | { |
502 | LOG(GNUNET_ERROR_TYPE_ERROR, | 502 | LOG(GNUNET_ERROR_TYPE_DEBUG, |
503 | "Had %u addresses not deleted during shutdown\n", s->total_addresses); | 503 | "Had %u addresses not deleted during shutdown\n", s->total_addresses); |
504 | GNUNET_break(0); | 504 | GNUNET_break(0); |
505 | } | 505 | } |
506 | if (s->active_addresses > 0) | 506 | if (s->active_addresses > 0) |
507 | { | 507 | { |
508 | LOG(GNUNET_ERROR_TYPE_ERROR, | 508 | LOG(GNUNET_ERROR_TYPE_DEBUG, |
509 | "Had %u active addresses not deleted during shutdown\n", | 509 | "Had %u active addresses not deleted during shutdown\n", |
510 | s->active_addresses); | 510 | s->active_addresses); |
511 | GNUNET_break (0); | 511 | GNUNET_break (0); |