aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2014-12-14 20:52:16 +0000
committerChristian Grothoff <christian@grothoff.org>2014-12-14 20:52:16 +0000
commita8e5b09df9ce6f090ab4ecfde02fc7ab3b667c13 (patch)
treedd96afbbe0cfb435c94a377d6762100d4a205d05 /src
parentea17e83e666b0104b43d04423cef193f92199c26 (diff)
-fixing peerinfo part of #3559
Diffstat (limited to 'src')
-rwxr-xr-xsrc/dns/install-dns-helper.sh13
-rw-r--r--src/include/gnunet_core_service.h1
-rw-r--r--src/include/gnunet_hello_lib.h5
-rw-r--r--src/include/gnunet_peerinfo_service.h2
-rw-r--r--src/include/gnunet_transport_service.h15
-rw-r--r--src/peerinfo-tool/gnunet-peerinfo.c154
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;
}