diff options
author | Christian Grothoff <christian@grothoff.org> | 2018-05-21 18:10:38 +0200 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2018-05-21 18:10:38 +0200 |
commit | 61bf943d09cd43ca5fe9de1a8d329b808b0b194d (patch) | |
tree | 7676c015238a5b2d46b56af58bde4643913c3dd0 /src/cadet | |
parent | 882a4ce1bb696d00abaa841ac88737765588cee9 (diff) | |
download | gnunet-61bf943d09cd43ca5fe9de1a8d329b808b0b194d.tar.gz gnunet-61bf943d09cd43ca5fe9de1a8d329b808b0b194d.zip |
fix crash on unexpected client disconnect on incoming message, remove bogus assertion
Diffstat (limited to 'src/cadet')
-rw-r--r-- | src/cadet/cadet_api.c | 25 | ||||
-rw-r--r-- | src/cadet/gnunet-service-cadet_channel.c | 8 |
2 files changed, 18 insertions, 15 deletions
diff --git a/src/cadet/cadet_api.c b/src/cadet/cadet_api.c index 3c142a95c..59f0bfe85 100644 --- a/src/cadet/cadet_api.c +++ b/src/cadet/cadet_api.c | |||
@@ -464,6 +464,10 @@ cadet_mq_send_now (void *cls) | |||
464 | } | 464 | } |
465 | ch->allow_send--; | 465 | ch->allow_send--; |
466 | ch->pending_env = NULL; | 466 | ch->pending_env = NULL; |
467 | GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, | ||
468 | "Sending message on channel %s to CADET, new window size is %u\n", | ||
469 | GNUNET_i2s (&ch->peer), | ||
470 | ch->allow_send); | ||
467 | GNUNET_MQ_send (ch->cadet->mq, | 471 | GNUNET_MQ_send (ch->cadet->mq, |
468 | env); | 472 | env); |
469 | GNUNET_MQ_impl_send_continue (ch->mq); | 473 | GNUNET_MQ_impl_send_continue (ch->mq); |
@@ -781,6 +785,11 @@ handle_local_ack (void *cls, | |||
781 | return; | 785 | return; |
782 | } | 786 | } |
783 | ch->allow_send++; | 787 | ch->allow_send++; |
788 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
789 | "Got an ACK on mq channel %X (peer %s); new window size is %u!\n", | ||
790 | ntohl (ch->ccn.channel_of_client), | ||
791 | GNUNET_i2s (&ch->peer), | ||
792 | ch->allow_send); | ||
784 | if (NULL == ch->pending_env) | 793 | if (NULL == ch->pending_env) |
785 | { | 794 | { |
786 | LOG (GNUNET_ERROR_TYPE_DEBUG, | 795 | LOG (GNUNET_ERROR_TYPE_DEBUG, |
@@ -792,9 +801,6 @@ handle_local_ack (void *cls, | |||
792 | } | 801 | } |
793 | if (NULL != ch->mq_cont) | 802 | if (NULL != ch->mq_cont) |
794 | return; /* already working on it! */ | 803 | return; /* already working on it! */ |
795 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
796 | "Got an ACK on mq channel %X, sending pending message!\n", | ||
797 | ntohl (ch->ccn.channel_of_client)); | ||
798 | ch->mq_cont | 804 | ch->mq_cont |
799 | = GNUNET_SCHEDULER_add_now (&cadet_mq_send_now, | 805 | = GNUNET_SCHEDULER_add_now (&cadet_mq_send_now, |
800 | ch); | 806 | ch); |
@@ -992,6 +998,7 @@ check_get_tunnels (void *cls, | |||
992 | { | 998 | { |
993 | size_t esize; | 999 | size_t esize; |
994 | 1000 | ||
1001 | (void) cls; | ||
995 | esize = ntohs (message->size); | 1002 | esize = ntohs (message->size); |
996 | if (sizeof (struct GNUNET_CADET_LocalInfoTunnel) == esize) | 1003 | if (sizeof (struct GNUNET_CADET_LocalInfoTunnel) == esize) |
997 | return GNUNET_OK; | 1004 | return GNUNET_OK; |
@@ -1051,6 +1058,7 @@ check_get_tunnel (void *cls, | |||
1051 | size_t esize; | 1058 | size_t esize; |
1052 | size_t msize; | 1059 | size_t msize; |
1053 | 1060 | ||
1061 | (void) cls; | ||
1054 | /* Verify message sanity */ | 1062 | /* Verify message sanity */ |
1055 | msize = ntohs (msg->header.size); | 1063 | msize = ntohs (msg->header.size); |
1056 | esize = sizeof (struct GNUNET_CADET_LocalInfoTunnel); | 1064 | esize = sizeof (struct GNUNET_CADET_LocalInfoTunnel); |
@@ -1096,7 +1104,6 @@ handle_get_tunnel (void *cls, | |||
1096 | 1104 | ||
1097 | if (NULL == h->info_cb.tunnel_cb) | 1105 | if (NULL == h->info_cb.tunnel_cb) |
1098 | return; | 1106 | return; |
1099 | |||
1100 | ch_n = ntohl (msg->channels); | 1107 | ch_n = ntohl (msg->channels); |
1101 | c_n = ntohl (msg->connections); | 1108 | c_n = ntohl (msg->connections); |
1102 | 1109 | ||
@@ -1191,13 +1198,8 @@ destroy_channel_cb (void *cls, | |||
1191 | /* struct GNUNET_CADET_Handle *handle = cls; */ | 1198 | /* struct GNUNET_CADET_Handle *handle = cls; */ |
1192 | struct GNUNET_CADET_Channel *ch = value; | 1199 | struct GNUNET_CADET_Channel *ch = value; |
1193 | 1200 | ||
1194 | if (ntohl (ch->ccn.channel_of_client) >= GNUNET_CADET_LOCAL_CHANNEL_ID_CLI) | 1201 | (void) cls; |
1195 | { | 1202 | (void) cid; |
1196 | GNUNET_break (0); | ||
1197 | LOG (GNUNET_ERROR_TYPE_DEBUG, | ||
1198 | "channel %X not destroyed\n", | ||
1199 | ntohl (ch->ccn.channel_of_client)); | ||
1200 | } | ||
1201 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, | 1203 | GNUNET_log (GNUNET_ERROR_TYPE_INFO, |
1202 | "Destroying channel due to GNUNET_CADET_disconnect()\n"); | 1204 | "Destroying channel due to GNUNET_CADET_disconnect()\n"); |
1203 | destroy_channel (ch); | 1205 | destroy_channel (ch); |
@@ -1222,6 +1224,7 @@ destroy_port_cb (void *cls, | |||
1222 | /* struct GNUNET_CADET_Handle *handle = cls; */ | 1224 | /* struct GNUNET_CADET_Handle *handle = cls; */ |
1223 | struct GNUNET_CADET_Port *port = value; | 1225 | struct GNUNET_CADET_Port *port = value; |
1224 | 1226 | ||
1227 | (void) cls; | ||
1225 | /* This is a warning, the app should have cleanly closed all open ports */ | 1228 | /* This is a warning, the app should have cleanly closed all open ports */ |
1226 | GNUNET_break (0); | 1229 | GNUNET_break (0); |
1227 | GNUNET_CADET_close_port (port); | 1230 | GNUNET_CADET_close_port (port); |
diff --git a/src/cadet/gnunet-service-cadet_channel.c b/src/cadet/gnunet-service-cadet_channel.c index 7a7942dea..2d8d36c6c 100644 --- a/src/cadet/gnunet-service-cadet_channel.c +++ b/src/cadet/gnunet-service-cadet_channel.c | |||
@@ -1279,8 +1279,7 @@ GCCH_handle_channel_plaintext_data (struct CadetChannel *ch, | |||
1279 | uint32_t delta; | 1279 | uint32_t delta; |
1280 | 1280 | ||
1281 | GNUNET_assert (GNUNET_NO == ch->is_loopback); | 1281 | GNUNET_assert (GNUNET_NO == ch->is_loopback); |
1282 | if ( (GNUNET_YES == ch->destroy) && | 1282 | if ( (NULL == ch->owner) && |
1283 | (NULL == ch->owner) && | ||
1284 | (NULL == ch->dest) ) | 1283 | (NULL == ch->dest) ) |
1285 | { | 1284 | { |
1286 | /* This client is gone, but we still have messages to send to | 1285 | /* This client is gone, but we still have messages to send to |
@@ -1290,8 +1289,9 @@ GCCH_handle_channel_plaintext_data (struct CadetChannel *ch, | |||
1290 | "Dropping incoming payload on %s as this end is already closed\n", | 1289 | "Dropping incoming payload on %s as this end is already closed\n", |
1291 | GCCH_2s (ch)); | 1290 | GCCH_2s (ch)); |
1292 | /* send back DESTROY notification to stop further retransmissions! */ | 1291 | /* send back DESTROY notification to stop further retransmissions! */ |
1293 | GCT_send_channel_destroy (ch->t, | 1292 | if (GNUNET_YES == ch->destroy) |
1294 | ch->ctn); | 1293 | GCT_send_channel_destroy (ch->t, |
1294 | ch->ctn); | ||
1295 | return; | 1295 | return; |
1296 | } | 1296 | } |
1297 | payload_size = ntohs (msg->header.size) - sizeof (*msg); | 1297 | payload_size = ntohs (msg->header.size) - sizeof (*msg); |