nifi-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From ald...@apache.org
Subject [05/25] nifi-minifi-cpp git commit: MINIFICPP-250: Initial implementation fo CapturePacket Processor that uses lipcap.
Date Tue, 14 Nov 2017 01:48:19 GMT
http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/README.md
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/README.md b/thirdparty/pcap++/README.md
new file mode 100644
index 0000000..0bb4d76
--- /dev/null
+++ b/thirdparty/pcap++/README.md
@@ -0,0 +1,163 @@
+PcapPlusPlus
+============
+
+[![Build Status](https://travis-ci.org/seladb/PcapPlusPlus.svg?branch=master)](https://travis-ci.org/seladb/PcapPlusPlus)
+[![Build status](https://ci.appveyor.com/api/projects/status/4u5ui21ibbevkstc?svg=true)](https://ci.appveyor.com/project/seladb/pcapplusplus)
+
+PcapPlusPlus is a multiplatform C++ network sniffing and packet parsing and crafting framework. PcapPlusPlus is meant to be lightweight, efficient and easy to use.
+
+PcapPlusPlus web-site: http://seladb.github.io/PcapPlusPlus-Doc
+
+### Getting Started ###
+
+Please visit the [Tutorials](http://seladb.github.io/PcapPlusPlus-Doc/tutorials.html) in PcapPlusPlus web-site to learn about PcapPlusPlus and how to use it
+
+
+### What makes PcapPlusPlus different from similar C++ wrappers for libpcap/WinPcap? ###
+
+- Designed to be lightweight and efficient
+- Support for **DPDK** fast packet processing engine which enables packet capturing and transmition in line rate using kernel bypass
+- Support for ntop's **PF_RING** packet capturing engine that dramatically improves the packet capture speed
+- Support for parsing and editing of many protocols, including L5-7 protocols like HTTP, SSL/TLS and SIP
+- Unique implementation of **TCP reassembly** logic which includes support of TCP retransmission, out-of-order TCP packets and missing TCP data
+- Support for Remote Capture capabilities on Windows (using RPCAP protocol supported in WinPcap)
+- Support for reading and writing **PCAPNG** files (a lot more more than currently supported in WinPcap/libpcap)
+- Vast object-oriented filtering mechanism that makes libpcap filters a lot more user-friendly (no need to know the exact filter string to use)
+
+### PcapPlusPlus Is Multi-Platform! ###
+PcapPlusPlus is currently supported on **Windows**, **Linux** and **Mac OS X**. It was tested on the following platforms:
+
+- Windows:
+    - Microsoft Visual Studio 2015 (32-bit + 64-bit compilation)
+    - MinGW32 (32-bit compilation only)
+    - MinGW-w64 (32-bit compilation only)
+
+- Linux:
+    - Ubuntu (12.04 LTS, 14.04 LTS, 16.04 LTS)
+    - Fedora 26
+    - CentOS 7
+    - It should work on other Linux distributions as well
+
+- Mac OS X:
+    - Yosemite (10.10)
+    - El Capitan (10.11)
+    - Sierra (10.12)
+
+### Supported Engines and Devices ###
+
+PcapPlusPlus currently works with the following devices:
+
+1. libpcap live device (on Linux and Mac OS X)
+2. WinPcap live device (on Windows)
+3. Vanilla PF_RING device (on Linux)
+4. DPDK device (on Linux)
+5. Remote live device (on Windows)
+6. PCAP and PCAPNG file devices
+
+### Supported Protocols ###
+
+The Packet++ library currently supports parsing, editing and creation of packets of the following protocols:
+
+1. Ethernet
+2. SLL (Linux cooked capture)
+3. Null/Loopback
+4. Raw IP (IPv4 & IPv6)
+5. IPv4
+6. IPv6
+7. ARP
+8. VLAN
+9. VXLAN
+10. MPLS
+11. PPPoE
+12. GRE
+13. TCP
+14. UDP
+15. ICMP
+16. IGMP (IGMPv1, IGMPv2 and IGMPv3 are supported)
+17. SIP
+18. SDP
+19. DNS
+20. DHCP
+21. HTTP headers (request & response)
+22. SSL/TLS - parsing only (no editing capabilities)
+23. Generic payload
+
+### Useful Packet And Network Utilities ###
+
+1. TCP reassembly logic
+2. Packet hash key creation (by 5-tuple and 2-tuple)
+3. Retrieve remote machine MAC address using ARP protocol
+4. Retrieve host IPv4 address by using DNS protocol
+5. Checksum calculation
+
+### Package Content ###
+
+PcapPlusPlus consists of 3 libraries:
+
+1. **Packet++** - a library for parsing, creating and editing packets
+2. **Pcap++** - a library for intercepting and sending packets, providing network and NIC info, stats, etc. It is actually a C++ wrapper for packet capturing engines such as libpcap, WinPcap, DPDK and PF_RING
+3. **Common++** - a library with some common code utilities used by both Packet++ and Pcap++
+
+In addition it contains many examples, tutorials and utilities documented in the [Examples](http://seladb.github.io/PcapPlusPlus-Doc/examples.html) and in the [Tutorials](http://seladb.github.io/PcapPlusPlus-Doc/tutorials.html) pages in PcapPlusPlus web-site 
+
+
+# Download #
+
+In order to download PcapPlusPlus, please visit the github [page](https://github.com/seladb/PcapPlusPlus/).
+
+You can also download it using these links:
+
+- [ZIP format](https://github.com/seladb/PcapPlusPlus/archive/master.zip)
+- [tat.gz format](https://github.com/seladb/PcapPlusPlus/archive/master.tar.gz)
+ 
+Or clone the git repository by:
+
+```shell
+git clone https://github.com/seladb/PcapPlusPlus.git
+```
+
+### Compiled Binaries ###
+
+If you want an already compiled version of PcapPlusPlus chekcout the latest release:
+[https://github.com/seladb/PcapPlusPlus/releases/latest](https://github.com/seladb/PcapPlusPlus/releases/latest)
+
+
+### Compile Yourself ###
+
+For compilation instructions of the various platforms please refer to the [Download](http://seladb.github.io/PcapPlusPlus-Doc/download.html) page in PcapPlusPlus web-site
+
+# PcapPlusPlus Documentation #
+
+[PcapPlusPlus web-site](http://seladb.github.io/PcapPlusPlus-Doc/) includes all the relevant documentation.
+
+Also, the entire API of PcapPlusPlus is documented using doxygen. You can find it here: [http://seladb.github.io/PcapPlusPlus-Doc/Documentation/index.html](http://seladb.github.io/PcapPlusPlus-Doc/Documentation/index.html)
+
+If you see any missing information please tell me
+
+
+# PcapPlusPlus Support #
+
+I'll be very happy to get feedbacks, so feel free to contact me in any of the following ways:
+
+- Open a Github ticket
+- PcapPlusPlus Google group: https://groups.google.com/d/forum/pcapplusplus-support
+- Send an email to: pcapplusplus@gmail.com
+
+
+# DPDK & PF_RING Support #
+
+PcapPlusPLus provides a C++ absraction layers over DPDK & PF_RING. For more details please visit PcapPlusPlus web-site:
+
+http://seladb.github.io/PcapPlusPlus-Doc/dpdk-pf_ring.html
+
+
+# Benchmarks #
+
+I used Matias Fontanini's [packet-capture-benchmarks](https://github.com/mfontanini/packet-capture-benchmarks) project to compare the performance of PcapPlusPlus with other similar C++ libraries (libtins and libcrafter). 
+
+The results can eviewed in the [Benchmarks](http://seladb.github.io/PcapPlusPlus-Doc/benchmark.html) page in PcapPlusPlus web-site
+
+
+# Creating Applications With PcapPlusPlus #
+
+Please refer to the [Tutorials](http://seladb.github.io/PcapPlusPlus-Doc/tutorials.html) section in PcapPlusPlus web-site

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/appveyor.yml
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/appveyor.yml b/thirdparty/pcap++/appveyor.yml
new file mode 100644
index 0000000..273988f
--- /dev/null
+++ b/thirdparty/pcap++/appveyor.yml
@@ -0,0 +1,49 @@
+version: 1.0.{build}
+
+environment:
+  matrix:
+    - compiler: mingw32
+    - compiler: mingw-w64
+    - compiler: vs2015
+      platform: x86
+      config: Debug
+    - compiler: vs2015
+      platform: x86
+      config: Release
+    - compiler: vs2015
+      platform: x64
+      config: Debug
+    - compiler: vs2015
+      platform: x64
+      config: Release
+
+install:
+- git submodule update --init --recursive
+- git clone https://github.com/mfontanini/winpcap-installer.git
+- cd winpcap-installer
+- winpcap-boundary-meter-4.1.3.exe /S
+- cd ..
+- appveyor DownloadFile http://www.winpcap.org/install/bin/WpdPack_4_1_2.zip
+- 7z x .\WpdPack_4_1_2.zip -oc:\
+- if "%compiler%"=="mingw32" set PATH=%PATH%;C:\MinGW\bin&& appveyor DownloadFile http://ftp.ntua.gr/mirror/mingw/MinGW/Base/pthreads-w32/pthreads-w32-2.10-pre-20160821-1/pthreads-GC-w32-2.10-mingw32-pre-20160821-1-dev.tar.xz && 7z e pthreads-GC-w32-2.10-mingw32-pre-20160821-1-dev.tar.xz -oC:\pthreads && 7z x C:\pthreads\pthreads-GC-w32-2.10-mingw32-pre-20160821-1-dev.tar -oC:\pthreads && xcopy /Y C:\pthreads\include\* C:\MinGW\include && xcopy /Y C:\pthreads\lib\* C:\MinGW\lib
+- if "%compiler%"=="mingw-w64" set PATH=%PATH%;C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32\bin
+- if "%compiler%"=="vs2015" powershell -command "Invoke-WebRequest ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip -OutFile pthreads-w32-2-9-1-release.zip" && 7z x pthreads-w32-2-9-1-release.zip -oC:\pthreads
+
+before_build:
+- cd C:\projects\PcapPlusPlus
+- if "%compiler%"=="mingw32" configure-windows-mingw.bat mingw32 -m C:\MinGW -w C:\WpdPack
+- if "%compiler%"=="mingw-w64" configure-windows-mingw.bat mingw-w64 -m C:\mingw-w64\i686-6.3.0-posix-dwarf-rt_v5-rev1\mingw32 -w C:\WpdPack -s C:\msys64
+- if "%compiler%"=="vs2015" configure-windows-visual-studio.bat -w C:\WpdPack -p C:\pthreads
+
+build_script:
+- if "%compiler%"=="mingw32" mingw32-make all
+- if "%compiler%"=="mingw-w64" mingw32-make all
+- if "%compiler%"=="vs2015" powershell -command "msbuild mk\vs2015\PcapPlusPlus.sln /p:Configuration=%config% /p:Platform=%platform%"
+- if "%compiler%"=="vs2015" powershell -command "msbuild mk\vs2015\PcapPlusPlus-Examples.sln /p:Configuration=%config% /p:Platform=%platform%"
+- if "%compiler%"=="vs2015" powershell -command "msbuild mk\vs2015\Tutorials.sln /p:Configuration=%config% /p:Platform=%platform%"
+
+test_script:
+- cd C:\projects\PcapPlusPlus\Tests\Packet++Test
+- Bin\Packet++Test.exe
+- cd ..\Pcap++Test
+- Bin\Pcap++Test.exe -n

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/configure-linux.sh
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/configure-linux.sh b/thirdparty/pcap++/configure-linux.sh
new file mode 100755
index 0000000..0618119
--- /dev/null
+++ b/thirdparty/pcap++/configure-linux.sh
@@ -0,0 +1,255 @@
+#!/bin/bash
+
+echo ""
+echo "****************************************"
+echo "PcapPlusPlus Linux configuration script "
+echo "****************************************"
+echo ""
+
+# set Script Name variable
+SCRIPT=`basename ${BASH_SOURCE[0]}`
+
+# help function
+function HELP {
+   echo -e \\n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\\n
+   echo "This script has 2 modes of operation:"
+   echo "  1) Without any switches. In this case the script will guide you through using wizards"
+   echo "  2) With switches, as described below"
+   echo ""
+   echo -e "${REV}Basic usage:${NORM} ${BOLD}$SCRIPT [-h] [--pf-ring] [--pf-ring-home] [--dpdk] [--dpdk-home] [--use-immediate-mode] ${NORM}"\\n
+   echo "The following switches are recognized:"
+   echo "${REV}--default${NORM}             --Setup PcapPlusPlus for Linux without PF_RING or DPDK. In this case you must not set --pf-ring or --dpdk"
+   echo ""
+   echo "${REV}--pf-ring${NORM}             --Setup PcapPlusPlus with PF_RING. In this case you must also set --pf-ring-home"
+   echo "${REV}--pf-ring-home${NORM}        --Sets PF_RING home directory. Use only when --pf-ring is set"
+   echo ""
+   echo "${REV}--dpdk${NORM}                --Setup PcapPlusPlus with DPDK. In this case you must also set --dpdk-home"
+   echo "${REV}--dpdk-home${NORM}           --Sets DPDK home directoy. Use only when --dpdk is set"
+   echo ""
+   echo "${REV}--use-immediate-mode${NORM}  --Use libpcap immediate mode which enables getting packets as fast as possible (supported on libpcap>=1.5)"
+   echo ""
+   echo -e "${REV}-h|--help${NORM}             --Displays this help message and exits. No further actions are performed"\\n
+   echo -e "Examples:"
+   echo -e "      ${BOLD}$SCRIPT --default${NORM}"
+   echo -e "      ${BOLD}$SCRIPT --use-immediate-mode${NORM}"
+   echo -e "      ${BOLD}$SCRIPT --pf-ring --pf-ring-home /home/myuser/PF_RING${NORM}"
+   echo -e "      ${BOLD}$SCRIPT --dpdk --dpdk-home /home/myuser/dpdk-2.1.0${NORM}"
+   echo ""
+   exit 1
+}
+
+# initializing PF_RING variables
+COMPILE_WITH_PF_RING=0
+PF_RING_HOME=""
+
+# initializing DPDK variables
+COMPILE_WITH_DPDK=0
+DPDK_HOME=""
+HAS_PCAP_IMMEDIATE_MODE=0
+
+#Check the number of arguments. If none are passed, continue to wizard mode.
+NUMARGS=$#
+echo -e "Number of arguments: $NUMARGS"\\n
+
+# start wizard mode
+if [ $NUMARGS -eq 0 ]; then
+
+   # ask the user whether to compile with PF_RING. If so, set COMPILE_WITH_PF_RING to 1
+   while true; do
+      read -p "Compile PcapPlusPlus with PF_RING? " yn
+      case $yn in
+          [Yy]* ) COMPILE_WITH_PF_RING=1; break;;
+          [Nn]* ) break;;
+          * ) echo "Please answer yes or no";;
+      esac
+   done
+
+   # if compiling with PF_RING, get PF_RING home dir from the user and set it in PF_RING_HOME
+   if (( $COMPILE_WITH_PF_RING > 0 )) ; then
+      while true; do # don't stop until user provides a valid dir
+         read -e -p "Enter PF_RING source path: " PF_RING_HOME
+         if [ -d "$PF_RING_HOME" ]; then
+            break;
+         else
+            echo "Directory doesn't exist"
+         fi
+      done
+   fi
+
+   # ask the user whether to compile with DPDK. If so, set COMPILE_WITH_DPDK to 1
+   while true; do
+       read -p "Compile PcapPlusPlus with DPDK? " yn
+       case $yn in
+           [Yy]* ) COMPILE_WITH_DPDK=1; break;;
+           [Nn]* ) break;;
+           * ) echo "Please answer yes or no";;
+       esac
+   done
+
+   # if compiling with DPDK, get DPDK home dir and set it in DPDK_HOME
+   if (( $COMPILE_WITH_DPDK > 0 )) ; then
+       while true; do # don't stop until user provides a valid dir
+           read -e -p "Enter DPDK source path: " DPDK_HOME
+           if [ -d "$DPDK_HOME" ]; then
+               break;
+           else
+               echo "Directory doesn't exist"
+           fi
+       done
+   fi
+
+# script was run with parameters, go to param mode
+else
+
+   # these are all the possible switches
+   OPTS=`getopt -o h --long default,pf-ring,pf-ring-home:,dpdk,dpdk-home:,help,use-immediate-mode -- "$@"`
+
+   # if user put an illegal switch - print HELP and exit
+   if [ $? -ne 0 ]; then
+      HELP
+   fi
+
+   eval set -- "$OPTS"
+
+   # go over all switches
+   while true ; do
+     case "$1" in
+       # default switch - do nothing basically
+       --default)
+         shift ;;
+
+       # pf-ring switch - set COMPILE_WITH_PF_RING to 1
+       --pf-ring)
+         COMPILE_WITH_PF_RING=1
+         shift ;;
+
+       # pf-ring-home switch - set PF_RING_HOME and make sure it's a valid dir, otherwise exit
+       --pf-ring-home)
+         PF_RING_HOME=$2
+         if [ ! -d "$PF_RING_HOME" ]; then
+            echo "PG_RING home directory '$PF_RING_HOME' not found. Exiting..."
+            exit 1
+         fi
+         shift 2 ;;
+
+       # dpdk switch - set COMPILE_WITH_DPDK to 1
+       --dpdk)
+         COMPILE_WITH_DPDK=1
+         shift 1 ;;
+
+       # dpdk-home switch - set DPDK_HOME and make sure it's a valid dir, otherwise exit
+       --dpdk-home)
+         DPDK_HOME=$2
+         if [ ! -d "$DPDK_HOME" ]; then
+            echo "DPDK home directory '$DPDK_HOME' not found. Exiting..."
+            exit 1
+         fi
+         shift 2 ;;
+
+       # enable libpcap immediate mode
+       --use-immediate-mode)
+         HAS_PCAP_IMMEDIATE_MODE=1
+	 shift ;;
+
+       # help switch - display help and exit
+       -h|--help)
+         HELP
+         ;;
+
+       # empty switch - just go on
+       --)
+         shift ; break ;;
+
+       # illegal switch
+       *)
+         echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed."
+         HELP
+         ;;
+     esac
+   done
+
+   # if --pf-ring was set, make sure --pf-ring-home was also set, otherwise exit with error
+   if [[ $COMPILE_WITH_PF_RING > 0 && $PF_RING_HOME == "" ]]; then
+      echo "Switch --pf-ring-home wasn't set. Exiting..."
+      exit 1
+   fi
+
+   # if --dpdk was set, make sure --dpdk-home is also set, otherwise exit with error
+   if [[ $COMPILE_WITH_DPDK > 0 && $DPDK_HOME == "" ]] ; then
+      echo "Switch --dpdk-home wasn't set. Exiting..."
+      exit 1
+   fi
+
+   ### End getopts code ###
+fi
+
+
+PLATFORM_MK="mk/platform.mk"
+PCAPPLUSPLUS_MK="mk/PcapPlusPlus.mk"
+
+# copy the basic Linux platform.mk
+cp -f mk/platform.mk.linux $PLATFORM_MK
+
+# copy the common (all platforms) PcapPlusPlus.mk
+cp -f mk/PcapPlusPlus.mk.common $PCAPPLUSPLUS_MK
+
+# add the Linux definitions to PcapPlusPlus.mk
+cat mk/PcapPlusPlus.mk.linux >> $PCAPPLUSPLUS_MK
+
+# set current directory as PCAPPLUSPLUS_HOME in platform.mk
+echo -e "\n\nPCAPPLUSPLUS_HOME := "$PWD >> $PLATFORM_MK
+
+# set current direcrtory as PCAPPLUSPLUS_HOME in PcapPlusPlus.mk (write it in the first line of the file)
+sed -i "1s|^|PCAPPLUSPLUS_HOME := $PWD\n\n|" $PCAPPLUSPLUS_MK
+
+# if compiling with PF_RING
+if (( $COMPILE_WITH_PF_RING > 0 )) ; then
+
+   # add PF_RING definitions to PcapPlusPlus.mk
+   cat mk/PcapPlusPlus.mk.pf_ring >> $PCAPPLUSPLUS_MK
+
+   # set PF_RING_HOME variable in platform.mk
+   echo -e "\n\nPF_RING_HOME := "$PF_RING_HOME >> $PLATFORM_MK
+
+   # set PF_RING_HOME variable in PcapPlusPlus.mk (write it in the second line of the file)
+   sed -i "2s|^|PF_RING_HOME := $PF_RING_HOME\n\n|" $PCAPPLUSPLUS_MK
+fi
+
+
+# if compiling with DPDK
+if (( $COMPILE_WITH_DPDK > 0 )) ; then
+
+   # add DPDK definitions to PcapPlusPlus.mk
+   cat mk/PcapPlusPlus.mk.dpdk >> $PCAPPLUSPLUS_MK
+
+   # set USE_DPDK variable in platform.mk
+   echo -e "\n\nUSE_DPDK := 1" >> $PLATFORM_MK
+
+   # set DPDK home to RTE_SDK variable in platform.mk
+   echo -e "\n\nRTE_SDK := "$DPDK_HOME >> $PLATFORM_MK
+
+   # set USE_DPDK varaible in PcapPlusPlus.mk
+   sed -i "2s|^|USE_DPDK := 1\n\n|" $PCAPPLUSPLUS_MK
+
+   # set DPDK home to RTE_SDK variable in PcapPlusPlus.mk
+   sed -i "2s|^|RTE_SDK := $DPDK_HOME\n\n|" $PCAPPLUSPLUS_MK
+
+   # set the setup-dpdk script:
+
+   # copy the initial version to PcapPlusPlus root dir
+   cp mk/setup-dpdk.sh.template setup-dpdk.sh
+
+   # make it an executable
+   chmod +x setup-dpdk.sh
+
+   # replace the RTE_SDK placeholder with DPDK home
+   sed -i "s|###RTE_SDK###|$DPDK_HOME|g" setup-dpdk.sh
+
+fi
+
+if (( $HAS_PCAP_IMMEDIATE_MODE > 0 )) ; then
+   echo -e "HAS_PCAP_IMMEDIATE_MODE := 1\n\n" >> $PCAPPLUSPLUS_MK
+fi
+
+# finished setup script
+echo "PcapPlusPlus configuration is complete. Files created (or modified): $PLATFORM_MK, $PCAPPLUSPLUS_MK"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/configure-mac_os_x.sh
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/configure-mac_os_x.sh b/thirdparty/pcap++/configure-mac_os_x.sh
new file mode 100755
index 0000000..bd8cbf1
--- /dev/null
+++ b/thirdparty/pcap++/configure-mac_os_x.sh
@@ -0,0 +1,84 @@
+#!/bin/bash
+
+echo ""
+echo "*******************************************"
+echo "PcapPlusPlus Mac OS X configuration script "
+echo "*******************************************"
+echo ""
+
+# set Script Name variable
+SCRIPT=`basename ${BASH_SOURCE[0]}`
+
+# help function
+function HELP {
+   echo -e \\n"Help documentation for ${BOLD}${SCRIPT}.${NORM}"\\n
+   echo -e "${REV}Basic usage:${NORM} ${BOLD}$SCRIPT [-h] [--use-immediate-mode] ${NORM}"\\n
+   echo "The following switches are recognized:"
+   echo "${REV}--use-immediate-mode${NORM}  --Use libpcap immediate mode which enables getting packets as fast as possible (supported on libpcap>=1.5)"
+   echo ""
+   echo -e "${REV}-h|--help${NORM}             --Displays this help message and exits. No further actions are performed"\\n
+   echo -e "Examples:"
+   echo -e "      ${BOLD}$SCRIPT${NORM}"
+   echo -e "      ${BOLD}$SCRIPT --use-immediate-mode${NORM}"
+   echo ""
+   exit 1
+}
+
+HAS_PCAP_IMMEDIATE_MODE=0
+
+#Check the number of arguments. If none are passed, continue to wizard mode.
+NUMARGS=$#
+echo -e "Number of arguments: $NUMARGS"\\n
+
+
+# if user put an illegal switch - print HELP and exit
+if [ $? -ne 0 ]; then
+  HELP
+fi
+
+for i in "$@"
+do
+case $i in
+   # default switch - do nothing basically
+   --default)
+     shift ;;
+
+   # enable libpcap immediate mode
+   --use-immediate-mode)
+     HAS_PCAP_IMMEDIATE_MODE=1
+     shift ;;
+
+   # help switch - display help and exit
+   -h|--help)
+     HELP
+     ;;
+
+   # empty switch - just go on
+   --)
+     shift ; break ;;
+
+   # illegal switch
+   *)
+     echo -e \\n"Option -${BOLD}$OPTARG${NORM} not allowed."
+     HELP
+     ;;
+esac
+done
+
+
+PLATFORM_MK="mk/platform.mk"
+PCAPPLUSPLUS_MK="mk/PcapPlusPlus.mk"
+
+cp -f mk/platform.mk.macosx $PLATFORM_MK
+cp -f mk/PcapPlusPlus.mk.common $PCAPPLUSPLUS_MK
+cat mk/PcapPlusPlus.mk.macosx >> $PCAPPLUSPLUS_MK
+
+echo -e "\n\nPCAPPLUSPLUS_HOME := "$PWD >> $PLATFORM_MK
+
+sed -i -e '1s|^|PCAPPLUSPLUS_HOME := '$PWD'\'$'\n''\'$'\n''|' $PCAPPLUSPLUS_MK
+
+if (( $HAS_PCAP_IMMEDIATE_MODE > 0 )) ; then
+   echo -e "HAS_PCAP_IMMEDIATE_MODE := 1\n\n" >> $PCAPPLUSPLUS_MK
+fi
+
+echo "PcapPlusPlus configuration is complete. Files created (or modified): $PLATFORM_MK, $PCAPPLUSPLUS_MK"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/configure-windows-mingw.bat
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/configure-windows-mingw.bat b/thirdparty/pcap++/configure-windows-mingw.bat
new file mode 100755
index 0000000..c8799d4
--- /dev/null
+++ b/thirdparty/pcap++/configure-windows-mingw.bat
@@ -0,0 +1,288 @@
+@echo OFF
+setlocal
+
+echo.
+echo ******************************************
+echo PcapPlusPlus Windows configuration script 
+echo ******************************************
+echo.
+
+set PLATFORM_MK=mk\platform.mk
+set PCAPPLUSPLUS_MK=mk\PcapPlusPlus.mk
+
+:: initially set MINGW_TYPE, MINGW_HOME and WINPCAP_HOME to empty values
+set MINGW_TYPE=
+set MINGW_HOME=
+set WINPCAP_HOME=
+
+:: check the number of arguments: If got at least one argument continue to command-line mode, else continue to wizard mode
+if "%1" NEQ "" ( 
+	call :GETOPT %1 %2 %3 %4 %5 %6 %7 %8 %9 
+) else ( 
+	call :READ_PARAMS_FROM_USER 
+)
+:: if one of the modes returned with an error, exit script
+if "%ERRORLEVEL%" NEQ "0" exit /B 1
+
+:: verify that both variables MINGW_HOME, WINPCAP_HOME, MSYS_HOME are set
+if "%MINGW_TYPE%"=="" echo MinGW compiler (mingw32 or mingw-w64) was not supplied. Exiting & exit /B 1
+if "%MINGW_HOME%"=="" echo MinGW directory was not supplied. Exiting & exit /B 1
+if "%MINGW_TYPE%"=="mingw-w64" if "%MSYS_HOME%"=="" echo MSYS/MSYS2 directory was not supplied. Exiting & exit /B 1
+if "%MINGW_TYPE%"=="mingw32" set MSYS_HOME=$(MINGW_HOME)/msys/1.0
+if "%WINPCAP_HOME%"=="" echo WinPcap directory was not supplied. Exiting & exit /B 1
+
+:: replace "\" with "/" in MINGW_HOME
+set MINGW_HOME=%MINGW_HOME:\=/%
+:: remove trailing "/" in MINGW_HOME if exists
+if "%MINGW_HOME:~-1%"=="/" set MINGW_HOME=%MINGW_HOME:~,-1%
+:: replace "\" with "/" in MSYS_HOME
+set MSYS_HOME=%MSYS_HOME:\=/%
+:: remove trailing "/" in MSYS_HOME if exists
+if "%MSYS_HOME:~-1%"=="/" set MSYS_HOME=%MSYS_HOME:~,-1%
+:: replace "\" with "/" in WINPCAP_HOME
+set WINPCAP_HOME=%WINPCAP_HOME:\=/%
+:: remove trailing "/" in WINPCAP_HOME if exists
+if "%WINPCAP_HOME:~-1%"=="/" set WINPCAP_HOME=%WINPCAP_HOME:~,-1%
+
+:: delete existing platform.mk and PcapPlusPlus.mk if exist
+if exist %PLATFORM_MK% (del %PLATFORM_MK%)
+if exist %PCAPPLUSPLUS_MK% (del %PCAPPLUSPLUS_MK%)
+
+:: set directories varaibles in platform.mk
+set CUR_DIR=%cd:\=/%
+echo PCAPPLUSPLUS_HOME := %CUR_DIR%>> %PLATFORM_MK%
+echo. >> %PLATFORM_MK%
+echo MINGW_HOME := %MINGW_HOME%>> %PLATFORM_MK%
+echo. >> %PLATFORM_MK%
+echo WINPCAP_HOME := %WINPCAP_HOME%>> %PLATFORM_MK%
+echo. >> %PLATFORM_MK%
+echo MSYS_HOME := %MSYS_HOME%>> %PLATFORM_MK%
+echo. >> %PLATFORM_MK%
+
+:: copy the content of platform.mk.%MINGW_TYPE% to platform.mk
+type mk\platform.mk.%MINGW_TYPE% >> %PLATFORM_MK%
+
+
+:: set directories varaibles in PcapPlusPlus.mk
+echo PCAPPLUSPLUS_HOME := %CUR_DIR%>> %PCAPPLUSPLUS_MK%
+echo. >> %PCAPPLUSPLUS_MK%
+echo MINGW_HOME := %MINGW_HOME%>> %PCAPPLUSPLUS_MK%
+echo. >> %PCAPPLUSPLUS_MK%
+echo WINPCAP_HOME := %WINPCAP_HOME%>> %PCAPPLUSPLUS_MK%
+echo. >> %PCAPPLUSPLUS_MK%
+echo MSYS_HOME := %MSYS_HOME%>> %PCAPPLUSPLUS_MK%
+echo. >> %PCAPPLUSPLUS_MK%
+
+:: copy the content of PcapPlusPlus.mk.common to PcapPlusPlus.mk
+type mk\PcapPlusPlus.mk.common >> %PCAPPLUSPLUS_MK%
+:: copy the content of PcapPlusPlus.mk.%MINGW_TYPE% to PcapPlusPlus.mk (append current content)
+type mk\PcapPlusPlus.mk.%MINGW_TYPE% >> %PCAPPLUSPLUS_MK%
+
+:: configuration completed
+echo.
+echo PcapPlusPlus configuration is complete. Files created (or modified): %PLATFORM_MK%, %PCAPPLUSPLUS_MK%
+
+:: exit script
+exit /B 0
+
+
+:: -------------------------------------------------------------------
+:: an implementation of getopt for Windows and specifically for PcapPlusPlus
+:: this "function" takes as paramters all command-line arguments given by the user who runs the script
+:: then it parses the command-line arguments and calls switch cases per argument
+:: it returns with the following exit codes:
+::   - exit code 0 if arguments were parsed ok
+::   - exit code 1 if an unknown argument was given or none arguments were given at all
+::   - exit code 2 if a required parameter was not supplied for one of the switches (for example: -g instead of -g <NUM>)
+::   - exit code 3 if one of the command-line arguments asked to exit the script (for example the -h switch displays help and exits)
+:GETOPT
+:: if no arguments were passed exit with error code 1
+if "%1"=="" call :GETOPT_ERROR "No parameters suppplied" & exit /B 1
+
+:GETOPT_START
+:: the HAS_PARAM varaible states whether the switch has a parameter, for example '-a 111' means switch '-a' has the parameter '111'
+:: initially this variable is set to 0
+set HAS_PARAM=0
+
+:: if no command-line arguments are left, exit getopt
+if "%1"=="" goto GETOPT_END
+
+:: get the next switch (the one in %1) and call the relevant case for that switch
+2>NUL call :CASE%1 %1 %2 %3 %4 %5 %6 %7 %8 %9
+:: ERRORLEVEL 3 means the case asked to exit script. Return this error code to the caller
+if ERRORLEVEL 3 exit /B 3
+:: ERRORLEVEL 2 means the current switch doesn't have a required parameter. Return this error code to the caller
+if ERRORLEVEL 2 exit /B 2
+:: ERRORLEVEL 1 means the switch is unknown (no case was found for it). Return this error code to the caller
+if ERRORLEVEL 1 call :GETOPT_ERROR "Unkown parameter %1" & exit /B 1
+
+:: shift-left the command-line arguments, meaning put %2 in %1, %3 in %2, %4 in %3 and so on. This way %1 always holds the next switch to parse and handle
+shift /1
+:: if the current switch had a parameter shift again because %1 now has the parameter and we want to get to the next switch
+if "%HAS_PARAM%"=="1" shift /1
+:: return to GETOPT_START to handle the next switch
+goto GETOPT_START
+
+:CASEmingw32
+	set MINGW_TYPE=%1
+	:: exit ok
+	exit /B 0
+	
+:CASEmingw-w64
+	set MINGW_TYPE=%1
+	:: exit ok
+	exit /B 0
+
+:: handling help switches (-h or --help)
+:CASE--help
+:CASE-h
+	:: call the HELP "function" 
+	call :HELP
+	:: exit with error code 3, meaning ask the caller to exit the script
+	exit /B 3
+
+:: handling -m or --mingw-home switches
+:CASE-m
+:CASE--mingw-home
+	:: this argument must have a parameter. If no parameter was found goto GETOPT_REQUIRED_PARAM and exit
+	if "%2"=="" goto GETOPT_REQUIRED_PARAM %1
+	:: verify the MinGW dir supplied by the user exists. If not, exit with error code 3, meaning ask the caller to exit the script
+	if not exist %2\ call :GETOPT_ERROR "MinGW directory '%2' does not exist" & exit /B 3
+	:: if all went well, set the MINGW_HOME variable with the directory given by the user
+	set MINGW_HOME=%2
+	:: notify GETOPT this switch has a parameter
+	set HAS_PARAM=1
+	:: exit ok
+	exit /B 0
+
+:: handling -s or --msys-home switches
+:CASE-s
+:CASE--msys-home
+	:: this argument must have a parameter. If no parameter was found goto GETOPT_REQUIRED_PARAM and exit
+	if "%2"=="" goto GETOPT_REQUIRED_PARAM %1
+	:: verify the MSYS dir supplied by the user exists. If not, exit with error code 3, meaning ask the caller to exit the script
+	if not exist %2\ call :GETOPT_ERROR "MSYS/MSYS2 directory '%2' does not exist" & exit /B 3
+	:: if all went well, set the MSYS_HOME variable with the directory given by the user
+	set MSYS_HOME=%2
+	:: notify GETOPT this switch has a parameter
+	set HAS_PARAM=1
+	:: exit ok
+	exit /B 0
+
+:: handling -w or --winpcap-home switches
+:CASE-w
+:CASE--winpcap-home
+	:: this argument must have a parameter. If no parameter was found goto GETOPT_REQUIRED_PARAM and exit
+	if "%2"=="" goto GETOPT_REQUIRED_PARAM %1
+	:: verify the WinPcap dir supplied by the user exists. If not, exit with error code 3, meaning ask the caller to exit the script
+	if not exist %2\ call :GETOPT_ERROR "WinPcap directory '%2' does not exist" & exit /B 3
+	:: if all went well, set the WINPCAP_HOME variable with the directory given by the user
+	set WINPCAP_HOME=%2
+	:: notify GETOPT this switch has a parameter
+	set HAS_PARAM=1
+	:: exit ok
+	exit /B 0
+
+:: a required parameter error case, may get to here if a parameter was missing for a certain switch
+:: the parameter for this "function" is the switch that didn't have the parameter
+:GETOPT_REQUIRED_PARAM
+	:: print the error message
+	echo Required parameter not supplied for switch "%1"
+	:: exit with error code 2, meaining switch is missing a parameter
+	exit /B 2
+
+:: both switch cases and getopt may get to here if there was an error that needs to be reported to the user
+:: calling this "function" has one parameter which is the error to print to the user
+:GETOPT_ERROR
+	:: reset error level
+	VER > NUL # reset ERRORLEVEL
+	:: print the error as was supplied by the user. The %~1 removes quotes if were given
+	echo %~1
+	:: exit with error code 1
+	exit /B 1
+
+:: getopt finished successfully, exit ok
+:GETOPT_END
+	exit /B 0
+
+
+:: -------------------------------------------------------------------
+:: a "function" that implements the wizard mode which reads MinGW home and WinPcap home by displaying a wizard for the user
+:READ_PARAMS_FROM_USER
+
+echo MinGW32 or MinGW-w64 are required for compiling PcapPlusPlus. Please specify 
+echo the type you want to use (can be either "mingw32" or "mingw-w64")
+echo.
+:while0
+:: ask the user to type MinGW type
+set /p MINGW_TYPE=    Please specify mingw32 or mingw-w64: %=%
+if "%MINGW_TYPE%" NEQ "mingw32" if "%MINGW_TYPE%" NEQ "mingw-w64" (echo Please choose one of "mingw32" or "mingw-w64" && goto while0)
+
+echo.
+echo.
+
+:: get MinGW location from user and verify it exists
+echo If %MINGW_TYPE% is not installed, please download and install it
+if "%MINGW_TYPE%"=="mingw32" echo mingw32 can be downloaded from: www.mingw.org/
+if "%MINGW_TYPE%"=="mingw-w64" echo mingw-w64 can be downloaded from: sourceforge.net/projects/mingw-w64/
+echo.
+:while1
+:: ask the user to type MinGW dir
+set /p MINGW_HOME=    Please specify %MINGW_TYPE% installed path (the folder that includes "bin", "lib" and "include" directories): %=%
+:: if input dir doesn't exist print an error to the user and go back to previous line
+if not exist %MINGW_HOME%\ (echo Directory does not exist!! && goto while1)
+
+echo.
+echo.
+
+if "%MINGW_TYPE%"=="mingw32" goto msys-not-required
+
+:: get MSYS location from user and verify it exists
+echo MSYS or MSYS2 are required for compiling PcapPlusPlus. 
+echo If MSYS/MSYS2 are not installed, please download and install it
+echo.
+:while3
+:: ask the user to type MSYS dir
+set /p MSYS_HOME=    Please specify MSYS/MSYS2 installed path: %=%
+:: if input dir doesn't exist print an error to the user and go back to previous line
+if not exist %MSYS_HOME%\ (echo Directory does not exist!! && goto while3)
+
+echo.
+echo.
+
+:msys-not-required
+
+:: get WinPcap dev pack location from user and verify it exists
+echo WinPcap developer's pack is required for compiling PcapPlusPlus. 
+echo If WinPcap developer's pack is not installed, please download and install it from https://www.winpcap.org/devel.htm
+echo.
+:while2
+:: ask the user to type WinPcap dir
+set /p WINPCAP_HOME=    Please specify WinPcap developer's pack installed path: %=%
+:: if input dir doesn't exist print an error to the user and go back to previous line
+if not exist %WINPCAP_HOME%\ (echo Directory does not exist!! && goto while2)
+:: both directories were read correctly, return to the caller
+
+exit /B 0
+
+
+:: -------------------------------------------------------------------
+:: a "function" that prints help for this script
+:HELP
+echo.
+echo Help documentation for %~nx0
+echo This script has 2 modes of operation:
+echo   1) Without any switches. In this case the script will guide you through using wizards
+echo   2) With switches, as described below
+echo.
+echo Basic usage: %~nx0 [-h] MINGW_COMPILER -m MINGW_HOME_DIR -w WINPCAP_HOME_DIR [-s MSYS_HOME_DIR]
+echo.
+echo The following switches are recognized:
+echo MINGW_COMPILER        --The MinGW compiler to use. Can be either "mingw32" or "mingw-w64"
+echo -m^|--mingw-home      --Sets MinGW home directory (the folder that includes "bin", "lib" and "include" directories)
+echo -s^|--msys-home       --Sets MSYS or MSYS2 home directory (must for mingw-w64, not must for mingw32)
+echo -w^|--winpcap-home    --Sets WinPcap home directory
+echo -h^|--help            --Displays this help message and exits. No further actions are performed
+echo.
+:: done printing, exit
+exit /B 0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/configure-windows-visual-studio.bat
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/configure-windows-visual-studio.bat b/thirdparty/pcap++/configure-windows-visual-studio.bat
new file mode 100644
index 0000000..d5fcbf1
--- /dev/null
+++ b/thirdparty/pcap++/configure-windows-visual-studio.bat
@@ -0,0 +1,202 @@
+@echo OFF
+setlocal
+
+echo.
+echo ****************************************************
+echo PcapPlusPlus Visual Studio 2015 configuration script 
+echo ****************************************************
+echo.
+
+set VS_PROPERTY_SHEET=mk\vs2015\PcapPlusPlusPropertySheet.props
+set VS_PROPERTY_SHEET_TEMPLATE=%VS_PROPERTY_SHEET%.template
+
+:: initially set WINPCAP_HOME and PTHREAD_HOME to empty values
+set WINPCAP_HOME=
+set PTHREAD_HOME=
+
+:: check the number of arguments: If got at least one argument continue to command-line mode, else continue to wizard mode
+if "%1" NEQ "" ( 
+	call :GETOPT %1 %2 %3 %4 %5 %6 %7 %8 %9 
+) else ( 
+	call :READ_PARAMS_FROM_USER 
+)
+:: if one of the modes returned with an error, exit script
+if "%ERRORLEVEL%" NEQ "0" exit /B 1
+
+:: verify that both variables PTHREAD_HOME and WINPCAP_HOME are set
+if "%PTHREAD_HOME%"=="" echo pthread-win32 directory was not supplied. Exiting & exit /B 1
+if "%WINPCAP_HOME%"=="" echo WinPcap directory was not supplied. Exiting & exit /B 1
+
+:: remove trailing "\" in PTHREAD_HOME if exists
+if "%PTHREAD_HOME:~-1%"=="\" set PTHREAD_HOME=%PTHREAD_HOME:~,-1%
+:: remove trailing "\" in WINPCAP_HOME if exists
+if "%WINPCAP_HOME:~-1%"=="\" set WINPCAP_HOME=%WINPCAP_HOME:~,-1%
+
+:: set PcapPlusPlus home, pthread-win32 and WinPcap locations in %VS_PROPERTY_SHEET%
+(for /F "tokens=* delims=" %%A in ('type "%VS_PROPERTY_SHEET_TEMPLATE%"') do (
+    set "LINE=%%A"
+    setlocal enabledelayedexpansion
+    set "LINE=!LINE:PUT_PCAPPLUSPLUS_HOME_HERE=%cd%!"
+	set "LINE=!LINE:PUT_WIN_PCAP_HOME_HERE=%WINPCAP_HOME%!"
+	set "LINE=!LINE:PUT_PTHREAD_HOME_HERE=%PTHREAD_HOME%!"
+    echo !LINE!
+    endlocal
+))>pcpp_temp.xml
+
+move /Y pcpp_temp.xml %VS_PROPERTY_SHEET% >nul
+
+:: configuration completed
+echo.
+echo PcapPlusPlus Visual Studio 2015 configuration is complete. Files created (or modified): %VS_PROPERTY_SHEET%
+
+:: exit script
+exit /B 0
+
+
+:: -------------------------------------------------------------------
+:: an implementation of getopt for Windows and specifically for PcapPlusPlus
+:: this "function" takes as paramters all command-line arguments given by the user who runs the script
+:: then it parses the command-line arguments and calls switch cases per argument
+:: it returns with the following exit codes:
+::   - exit code 0 if arguments were parsed ok
+::   - exit code 1 if an unknown argument was given or none arguments were given at all
+::   - exit code 2 if a required parameter was not supplied for one of the switches (for example: -g instead of -g <NUM>)
+::   - exit code 3 if one of the command-line arguments asked to exit the script (for example the -h switch displays help and exits)
+:GETOPT
+:: if no arguments were passed exit with error code 1
+if "%1"=="" call :GETOPT_ERROR "No parameters suppplied" & exit /B 1
+
+:GETOPT_START
+:: the HAS_PARAM varaible states whether the switch has a parameter, for example '-a 111' means switch '-a' has the parameter '111'
+:: initially this variable is set to 0
+set HAS_PARAM=0
+
+:: if no command-line arguments are left, exit getopt
+if "%1"=="" goto GETOPT_END
+
+:: get the next switch (the one in %1) and call the relevant case for that switch
+2>NUL call :CASE%1 %1 %2 %3 %4 %5 %6 %7 %8 %9
+:: ERRORLEVEL 3 means the case asked to exit script. Return this error code to the caller
+if ERRORLEVEL 3 exit /B 3
+:: ERRORLEVEL 2 means the current switch doesn't have a required parameter. Return this error code to the caller
+if ERRORLEVEL 2 exit /B 2
+:: ERRORLEVEL 1 means the switch is unknown (no case was found for it). Return this error code to the caller
+if ERRORLEVEL 1 call :GETOPT_ERROR "Unkown parameter %1" & exit /B 1
+
+:: shift-left the command-line arguments, meaning put %2 in %1, %3 in %2, %4 in %3 and so on. This way %1 always holds the next switch to parse and handle
+shift /1
+:: if the current switch had a parameter shift again because %1 now has the parameter and we want to get to the next switch
+if "%HAS_PARAM%"=="1" shift /1
+:: return to GETOPT_START to handle the next switch
+goto GETOPT_START
+
+:: handling help switches (-h or --help)
+:CASE--help
+:CASE-h
+	:: call the HELP "function" 
+	call :HELP
+	:: exit with error code 3, meaning ask the caller to exit the script
+	exit /B 3
+
+:: handling -p or --pthread-home switches
+:CASE-p
+:CASE--pthreadS-home
+	:: this argument must have a parameter. If no parameter was found goto GETOPT_REQUIRED_PARAM and exit
+	if "%2"=="" goto GETOPT_REQUIRED_PARAM %1
+	:: verify the MSYS dir supplied by the user exists. If not, exit with error code 3, meaning ask the caller to exit the script
+	if not exist %2\ call :GETOPT_ERROR "pthreads-win32 directory '%2' does not exist" & exit /B 3
+	:: if all went well, set the PTHREAD_HOME variable with the directory given by the user
+	set PTHREAD_HOME=%2
+	:: notify GETOPT this switch has a parameter
+	set HAS_PARAM=1
+	:: exit ok
+	exit /B 0
+
+:: handling -w or --winpcap-home switches
+:CASE-w
+:CASE--winpcap-home
+	:: this argument must have a parameter. If no parameter was found goto GETOPT_REQUIRED_PARAM and exit
+	if "%2"=="" goto GETOPT_REQUIRED_PARAM %1
+	:: verify the WinPcap dir supplied by the user exists. If not, exit with error code 3, meaning ask the caller to exit the script
+	if not exist %2\ call :GETOPT_ERROR "WinPcap directory '%2' does not exist" & exit /B 3
+	:: if all went well, set the WINPCAP_HOME variable with the directory given by the user
+	set WINPCAP_HOME=%2
+	:: notify GETOPT this switch has a parameter
+	set HAS_PARAM=1
+	:: exit ok
+	exit /B 0
+
+:: a required parameter error case, may get to here if a parameter was missing for a certain switch
+:: the parameter for this "function" is the switch that didn't have the parameter
+:GETOPT_REQUIRED_PARAM
+	:: print the error message
+	echo Required parameter not supplied for switch "%1"
+	:: exit with error code 2, meaining switch is missing a parameter
+	exit /B 2
+
+:: both switch cases and getopt may get to here if there was an error that needs to be reported to the user
+:: calling this "function" has one parameter which is the error to print to the user
+:GETOPT_ERROR
+	:: reset error level
+	VER > NUL # reset ERRORLEVEL
+	:: print the error as was supplied by the user. The %~1 removes quotes if were given
+	echo %~1
+	:: exit with error code 1
+	exit /B 1
+
+:: getopt finished successfully, exit ok
+:GETOPT_END
+	exit /B 0
+
+
+:: -------------------------------------------------------------------
+:: a "function" that implements the wizard mode which reads MinGW home and WinPcap home by displaying a wizard for the user
+:READ_PARAMS_FROM_USER
+
+:: get WinPcap dev pack location from user and verify it exists
+echo WinPcap developer's pack is required for compiling PcapPlusPlus. 
+echo If WinPcap developer's pack is not installed, please download and install it from https://www.winpcap.org/devel.htm
+echo.
+:while1
+:: ask the user to type WinPcap dir
+set /p WINPCAP_HOME=    Please specify WinPcap developer's pack installed path: %=%
+:: if input dir doesn't exist print an error to the user and go back to previous line
+if not exist %WINPCAP_HOME%\ (echo Directory does not exist!! && goto while1)
+
+echo.
+echo.
+
+:: get pthreads-win32 location from user and verify it exists
+echo pthreads-win32 is required for compiling PcapPlusPlus. 
+echo If you didn't download it already, please download it from here: ftp://sourceware.org/pub/pthreads-win32/pthreads-w32-2-9-1-release.zip
+echo.
+:while2
+:: ask the user to type pthreads-win32 dir
+set /p PTHREAD_HOME=    Please specify pthreads-win32 path: %=%
+:: if input dir doesn't exist print an error to the user and go back to previous line
+if not exist %PTHREAD_HOME%\ (echo Directory does not exist!! && goto while2)
+
+
+:: both directories were read correctly, return to the caller
+
+exit /B 0
+
+
+:: -------------------------------------------------------------------
+:: a "function" that prints help for this script
+:HELP
+echo.
+echo Help documentation for %~nx0
+echo This script has 2 modes of operation:
+echo   1) Without any switches. In this case the script will guide you through using wizards
+echo   2) With switches, as described below
+echo.
+echo Basic usage: %~nx0 [-h] -p PTHREADS_WIN32_DIR -w WINPCAP_HOME_DIR
+echo.
+echo The following switches are recognized:
+echo -p^|--pthreads-home   --Sets pthreads-win32 home directory
+echo -w^|--winpcap-home    --Sets WinPcap home directory
+echo -h^|--help            --Displays this help message and exits. No further actions are performed
+echo.
+:: done printing, exit
+exit /B 0
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.common
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.common b/thirdparty/pcap++/mk/PcapPlusPlus.mk.common
new file mode 100644
index 0000000..f811664
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.common
@@ -0,0 +1,17 @@
+### COMMON ###
+
+# includes
+PCAPPP_INCLUDES := -I$(PCAPPLUSPLUS_HOME)/Dist/header
+
+# libs dir
+PCAPPP_LIBS_DIR := -L$(PCAPPLUSPLUS_HOME)/Dist
+
+# libs
+PCAPPP_LIBS := -lPcap++ -lPacket++ -lCommon++
+
+# post build
+PCAPPP_POST_BUILD :=
+
+# build flags
+PCAPPP_BUILD_FLAGS :=
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.dpdk
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.dpdk b/thirdparty/pcap++/mk/PcapPlusPlus.mk.dpdk
new file mode 100644
index 0000000..ab9c5c7
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.dpdk
@@ -0,0 +1,15 @@
+### DPDK ###
+
+# includes
+PCAPPP_INCLUDES += -I$(RTE_SDK)/build/include
+
+# libs dir
+PCAPPP_LIBS_DIR += -L$(RTE_SDK)/build/lib -L/lib64
+
+#flags
+PCAPPP_BUILD_FLAGS += -msse -msse2 -msse3 -Wall
+
+# libs
+PCAPPP_LIBS += -Wl,--whole-archive -lrte_pmd_bond -lrte_pmd_vmxnet3_uio -lrte_pmd_virtio -lrte_pmd_enic -lrte_pmd_i40e -lrte_pmd_fm10k -lrte_pmd_ixgbe -lrte_net -lrte_pmd_e1000 -lrte_pmd_ring -lrte_pmd_af_packet -lrte_ethdev -lrte_eal -lrte_mbuf -lrte_mempool -lrte_ring -lrte_kvargs -lrte_hash -lrte_cmdline -lrt -lm -ldl -lpthread -Wl,--no-whole-archive
+
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.linux
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.linux b/thirdparty/pcap++/mk/PcapPlusPlus.mk.linux
new file mode 100644
index 0000000..1a5c7be
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.linux
@@ -0,0 +1,9 @@
+### LINUX ###
+
+# includes
+PCAPPP_INCLUDES += -I/usr/include/netinet
+
+# libs
+PCAPPP_LIBS += -lpcap -lpthread
+
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.macosx
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.macosx b/thirdparty/pcap++/mk/PcapPlusPlus.mk.macosx
new file mode 100644
index 0000000..c17d26a
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.macosx
@@ -0,0 +1,9 @@
+### MAC OS X ###
+
+# includes
+PCAPPP_INCLUDES += -I/usr/include/netinet
+
+# libs
+PCAPPP_LIBS += -lpcap -lpthread -framework SystemConfiguration -framework CoreFoundation
+
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw-w64
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw-w64 b/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw-w64
new file mode 100644
index 0000000..224c0ce
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw-w64
@@ -0,0 +1,15 @@
+### WIN32 - MINGW-W64 ###
+
+# includes
+PCAPPP_INCLUDES += -I$(WINPCAP_HOME)/Include
+
+# libs dir
+PCAPPP_LIBS_DIR += -L$(WINPCAP_HOME)/lib -L$(MINGW_HOME)/lib
+
+# libs
+PCAPPP_LIBS += -lwpcap -lPacket -lpthread -lws2_32 -liphlpapi
+
+# flags
+PCAPPP_BUILD_FLAGS += -static -static-libgcc -static-libstdc++
+
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw32
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw32 b/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw32
new file mode 100644
index 0000000..8b6d416
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.mingw32
@@ -0,0 +1,15 @@
+### WIN32 - MINGW32 ###
+
+# includes
+PCAPPP_INCLUDES += -I$(WINPCAP_HOME)/Include
+
+# libs dir
+PCAPPP_LIBS_DIR += -L$(WINPCAP_HOME)/lib -L$(MINGW_HOME)/lib
+
+# libs
+PCAPPP_LIBS += -lwpcap -lPacket -Wl,-Bstatic -lpthread -Wl,-Bdynamic -lws2_32 -liphlpapi
+
+# flags
+PCAPPP_BUILD_FLAGS += -static-libgcc -static-libstdc++
+
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/PcapPlusPlus.mk.pf_ring
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/PcapPlusPlus.mk.pf_ring b/thirdparty/pcap++/mk/PcapPlusPlus.mk.pf_ring
new file mode 100644
index 0000000..07ead30
--- /dev/null
+++ b/thirdparty/pcap++/mk/PcapPlusPlus.mk.pf_ring
@@ -0,0 +1,12 @@
+### PF_RING ###
+
+# includes
+PCAPPP_INCLUDES += -I$(PF_RING_HOME)/userland/lib -I$(PF_RING_HOME)/kernel
+
+# libs dir
+PCAPPP_LIBS_DIR += -L$(PF_RING_HOME)/userland/lib
+
+# libs
+PCAPPP_LIBS += -l:libpfring.a -lnuma -lrt -ldl
+
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/install.sh
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/install.sh b/thirdparty/pcap++/mk/install.sh
new file mode 100755
index 0000000..642926b
--- /dev/null
+++ b/thirdparty/pcap++/mk/install.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+set -e # Exit with nonzero exit code if anything fails
+
+# copy libs
+mkdir -p /usr/local/lib
+cp libCommon++.a libPacket++.a libPcap++.a /usr/local/lib
+
+# copy header files
+mkdir -p /usr/local/include
+mkdir -p /usr/local/include/pcapplusplus
+cp header/* /usr/local/include/pcapplusplus
+
+# copy examples
+mkdir -p /usr/local/bin
+cp examples/* /usr/local/bin
+
+# create template makefile 
+cp mk/PcapPlusPlus.mk PcapPlusPlus.mk
+sed -i.bak '/PCAPPLUSPLUS_HOME :=/d' PcapPlusPlus.mk && rm PcapPlusPlus.mk.bak 
+sed -i.bak '/# libs dir/d' PcapPlusPlus.mk && rm PcapPlusPlus.mk.bak
+sed -i.bak '/PCAPPP_LIBS_DIR :=/d' PcapPlusPlus.mk && rm PcapPlusPlus.mk.bak
+sed -i.bak 's|PCAPPP_INCLUDES :=.*|PCAPPP_INCLUDES := -I/usr/local/include/pcapplusplus|g' PcapPlusPlus.mk && rm PcapPlusPlus.mk.bak
+
+# create PcapPlusPlus.pc
+echo 'prefix=/usr/local'>PcapPlusPlus.pc
+echo 'exec_prefix=${prefix}'>>PcapPlusPlus.pc
+echo 'libdir=${exec_prefix}/lib'>>PcapPlusPlus.pc
+echo 'includedir=${prefix}/include'>>PcapPlusPlus.pc
+echo>>PcapPlusPlus.pc
+echo 'Name: PcapPlusPlus'>>PcapPlusPlus.pc
+echo 'Description: a multiplatform C++ network sniffing and packet parsing and crafting framework. It is meant to be lightweight, efficient and easy to use'>>PcapPlusPlus.pc
+printf 'Version: '>>PcapPlusPlus.pc
+grep '#define PCAPPLUSPLUS_VERSION ' header/PcapPlusPlusVersion.h | cut -d " " -f3 | tr -d "\"" | tr -d '\n'>>PcapPlusPlus.pc
+printf '\n'>>PcapPlusPlus.pc
+echo 'URL: https://seladb.github.io/PcapPlusPlus-Doc'>>PcapPlusPlus.pc
+printf 'Libs: '>>PcapPlusPlus.pc
+grep PCAPPP_LIBS PcapPlusPlus.mk | cut -d " " -f3- | tr -d '\r' | tr '\n' ' '>>PcapPlusPlus.pc
+printf '\nCFlags: '>>PcapPlusPlus.pc
+grep PCAPPP_INCLUDES PcapPlusPlus.mk | cut -d " " -f3- | tr -d '\r' | tr '\n' ' '>>PcapPlusPlus.pc
+printf '\n'>>PcapPlusPlus.pc
+
+# copy template makefile
+mv PcapPlusPlus.mk /usr/local/etc
+
+# copy PcapPlusPlus.pc
+PKG_CONFIG_PATH="${PKG_CONFIG_PATH:-/usr/local/lib/pkgconfig}"
+mkdir -p $PKG_CONFIG_PATH
+mv PcapPlusPlus.pc $PKG_CONFIG_PATH

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/platform.mk.linux
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/platform.mk.linux b/thirdparty/pcap++/mk/platform.mk.linux
new file mode 100644
index 0000000..fa3b71d
--- /dev/null
+++ b/thirdparty/pcap++/mk/platform.mk.linux
@@ -0,0 +1,23 @@
+LINUX := 1
+
+BIN_EXT :=
+
+LIB_PREFIX := lib
+
+LIB_EXT := .a
+
+G++ := g++
+
+GCC := gcc
+
+AR := ar
+
+RM := rm
+
+CP := cp
+
+MKDIR := mkdir
+
+INSTALL_SCRIPT := install.sh
+
+UNINSTALL_SCRIPT := uninstall.sh

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/platform.mk.macosx
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/platform.mk.macosx b/thirdparty/pcap++/mk/platform.mk.macosx
new file mode 100644
index 0000000..570ef32
--- /dev/null
+++ b/thirdparty/pcap++/mk/platform.mk.macosx
@@ -0,0 +1,23 @@
+MAC_OS_X := 1
+
+BIN_EXT :=
+
+LIB_PREFIX := lib
+
+LIB_EXT := .a
+
+G++ := g++
+
+GCC := gcc
+
+AR := ar
+
+RM := rm
+
+CP := cp
+
+MKDIR := mkdir
+
+INSTALL_SCRIPT := install.sh
+
+UNINSTALL_SCRIPT := uninstall.sh

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/platform.mk.mingw-w64
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/platform.mk.mingw-w64 b/thirdparty/pcap++/mk/platform.mk.mingw-w64
new file mode 100644
index 0000000..df2987c
--- /dev/null
+++ b/thirdparty/pcap++/mk/platform.mk.mingw-w64
@@ -0,0 +1,21 @@
+WIN32 := 1
+
+export PATH := $(MINGW_HOME)/bin;$(MSYS_HOME)/bin:$(PATH)
+
+BIN_EXT := .exe
+
+LIB_PREFIX := 
+
+LIB_EXT := .lib
+
+G++ := g++.exe
+
+GCC := gcc.exe
+
+AR := ar.exe
+
+RM := rm.exe
+
+CP := cp.exe
+
+MKDIR := mkdir.exe

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/platform.mk.mingw32
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/platform.mk.mingw32 b/thirdparty/pcap++/mk/platform.mk.mingw32
new file mode 100644
index 0000000..df2987c
--- /dev/null
+++ b/thirdparty/pcap++/mk/platform.mk.mingw32
@@ -0,0 +1,21 @@
+WIN32 := 1
+
+export PATH := $(MINGW_HOME)/bin;$(MSYS_HOME)/bin:$(PATH)
+
+BIN_EXT := .exe
+
+LIB_PREFIX := 
+
+LIB_EXT := .lib
+
+G++ := g++.exe
+
+GCC := gcc.exe
+
+AR := ar.exe
+
+RM := rm.exe
+
+CP := cp.exe
+
+MKDIR := mkdir.exe

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/setup-dpdk.sh.template
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/setup-dpdk.sh.template b/thirdparty/pcap++/mk/setup-dpdk.sh.template
new file mode 100755
index 0000000..b570413
--- /dev/null
+++ b/thirdparty/pcap++/mk/setup-dpdk.sh.template
@@ -0,0 +1,119 @@
+echo ""
+echo "*******************************"
+echo "PcapPlusPlus setup DPDK script "
+echo "*******************************"
+echo ""
+
+
+show_help() {
+        echo "usage: setup-dpdk.sh -g AMOUNT_OF_HUGE_PAGES_TO_ALLOCATE -n NICS_TO_BIND_IN_COMMA_SEPARATED_LIST [-s] [-h]"
+	echo "options:"
+	echo "	-p	: amount of huge pages to allocate (huge pages are needed for DPDK's memory allocations)"
+	echo "	-n	: a comma-separated list of all NICs that will be unbinded from Linux and move to DPDK control"
+	echo "		  only these NICs will be used by DPDK. Example: eth0,eth1"
+	echo "	-s	: display current Ethernet device settings (which are binded to Linux and which to DPDK)"
+	echo "	-h	: show this help screen"
+}
+
+
+# setup DPDK variables
+export RTE_SDK=###RTE_SDK###
+
+# in DPDK 16.11 help scripts are stil in 'tools' dir but in 17.02 dir was renamed to 'usertools'
+TOOLS_DIR=""
+if [ -d $RTE_SDK/tools ]; then TOOLS_DIR=tools; else TOOLS_DIR=usertools; fi
+
+
+# read and parse arguments
+
+OPTIND=1	# Reset in case getopts has been used previously in the shell.
+
+HUGE_PAGE_TO_ALLOCATE=0
+NICS_TO_BIND=""
+
+while getopts "h?sp:n:" opt; do
+    case "$opt" in
+    h|\?)
+	show_help
+        exit 0
+        ;;
+    p)  HUGE_PAGE_TO_ALLOCATE=$OPTARG
+        ;;
+    n)  NICS_TO_BIND=$OPTARG
+        ;;
+    s)  ${RTE_SDK}/${TOOLS_DIR}/dpdk-devbind.py --status
+        exit 0
+        ;;
+    esac
+done
+
+shift $((OPTIND-1))
+
+[ "$1" = "--" ] && shift
+
+
+# verify huge page amount is indeed a string
+re='^[0-9]+$'
+if ! [[ $HUGE_PAGE_TO_ALLOCATE =~ $re ]] ; then
+	echo "Error: Huge-page amount is not a number"
+	echo
+	show_help
+	exit 1
+fi
+
+#verify nic list was given
+if [[ $NICS_TO_BIND == "" ]] ; then
+	echo "Error: List of NICs to bind was not given"
+	echo
+	show_help
+	exit 1
+fi
+
+
+# setup huge-pages
+CUR_HUGE=$(cat /proc/meminfo | grep -s HugePages_Total | awk '{print $2}')
+if [ $CUR_HUGE != $HUGE_PAGE_TO_ALLOCATE ] ; then
+	HUGEPAGE_MOUNT=/mnt/huge
+	echo "echo $HUGE_PAGE_TO_ALLOCATE > /sys/kernel/mm/hugepages/hugepages-2048kB/nr_hugepages" > .echo_tmp
+	sudo sh .echo_tmp
+	rm -f .echo_tmp
+	sudo mkdir -p ${HUGEPAGE_MOUNT}
+	sudo mount -t hugetlbfs nodev ${HUGEPAGE_MOUNT}
+	echo "1. Reserve huge-pages - DONE!"
+else
+	echo "1. Huge-pages already allocated"
+fi
+
+# install kernel modules
+IFS=","
+for NIC_TO_BIND in $NICS_TO_BIND ; do	
+	ifconfig | grep -s "^$NIC_TO_BIND" > /dev/null
+	if [ $? -eq 1 ] ; then
+		echo "2. $NIC_TO_BIND is already binded to DPDK or doesn't exist. Exiting"
+		echo
+		${RTE_SDK}/${TOOLS_DIR}/dpdk-devbind.py --status
+		exit 1
+	fi
+done
+
+lsmod | grep -s igb_uio > /dev/null
+if [ $? -eq 0 ] ; then
+	sudo rmmod igb_uio
+fi
+
+sudo modprobe uio
+sudo insmod ${RTE_SDK}/build/kmod/igb_uio.ko
+echo "2. Install kernel module - DONE!"
+
+
+# bind network adapter
+IFS=","
+for NIC_TO_BIND in $NICS_TO_BIND ; do
+	sudo ifconfig ${NIC_TO_BIND} down
+	sudo ${RTE_SDK}/${TOOLS_DIR}/dpdk-devbind.py --bind=igb_uio ${NIC_TO_BIND}
+done
+echo "3. Bind network adapters - DONE!"
+
+${RTE_SDK}/${TOOLS_DIR}/dpdk-devbind.py --status
+
+echo "Setup DPDK completed"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/uninstall.sh
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/uninstall.sh b/thirdparty/pcap++/mk/uninstall.sh
new file mode 100755
index 0000000..b370769
--- /dev/null
+++ b/thirdparty/pcap++/mk/uninstall.sh
@@ -0,0 +1,18 @@
+#!/bin/bash
+set -e # Exit with nonzero exit code if anything fails
+
+# remove libs
+rm -f /usr/local/lib/libCommon++.a /usr/local/lib/libPacket++.a /usr/local/lib/libPcap++.a
+
+# remove header files
+rm -rf /usr/local/include/pcapplusplus
+
+# remove examples
+for f in examples/*; do rm /usr/local/bin/$(basename "$f"); done
+
+# remove template makefile
+rm -f /usr/local/etc/PcapPlusPlus.mk
+
+# remove PcapPlusPlus.pc
+PKG_CONFIG_PATH="${PKG_CONFIG_PATH:-/usr/local/lib/pkgconfig}"
+rm -f $PKG_CONFIG_PATH/PcapPlusPlus.pc

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj b/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj
new file mode 100644
index 0000000..c591b53
--- /dev/null
+++ b/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{50AEB02B-2C6A-44FF-8F97-7ED5D33FBB32}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>ArpSpoofing</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x86;$(WinPcapHome)\Lib;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Obj</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x64;$(WinPcapHome)\Lib\x64;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Obj</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x86;$(WinPcapHome)\Lib;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Obj</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x64;$(WinPcapHome)\Lib\x64;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\ArpSpoofing\Obj</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WINx64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WINx64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\ArpSpoofing\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\Examples\ArpSpoofing\main.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj.filters
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj.filters b/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj.filters
new file mode 100644
index 0000000..b07554e
--- /dev/null
+++ b/thirdparty/pcap++/mk/vs2015/ArpSpoofing.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\Examples\ArpSpoofing\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/vs2015/Arping.vcxproj
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/vs2015/Arping.vcxproj b/thirdparty/pcap++/mk/vs2015/Arping.vcxproj
new file mode 100644
index 0000000..91b428f
--- /dev/null
+++ b/thirdparty/pcap++/mk/vs2015/Arping.vcxproj
@@ -0,0 +1,196 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup Label="ProjectConfigurations">
+    <ProjectConfiguration Include="Debug|Win32">
+      <Configuration>Debug</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Debug|x64">
+      <Configuration>Debug</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|Win32">
+      <Configuration>Release</Configuration>
+      <Platform>Win32</Platform>
+    </ProjectConfiguration>
+    <ProjectConfiguration Include="Release|x64">
+      <Configuration>Release</Configuration>
+      <Platform>x64</Platform>
+    </ProjectConfiguration>
+  </ItemGroup>
+  <PropertyGroup Label="Globals">
+    <ProjectGuid>{D79AF4DA-8676-45FC-9BD5-D1062DB923E1}</ProjectGuid>
+    <Keyword>Win32Proj</Keyword>
+    <RootNamespace>Arping</RootNamespace>
+    <WindowsTargetPlatformVersion>8.1</WindowsTargetPlatformVersion>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>true</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+    <ConfigurationType>Application</ConfigurationType>
+    <UseDebugLibraries>false</UseDebugLibraries>
+    <PlatformToolset>v140</PlatformToolset>
+    <WholeProgramOptimization>true</WholeProgramOptimization>
+    <CharacterSet>Unicode</CharacterSet>
+  </PropertyGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+  <ImportGroup Label="ExtensionSettings">
+  </ImportGroup>
+  <ImportGroup Label="Shared">
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+    <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+    <Import Project="PcapPlusPlusPropertySheet.props" />
+  </ImportGroup>
+  <PropertyGroup Label="UserMacros" />
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x86;$(WinPcapHome)\Lib;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\Arping\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\Arping\Obj</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x64;$(WinPcapHome)\Lib\x64;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\Arping\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\Arping\Obj</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x86;$(WinPcapHome)\Lib;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\Arping\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\Arping\Obj</IntDir>
+  </PropertyGroup>
+  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <LinkIncremental>true</LinkIncremental>
+    <IncludePath>$(PcapPlusPlusHome)\Dist\header;$(PcapPlusPlusHome)\3rdParty\Getopt-for-Visual-Studio;$(WinPcapHome)\Include;$(PThreadWin32Home)\Pre-built.2\include;$(IncludePath)</IncludePath>
+    <LibraryPath>$(PcapPlusPlusHome)\Dist;$(PThreadWin32Home)\Pre-built.2\lib\x64;$(WinPcapHome)\Lib\x64;$(LibraryPath)</LibraryPath>
+    <OutDir>$(PcapPlusPlusHome)\Examples\Arping\Bin</OutDir>
+    <IntDir>$(PcapPlusPlusHome)\Examples\Arping\Obj</IntDir>
+  </PropertyGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WIN32;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\Arping\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\Arping\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+    <ClCompile>
+      <PrecompiledHeader>NotUsing</PrecompiledHeader>
+      <WarningLevel>Level3</WarningLevel>
+      <Optimization>Disabled</Optimization>
+      <PreprocessorDefinitions>WINx64;_DEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\Arping\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\Arping\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WIN32;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\Arping\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\Arping\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x86\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+    <ClCompile>
+      <WarningLevel>Level3</WarningLevel>
+      <PrecompiledHeader>
+      </PrecompiledHeader>
+      <Optimization>Full</Optimization>
+      <FunctionLevelLinking>true</FunctionLevelLinking>
+      <IntrinsicFunctions>true</IntrinsicFunctions>
+      <PreprocessorDefinitions>WINx64;NDEBUG;_CONSOLE;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+      <SDLCheck>true</SDLCheck>
+    </ClCompile>
+    <Link>
+      <SubSystem>Console</SubSystem>
+      <EnableCOMDATFolding>true</EnableCOMDATFolding>
+      <OptimizeReferences>true</OptimizeReferences>
+      <GenerateDebugInformation>true</GenerateDebugInformation>
+      <AdditionalDependencies>Ws2_32.lib;IPHLPAPI.lib;wpcap.lib;Packet.lib;pthreadVC2.lib;Common++.lib;Packet++.lib;Pcap++.lib;%(AdditionalDependencies)</AdditionalDependencies>
+    </Link>
+    <PostBuildEvent>
+      <Command>xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Examples\Arping\Bin" /Y
+xcopy "$(PcapPlusPlusHome)\Examples\Arping\Bin\*.exe" "$(PcapPlusPlusHome)\Dist\examples" /F /R /Y /I
+xcopy "$(PThreadWin32Home)\Pre-built.2\dll\x64\pthreadVC2.dll" "$(PcapPlusPlusHome)\Dist\examples" /Y</Command>
+    </PostBuildEvent>
+  </ItemDefinitionGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\Examples\Arping\main.cpp" />
+  </ItemGroup>
+  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+  <ImportGroup Label="ExtensionTargets">
+  </ImportGroup>
+</Project>
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/c0a788b3/thirdparty/pcap++/mk/vs2015/Arping.vcxproj.filters
----------------------------------------------------------------------
diff --git a/thirdparty/pcap++/mk/vs2015/Arping.vcxproj.filters b/thirdparty/pcap++/mk/vs2015/Arping.vcxproj.filters
new file mode 100644
index 0000000..51d0078
--- /dev/null
+++ b/thirdparty/pcap++/mk/vs2015/Arping.vcxproj.filters
@@ -0,0 +1,22 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+  <ItemGroup>
+    <Filter Include="Source Files">
+      <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
+      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
+    </Filter>
+    <Filter Include="Header Files">
+      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
+      <Extensions>h;hh;hpp;hxx;hm;inl;inc;xsd</Extensions>
+    </Filter>
+    <Filter Include="Resource Files">
+      <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
+      <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
+    </Filter>
+  </ItemGroup>
+  <ItemGroup>
+    <ClCompile Include="..\..\Examples\Arping\main.cpp">
+      <Filter>Source Files</Filter>
+    </ClCompile>
+  </ItemGroup>
+</Project>
\ No newline at end of file


Mime
View raw message