X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Ftransport%2Fgnunet-service-transport_validation.h;h=53528437aedcc01e6acf8ca3557ae3baf33a7e34;hb=556ccd6d483b3678867c3829e6979c307df04450;hp=17f4a1cd748aebbf326bd68789517b2c981ec64c;hpb=ac2f5ee5b463af07b30c7064c7b7b8d39fbee117;p=oweals%2Fgnunet.git diff --git a/src/transport/gnunet-service-transport_validation.h b/src/transport/gnunet-service-transport_validation.h index 17f4a1cd7..53528437a 100644 --- a/src/transport/gnunet-service-transport_validation.h +++ b/src/transport/gnunet-service-transport_validation.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2010,2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2010,2011 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 @@ -14,8 +14,8 @@ You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the - Free Software Foundation, Inc., 59 Temple Place - Suite 330, - Boston, MA 02111-1307, USA. + Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + Boston, MA 02110-1301, USA. */ /** @@ -27,14 +27,17 @@ #define GNUNET_SERVICE_TRANSPORT_VALIDATION_H #include "gnunet_statistics_service.h" +#include "gnunet_transport_plugin.h" #include "gnunet_util_lib.h" - +#include "gnunet_hello_lib.h" /** * Start the validation subsystem. + * + * @param max_fds maximum number of fds to use */ -void -GST_validation_start (void); +void +GST_validation_start (unsigned int max_fds); /** @@ -44,22 +47,34 @@ void GST_validation_stop (void); +/** + * Update if we are using an address for a connection actively right now. + * Based on this, the validation module will measure latency for the + * address more or less often. + * + * @param address the address that we are now using (or not) + * @param in_use #GNUNET_YES if we are now using the address for a connection, + * #GNUNET_NO if we are no longer using the address for a connection + */ +void +GST_validation_set_address_use (const struct GNUNET_HELLO_Address *address, + int in_use); + + /** * We've received a PING. If appropriate, generate a PONG. * * @param sender peer sending the PING * @param hdr the PING - * @param plugin_name name of plugin that received the PING - * @param sender_address address of the sender as known to the plugin, NULL - * if we did not initiate the connection - * @param sender_address_len number of bytes in sender_address + * @param sender_address address of the sender, NULL if we did not initiate + * @param session session we got the PING from + * @return #GNUNET_OK if the message was fine, #GNUNET_SYSERR on serious error */ -void +int GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, - const struct GNUNET_MessageHeader *hdr, - const char *plugin_name, - const void *sender_address, - size_t sender_address_len); + const struct GNUNET_MessageHeader *hdr, + const struct GNUNET_HELLO_Address *sender_address, + struct GNUNET_ATS_Session *session); /** @@ -68,17 +83,11 @@ GST_validation_handle_ping (const struct GNUNET_PeerIdentity *sender, * * @param sender peer sending the PONG * @param hdr the PONG - * @param plugin_name name of plugin that received the PONG - * @param sender_address address of the sender as known to the plugin, NULL - * if we did not initiate the connection - * @param sender_address_len number of bytes in sender_address + * @return #GNUNET_OK if the message was fine, #GNUNET_SYSERR on serious error */ -void +int GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, - const struct GNUNET_MessageHeader *hdr, - const char *plugin_name, - const void *sender_address, - size_t sender_address_len); + const struct GNUNET_MessageHeader *hdr); /** @@ -86,15 +95,19 @@ GST_validation_handle_pong (const struct GNUNET_PeerIdentity *sender, * validation. * * @param hello the HELLO we received + * @return #GNUNET_OK if the message was fine, #GNUNET_SYSERR on serious error */ -void +int GST_validation_handle_hello (const struct GNUNET_MessageHeader *hello); /** - * Opaque handle to stop incremental validation address callbacks. + * Validate an individual address. + * + * @param address address we should try to validate */ -struct GST_ValidationIteratorContext; +void +GST_validation_handle_address (const struct GNUNET_HELLO_Address *address); /** @@ -102,53 +115,31 @@ struct GST_ValidationIteratorContext; * the validation module is aware of (for the given target). * * @param cls closure - * @param target peer this change is about, never NULL - * @param last_validated_at is FOREVER if the address has not been validated (we're currently checking) - * is ZERO if the address was validated a long time ago (from PEERINFO) - * otherwise a time in the past if this process validated the address + * @param public_key public key for the peer, never NULL + * @param valid_until is ZERO if we never validated the address, + * otherwise a time up to when we consider it (or was) valid * @param validation_block is FOREVER if the address is for an unsupported plugin (from PEERINFO) * is ZERO if the address is considered valid (no validation needed) * otherwise a time in the future if we're currently denying re-validation - * @param plugin_name name of the plugin - * @param plugin_address binary address - * @param plugin_address_len length of address + * @param address the address */ -typedef void (*GST_ValidationAddressCallback)(void *cls, - const struct GNUNET_PeerIdentity *target, - struct GNUNET_TIME_Absolute last_validated_at, - struct GNUNET_TIME_Absolute validation_block, - const char *plugin_name, - const void *plugin_address, - size_t plugin_address_len); +typedef void +(*GST_ValidationAddressCallback) (void *cls, + struct GNUNET_TIME_Absolute valid_until, + struct GNUNET_TIME_Absolute validation_block, + const struct GNUNET_HELLO_Address *address); /** * Call the given function for each address for the given target. - * Can either give a snapshot (synchronous API) or be continuous. * * @param target peer information is requested for - * @param snapshot_only GNUNET_YES to iterate over addresses once, GNUNET_NO to - * continue to give information about addresses as it evolves * @param cb function to call; will not be called after this function returns - * if snapshot_only is GNUNET_YES - * @param cb_cls closure for 'cb' - * @return context to cancel, NULL if 'snapshot_only' is GNUNET_YES - */ -struct GST_ValidationIteratorContext * -GST_validation_get_addresses (const struct GNUNET_PeerIdentity *target, - int snapshot_only, - GST_ValidationAddressCallback cb, - void *cb_cls); - - -/** - * Cancel an active validation address iteration. - * - * @param ctx the context of the operation that is cancelled + * @param cb_cls closure for @a cb */ void -GST_validation_get_addresses_cancel (struct GST_ValidationIteratorContext *ctx); - +GST_validation_get_addresses (const struct GNUNET_PeerIdentity *target, + GST_ValidationAddressCallback cb, void *cb_cls); #endif