From 31a93b2f7c8988dd15f654ca64381ed9c44ae50b Mon Sep 17 00:00:00 2001 From: Julius Bünger Date: Sat, 18 Mar 2017 23:38:18 +0100 Subject: fix rps getopt --- src/rps/gnunet-rps.c | 67 +++++++++++++++++----------------------------------- 1 file changed, 22 insertions(+), 45 deletions(-) (limited to 'src/rps/gnunet-rps.c') diff --git a/src/rps/gnunet-rps.c b/src/rps/gnunet-rps.c index 3dbb8053e..d82528182 100644 --- a/src/rps/gnunet-rps.c +++ b/src/rps/gnunet-rps.c @@ -41,45 +41,9 @@ static struct GNUNET_RPS_Handle *rps_handle; static struct GNUNET_RPS_Request_Handle *req_handle; /** - * PeerID (Option --seed) + * PeerID in string representation (Option --seed) */ -static struct GNUNET_PeerIdentity *peer_id; - - -/** - * Set an option of type 'struct GNUNET_PeerIdentity *' from the command line. - * A pointer to this function should be passed as part of the - * 'struct GNUNET_GETOPT_CommandLineOption' array to initialize options - * of this type. It should be followed by a pointer to a value of - * type 'struct GNUNET_PeerIdentity *', which will be allocated with the requested string. - * - * @param ctx command line processing context - * @param scls additional closure (will point to the 'char *', - * which will be allocated) - * @param option name of the option - * @param value actual value of the option (a PeerID) - * @return #GNUNET_OK - */ -static int -GNUNET_GETOPT_set_peerid (struct GNUNET_GETOPT_CommandLineProcessorContext *ctx, - void *scls, const char *option, const char *value) -{ - struct GNUNET_PeerIdentity **val = (struct GNUNET_PeerIdentity **) scls; - - GNUNET_assert (NULL != value); - GNUNET_free_non_null (*val); - /* Not quite sure whether that is a sane way */ - *val = GNUNET_new (struct GNUNET_PeerIdentity); - if (GNUNET_OK != - GNUNET_CRYPTO_eddsa_public_key_from_string (value, - strlen (value), - &((*val)->public_key))) - { - FPRINTF (stderr, "Invalid peer ID %s\n", value); - return GNUNET_SYSERR; - } - return GNUNET_OK; -} +static char *peer_id_str; /** @@ -139,10 +103,11 @@ run (void *cls, const struct GNUNET_CONFIGURATION_Handle *cfg) { static uint64_t num_peers; + struct GNUNET_PeerIdentity peer_id; rps_handle = GNUNET_RPS_connect (cfg); - if (NULL == peer_id) + if (NULL == peer_id_str) { /* Request n PeerIDs */ /* If number was specified use it, else request single peer. */ num_peers = (NULL == args[0]) ? 1 : atoi (args[0]); @@ -153,8 +118,18 @@ run (void *cls, } else { /* Seed PeerID */ - GNUNET_RPS_seed_ids (rps_handle, 1, peer_id); - FPRINTF (stdout, "Seeded PeerID %s\n", GNUNET_i2s_full (peer_id)); + if (GNUNET_OK != + GNUNET_CRYPTO_eddsa_public_key_from_string (peer_id_str, + strlen (peer_id_str), + &peer_id.public_key)) + { + FPRINTF (stderr, + _("Failed to parse peer identity `%s'\n"), + peer_id_str); + return; + } + GNUNET_RPS_seed_ids (rps_handle, 1, &peer_id); + FPRINTF (stdout, "Seeded PeerID %s\n", GNUNET_i2s_full (&peer_id)); ret = 0; GNUNET_SCHEDULER_add_now (&do_shutdown, NULL); } @@ -172,10 +147,12 @@ main (int argc, char *const *argv) { const char helpstr[] = "Get random GNUnet peers. If none is specified a single is requested."; - static const struct GNUNET_GETOPT_CommandLineOption options[] = { - {'s', "seed", "PEER_ID", - gettext_noop ("Seed a PeerID"), - GNUNET_YES, &GNUNET_GETOPT_set_peerid, &peer_id}, + struct GNUNET_GETOPT_CommandLineOption options[] = { + GNUNET_GETOPT_OPTION_STRING ('s', + "seed", + "PEER_ID", + gettext_noop ("Seed a PeerID"), + &peer_id_str), GNUNET_GETOPT_OPTION_END }; return (GNUNET_OK == -- cgit v1.2.3