From cfaf5a0f3f5f83aba57b84ba5c8ea72b960f0549 Mon Sep 17 00:00:00 2001 From: Arisotura Date: Mon, 4 Mar 2019 23:55:39 +0100 Subject: [PATCH] rework wifi settings dialog. fail gracefully if pcap isn't loaded successfully. --- src/libui_sdl/DlgWifiSettings.cpp | 60 +++++++++++++++++++++++++------ src/libui_sdl/LAN_PCap.cpp | 2 ++ 2 files changed, 51 insertions(+), 11 deletions(-) diff --git a/src/libui_sdl/DlgWifiSettings.cpp b/src/libui_sdl/DlgWifiSettings.cpp index af27463e..76f38404 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 ca3e03ab..6f4fdca3 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]);