diff options
author | Christian Grothoff <christian@grothoff.org> | 2015-03-08 13:11:48 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2015-03-08 13:11:48 +0000 |
commit | 247e63b4eb4db92cc0cfb2df9ca66632cc6c90b1 (patch) | |
tree | 86b02af3abd7c9ada2782c1fa3697c50b846c1db /src/core | |
parent | 77ea8dbe440a1a9780644876430292f65f5de51c (diff) | |
download | gnunet-247e63b4eb4db92cc0cfb2df9ca66632cc6c90b1.tar.gz gnunet-247e63b4eb4db92cc0cfb2df9ca66632cc6c90b1.zip |
-try to avoid being stuck with key sent/received if PING/PONGs are lost
Diffstat (limited to 'src/core')
-rw-r--r-- | src/core/gnunet-service-core_kx.c | 27 |
1 files changed, 17 insertions, 10 deletions
diff --git a/src/core/gnunet-service-core_kx.c b/src/core/gnunet-service-core_kx.c index 0fc5ecf25..6608725a5 100644 --- a/src/core/gnunet-service-core_kx.c +++ b/src/core/gnunet-service-core_kx.c | |||
@@ -789,6 +789,10 @@ GSC_KX_stop (struct GSC_KeyExchangeInfo *kx) | |||
789 | static void | 789 | static void |
790 | send_ping (struct GSC_KeyExchangeInfo *kx) | 790 | send_ping (struct GSC_KeyExchangeInfo *kx) |
791 | { | 791 | { |
792 | GNUNET_STATISTICS_update (GSC_stats, | ||
793 | gettext_noop ("# PING messages transmitted"), | ||
794 | 1, | ||
795 | GNUNET_NO); | ||
792 | GSC_NEIGHBOURS_transmit (&kx->peer, | 796 | GSC_NEIGHBOURS_transmit (&kx->peer, |
793 | &kx->ping.header, | 797 | &kx->ping.header, |
794 | MIN_PING_FREQUENCY); | 798 | MIN_PING_FREQUENCY); |
@@ -955,7 +959,8 @@ GSC_KX_handle_ephemeral_key (struct GSC_KeyExchangeInfo *kx, | |||
955 | monitor_notify_all (kx); | 959 | monitor_notify_all (kx); |
956 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) | 960 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) |
957 | send_key (kx); | 961 | send_key (kx); |
958 | send_ping (kx); | 962 | else |
963 | send_ping (kx); | ||
959 | break; | 964 | break; |
960 | case GNUNET_CORE_KX_STATE_KEY_SENT: | 965 | case GNUNET_CORE_KX_STATE_KEY_SENT: |
961 | GNUNET_assert (NULL == kx->keep_alive_task); | 966 | GNUNET_assert (NULL == kx->keep_alive_task); |
@@ -963,27 +968,29 @@ GSC_KX_handle_ephemeral_key (struct GSC_KeyExchangeInfo *kx, | |||
963 | monitor_notify_all (kx); | 968 | monitor_notify_all (kx); |
964 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) | 969 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) |
965 | send_key (kx); | 970 | send_key (kx); |
966 | send_ping (kx); | 971 | else |
972 | send_ping (kx); | ||
967 | break; | 973 | break; |
968 | case GNUNET_CORE_KX_STATE_KEY_RECEIVED: | 974 | case GNUNET_CORE_KX_STATE_KEY_RECEIVED: |
969 | GNUNET_assert (NULL == kx->keep_alive_task); | 975 | GNUNET_assert (NULL == kx->keep_alive_task); |
970 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) | 976 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) |
971 | send_key (kx); | 977 | send_key (kx); |
972 | send_ping (kx); | 978 | else |
979 | send_ping (kx); | ||
973 | break; | 980 | break; |
974 | case GNUNET_CORE_KX_STATE_UP: | 981 | case GNUNET_CORE_KX_STATE_UP: |
975 | kx->status = GNUNET_CORE_KX_STATE_REKEY_SENT; | 982 | kx->status = GNUNET_CORE_KX_STATE_REKEY_SENT; |
976 | monitor_notify_all (kx); | 983 | monitor_notify_all (kx); |
977 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) | 984 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) |
978 | send_key (kx); | 985 | send_key (kx); |
979 | /* we got a new key, need to reconfirm! */ | 986 | else |
980 | send_ping (kx); | 987 | send_ping (kx); |
981 | break; | 988 | break; |
982 | case GNUNET_CORE_KX_STATE_REKEY_SENT: | 989 | case GNUNET_CORE_KX_STATE_REKEY_SENT: |
983 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) | 990 | if (GNUNET_CORE_KX_STATE_KEY_SENT == sender_status) |
984 | send_key (kx); | 991 | send_key (kx); |
985 | /* we got a new key, need to reconfirm! */ | 992 | else |
986 | send_ping (kx); | 993 | send_ping (kx); |
987 | break; | 994 | break; |
988 | default: | 995 | default: |
989 | GNUNET_break (0); | 996 | GNUNET_break (0); |
@@ -1125,9 +1132,7 @@ send_keep_alive (void *cls, | |||
1125 | 1, | 1132 | 1, |
1126 | GNUNET_NO); | 1133 | GNUNET_NO); |
1127 | setup_fresh_ping (kx); | 1134 | setup_fresh_ping (kx); |
1128 | GSC_NEIGHBOURS_transmit (&kx->peer, | 1135 | send_ping (kx); |
1129 | &kx->ping.header, | ||
1130 | kx->set_key_retry_frequency); | ||
1131 | retry = | 1136 | retry = |
1132 | GNUNET_TIME_relative_max (GNUNET_TIME_relative_divide (left, 2), | 1137 | GNUNET_TIME_relative_max (GNUNET_TIME_relative_divide (left, 2), |
1133 | MIN_PING_FREQUENCY); | 1138 | MIN_PING_FREQUENCY); |
@@ -1322,6 +1327,8 @@ send_key (struct GSC_KeyExchangeInfo *kx) | |||
1322 | GSC_NEIGHBOURS_transmit (&kx->peer, | 1327 | GSC_NEIGHBOURS_transmit (&kx->peer, |
1323 | ¤t_ekm.header, | 1328 | ¤t_ekm.header, |
1324 | kx->set_key_retry_frequency); | 1329 | kx->set_key_retry_frequency); |
1330 | if (GNUNET_CORE_KX_STATE_KEY_SENT != kx->status) | ||
1331 | send_ping (kx); | ||
1325 | kx->retry_set_key_task = | 1332 | kx->retry_set_key_task = |
1326 | GNUNET_SCHEDULER_add_delayed (kx->set_key_retry_frequency, | 1333 | GNUNET_SCHEDULER_add_delayed (kx->set_key_retry_frequency, |
1327 | &set_key_retry_task, kx); | 1334 | &set_key_retry_task, kx); |