/* $Id$
- * UDP forwarding utility
- * Copyright (C) 2004 Jan Kratochvil <project-udpforward@jankratochvil.net>
+ * UDP Gateway utility
+ * Copyright (C) 2004 Jan Kratochvil <project-udpgate@jankratochvil.net>
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
#include <string.h>
#include <setjmp.h>
#include <unistd.h>
+
+#ifdef HAVE_GNOME
#include <libgnome/gnome-program.h>
#include <libgnomeui/gnome-ui-init.h>
+#endif
+
+#include "main.h" /* self */
+#include "ui-line.h"
+#include "network.h"
+#include "configuration.h"
+#ifdef HAVE_GNOME
#include "ui-gnome.h"
+#endif
+
+
+/* Config: */
+#define LOCAL_PORT_DEFAULT 9201
-int optarg_verbose;
static int optarg_text;
+int optarg_verbose;
+int optarg_port=LOCAL_PORT_DEFAULT;
+static int optarg_start;
+static int optarg_stop;
+int optarg_no_fork;
+
+void (*ui_interactive)(void);
static const struct poptOption popt_table[]={
-#define UDPFORWARD_POPT(shortname,longname,argInfoP,argP,valP,descripP,argDescripP) \
+#define UDPGATE_POPT(shortname,longname,argInfoP,argP,valP,descripP,argDescripP) \
{ \
longName: (longname), \
shortName: (shortname), \
argDescrip: (argDescripP), \
}
- UDPFORWARD_POPT(0 ,"text" ,POPT_ARG_NONE ,&optarg_text ,0,
- N_("Disable Gnome UI; --text must be first argument"),NULL),
- UDPFORWARD_POPT('v',"verbose" ,POPT_ARG_NONE ,&optarg_verbose,0,N_("Display additional debug information"),NULL),
-
-#undef UDPFORWARD_POPT
+#ifdef HAVE_GNOME
+#define OPT_TEXT_IF_GNOME N_("Disable Gnome UI; --text must be first argument")
+#else /* HAVE_GNOME */
+#define OPT_TEXT_IF_GNOME N_("(no Gnome UI compiled - stub only); --text must be first argument")
+#endif /* HAVE_GNOME */
+ UDPGATE_POPT(0 ,"text" ,POPT_ARG_NONE ,&optarg_text ,0,
+ OPT_TEXT_IF_GNOME,NULL),
+#undef OPT_TEXT_IF_GNOME
+ UDPGATE_POPT('v',"verbose",POPT_ARG_NONE ,&optarg_verbose,0,
+ N_("Display additional debug information"),NULL),
+ UDPGATE_POPT('p',"port" ,POPT_ARG_INT |POPT_ARGFLAG_SHOW_DEFAULT,&optarg_port ,0,
+ N_("Listen on this UDP port"),NULL),
+ UDPGATE_POPT('s',"start" ,POPT_ARG_NONE ,&optarg_start ,0,
+ N_("Start the daemon"),NULL),
+ UDPGATE_POPT('S',"stop" ,POPT_ARG_NONE ,&optarg_stop ,0,
+ N_("Stop the daemon"),NULL),
+ UDPGATE_POPT('1',"no-fork",POPT_ARG_NONE ,&optarg_no_fork,0,
+ N_("Do not detach from the current process"),NULL),
+
+#undef UDPGATE_POPT
POPT_TABLEEND
};
};
+#ifdef HAVE_GNOME
static jmp_buf gnome_init_atexit_jmpbuf;
static gboolean gnome_init_atexit_disable;
_exit(EXIT_FAILURE);
}
-gboolean gnome_init_g_log_handler_hit;
+static gboolean gnome_init_g_log_handler_hit;
static void gnome_init_g_log_handler(const gchar *log_domain,GLogLevelFlags log_level,const gchar *message,gpointer user_data)
{
gnome_init_g_log_handler_hit=TRUE;
g_log_default_handler(log_domain,log_level,message,user_data);
}
+#endif /* HAVE_GNOME */
int main(int argc,char **argv)
{
poptContext context;
int errint;
gboolean is_interactive;
+#ifdef HAVE_GNOME
gboolean no_gnome;
+#endif /* HAVE_GNOME */
#if 0
g_log_set_always_fatal(~(0
bindtextdomain(PACKAGE,LOCALEDIR);
textdomain(PACKAGE);
+ /* Read it before the command-line parsing to get the default value
+ * of 'optarg_port' displayable by 'POPT_ARGFLAG_SHOW_DEFAULT'.
+ */
+ configuration_read();
+
if (argv[1] && !strcmp(argv[1],"--text"))
optarg_text=1;
+#ifdef HAVE_GNOME
no_gnome=(optarg_text || !getenv("DISPLAY") || !*getenv("DISPLAY"));
- if (no_gnome) {
+ if (no_gnome)
+#endif /* HAVE_GNOME */
+ {
context=poptGetContext(
PACKAGE, /* name */
argc,(/*en-const*/const char **)argv, /* argc,argv */
return EXIT_FAILURE;
}
errint=poptGetNextOpt(context);
- if (errint!=-1) {
- g_assert_not_reached(); /* some non-callbacked argument reached */
- return EXIT_FAILURE;
- }
- if (poptPeekArg(context)) {
+ if (errint!=-1)
+ g_error(_("Specified option not expected"));
+ if (poptPeekArg(context))
g_error(_("No arguments expected"));
- return EXIT_FAILURE;
- }
}
+#ifdef HAVE_GNOME
else {
GnomeProgram *gnome_program;
guint handler_id;
NULL);
else {
no_gnome=TRUE;
- /* No message: (captive-install-acquire:3693): Gtk-WARNING **: cannot open display:
+ /* No message: (udpgate:3693): Gtk-WARNING **: cannot open display:
* was reported, probably only '--help' message was shown.
*/
if (!gnome_init_g_log_handler_hit)
"Gtk", /* log_domain */
handler_id); /* handler_id */
}
+#endif /* HAVE_GNOME */
is_interactive=(1
-/* && ! optarg_scan_path_list
- && ! optarg_scan_disks_quick
- && ! optarg_scan_disks
- && ! optarg_microsoft_com */ );
+ && !optarg_start
+ && !optarg_stop);
/* Initialize UI here to catch all GLog errors below. */
if (is_interactive
+#ifdef HAVE_GNOME
&& (no_gnome || !ui_gnome_init())
-/* && !ui_line_init()*/)
+#endif /* HAVE_GNOME */
+ && !ui_line_init())
g_error(_("No UI interface could be initialized"));
- if (!is_interactive)
- /*scan_batch()*/;
+ if (!is_interactive) {
+ if (optarg_stop)
+ network_stop();
+ if (optarg_start)
+ network_start(optarg_port);
+ network_detach();
+ }
else
- ui_gnome_interactive();
+ (*ui_interactive)();
+
+ configuration_write();
return EXIT_SUCCESS;
}