Author: grothoff Date: 2006-07-29 19:15:28 -0700 (Sat, 29 Jul 2006) New Revision: 3172
Modified: GNUnet/src/server/gnunet-transport-check.c GNUnet/src/server/gnunet-update.c GNUnet/src/server/gnunetd.c GNUnet/src/server/startup.c GNUnet/src/server/startup.h Log: towards gnunet-update Modified: GNUnet/src/server/gnunet-transport-check.c =================================================================== --- GNUnet/src/server/gnunet-transport-check.c 2006-07-30 02:00:30 UTC (rev 3171) +++ GNUnet/src/server/gnunet-transport-check.c 2006-07-30 02:15:28 UTC (rev 3172) @@ -379,7 +379,6 @@ int res; unsigned long long Xrepeat; char * trans; - char * user; int ping; int stats[3]; int pos; @@ -402,20 +401,10 @@ return -1; } - user = NULL; - if (0 == GC_get_configuration_value_string(cfg, - "GNUNETD", - "USER", - NULL, - &user)) { - if (OK != os_change_user(ectx, - user)) { - GC_free(cfg); - GE_free_context(ectx); - FREE(user); - return 1; - } - FREE(user); + if (OK != changeUser(ectx, cfg)) { + GC_free(cfg); + GE_free_context(ectx); + return -1; } if (-1 == GC_get_configuration_value_number(cfg, @@ -490,6 +479,7 @@ "BLACKLIST", NULL); } + cron = cron_create(ectx); initCore(ectx, cfg, cron, NULL); initConnection(ectx, cfg, NULL, cron); registerPlaintextHandler(P2P_PROTO_noise, @@ -536,6 +526,7 @@ doneConnection(); doneCore(); FREE(expectedValue); + cron_destroy(cron); GC_free(cfg); GE_free_context(ectx); Modified: GNUnet/src/server/gnunet-update.c =================================================================== --- GNUnet/src/server/gnunet-update.c 2006-07-30 02:00:30 UTC (rev 3171) +++ GNUnet/src/server/gnunet-update.c 2006-07-30 02:15:28 UTC (rev 3172) @@ -1,6 +1,6 @@ /* This file is part of GNUnet. - (C) 2004 Christian Grothoff (and other contributing authors) + (C) 2004, 2006 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published @@ -26,6 +26,9 @@ #include "platform.h" #include "gnunet_util.h" +#include "gnunet_util_config_impl.h" +#include "gnunet_util_error_loggers.h" +#include "gnunet_util_cron.h" #include "gnunet_core.h" #include "core.h" #include "startup.h" @@ -40,134 +43,14 @@ */ #define DSO_PREFIX "libgnunet" -/** - * Print a list of the options we offer. - */ -static void printhelp() { - static Help help[] = { - HELP_CONFIG, - { 'g', "get", "SECTION:ENTRY", - gettext_noop("print a value from the configuration file to stdout") }, - HELP_HELP, - HELP_LOGLEVEL, -#ifndef MINGW /* not supported */ - { 'u', "user", "LOGIN", - gettext_noop("run as user LOGIN") }, -#endif - { 'U', "client", NULL, - gettext_noop("run in client mode (for getting client configuration values)") }, - HELP_VERSION, - HELP_VERBOSE, - HELP_END, - }; - formatHelp("gnunet-update [OPTIONS]", - _("Updates GNUnet datastructures after version change."), - help); -} +static struct GC_Configuration * cfg; -static int be_verbose = NO; +static struct GE_Context * ectx; -/** - * Perform option parsing from the command line. - */ -static int parseCommandLine(int argc, - char * argv[]) { - int c; - int user = NO; - int get = NO; - - /* set the 'magic' code that indicates that - this process is 'gnunetd' (and not any of - the user-tools). Needed such that we use - the right configuration file... */ - FREENONNULL(setConfigurationString("GNUNETD", - "_MAGIC_", - "YES")); - while (1) { - int option_index = 0; - static struct GNoption long_options[] = { - LONG_DEFAULT_OPTIONS, - { "get", 1, 0, 'g' }, -#ifndef MINGW /* not supported */ - { "user", 0, 0, 'u' }, -#endif - { "client", 0, 0, 'U' }, - { "verbose", 0, 0, 'V' }, - { 0,0,0,0 } - }; - - c = GNgetopt_long(argc, - argv, - "vhdc:g:VL:", - long_options, - &option_index); - if (c == -1) - break; /* No more flags to process */ - if (YES == parseDefaultOptions(c, GNoptarg)) - continue; - switch(c) { - case 'g': - FREENONNULL(setConfigurationString("GNUNET-UPDATE", - "GET", - GNoptarg)); - get = YES; - break; - case 'L': - FREENONNULL(setConfigurationString("GNUNETD", - "LOGLEVEL", - GNoptarg)); - break; - case 'h': - printhelp(); - return SYSERR; -#ifndef MINGW /* not supported */ - case 'u': - changeUser(GNoptarg); - break; -#endif - case 'U': - FREENONNULL(setConfigurationString("GNUNETD", - "_MAGIC_", - "NO")); - user = YES; - break; - case 'v': - printf("GNUnet v%s, gnunet-update 0.0.1\n", - VERSION); - return SYSERR; - case 'V': - be_verbose = YES; - break; - default: - printf(_("Use --help to get a list of options.\n")); - return SYSERR; - } /* end of parsing commandline */ - } - if (user && (! get)) { - printf(_("Option `%s' makes no sense without option `%s'."), - "-u", "-g"); - return SYSERR; - } - if (GNoptind < argc) { - printf(_("Invalid arguments: ")); - while (GNoptind < argc) - printf("%s ", argv[GNoptind++]); - printf(_("\nExiting.\n")); - return SYSERR; - } - if (get == NO) { - /* if we do not run in 'get' mode, - make sure we send error messages - to the console... */ - FREENONNULL(setConfigurationString("GNUNETD", - "LOGFILE", - NULL)); - } - return OK; -} - static char ** processed; + static unsigned int processedCount; + static UpdateAPI uapi; /** @@ -271,11 +154,11 @@ *ent = '\0'; ent++; } - val = getConfigurationString(sec, ent); - if (val == NULL) - printf("%u\n", - getConfigurationInt(sec, ent)); - else { + if (0 == GC_get_configuration_value_string(cfg, + sec, + ent, + NULL, + &val)) { printf("%s\n", val); FREE(val); @@ -285,14 +168,16 @@ static void work() { int i; - uapi.updateModule = &updateModule; + struct CronManager * cron; + + uapi.updateModule = &updateModule; uapi.requestService = &requestService; uapi.releaseService = &releaseService; - initCore(); + cron = cron_create(ectx); + initCore(ectx, cfg, cron, NULL); - /* force update of common modules - (used by core) */ + /* force update of common modules (used by core) */ updateModule("transport"); updateModule("identity"); updateModule("session"); @@ -310,29 +195,74 @@ processedCount); GROW(processed, processedCount, 0); doneCore(); + cron_destroy(cron); } + +/** + * All gnunet-update command line options + */ +static struct CommandLineOption gnunetupdateOptions[] = { + COMMAND_LINE_OPTION_CFG_FILE, /* -c */ + { 'g', "get", "", + gettext_noop("ping peers from HOSTLISTURL that match transports"), + 0, &gnunet_getopt_configure_set_option, "GNUNET-UPDATE:GET" }, + COMMAND_LINE_OPTION_HELP(gettext_noop("Updates GNUnet datastructures after version change.")), /* -h */ + COMMAND_LINE_OPTION_HOSTNAME, /* -H */ + COMMAND_LINE_OPTION_LOGGING, /* -L */ + { 'u', "user", "LOGIN", + gettext_noop("run as user LOGIN"), + 1, &gnunet_getopt_configure_set_option, "GNUNETD:USER" }, + { 'U', "client", NULL, + gettext_noop("run in client mode (for getting client configuration values)"), + 0, &gnunet_getopt_configure_set_option, "GNUNETD:_MAGIC_=NO" }, + COMMAND_LINE_OPTION_VERSION(PACKAGE_VERSION), /* -v */ + COMMAND_LINE_OPTION_VERBOSE, + COMMAND_LINE_OPTION_END, +}; + + int main(int argc, - char * argv[]) { + const char * argv[]) { char * get; char * user; - if (SYSERR == initUtil(argc, argv, &parseCommandLine)) - return 0; -#ifndef MINGW - user = getConfigurationString("GNUNETD", "USER"); - if (user && strlen(user)) - changeUser(user); - FREENONNULL(user); -#endif + ectx = GE_create_context_stderr(NO, + GE_WARNING | GE_ERROR | GE_FATAL | + GE_USER | GE_ADMIN | GE_DEVELOPER | + GE_IMMEDIATE | GE_BULK); + GE_setDefaultContext(ectx); + cfg = GC_create_C_impl(); + GE_ASSERT(ectx, cfg != NULL); - get = getConfigurationString("GNUNET-UPDATE", - "GET"); - if (get != NULL) - doGet(get); - else + if (-1 == gnunet_parse_options("gnunet-update", + ectx, + cfg, + gnunetupdateOptions, + (unsigned int) argc, + argv)) { + GC_free(cfg); + GE_free_context(ectx); + return -1; + } + if (OK != changeUser(ectx, cfg)) { + GC_free(cfg); + GE_free_context(ectx); + return -1; + } + if (0 == GC_get_configuration_value_string(cfg, + "GNUNET-UPDATE", + "GET", + NULL, + &get)) { + doGet(get); + FREE(get); + } else { work(); - doneUtil(); + } + GC_free(cfg); + GE_free_context(ectx); + return 0; } Modified: GNUnet/src/server/gnunetd.c =================================================================== --- GNUnet/src/server/gnunetd.c 2006-07-30 02:00:30 UTC (rev 3171) +++ GNUnet/src/server/gnunetd.c 2006-07-30 02:15:28 UTC (rev 3172) @@ -175,7 +175,6 @@ */ int main(int argc, const char * argv[]) { - char * user; int ret; struct GE_Context * ectx; @@ -202,20 +201,10 @@ GE_free_context(ectx); return -1; } - user = NULL; - if (0 == GC_get_configuration_value_string(cfg, - "GNUNETD", - "USER", - NULL, - &user)) { - if (OK != os_change_user(ectx, - user)) { - GC_free(cfg); - GE_free_context(ectx); - FREE(user); - return 1; - } - FREE(user); + if (OK != changeUser(ectx, cfg)) { + GC_free(cfg); + GE_free_context(ectx); + return 1; } if (OK != checkUpToDate(ectx, cfg)) { Modified: GNUnet/src/server/startup.c =================================================================== --- GNUnet/src/server/startup.c 2006-07-30 02:00:30 UTC (rev 3171) +++ GNUnet/src/server/startup.c 2006-07-30 02:15:28 UTC (rev 3172) @@ -36,6 +36,27 @@ #include "core.h" #include "startup.h" +int changeUser(struct GE_Context * ectx, + struct GC_Configuration * cfg) { + char * user; + + user = NULL; + if (0 == GC_get_configuration_value_string(cfg, + "GNUNETD", + "USER", + NULL, + &user)) { + if (OK != os_change_user(ectx, + user)) { + FREE(user); + return SYSERR; + } + FREE(user); + } + return OK; +} + + static char * getPIDFile(struct GC_Configuration * cfg) { char * pif; Modified: GNUnet/src/server/startup.h =================================================================== --- GNUnet/src/server/startup.h 2006-07-30 02:00:30 UTC (rev 3171) +++ GNUnet/src/server/startup.h 2006-07-30 02:15:28 UTC (rev 3172) @@ -31,15 +31,18 @@ #include "gnunet_util.h" #include "platform.h" +int changeUser(struct GE_Context * ectx, + struct GC_Configuration * cfg); + /** * Write our process ID to the pid file. - **/ + */ void writePIDFile(struct GE_Context * ectx, struct GC_Configuration * cfg); /** * Delete the pid file. - **/ + */ void deletePIDFile(struct GE_Context * ectx, struct GC_Configuration * cfg); _______________________________________________ GNUnet-SVN mailing list GNUnet-SVN@gnu.org http://lists.gnu.org/mailman/listinfo/gnunet-svn