allow empty/NULL context message
[oweals/gnunet.git] / src / transport / gnunet-service-transport_validation.c
index 89e901561f41f98c5bb1f7b95e240ca8bb7d3069..6ea5394bf7c4afdad9daaf00b9451502f7b92140 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2010-2015 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2010-2015 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -463,11 +463,9 @@ cleanup_validation_entry (void *cls,
  * longer valid and then possibly triggers its removal.
  *
  * @param cls the `struct ValidationEntry`
- * @param tc scheduler context (unused)
  */
 static void
-timeout_hello_validation (void *cls,
-                          const struct GNUNET_SCHEDULER_TaskContext *tc)
+timeout_hello_validation (void *cls)
 {
   struct ValidationEntry *ve = cls;
   struct GNUNET_TIME_Absolute max;
@@ -517,7 +515,7 @@ static void
 transmit_ping_if_allowed (void *cls,
                           const struct GNUNET_PeerIdentity *pid,
                          const struct GNUNET_HELLO_Address *address_null,
-                         struct Session *session_null,
+                         struct GNUNET_ATS_Session *session_null,
                           int result)
 {
   struct ValidationEntry *ve = cls;
@@ -529,7 +527,7 @@ transmit_ping_if_allowed (void *cls,
   size_t tsize;
   size_t slen;
   uint16_t hsize;
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
 
   ve->bc = NULL;
   if (GNUNET_OK != result)
@@ -652,11 +650,9 @@ transmit_ping_if_allowed (void *cls,
  * Do address validation again to keep address valid.
  *
  * @param cls the `struct ValidationEntry`
- * @param tc scheduler context (unused)
  */
 static void
-revalidate_address (void *cls,
-                    const struct GNUNET_SCHEDULER_TaskContext *tc)
+revalidate_address (void *cls)
 {
   struct ValidationEntry *ve = cls;
   struct GNUNET_TIME_Relative canonical_delay;
@@ -852,6 +848,11 @@ add_valid_address (void *cls,
   {
     /* Why do we try to add an ill-formed address? */
     GNUNET_break (0);
+    GNUNET_log (GNUNET_ERROR_TYPE_ERROR,
+                "Address with %u bytes for plugin %s and peer %s is malformed\n",
+                (unsigned int) address->address_length,
+                address->transport_name,
+                GNUNET_i2s (&pid));
     return GNUNET_OK;
   }
 
@@ -872,7 +873,6 @@ add_valid_address (void *cls,
   validation_entry_changed (ve,
                             GNUNET_TRANSPORT_VS_UPDATE);
   memset (&prop, 0, sizeof (prop));
-  GNUNET_break (GNUNET_ATS_NET_UNSPECIFIED != ve->network);
   prop.scope = ve->network;
   prop.delay = GNUNET_TIME_relative_divide (ve->latency, 2);
   if (GNUNET_YES != ve->known_to_ats)
@@ -995,7 +995,7 @@ multicast_pong (void *cls,
 {
   struct TransportPongMessage *pong = cls;
   struct GNUNET_TRANSPORT_PluginFunctions *papi;
-  struct Session *session;
+  struct GNUNET_ATS_Session *session;
 
   papi = GST_plugins_find (address->transport_name);
   if (NULL == papi)
@@ -1039,7 +1039,7 @@ int
 GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender,
                             const struct GNUNET_MessageHeader *hdr,
                             const struct GNUNET_HELLO_Address *sender_address,
-                            struct Session *session)
+                            struct GNUNET_ATS_Session *session)
 {
   const struct TransportPingMessage *ping;
   struct TransportPongMessage *pong;
@@ -1055,6 +1055,11 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender,
   ssize_t ret;
   struct GNUNET_HELLO_Address address;
 
+  if (0 ==
+      memcmp (&GST_my_identity,
+              sender,
+              sizeof (struct GNUNET_PeerIdentity)))
+    return GNUNET_OK; /* our own, ignore! */
   if (ntohs (hdr->size) < sizeof (struct TransportPingMessage))
   {
     GNUNET_break_op (0);
@@ -1383,6 +1388,12 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender,
   int sig_res;
   int do_verify;
 
+  if (0 ==
+      memcmp (&GST_my_identity,
+              sender,
+              sizeof (struct GNUNET_PeerIdentity)))
+    return GNUNET_OK; /* our own, ignore! */
+
   if (ntohs (hdr->size) < sizeof (struct TransportPongMessage))
   {
     GNUNET_break_op (0);