#ifdef HAVE_LIBPCAP
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#ifdef __APPLE__
#include <dlfcn.h>
#ifdef HAVE_LIBPCAP
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "capture_opts.h"
#include <glib.h>
#include <gmodule.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
/* XXX - yes, I know, I should move cppmagic.h to a generic location. */
#include "tools/lemon/cppmagic.h"
#define PCAP_RECORD_HEADER_LENGTH 16
#ifdef ANDROIDDUMP_USE_LIBPCAP
- #ifdef HAVE_PCAP_REMOTE
- /*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
- #define HAVE_REMOTE
- #endif
-
- #include <pcap.h>
+ #include <wsutil/wspcap.h>
#include <pcap-bpf.h>
#include <pcap/bluetooth.h>
#include <time.h>
#include <errno.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include <glib.h>
}
}
+ # only our wrapper file wsutils/wspcap.h may include pcap.h
+ # all other files should include the wrapper
+ if ($filename !~ /wspcap\.h/) {
+ foreach (@incFiles) {
+ if ( m#([<"]|/+)pcap\.h[>"]$# ) {
+ print STDERR "Warning: ".$filename.
+ " includes pcap.h directly. ".
+ "Include wsutil/wspcap.h instead.\n";
+ last;
+ }
+ }
+ }
+
# files in the ui/qt directory should include the ui class includes
# by using #include <>
# this ensures that Visual Studio picks up these files from the
#include <errno.h>
#include <getopt.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
static int dumping;
static volatile int keep_going;
#include <epan/prefs.h>
#include <epan/crypt/wep-wpadefs.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "ui/simple_dialog.h"
#ifdef HAVE_LIBPCAP
#include <glib.h>
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "capture_opts.h"
#include "ui/capture_globals.h"
#include <ui_compiled_filter_output.h>
#include "compiled_filter_output.h"
-#ifdef HAVE_PCAP_REMOTE
-/*
- * Force the WinPcap header files to define things required for remote
- * capture. (Yes, this is q WinPcap bug; if your project has a public
- * header file that checks or otherwise uses a #define that's defined
- * by your project's configuration process, and don't ensure that
- * it's always defined appropriately when that header file is included,
- * before its first use, you have made a mistake.)
- */
-#define HAVE_REMOTE
-#endif
-
-#include <pcap.h>
+#include <wsutil/wspcap.h>
#include "capture_opts.h"
#include <wiretap/wtap.h>
win32-utils.h \
ws_mempbrk_sse42.c \
wsgcrypt.h \
- wsgetopt.h
+ wsgetopt.h \
+ wspcap.h
CLEANFILES = \
libwsutil.a \
--- /dev/null
+/* wspcap.h
+ *
+ * Wrapper around libpcap/WinPcap's pcap.h.
+ *
+ * If HAVE_PCAP_REMOTE is defined, it force the WinPcap header files to
+ * define things required for remote capture.
+ *
+ * Yes, this is q WinPcap bug; if your project has a public header file
+ * that checks or otherwise uses a #define that's defined by your project's
+ * configuration process, and don't ensure that it's always defined
+ * appropriately when that header file is included, before its first use,
+ * you have made a mistake.
+ *
+ * This bug is fixed in the master branch of libpcap, so any libpcap
+ * release with remote capture support will not have this problem, and
+ * any future WinPcap/NPcap release based on current libpcap code will
+ * not have this problem.
+ *
+ * Wireshark - Network traffic analyzer
+ * By Gerald Combs <gerald@wireshark.org>
+ * Copyright 2007 Gerald Combs
+ *
+ * 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 the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef __WSPCAP_H__
+#define __WSPCAP_H__
+
+#ifdef HAVE_PCAP_REMOTE
+#define HAVE_REMOTE
+#endif
+
+#include <pcap.h>
+
+#endif /* __WSPCAP_H__ */