New Upstream Release - driftnet
Ready changes
Summary
Merged new upstream version: 1.5.0 (was: 1.4.0).
Resulting package
Built on 2023-06-08T23:21 (took 5m37s)
The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:
apt install -t fresh-releases driftnet-dbgsymapt install -t fresh-releases driftnet
Lintian Result
Diff
diff --git a/.gitignore b/.gitignore
index 706084e..94bded9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,6 +16,7 @@ config.log
config.status
stamp-h1
ar-lib
+test-driver
driftnet
# eclipse files
@@ -34,8 +35,11 @@ driftnet
cmake-build-*
docs/
-#coverage files
+# coverage files
*.gcda
*.gcno
coverage.info
coverage-docs/
+
+# generated files
+src/http_display/web_data.c
diff --git a/Makefile.am b/Makefile.am
index ecd8b69..23ebfdc 100644
--- a/Makefile.am
+++ b/Makefile.am
@@ -7,7 +7,12 @@ EXTRA_DIST = driftnet.1.in CREDITS Changelog
MANPAGE = driftnet.1.gz
MAN1DIR = $(DESTDIR)$(mandir)/man1/
-clean-local: clean-coverage clean-docs
+CLEAN_RULES = clean-docs
+if ENABLE_TESTS
+CLEAN_RULES += clean-coverage
+endif
+
+clean-local: $(CLEAN_RULES)
rm -f $(MANPAGE)
install-data-local: driftnet.1.in
diff --git a/README.md b/README.md
index 0a0279c..fff70aa 100644
--- a/README.md
+++ b/README.md
@@ -17,6 +17,7 @@ Driftnet watches network traffic, and picks out and displays JPEG, GIF and other
News
------------
+ Migrate display to GKT3 (GTK2 still supported)
Added WebP image format support
Added new, http and websockets based, display
Added basic windows support (cygwin)
@@ -38,7 +39,20 @@ You will need:
* [libwebsockets](https://libwebsockets.org/) (if you want the http server)
* [libgtk](https://www.gtk.org/) (if you want the GTK display)
-On most Linux distributions (APT based) these can be installed by executing `sudo apt-get install libpcap-dev libjpeg-dev libpng12-dev giflib-tools libwebp-dev`. If you don't want a version of driftnet which will display images itself, but just want to use it to gather images for some other application, you only need `libpcap`. See comments in the Makefile for more information. To play MPEG audio, you need an MPEG player. By default, driftnet will use [mpg123](http://www.mpg123.de/).
+On most Linux distributions (APT based) these can be installed by executing `sudo apt-get install libpcap-dev libjpeg-dev libpng-dev libgif-dev libwebp-dev`. If you don't want a version of driftnet which will display images itself, but just want to use it to gather images for some other application, you only need `libpcap`. See comments in the Makefile for more information. To play MPEG audio, you need an MPEG player. By default, driftnet will use [mpg123](http://www.mpg123.de/).
+
+### GTK display
+
+Driftnet links by default against GTK 3 (GTK2 is still supported disabling GTK3 in the configure script `./configure --disable-gtk3`).
+
+- GTK3 dependencies: `sudo apt-get install libgtk-3-dev`
+- GTK2 dependencies: `sudo apt-get install libgtk2.0-dev`
+
+### HTTP display
+
+Instead of the GTK interface you can use a new HTML based one (the display could be selected at launch time).
+
+Dependencies: `sudo apt-get install libwebsockets-dev`
## Windows (on cygwin)
diff --git a/configure.ac b/configure.ac
index 7355912..9c481fc 100644
--- a/configure.ac
+++ b/configure.ac
@@ -3,7 +3,7 @@
#
AC_PREREQ([2.71])
-AC_INIT([driftnet],[1.4.0],[david.sephirot@gmail.com])
+AC_INIT([driftnet],[1.5.0],[david.sephirot@gmail.com])
AC_CANONICAL_HOST
AC_CANONICAL_TARGET
@@ -43,7 +43,8 @@ case "${host_os}" in
;;
esac
-AC_ARG_ENABLE([display],
+AC_ARG_ENABLE(
+ [display],
[AS_HELP_STRING([--disable-display],[disable display (default is no)])],
,
[enable_display=yes])
@@ -53,6 +54,17 @@ if test "x$enable_display" = xno; then
fi
AM_CONDITIONAL(ENABLE_DISPLAY, test "x$enable_display" = xyes)
+AC_ARG_ENABLE(
+ [gtk3],
+ [AS_HELP_STRING([--disable-gtk3],[disable gtk+ 3.x and compile with gtk+ 2.x])],
+ ,
+ [enable_gtk3=yes])
+
+if test "x$enable_gtk3" = xno; then
+ AC_DEFINE([DISABLE_GTK3], [1], [Compile without support for gtk+ 3.x])
+fi
+AM_CONDITIONAL(ENABLE_GTK3, test "x$enable_gtk3" = xyes)
+
AC_ARG_ENABLE([http-display],
[AS_HELP_STRING([--disable-http-display],[disable http display (default is yes)])],
,
@@ -79,11 +91,6 @@ fi
# Checks for programs.
#
-# Check for pkg-config
-AC_CHECK_PROG([have_pkg_config],[pkg-config],[yes],[no])
-AM_CONDITIONAL([FOUND_PKGCONFIG], [test "x$have_pkg_config" = xyes])
-AM_COND_IF([FOUND_PKGCONFIG],,[AC_MSG_ERROR([required program 'pkg-config' not found])])
-
AC_PROG_CC
AC_PROG_INSTALL
#AM_PROG_CC_C_O
@@ -119,40 +126,28 @@ AC_CHECK_LIB([pthread],
if test "x$enable_display" = xyes; then
- AC_CHECK_LIB([glib-2.0],
- [g_free],
- [],
- [AC_MSG_ERROR([cannot find lib glib-2.x])])
-
- AC_CHECK_LIB([gobject-2.0],
- [g_signal_connect_data],
- [],
- [AC_MSG_ERROR([cannot find lib libgobject-2.0])])
-
- AC_CHECK_LIB([gtk-x11-2.0],
- [gtk_main],
- [],
- [AC_MSG_ERROR([cannot find lib gtk-2.x])])
-
-# AC_CHECK_LIB([gthread-2.0],
-# [g_thread_init],
-# [],
-# [AC_MSG_ERROR([cannot find lib libgthread-2.0])])
-
- AC_CHECK_LIB([gdk-x11-2.0],
- [gdk_window_get_state],
- [],
- [AC_MSG_ERROR([cannot find lib gdk-x11-2.0])])
-
-# AC_CHECK_LIB([Xrender],
-# [XRenderComposite],
-# [],
-# [AC_MSG_ERROR([cannot find lib XRender])])
-
- GTK_CFLAGS="$(${PKG_CONFIG} --cflags gtk+-x11-2.0 glib-2.0 gobject-2.0 gdk-x11-2.0)"
- #gthread-2.0)"
-
- AC_SUBST(GTK_CFLAGS)
+ HAVE_GTK_VERSION3=false
+
+ if test "x$enable_gtk3" = "xyes" ; then
+ PKG_CHECK_EXISTS(
+ [gtk+-3.0 >= 3.0.0],
+ [HAVE_GTK_VERSION3=true],
+ [HAVE_GTK_VERSION3=false])
+ fi
+
+ if test "x$HAVE_GTK_VERSION3" = "xfalse"; then
+ PKG_CHECK_MODULES(
+ GTK,
+ gtk+-2.0 >= 2.0.0,
+ [gtk_version_to_link=2.x.x],
+ [AC_MSG_ERROR([cannot find gtk+-2.0 >= 2.0.0])])
+ else
+ PKG_CHECK_MODULES(
+ GTK,
+ gtk+-3.0 >= 3.0.0,
+ [gtk_version_to_link=3.x.x],
+ [AC_MSG_ERROR([cannot find gtk+-3.0 >= 3.0.0])])
+ fi
AC_CHECK_LIB([gif],
[DGifOpenFileHandle],
@@ -164,17 +159,20 @@ if test "x$enable_display" = xyes; then
[],
[AC_MSG_ERROR([cannot find lib png])] )
- AC_CHECK_LIB([webp],
- [WebPDecodeRGBInto],
- [],
- [AC_MSG_ERROR([cannot find lib webp])] )
-
AC_CHECK_LIB([jpeg],
[jpeg_read_header],
[],
[AC_MSG_ERROR([cannot find lib jpeg])] )
+else
+ gtk_version_to_link=none
fi
+
+AC_CHECK_LIB([webp],
+ [WebPDecodeRGBInto],
+ [],
+ [AC_MSG_ERROR([cannot find lib webp])] )
+
if test "x$enable_http_display" = xyes; then
AC_CHECK_LIB([websockets],
[lws_create_context],
@@ -279,6 +277,9 @@ echo \
Package features:
- enable display: ${enable_display}
+ - enable gtk3: ${enable_gtk3}
+ - GTK version found: ${gtk_version_to_link}
+ - enable http display: ${enable_http_display}
- enable debug: ${enable_debug}
Now type:
diff --git a/debian/changelog b/debian/changelog
index fd75894..d10b6c2 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+driftnet (1.5.0-1) UNRELEASED; urgency=low
+
+ * New upstream release.
+
+ -- Debian Janitor <janitor@jelmer.uk> Thu, 08 Jun 2023 23:17:04 -0000
+
driftnet (1.4.0-2) unstable; urgency=medium
* Bump debhelper compat.
diff --git a/driftnet.doxygen b/driftnet.doxygen
index c51cafa..38eb017 100644
--- a/driftnet.doxygen
+++ b/driftnet.doxygen
@@ -32,7 +32,7 @@ PROJECT_NAME = "Driftnet"
# This could be handy for archiving the generated documentation or
# if some version control system is used.
-PROJECT_NUMBER = 1.4.0
+PROJECT_NUMBER = 1.5.0
# Using the PROJECT_BRIEF tag one can provide an optional one line description
# for a project that appears at the top of each page and should give viewer
diff --git a/src/Makefile.am b/src/Makefile.am
index 99b90bb..da2db0a 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -21,6 +21,7 @@ if ENABLE_DISPLAY
SUBDIRS += display
AM_CFLAGS += -I$(srcdir)/display
driftnet_LDADD += display/libdisplay.a
+driftnet_LDADD += @GTK_LIBS@
endif
if ENABLE_HTTP_DISPLAY
diff --git a/src/display/display.c b/src/display/display.c
index d1d6932..f50547f 100644
--- a/src/display/display.c
+++ b/src/display/display.c
@@ -150,10 +150,30 @@ void make_backing_image() {
* Copy the backing image onto the window. */
void update_window() {
if (backing_image) {
+#ifdef DISABLE_GTK3
GdkGC *gc;
gc = gdk_gc_new(drawable);
gdk_draw_rgb_32_image(drawable, gc, 0, 0, width, height, GDK_RGB_DITHER_NORMAL, (guchar*)backing_image->flat, sizeof(pel) * width);
g_object_unref(gc);
+#else
+ cairo_t *cr = gdk_cairo_create(drawable);
+
+ cairo_set_source_rgb(cr, 0.0, 0.0, 1.0);
+ cairo_rectangle(cr, 0.0, 0.0, width, height);
+ cairo_fill(cr);
+
+ cairo_surface_t *pSurface = cairo_image_surface_create_for_data(
+ (guchar*)backing_image->flat,
+ CAIRO_FORMAT_RGB24,
+ width,
+ height,
+ (width * 4));
+
+ cairo_set_source_surface(cr, pSurface, 0.0, 0.0);
+ cairo_paint(cr);
+
+ cairo_destroy(cr);
+#endif
}
}
@@ -220,8 +240,15 @@ struct imgrect *find_image_rectangle(const int x, const int y) {
/* expose_event:
* React to an expose event, perhaps changing the backing image size. */
void expose_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
+#ifdef DISABLE_GTK3
if (darea) drawable = darea->window;
gdk_drawable_get_size(GDK_DRAWABLE(drawable), &width, &height);
+#else
+ if (darea) drawable = gtk_widget_get_window (darea);
+ width = gdk_window_get_width(drawable);
+ height = gdk_window_get_height(drawable);
+#endif
+
if (!backing_image || backing_image->width != width || backing_image->height != height)
make_backing_image();
@@ -231,8 +258,15 @@ void expose_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
/* configure_event:
* React to a configure event, perhaps changing the backing image size. */
void configure_event(GtkWidget *widget, GdkEvent *event, gpointer data) {
+#ifdef DISABLE_GTK3
if (darea) drawable = darea->window;
gdk_drawable_get_size(GDK_DRAWABLE(drawable), &width, &height);
+#else
+ if (darea) drawable = gtk_widget_get_window (darea);
+ width = gdk_window_get_width(drawable);
+ height = gdk_window_get_height(drawable);
+#endif
+
if (!backing_image || backing_image->width != width || backing_image->height != height)
make_backing_image();
@@ -302,11 +336,29 @@ void button_release_event(GtkWidget *widget, GdkEventButton *event) {
if (ir && ir == find_image_rectangle((int)event->x, (int)event->y)) {
/* We draw a little frame around the image while we're saving it, to
* give some visual feedback. */
+#ifdef DISABLE_GTK3
gdk_draw_rectangle(drawable, darea->style->white_gc, 0, ir->x - 2, ir->y - 2, ir->w + 3, ir->h + 3);
+#else
+ cairo_t *cr = gdk_cairo_create(drawable);
+
+ cairo_set_line_width (cr, 1.0);
+ cairo_set_source_rgb(cr, 1.0, 1.0, 1.0);
+ cairo_rectangle(cr, ir->x, ir->y, ir->w+3, ir->h + 3);
+ cairo_stroke(cr);
+#endif
gdk_flush(); /* force X to actually draw the damn thing. */
save_image(ir);
xnanosleep(100000000);
+#ifdef DISABLE_GTK3
gdk_draw_rectangle(drawable, darea->style->black_gc, 0, ir->x - 2, ir->y - 2, ir->w + 3, ir->h + 3);
+#else
+ cairo_set_line_width (cr, 1.0);
+ cairo_set_source_rgb(cr, 0.0, 0.0, 0.0);
+ cairo_rectangle(cr, ir->x, ir->y, ir->w+3, ir->h + 3);
+ cairo_stroke(cr);
+
+ cairo_destroy(cr);
+#endif
}
}
@@ -429,7 +481,9 @@ static void do_gtkdisplay(void)
/* do some init thing */
gtk_init(0, NULL);
+#ifdef DISABLE_GTK3
gtk_widget_push_colormap(gdk_rgb_get_colormap());
+#endif
/* Make our own window. */
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
@@ -439,15 +493,20 @@ static void do_gtkdisplay(void)
gtk_container_add(GTK_CONTAINER(window), darea);
gtk_widget_set_events(darea, GDK_EXPOSURE_MASK|GDK_BUTTON_PRESS_MASK|GDK_BUTTON_RELEASE_MASK);
- g_signal_connect(G_OBJECT(window), "delete_event", GTK_SIGNAL_FUNC(delete_event), NULL);
- g_signal_connect(G_OBJECT(window), "destroy", GTK_SIGNAL_FUNC(destroy), NULL);
+ g_signal_connect(G_OBJECT(window), "delete_event", G_CALLBACK(delete_event), NULL);
+ g_signal_connect(G_OBJECT(window), "destroy", G_CALLBACK(destroy), NULL);
+
+#if DISABLE_GTK3
+ g_signal_connect(G_OBJECT(darea), "expose-event", G_CALLBACK(expose_event), NULL);
+#else
+ g_signal_connect(G_OBJECT(darea), "draw", G_CALLBACK(expose_event), NULL);
+#endif
- g_signal_connect(G_OBJECT(darea), "expose-event", GTK_SIGNAL_FUNC(expose_event), NULL);
- g_signal_connect(G_OBJECT(darea), "configure_event", GTK_SIGNAL_FUNC(expose_event), NULL);
+ g_signal_connect(G_OBJECT(darea), "configure_event", G_CALLBACK(expose_event), NULL);
/* mouse button press/release for saving images */
- g_signal_connect(G_OBJECT(darea), "button_press_event", GTK_SIGNAL_FUNC(button_press_event), NULL);
- g_signal_connect(G_OBJECT(darea), "button_release_event", GTK_SIGNAL_FUNC(button_release_event), NULL);
+ g_signal_connect(G_OBJECT(darea), "button_press_event", G_CALLBACK(button_press_event), NULL);
+ g_signal_connect(G_OBJECT(darea), "button_release_event", G_CALLBACK(button_release_event), NULL);
gtk_widget_show_all(window);
@@ -460,7 +519,9 @@ static void do_gtkdisplay(void)
img_delete(backing_image);
+#ifdef DISABLE_GTK3
gtk_exit(0);
+#endif
return; /* NOTREACHED */
}
diff --git a/src/display/img.h b/src/display/img.h
index bdec81b..331095b 100644
--- a/src/display/img.h
+++ b/src/display/img.h
@@ -22,8 +22,15 @@
typedef uint8_t chan;
typedef uint32_t pel;
-/* Yuk. GDKRGB expects data in a specific ordering. */
+/*
+ * Yuk. GDKRGB expects data in a specific ordering:
+ */
#if defined(DRIFTNET_LITTLE_ENDIAN)
+/*
+ * - for GTK2 gdk_draw_rgb_32_image(): 0x00BBGGRR
+ * - for GTK3 cairo_image_surface_create_for_data(): 0x00RRGGBB
+ */
+#ifdef DISABLE_GTK3
# define PEL(r, g, b) ((pel)((chan)(r) | ((chan)(g) << 8) | ((chan)(b) << 16)))
# define PELA(r, g, b, a) ((pel)((chan)(r) | ((chan)(g) << 8) | ((chan)(b) << 16) | ((chan)(a) << 24)))
@@ -31,7 +38,21 @@ typedef uint32_t pel;
# define GETG(p) ((chan)(((p) & (pel)0x0000ff00) >> 8))
# define GETB(p) ((chan)(((p) & (pel)0x00ff0000) >> 16))
# define GETA(p) ((chan)(((p) & (pel)0xff000000) >> 24))
+#else
+# define PEL(r, g, b) ((pel)((chan)(r) << 16 | ((chan)(g) << 8) | ((chan)(b))))
+# define PELA(r, g, b, a) ((pel)((chan)(r) << 16 | ((chan)(g) << 8) | ((chan)(b)) | ((chan)(a) << 24)))
+
+# define GETR(p) ((chan)(((p) & (pel)0x00ff0000) >> 16))
+# define GETG(p) ((chan)(((p) & (pel)0x0000ff00) >> 8))
+# define GETB(p) ((chan)(((p) & (pel)0x000000ff) ))
+# define GETA(p) ((chan)(((p) & (pel)0xff000000) >> 24))
+#endif
#elif defined(DRIFTNET_BIG_ENDIAN)
+/*
+ * - for GTK2 gdk_draw_rgb_32_image(): 0xRRGGBB00
+ * - for GTK3 cairo_image_surface_create_for_data(): 0xBBGGRR00
+ */
+#ifdef DISABLE_GTK3
# define PEL(r, g, b) ((pel)(((chan)(r) << 24) | ((chan)(g) << 16) | ((chan)(b) << 8)))
# define PELA(r, g, b, a) ((pel)(((chan)(r) << 24) | ((chan)(g) << 16) | ((chan)(b) << 8) | ((chan)(a))))
@@ -40,6 +61,14 @@ typedef uint32_t pel;
# define GETB(p) ((chan)(((p) & (pel)0x0000ff00) >> 8))
# define GETA(p) ((chan)(((p) & (pel)0x000000ff) ))
#else
+# define PEL(r, g, b) ((pel)(((chan)(r) << 8) | ((chan)(g) << 16) | ((chan)(b) << 24)))
+# define PELA(r, g, b, a) ((pel)(((chan)(r) << 8) | ((chan)(g) << 16) | ((chan)(b) << 24) | ((chan)(a))))
+
+# define GETR(p) ((chan)(((p) & (pel)0x0000ff00) >> 8))
+# define GETG(p) ((chan)(((p) & (pel)0x00ff0000) >> 16))
+# define GETB(p) ((chan)(((p) & (pel)0xff000000) >> 24))
+# define GETA(p) ((chan)(((p) & (pel)0x000000ff) ))
+#endif
# error "no endianness defined"
#endif
diff --git a/src/display/png.c b/src/display/png.c
index 15c4422..e3e038e 100644
--- a/src/display/png.c
+++ b/src/display/png.c
@@ -92,7 +92,8 @@ int png_abort_load(img I) {
}
int png_load_img(img I) {
- unsigned char **p, **q;
+ pel **p;
+ unsigned char **q;
png_structp png_ptr;
png_infop info_ptr;
png_uint_32 width, height;
@@ -168,12 +169,12 @@ int png_load_img(img I) {
/* Read in the image and copy it to the gdk img structure */
png_read_image(png_ptr, row_pointers);
- p = (unsigned char **)I->data;
+ p = I->data;
q = (unsigned char **)row_pointers;
for (i = 0; i < height; i++) {
- for (j = 0; j < png_get_rowbytes(png_ptr, info_ptr); j++) {
- p[i][j] = q[i][j];
+ for (j = 0; j < png_get_rowbytes(png_ptr, info_ptr); j = j+4) {
+ p[i][j/4] = PEL(q[i][j], q[i][j+1], q[i][j+2]);
}
}
diff --git a/src/display/webp.c b/src/display/webp.c
index 08b5aaa..5b97110 100644
--- a/src/display/webp.c
+++ b/src/display/webp.c
@@ -1,3 +1,16 @@
+/*
+ * webp.c:
+ * WebP file support.
+ *
+ * Copyright (c) 2022 David Suárez.
+ * Email: david.sephirot@gmail.com
+ *
+ * Copyright (c) 2022 Martin.
+ * Email: martin@sandsmark.ninja
+ *
+ */
+
+
#include <webp/decode.h>
#include <string.h>
@@ -29,7 +42,7 @@ int webp_load_hdr(img I) {
}
actual = fread(internal->data, internal->size, 1, I->fp);
- if (actual != internal->size) {
+ if (actual != 1) {
// wtf;
return 0;
}
@@ -50,9 +63,23 @@ int webp_load_img(img I) {
webp_internal *internal = (webp_internal*)I->us;
size_t allocated_size;
+ img_alloc(I);
allocated_size = I->height * sizeof(pel*) + I->width * I->height * sizeof(pel); // copied from img.c, because why the fuck not
- decoded = WebPDecodeRGBInto(internal->data, internal->size,
- (unsigned char*)*I->data, allocated_size, I->width); // apparently we always use dumb stride
+#ifdef DISABLE_GTK3
+ decoded = WebPDecodeRGBAInto(
+ internal->data,
+ internal->size,
+ (unsigned char*)*I->data,
+ allocated_size,
+ I->width*4);
+#else
+ decoded = WebPDecodeBGRAInto(
+ internal->data,
+ internal->size,
+ (unsigned char*)*I->data,
+ allocated_size,
+ I->width*4);
+#endif
if (!decoded) {
return 0;
diff --git a/src/driftnet.c b/src/driftnet.c
index eae3a90..eb5b0a8 100644
--- a/src/driftnet.c
+++ b/src/driftnet.c
@@ -264,6 +264,7 @@ int main(int argc, char *argv[])
* Otherwise, check that it's a directory into which we may write files.
*/
if (options->tmpdir) {
+ log_msg(LOG_INFO, "setting custom tmpdir in: %s", options->tmpdir);
if (check_dir_is_rw(options->tmpdir) == FALSE) {
log_msg(LOG_ERROR, "we can't write to the temporary directory");
exit(1);
@@ -321,15 +322,23 @@ int main(int argc, char *argv[])
driver->dispatch_data = dispatch_image_to_stdout;
} else {
+#if !defined(NO_DISPLAY_WINDOW) && !defined(NO_HTTP_DISPLAY)
if (options->enable_gtk_display) {
-#ifndef NO_DISPLAY_WINDOW
driver->dispatch_data = dispatch_image_to_display;
-#endif
+
} else {
-#ifndef NO_HTTP_DISPLAY
driver->dispatch_data = dispatch_image_to_httpdisplay;
-#endif
}
+#elif !defined(NO_DISPLAY_WINDOW)
+ driver->dispatch_data = dispatch_image_to_display;
+#elif !defined(NO_HTTP_DISPLAY)
+ driver->dispatch_data = dispatch_image_to_httpdisplay;
+#else
+ log_msg(
+ LOG_ERROR,
+ "driftnet was compiled without any display options, use adjunct mode only");
+ return -1;
+#endif
}
break;
diff --git a/src/options.c b/src/options.c
index 67473b9..a610ac9 100644
--- a/src/options.c
+++ b/src/options.c
@@ -244,25 +244,25 @@ int validate_options(options_t* options)
* Check for (at least) one display option (GTK by default), if not in adjunct mode.
*/
if (!options->adjunct) {
+#if !defined(NO_DISPLAY_WINDOW) && !defined(NO_HTTP_DISPLAY)
if (options->enable_gtk_display && options->enable_http_display) {
log_msg(LOG_ERROR, "can't specify -w and -g");
return FALSE;
}
if (!(options->enable_gtk_display || options->enable_http_display)) {
-#ifndef NO_DISPLAY_WINDOW
options->enable_gtk_display = TRUE;
+ }
+#elif !defined(NO_DISPLAY_WINDOW)
+ options->enable_gtk_display = TRUE;
+#elif !defined(NO_HTTP_DISPLAY)
+ options->enable_http_display = TRUE;
#else
- #ifndef NO_DISPLAY_WINDOW
- options->enable_http_display = TRUE;
- #else
- log_msg(LOG_WARNING, "this version of driftnet was compiled without any display support");
- log_msg(LOG_WARNING, "switching to adjunct mode");
- options->adjunct = TRUE;
- #endif
+ log_msg(LOG_WARNING, "this version of driftnet was compiled without any display support");
+ log_msg(LOG_WARNING, "switching to adjunct mode");
+ options->adjunct = TRUE;
#endif
- }
}
return TRUE;
@@ -325,8 +325,8 @@ void usage(FILE *fp)
"in its temporary directory. It is assumed that some other process is\n"
"collecting and deleting the image files.\n"
"\n"
-"driftnet, copyright (c) 2001-2 Chris Lightfoot <chris@ex-parrot.com>\n"
-" copyright (c) 2012-18 David Suárez <david.sephirot@gmail.com>\n"
+"driftnet, copyright (c) 2001-2002 Chris Lightfoot <chris@ex-parrot.com>\n"
+" copyright (c) 2012-2022 David Suárez <david.sephirot@gmail.com>\n"
"home page: https://github.com/deiv/driftnet\n"
"old home page: http://www.ex-parrot.com/~chris/driftnet/\n"
"\n"
Debdiff
[The following lists of changes regard files as different if they have different names, permissions or owners.]
Files in second set of .debs but not in first
-rw-r--r-- root/root /usr/lib/debug/.build-id/a5/b330c7ef69a8027e83f52563931f4b2afbf909.debug
Files in first set of .debs but not in second
-rw-r--r-- root/root /usr/lib/debug/.build-id/b8/e8fe929f8bc0a086f1e595107deec9c4cfc03e.debug
Control files of package driftnet: lines which differ (wdiff format)
Depends: libc6 (>= 2.34), libcairo2 (>= 1.2.4), libgif7 (>= 5.1), libglib2.0-0 (>= 2.12.0), libgtk2.0-0 (>= 2.8.0), 2.24.0), libjpeg62-turbo (>= 1.3.1), libpcap0.8 (>= 1.0.0), libpng16-16 (>= 1.6.2-1), libwebp7 (>= 1.2.4), libwebsockets17 (>= 2.4.1)
Control files of package driftnet-dbgsym: lines which differ (wdiff format)
Build-Ids: b8e8fe929f8bc0a086f1e595107deec9c4cfc03e a5b330c7ef69a8027e83f52563931f4b2afbf909