summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSchanzenbach, Martin <mschanzenbach@posteo.de>2019-02-27 22:15:30 +0100
committerSchanzenbach, Martin <mschanzenbach@posteo.de>2019-02-27 22:15:30 +0100
commitbcb5e8d91393d99ea26128f8d5e0261fe6adccc4 (patch)
tree3a1067c4a0f8cd7b54c084b02dcd5c744002a17c
parentd2395d4befccc42d2e2b45c5d49746aebf7ba3a5 (diff)
sanity checks
-rw-r--r--src/cadet/gnunet-service-cadet_channel.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/src/cadet/gnunet-service-cadet_channel.c b/src/cadet/gnunet-service-cadet_channel.c
index cd5093c46..1746fc509 100644
--- a/src/cadet/gnunet-service-cadet_channel.c
+++ b/src/cadet/gnunet-service-cadet_channel.c
@@ -1410,7 +1410,8 @@ GCCH_handle_channel_plaintext_data (struct CadetChannel *ch,
* We always send if possible in this case.
* It is guaranteed that the queued MID < received MID
**/
- if (GNUNET_YES == ccc->client_ready)
+ if ((NULL != ccc->head_recv) &&
+ (GNUNET_YES == ccc->client_ready))
{
next_msg = ccc->head_recv;
LOG (GNUNET_ERROR_TYPE_DEBUG,
@@ -1429,12 +1430,11 @@ GCCH_handle_channel_plaintext_data (struct CadetChannel *ch,
next_msg);
ccc->num_recv--;
/* Do not process duplicate MID */
- if ((msg->mid.mid == next_msg->mid.mid) || /* Duplicate */
- (ntohl (msg->mid.mid) < ntohl (ch->mid_recv.mid))) /* Old */
+ if (msg->mid.mid == next_msg->mid.mid) /* Duplicate */
{
/* Duplicate within the queue, drop */
LOG (GNUNET_ERROR_TYPE_DEBUG,
- "Message on %s (mid %u) dropped\n",
+ "Message on %s (mid %u) dropped, duplicate\n",
GCCH_2s (ch),
ntohl (msg->mid.mid));
GNUNET_free (next_msg);
@@ -1444,6 +1444,17 @@ GCCH_handle_channel_plaintext_data (struct CadetChannel *ch,
GNUNET_free (next_msg);
}
+ if (ntohl (msg->mid.mid) < ntohl (ch->mid_recv.mid)) /* Old */
+ {
+ /* Duplicate within the queue, drop */
+ LOG (GNUNET_ERROR_TYPE_DEBUG,
+ "Message on %s (mid %u) dropped, old.\n",
+ GCCH_2s (ch),
+ ntohl (msg->mid.mid));
+ GNUNET_MQ_discard (env);
+ return;
+ }
+
/* Channel is unreliable, so we do not ACK. But we also cannot
allow buffering everything, so check if we have space... */
if (ccc->num_recv >= ch->max_pending_messages)