aboutsummaryrefslogtreecommitdiffstats
path: root/gtk/capture_if_details_dlg.c
diff options
context:
space:
mode:
authorUlf Lamping <ulf.lamping@web.de>2005-05-21 09:41:57 +0000
committerUlf Lamping <ulf.lamping@web.de>2005-05-21 09:41:57 +0000
commitb5d1f77046792e88db90094a156e4722e34ad381 (patch)
tree161bfeb9ffb93a16f6208fcab9bff94c7e33ad0e /gtk/capture_if_details_dlg.c
parentb91e9cb311364ffb563f6e89e3ae4119aa9e4d1f (diff)
as suggested by Loris: add wpcap_packet_get_version() and check the packet.dll version before using it (very restrictive for now, will check for exact DLL version strings). If version is unknown, ask user to continue or not.
svn path=/trunk/; revision=14411
Diffstat (limited to 'gtk/capture_if_details_dlg.c')
-rw-r--r--gtk/capture_if_details_dlg.c61
1 files changed, 56 insertions, 5 deletions
diff --git a/gtk/capture_if_details_dlg.c b/gtk/capture_if_details_dlg.c
index 4252d48e37..b52462d03d 100644
--- a/gtk/capture_if_details_dlg.c
+++ b/gtk/capture_if_details_dlg.c
@@ -57,6 +57,7 @@
#include "capture_wpcap_packet.h"
#include "capture_if_details_dlg.h"
+#include "simple_dialog.h"
#define DETAILS_STR_MAX 1024
@@ -1141,8 +1142,8 @@ capture_if_details_page_new(GtkWidget **table)
}
-void
-capture_if_details_open(char *iface)
+static void
+capture_if_details_open_win(char *iface)
{
GtkWidget *details_open_w,
*main_vb, *bbox, *close_bt, *help_bt;
@@ -1154,6 +1155,10 @@ capture_if_details_open(char *iface)
int entries;
+ /* open the network adapter */
+ adapter = wpcap_packet_open(iface);
+
+ /* open a new window */
details_open_w = window_new(GTK_WINDOW_TOPLEVEL, "Ethereal: Interface Details");
/* Container for the window contents */
@@ -1165,9 +1170,6 @@ capture_if_details_open(char *iface)
notebook = gtk_notebook_new();
gtk_container_add(GTK_CONTAINER(main_vb), notebook);
- /* open the network adapter */
- adapter = wpcap_packet_open(iface);
-
/* General page */
page_general = capture_if_details_page_new(&table);
page_lb = gtk_label_new("General");
@@ -1224,4 +1226,53 @@ capture_if_details_open(char *iface)
window_present(details_open_w);
}
+
+static void capture_if_details_open_answered_cb(gpointer dialog _U_, gint btn, gpointer data)
+{
+ switch(btn) {
+ case(ESD_BTN_OK):
+ capture_if_details_open_win(data);
+ break;
+ case(ESD_BTN_CANCEL):
+ break;
+ default:
+ g_assert_not_reached();
+ }
+}
+
+
+void
+capture_if_details_open(char *iface)
+{
+ char *version;
+ gboolean version_ok = FALSE;
+ gpointer dialog;
+
+
+ /* check packet.dll version */
+ version = wpcap_packet_get_version();
+
+ /* XXX - we have to add more known DLL versions here */
+ if( strcmp(version, "3, 1, 0, 24") == 0 || /* 3.1 beta 4 */
+ strcmp(version, "3.0 alpha3" ) == 0 /* 3.0 release */
+ ) {
+ version_ok = TRUE;
+ }
+
+ if(!version_ok) {
+ /* dll version unknown, warn user */
+ dialog = simple_dialog(ESD_TYPE_WARN, ESD_BTN_OK | ESD_BTN_CANCEL,
+ PRIMARY_TEXT_START "Unknown WinPcap version might crash or fail!" PRIMARY_TEXT_END
+ "\n\nThe WinPcap packet.dll version \"%s\" is unknown if it supports required functions!"
+ "\n\nOnly WinPcap versions 3.0 and 3.1 are known to work with this feature."
+ "\n\nCrashes or unexpected behaviour might occur, you have been warned!"
+ "\n\nContinue anyway?",
+ version);
+ simple_dialog_set_cb(dialog, capture_if_details_open_answered_cb, iface);
+ } else {
+ capture_if_details_open_win(iface);
+ }
+}
+
+
#endif /* HAVE_LIBPCAP && _WIN32 */