struct GNUNET_TIME_Absolute *sig_cache_exp;
const char *addr;
const char *addrend;
+ char *plugin_name;
+ char *pos;
size_t alen;
size_t slen;
ssize_t ret;
sig_cache = NULL;
sig_cache_exp = NULL;
-
+ papi = NULL;
if (alen > 0)
{
addrend = memchr (addr, '\0', alen);
address.transport_name = addr;
address.peer = GST_my_identity;
+ if (NULL == address.transport_name)
+ {
+ GNUNET_break (0);
+ }
+
+ if (0 != strstr (address.transport_name, "_client"))
+ {
+ plugin_name = GNUNET_strdup (address.transport_name);
+ pos = strstr (plugin_name, "_client");
+ GNUNET_assert (NULL != pos);
+ GNUNET_snprintf (pos, strlen ("_server") + 1, "%s", "_server");
+ }
+ else
+ plugin_name = GNUNET_strdup (address.transport_name);
+
+ if (NULL == (papi = GST_plugins_find (plugin_name)))
+ {
+ /* we don't have the plugin for this address */
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Plugin `%s' not available, cannot confirm having this address \n",
+ plugin_name);
+ GNUNET_free (plugin_name);
+ return;
+ }
+ GNUNET_free (plugin_name);
+ if (GNUNET_OK != papi->check_address (papi->cls, addrend, alen))
+ {
+ GNUNET_STATISTICS_update (GST_stats,
+ gettext_noop
+ ("# failed address checks during validation"), 1,
+ GNUNET_NO);
+ GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "Address `%s' is not one of my addresses, not confirming PING\n",
+ GST_plugins_a2s (&address));
+ return;
+ }
+ else
+ {
+ GNUNET_STATISTICS_update (GST_stats,
+ gettext_noop
+ ("# successful address checks during validation"), 1,
+ GNUNET_NO);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Address `%s' is one of my addresses, confirming PING\n",
+ GST_plugins_a2s (&address));
+ }
if (GNUNET_YES != GST_hello_test_address (&address, &sig_cache, &sig_cache_exp))
{
/* first see if the session we got this PING from can be used to transmit
* a response reliably */
- papi = GST_plugins_find (sender_address->transport_name);
if (papi == NULL)
ret = -1;
else