aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2019-03-04 23:55:39 +0100
committerArisotura <thetotalworm@gmail.com>2019-03-04 23:55:39 +0100
commitcfaf5a0f3f5f83aba57b84ba5c8ea72b960f0549 (patch)
tree625fbc91bf118c1dabceb1ffe8e7789040973986
parent3f82c7dcc1a85eba3326582246310636b930214c (diff)
rework wifi settings dialog.
fail gracefully if pcap isn't loaded successfully.
-rw-r--r--src/libui_sdl/DlgWifiSettings.cpp60
-rw-r--r--src/libui_sdl/LAN_PCap.cpp2
2 files changed, 51 insertions, 11 deletions
diff --git a/src/libui_sdl/DlgWifiSettings.cpp b/src/libui_sdl/DlgWifiSettings.cpp
index af27463..76f3840 100644
--- a/src/libui_sdl/DlgWifiSettings.cpp
+++ b/src/libui_sdl/DlgWifiSettings.cpp
@@ -30,6 +30,13 @@
#include "DlgWifiSettings.h"
+#ifdef __WIN32__
+#define PCAP_NAME "winpcap/npcap"
+#else
+#define PCAP_NAME "libpcap"
+#endif // __WIN32__
+
+
void ApplyNewSettings(int type);
@@ -43,6 +50,7 @@ bool haspcap;
uiCheckbox* cbBindAnyAddr;
+uiLabel* lbAdapterList;
uiCombobox* cmAdapterList;
uiCheckbox* cbDirectLAN;
@@ -52,8 +60,30 @@ uiLabel* lbAdapterDNS0;
uiLabel* lbAdapterDNS1;
+void UpdateAdapterControls()
+{
+ bool enable = haspcap && uiCheckboxChecked(cbDirectLAN);
+
+ if (enable)
+ {
+ uiControlEnable(uiControl(lbAdapterList));
+ uiControlEnable(uiControl(cmAdapterList));
+ uiControlEnable(uiControl(lbAdapterMAC));
+ uiControlEnable(uiControl(lbAdapterIP));
+ }
+ else
+ {
+ uiControlDisable(uiControl(lbAdapterList));
+ uiControlDisable(uiControl(cmAdapterList));
+ uiControlDisable(uiControl(lbAdapterMAC));
+ uiControlDisable(uiControl(lbAdapterIP));
+ }
+}
+
void UpdateAdapterInfo()
{
+ if (!haspcap) return;
+
int sel = uiComboboxSelected(cmAdapterList);
if (sel < 0 || sel >= LAN_PCap::NumAdapters) return;
if (LAN_PCap::NumAdapters < 1) return;
@@ -71,7 +101,7 @@ void UpdateAdapterInfo()
adapter->IP_v4[2], adapter->IP_v4[3]);
uiLabelSetText(lbAdapterIP, tmp);
- sprintf(tmp, "Primary DNS: %d.%d.%d.%d",
+ /*sprintf(tmp, "Primary DNS: %d.%d.%d.%d",
adapter->DNS[0][0], adapter->DNS[0][1],
adapter->DNS[0][2], adapter->DNS[0][3]);
uiLabelSetText(lbAdapterDNS0, tmp);
@@ -79,7 +109,7 @@ void UpdateAdapterInfo()
sprintf(tmp, "Secondary DNS: %d.%d.%d.%d",
adapter->DNS[1][0], adapter->DNS[1][1],
adapter->DNS[1][2], adapter->DNS[1][3]);
- uiLabelSetText(lbAdapterDNS1, tmp);
+ uiLabelSetText(lbAdapterDNS1, tmp);*/
}
int OnCloseWindow(uiWindow* window, void* blarg)
@@ -88,6 +118,11 @@ int OnCloseWindow(uiWindow* window, void* blarg)
return 1;
}
+void OnDirectModeToggle(uiCheckbox* c, void* blarg)
+{
+ UpdateAdapterControls();
+}
+
void OnAdapterSelect(uiCombobox* c, void* blarg)
{
UpdateAdapterInfo();
@@ -166,24 +201,25 @@ void Open()
uiBox* in_ctrl = uiNewVerticalBox();
uiGroupSetChild(grp, uiControl(in_ctrl));
- lbl = uiNewLabel("Network adapter:");
- uiBoxAppend(in_ctrl, uiControl(lbl), 0);
+ cbDirectLAN = uiNewCheckbox("Direct mode (requires " PCAP_NAME " and ethernet connection)");
+ uiCheckboxOnToggled(cbDirectLAN, OnDirectModeToggle, NULL);
+ uiBoxAppend(in_ctrl, uiControl(cbDirectLAN), 0);
+
+ lbAdapterList = uiNewLabel("Network adapter:");
+ uiBoxAppend(in_ctrl, uiControl(lbAdapterList), 0);
cmAdapterList = uiNewCombobox();
uiComboboxOnSelected(cmAdapterList, OnAdapterSelect, NULL);
uiBoxAppend(in_ctrl, uiControl(cmAdapterList), 0);
- lbAdapterMAC = uiNewLabel("MAC");
+ lbAdapterMAC = uiNewLabel("MAC: ??");
uiBoxAppend(in_ctrl, uiControl(lbAdapterMAC), 0);
- lbAdapterIP = uiNewLabel("IP");
+ lbAdapterIP = uiNewLabel("IP: ??");
uiBoxAppend(in_ctrl, uiControl(lbAdapterIP), 0);
- lbAdapterDNS0 = uiNewLabel("DNS0");
+ /*lbAdapterDNS0 = uiNewLabel("DNS0");
uiBoxAppend(in_ctrl, uiControl(lbAdapterDNS0), 0);
lbAdapterDNS1 = uiNewLabel("DNS1");
- uiBoxAppend(in_ctrl, uiControl(lbAdapterDNS1), 0);
-
- cbDirectLAN = uiNewCheckbox("Direct mode (requires ethernet connection)");
- uiBoxAppend(in_ctrl, uiControl(cbDirectLAN), 0);
+ uiBoxAppend(in_ctrl, uiControl(lbAdapterDNS1), 0);*/
}
{
@@ -217,8 +253,10 @@ void Open()
}
uiComboboxSetSelected(cmAdapterList, sel);
UpdateAdapterInfo();
+ UpdateAdapterControls();
uiCheckboxSetChecked(cbDirectLAN, Config::DirectLAN);
+ if (!haspcap) uiControlDisable(uiControl(cbDirectLAN));
uiControlShow(uiControl(win));
}
diff --git a/src/libui_sdl/LAN_PCap.cpp b/src/libui_sdl/LAN_PCap.cpp
index ca3e03a..6f4fdca 100644
--- a/src/libui_sdl/LAN_PCap.cpp
+++ b/src/libui_sdl/LAN_PCap.cpp
@@ -111,6 +111,8 @@ bool Init()
PacketLen = 0;
RXNum = 0;
+ NumAdapters = 0;
+
for (int i = 0; PCapLibNames[i]; i++)
{
void* lib = SDL_LoadObject(PCapLibNames[i]);