X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=src%2Fcore%2Fgnunet-service-core_kx.h;h=28293e6072143de5e920c797e7f2c72ca2a95a1e;hb=43ee295fd2b0d38dcbfa3a7bb6df461cad15cf4f;hp=b5b9b712e3796d6fdc80b0494beb7909c8aaad51;hpb=60e84bc16ecf431bd6f7aa22b3adb48df70bf8cf;p=oweals%2Fgnunet.git diff --git a/src/core/gnunet-service-core_kx.h b/src/core/gnunet-service-core_kx.h index b5b9b712e..28293e607 100644 --- a/src/core/gnunet-service-core_kx.h +++ b/src/core/gnunet-service-core_kx.h @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2009, 2010, 2011 Christian Grothoff (and other contributing authors) + Copyright (C) 2009, 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,135 +27,13 @@ #define GNUNET_SERVICE_CORE_KX_H #include "gnunet_util_lib.h" +#include "gnunet_transport_service.h" /** * Information about the status of a key exchange with another peer. */ -struct GSC_KeyExchangeInfo -{ - - /** - * SetKeyMessage to transmit, NULL if we are not currently trying - * to send one. - */ - struct SetKeyMessage *skm; - - /** - * Non-NULL if we are currently looking up HELLOs for this peer. - * for this peer. - */ - struct GNUNET_PEERINFO_IteratorContext *pitr; - - /** - * Public key of the neighbour, NULL if we don't have it yet. - */ - struct GNUNET_CRYPTO_RsaPublicKeyBinaryEncoded *public_key; - - /** - * We received a PING message before we got the "public_key" - * (or the SET_KEY). We keep it here until we have a key - * to decrypt it. NULL if no PING is pending. - */ - struct PingMessage *pending_ping; - - /** - * We received a PONG message before we got the "public_key" - * (or the SET_KEY). We keep it here until we have a key - * to decrypt it. NULL if no PONG is pending. - */ - struct PongMessage *pending_pong; - - /** - * Key we use to encrypt our messages for the other peer - * (initialized by us when we do the handshake). - */ - struct GNUNET_CRYPTO_AesSessionKey encrypt_key; - - /** - * Key we use to decrypt messages from the other peer - * (given to us by the other peer during the handshake). - */ - struct GNUNET_CRYPTO_AesSessionKey decrypt_key; - - /** - * At what time did we generate our encryption key? - */ - struct GNUNET_TIME_Absolute encrypt_key_created; - - /** - * At what time did the other peer generate the decryption key? - */ - struct GNUNET_TIME_Absolute decrypt_key_created; - - /** - * At what frequency are we currently re-trying SET_KEY messages? - */ - struct GNUNET_TIME_Relative set_key_retry_frequency; - - /** - * ID of task used for re-trying SET_KEY and PING message. - */ - GNUNET_SCHEDULER_TaskIdentifier retry_set_key_task; - - /** - * What was our PING challenge number (for this peer)? - */ - uint32_t ping_challenge; - - /** - * What is our connection status? - */ - enum PeerStateMachine status; - -}; - - -/** - * We received a SET_KEY message. Validate and update - * our key material and status. - * - * @param kx key exchange status for the corresponding peer - * @param msg the set key message we received - * @param ats performance data - * @param ats_count number of entries in ats (excluding 0-termination) - */ -void -GSC_KX_handle_set_key (struct GSC_KeyExchangeInfo *n, - const struct GNUNET_MessageHandler *msg, - const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count); - - -/** - * We received a PING message. Validate and transmit - * a PONG message. - * - * @param kx key exchange status for the corresponding peer - * @param msg the encrypted PING message itself - * @param ats performance data - * @param ats_count number of entries in ats (excluding 0-termination) - */ -void -GSC_KX_handle_ping (struct GSC_KeyExchangeInfo *kx, - const struct GNUNET_MessageHeader *msg, - const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count); - - -/** - * We received a PONG message. Validate and update our status. - * - * @param kx key exchange status for the corresponding peer - * @param msg the encrypted PONG message itself - * @param ats performance data - * @param ats_count number of entries in ats (excluding 0-termination) - */ -void -GSC_KX_handle_pong (struct GSC_KeyExchangeInfo *kx, - const struct GNUNET_MessageHeader *msg, - const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count); +struct GSC_KeyExchangeInfo; /** @@ -167,59 +45,58 @@ GSC_KX_handle_pong (struct GSC_KeyExchangeInfo *kx, */ void GSC_KX_encrypt_and_transmit (struct GSC_KeyExchangeInfo *kx, - const void *payload, + const void *payload, size_t payload_size); /** - * We received an encrypted message. Decrypt, validate and - * pass on to the appropriate clients. + * Initialize KX subsystem. * - * @param kx key exchange information context - * @param msg encrypted message - * @param ats performance data - * @param ats_count number of entries in ats (excluding 0-termination) + * @param pk private key to use for the peer + * @return #GNUNET_OK on success, #GNUNET_SYSERR on failure */ -void -GSC_KX_handle_encrypted_message (struct GSC_KeyExchangeInfo *kx, - const struct GNUNET_MessageHeader *msg, - const struct GNUNET_TRANSPORT_ATS_Information *ats, - uint32_t ats_count); +int +GSC_KX_init (struct GNUNET_CRYPTO_EddsaPrivateKey *pk); /** - * Start the key exchange with the given peer. - * - * @param pid identity of the peer to do a key exchange with - * @return key exchange information context + * Shutdown KX subsystem. */ -struct GSC_KeyExchangeInfo * -GSC_KX_start (const struct GNUNET_PeerIdentity *pid); +void +GSC_KX_done (void); /** - * Stop key exchange with the given peer. Clean up key material. + * Check if the given neighbour has excess bandwidth available. * - * @param kx key exchange to stop + * @param target neighbour to check + * @return #GNUNET_YES if excess bandwidth is available, #GNUNET_NO if not */ -void -GSC_KX_stop (struct GSC_KeyExchangeInfo *kx); +int +GSC_NEIGHBOURS_check_excess_bandwidth (const struct GSC_KeyExchangeInfo *target); /** - * Initialize KX subsystem. + * Check how many messages are queued for the given neighbour. * - * @return GNUNET_OK on success, GNUNET_SYSERR on failure + * @param target neighbour to check + * @return number of items in the message queue */ -int -GSC_KX_init (void); +unsigned int +GSC_NEIGHBOURS_get_queue_length (const struct GSC_KeyExchangeInfo *target); /** - * Shutdown KX subsystem. + * Handle #GNUNET_MESSAGE_TYPE_CORE_MONITOR_PEERS request. For this + * request type, the client does not have to have transmitted an INIT + * request. All current peers are returned, regardless of which + * message types they accept. + * + * @param mq message queue to add for monitoring */ -void -GSC_KX_done (void); +void +GSC_KX_handle_client_monitor_peers (struct GNUNET_MQ_Handle *mq); + #endif /* end of gnunet-service-core_kx.h */