diff options
author | Christian Grothoff <christian@grothoff.org> | 2014-12-14 20:52:16 +0000 |
---|---|---|
committer | Christian Grothoff <christian@grothoff.org> | 2014-12-14 20:52:16 +0000 |
commit | a8e5b09df9ce6f090ab4ecfde02fc7ab3b667c13 (patch) | |
tree | dd96afbbe0cfb435c94a377d6762100d4a205d05 /src | |
parent | ea17e83e666b0104b43d04423cef193f92199c26 (diff) |
-fixing peerinfo part of #3559
Diffstat (limited to 'src')
-rwxr-xr-x | src/dns/install-dns-helper.sh | 13 | ||||
-rw-r--r-- | src/include/gnunet_core_service.h | 1 | ||||
-rw-r--r-- | src/include/gnunet_hello_lib.h | 5 | ||||
-rw-r--r-- | src/include/gnunet_peerinfo_service.h | 2 | ||||
-rw-r--r-- | src/include/gnunet_transport_service.h | 15 | ||||
-rw-r--r-- | src/peerinfo-tool/gnunet-peerinfo.c | 154 |
6 files changed, 107 insertions, 83 deletions
diff --git a/src/dns/install-dns-helper.sh b/src/dns/install-dns-helper.sh index bf2dd427df..0e7b86b36f 100755 --- a/src/dns/install-dns-helper.sh +++ b/src/dns/install-dns-helper.sh @@ -1,9 +1,10 @@ -#!/bin/bash +#!/bin/sh # $1 - bindir # $2 - gnunetdns group # $3 - sudo binary (optional) -$3 chown root $1/gnunet-helper-dns || true -$3 chgrp $2 $1/gnunet-helper-dns || true -$3 chmod 4750 $1/gnunet-helper-dns || true -$3 chown gnunet:$2 $1/gnunet-service-dns || true -$3 chmod 2750 $1/gnunet-service-dns || true +$3 chown root $1/gnunet-helper-dns +$3 chgrp $2 $1/gnunet-helper-dns +$3 chmod 4750 $1/gnunet-helper-dns +$3 chown gnunet:$2 $1/gnunet-service-dns +$3 chmod 2750 $1/gnunet-service-dns + diff --git a/src/include/gnunet_core_service.h b/src/include/gnunet_core_service.h index c06e3c1f68..f65d94eee8 100644 --- a/src/include/gnunet_core_service.h +++ b/src/include/gnunet_core_service.h @@ -17,7 +17,6 @@ Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ - /** * @file include/gnunet_core_service.h * @brief core service; this is the main API for encrypted P2P diff --git a/src/include/gnunet_hello_lib.h b/src/include/gnunet_hello_lib.h index a8a5656954..6962e6945e 100644 --- a/src/include/gnunet_hello_lib.h +++ b/src/include/gnunet_hello_lib.h @@ -411,6 +411,11 @@ struct GNUNET_MessageHeader * GNUNET_HELLO_get_header (struct GNUNET_HELLO_Message *hello); +/** + * FIXME. + * + * @param name + */ typedef struct GNUNET_TRANSPORT_PluginFunctions * (*GNUNET_HELLO_TransportPluginsFind) (const char *name); diff --git a/src/include/gnunet_peerinfo_service.h b/src/include/gnunet_peerinfo_service.h index ff87008615..caa6590658 100644 --- a/src/include/gnunet_peerinfo_service.h +++ b/src/include/gnunet_peerinfo_service.h @@ -62,7 +62,7 @@ GNUNET_PEERINFO_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); * Disconnect from the peerinfo service. Note that all iterators must * have completed or have been cancelled by the time this function is * called (otherwise, calling this function is a serious error). - * Furthermore, if 'GNUNET_PEERINFO_add_peer' operations are still + * Furthermore, if #GNUNET_PEERINFO_add_peer() operations are still * pending, they will be cancelled silently on disconnect. * * @param h handle to disconnect diff --git a/src/include/gnunet_transport_service.h b/src/include/gnunet_transport_service.h index b3ab4d01ee..cfa5fdbe03 100644 --- a/src/include/gnunet_transport_service.h +++ b/src/include/gnunet_transport_service.h @@ -176,7 +176,7 @@ struct GNUNET_TRANSPORT_TryConnectHandle; */ typedef void (*GNUNET_TRANSPORT_TryConnectCallback) (void *cls, - const int result); + int result); /** @@ -296,7 +296,6 @@ void GNUNET_TRANSPORT_notify_transmit_ready_cancel (struct GNUNET_TRANSPORT_TransmitHandle *th); - /** * Checks if a given peer is connected to us * @@ -397,6 +396,7 @@ GNUNET_TRANSPORT_get_hello_cancel (struct GNUNET_TRANSPORT_GetHelloHandle *ghh); */ struct GNUNET_TRANSPORT_OfferHelloHandle; + /** * Offer the transport service the HELLO of another peer. Note that * the transport service may just ignore this message if the HELLO is @@ -648,7 +648,7 @@ struct GNUNET_TRANSPORT_PeerMonitoringContext; * a final call with NULL for peer and address will follow when done. * In this case state and timeout do not contain valid values. * - * The #GNUNET_TRANSPORT_monitor_peers_cancel call MUST not be called from + * The #GNUNET_TRANSPORT_monitor_peers_cancel() call MUST not be called from * within this function! * * @@ -678,8 +678,8 @@ typedef void * to communicate with this peer, the state this peer is currently in and the * the current timeout for this state. * - * Upon completion, the 'GNUNET_TRANSPORT_PeerIterateCallback' is called one - * more time with 'NULL'. After this, the operation must no longer be + * Upon completion, the #GNUNET_TRANSPORT_PeerIterateCallback is called one + * more time with `NULL`. After this, the operation must no longer be * explicitly canceled. * * The #GNUNET_TRANSPORT_monitor_peers_cancel call MUST not be called in the @@ -771,8 +771,8 @@ enum GNUNET_TRANSPORT_ValidationState * indicate a change to a validation entry. The information included represent * the current state of the validation entry, * - * If the monitoring was called with one_shot=GNUNET_YES, a final callback - * with peer==NULL and address==NULL is executed. + * If the monitoring was called with `one_shot==GNUNET_YES`, a final callback + * with `peer==NULL` and `address==NULL` is executed. * * @param cls closure * @param peer peer this update is about, @@ -1007,7 +1007,6 @@ typedef void const struct GNUNET_TRANSPORT_SessionInfo *info); - /** * Install a plugin session state monitor callback. The callback * will be notified whenever the session changes. diff --git a/src/peerinfo-tool/gnunet-peerinfo.c b/src/peerinfo-tool/gnunet-peerinfo.c index d826a80508..18e1f8da7a 100644 --- a/src/peerinfo-tool/gnunet-peerinfo.c +++ b/src/peerinfo-tool/gnunet-peerinfo.c @@ -178,6 +178,16 @@ static const struct GNUNET_CONFIGURATION_Handle *cfg; static GNUNET_SCHEDULER_TaskIdentifier tt; /** + * Pending #GNUNET_TRANSPORT_get_hello() operation. + */ +static struct GNUNET_TRANSPORT_GetHelloHandle *gh; + +/** + * Connection to transport service. + */ +static struct GNUNET_TRANSPORT_Handle *transport; + +/** * Current iterator context (if active, otherwise NULL). */ static struct GNUNET_PEERINFO_IteratorContext *pic; @@ -202,6 +212,11 @@ static struct PrintContext *pc_tail; */ static struct GNUNET_PEERINFO_AddContext *ac; +/** + * Hello of this peer (if initialized). + */ +static struct GNUNET_HELLO_Message *my_hello; + /** * Main state machine that goes over all options and @@ -436,44 +451,23 @@ count_addr (void *cls, * @param err_msg error message */ static void -dump_my_hello (void *cls, - const struct GNUNET_PeerIdentity *peer, - const struct GNUNET_HELLO_Message *hello, - const char *err_msg) +dump_my_hello () { unsigned int size; unsigned int c_addr; - if (NULL == peer) - { - pic = NULL; - if (NULL != err_msg) - FPRINTF (stderr, - _("Error in communication with PEERINFO service: %s\n"), - err_msg); - tt = GNUNET_SCHEDULER_add_now (&state_machine, - NULL); - return; - } - - if (NULL == hello) - { - FPRINTF (stderr, - _("Failure: Did not receive %s\n"), - "HELLO"); - return; - } - - size = GNUNET_HELLO_size (hello); + size = GNUNET_HELLO_size (my_hello); if (0 == size) { FPRINTF (stderr, _("Failure: Received invalid %s\n"), "HELLO"); - return; + return; } if (GNUNET_SYSERR == - GNUNET_DISK_fn_write (dump_hello, hello, size, + GNUNET_DISK_fn_write (dump_hello, + my_hello, + size, GNUNET_DISK_PERM_USER_READ | GNUNET_DISK_PERM_USER_WRITE | GNUNET_DISK_PERM_GROUP_READ | @@ -491,7 +485,7 @@ dump_my_hello (void *cls, } c_addr = 0; - GNUNET_HELLO_iterate_addresses (hello, + GNUNET_HELLO_iterate_addresses (my_hello, GNUNET_NO, count_addr, &c_addr); @@ -500,7 +494,7 @@ dump_my_hello (void *cls, { FPRINTF (stderr, _("Wrote %s HELLO containing %u addresses with %u bytes to file `%s'\n"), - (GNUNET_YES == GNUNET_HELLO_is_friend_only(hello)) ? "friend-only": "public", + (GNUNET_YES == GNUNET_HELLO_is_friend_only (my_hello)) ? "friend-only": "public", c_addr, size, dump_hello); @@ -527,6 +521,8 @@ print_my_uri (void *cls, const struct GNUNET_HELLO_Message *hello, const char *err_msg) { + char *uri; + if (NULL == peer) { pic = NULL; @@ -540,8 +536,8 @@ print_my_uri (void *cls, if (NULL == hello) return; - char *uri = GNUNET_HELLO_compose_uri (hello, - &GPI_plugins_find); + uri = GNUNET_HELLO_compose_uri (hello, + &GPI_plugins_find); if (NULL != uri) { printf ("%s\n", @@ -640,6 +636,16 @@ shutdown_task (void *cls, GNUNET_PEERINFO_iterate_cancel (pic); pic = NULL; } + if (NULL != gh) + { + GNUNET_TRANSPORT_get_hello_cancel (gh); + gh = NULL; + } + if (NULL != transport) + { + GNUNET_TRANSPORT_disconnect (transport); + transport = NULL; + } while (NULL != (pc = pc_head)) { GNUNET_CONTAINER_DLL_remove (pc_head, @@ -664,6 +670,43 @@ shutdown_task (void *cls, GNUNET_PEERINFO_disconnect (peerinfo); peerinfo = NULL; } + if (NULL != my_hello) + { + GNUNET_free (my_hello); + my_hello = NULL; + } +} + + +/** + * Function called with our peer's HELLO message. + * Used to obtain our peer's public key. + * + * @param cls NULL + * @param hello the HELLO message + */ +static void +hello_callback (void *cls, + const struct GNUNET_MessageHeader *hello) +{ + if (NULL == hello) + { + fprintf (stderr, + _("Failed to get my own HELLO from this peer!\n")); + GNUNET_SCHEDULER_shutdown (); + return; + } + my_hello = (struct GNUNET_HELLO_Message *) GNUNET_copy_message (hello); + GNUNET_assert (GNUNET_OK == + GNUNET_HELLO_get_id (hello, + &my_peer_identity)); + GNUNET_TRANSPORT_get_hello_cancel (gh); + gh = NULL; + GNUNET_TRANSPORT_disconnect (transport); + transport = NULL; + if (NULL != dump_hello) + dump_my_hello (); + tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL); } @@ -700,33 +743,18 @@ testservice_task (void *cls, (GNUNET_YES == get_uri) || (NULL != dump_hello) ) { - /* load private key */ - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (cfg, - "PEER", - "PRIVATE_KEY", - &fn)) - { - GNUNET_log_config_missing (GNUNET_ERROR_TYPE_ERROR, - "PEER", - "PRIVATE_KEY"); - return; - } - if (NULL == (priv = GNUNET_CRYPTO_eddsa_key_create_from_file (fn))) - { - FPRINTF (stderr, - _("Loading hostkey from `%s' failed.\n"), - fn); - GNUNET_free (fn); - return; - } - GNUNET_free (fn); - GNUNET_CRYPTO_eddsa_key_get_public (priv, - &my_peer_identity.public_key); - GNUNET_free (priv); + transport = GNUNET_TRANSPORT_connect (cfg, + NULL, + NULL, + NULL, NULL, NULL); + gh = GNUNET_TRANSPORT_get_hello (transport, + &hello_callback, + NULL); + } + else + { + tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL); } - - tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL); GNUNET_SCHEDULER_add_delayed (GNUNET_TIME_UNIT_FOREVER_REL, &shutdown_task, NULL); @@ -827,14 +855,6 @@ state_machine (void *cls, &print_my_uri, NULL); get_uri = GNUNET_NO; } - else if (NULL != dump_hello) - { - pic = GNUNET_PEERINFO_iterate (peerinfo, - include_friend_only, - &my_peer_identity, - TIMEOUT, - &dump_my_hello, NULL); - } else if (GNUNET_YES == default_operation) { /* default operation list all */ @@ -843,8 +863,8 @@ state_machine (void *cls, tt = GNUNET_SCHEDULER_add_now (&state_machine, NULL); } else - { - GNUNET_SCHEDULER_shutdown (); + { + GNUNET_SCHEDULER_shutdown (); } default_operation = GNUNET_NO; } |