Added option to set the listen address via the win32 GUI. This

allows the user to specify one (and only one) network interface
to listen on.
This commit is contained in:
crs 2004-11-01 18:21:00 +00:00
parent 519871fe15
commit 58de7a21fe
4 changed files with 85 additions and 32 deletions

View File

@ -19,6 +19,7 @@
#include "CArchMiscWindows.h"
#include "CAdvancedOptions.h"
#include "LaunchUtil.h"
#include "XArch.h"
#include "resource.h"
//
@ -32,7 +33,8 @@ CAdvancedOptions::CAdvancedOptions(HWND parent, CConfig* config) :
m_config(config),
m_isClient(false),
m_screenName(ARCH->getHostName()),
m_port(kDefaultPort)
m_port(kDefaultPort),
m_interface()
{
assert(s_singleton == NULL);
s_singleton = this;
@ -67,6 +69,12 @@ CAdvancedOptions::getPort() const
return m_port;
}
CString
CAdvancedOptions::getInterface() const
{
return m_interface;
}
CString
CAdvancedOptions::getCommandLine(bool isClient, const CString& serverName) const
{
@ -88,7 +96,11 @@ CAdvancedOptions::getCommandLine(bool isClient, const CString& serverName) const
cmdLine += portString;
}
else {
cmdLine += " --address :";
cmdLine += " --address ";
if (!m_interface.empty()) {
cmdLine += m_interface;
}
cmdLine += ":";
cmdLine += portString;
}
@ -103,12 +115,17 @@ CAdvancedOptions::init()
if (key != NULL) {
DWORD newPort = CArchMiscWindows::readValueInt(key, "port");
CString newName = CArchMiscWindows::readValueString(key, "name");
CString newInterface =
CArchMiscWindows::readValueString(key, "interface");
if (newPort != 0) {
m_port = static_cast<int>(newPort);
}
if (!newName.empty()) {
m_screenName = newName;
}
if (!newInterface.empty()) {
m_interface = newInterface;
}
CArchMiscWindows::closeKey(key);
}
}
@ -125,11 +142,16 @@ CAdvancedOptions::doInit(HWND hwnd)
child = getItem(hwnd, IDC_ADVANCED_NAME_EDIT);
SendMessage(child, WM_SETTEXT, 0, (LPARAM)m_screenName.c_str());
child = getItem(hwnd, IDC_ADVANCED_INTERFACE_EDIT);
SendMessage(child, WM_SETTEXT, 0, (LPARAM)m_interface.c_str());
}
bool
CAdvancedOptions::save(HWND hwnd)
{
SetCursor(LoadCursor(NULL, IDC_WAIT));
HWND child = getItem(hwnd, IDC_ADVANCED_NAME_EDIT);
CString name = getWindowText(child);
if (!m_config->isValidScreenName(name)) {
@ -147,6 +169,23 @@ CAdvancedOptions::save(HWND hwnd)
return false;
}
child = getItem(hwnd, IDC_ADVANCED_INTERFACE_EDIT);
CString iface = getWindowText(child);
if (!m_isClient) {
try {
if (!iface.empty()) {
ARCH->nameToAddr(iface);
}
}
catch (XArchNetworkName& e) {
showError(hwnd, CStringUtil::format(
getString(IDS_INVALID_INTERFACE_NAME).c_str(),
iface.c_str(), e.what().c_str()));
SetFocus(child);
return false;
}
}
// get and verify port
child = getItem(hwnd, IDC_ADVANCED_PORT_EDIT);
CString portString = getWindowText(child);
@ -164,12 +203,14 @@ CAdvancedOptions::save(HWND hwnd)
// save state
m_screenName = name;
m_port = port;
m_interface = iface;
// save values to registry
HKEY key = CArchMiscWindows::openKey(HKEY_CURRENT_USER, getSettingsPath());
if (key != NULL) {
CArchMiscWindows::setValue(key, "port", m_port);
CArchMiscWindows::setValue(key, "name", m_screenName);
CArchMiscWindows::setValue(key, "interface", m_interface);
CArchMiscWindows::closeKey(key);
}
@ -182,6 +223,7 @@ CAdvancedOptions::setDefaults(HWND hwnd)
// restore defaults
m_screenName = ARCH->getHostName();
m_port = kDefaultPort;
m_interface = "";
// update GUI
doInit(hwnd);

View File

@ -47,6 +47,9 @@ public:
//! Get the port
int getPort() const;
//! Get the interface
CString getInterface() const;
//! Convert options to command line string
CString getCommandLine(bool isClient,
const CString& serverName) const;
@ -71,6 +74,7 @@ private:
bool m_isClient;
CString m_screenName;
int m_port;
CString m_interface;
};
#endif

View File

@ -106,7 +106,7 @@ BEGIN
PUSHBUTTON "Quit",IDCANCEL,243,241,50,14
END
IDD_ADD DIALOG DISCARDABLE 0, 0, 192, 236
IDD_ADD DIALOG DISCARDABLE 0, 0, 192, 254
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION
CAPTION "Add Screen"
FONT 8, "MS Sans Serif"
@ -116,33 +116,33 @@ BEGIN
LTEXT "&Aliases:",IDC_STATIC,7,25,25,8
EDITTEXT IDC_ADD_ALIASES_EDIT,79,26,106,40,ES_MULTILINE |
ES_AUTOVSCROLL | ES_AUTOHSCROLL | ES_WANTRETURN
GROUPBOX "Half-Duplex",IDC_STATIC,7,72,178,64
LTEXT "If your Caps, Num, or Scroll Lock keys behave strangely on this screen then turn on the half-duplex options and restart the server.",
GROUPBOX "Options",IDC_STATIC,7,72,178,80
LTEXT "If your Caps, Num, or Scroll Lock keys behave strangely on this client screen then try turning the half-duplex options on and reconnect the client.",
IDC_STATIC,13,82,165,25
CONTROL "&Caps Lock",IDC_ADD_HD_CAPS_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,110,81,10
CONTROL "&Num Lock",IDC_ADD_HD_NUM_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,122,81,10
CONTROL "Sc&roll Lock",IDC_ADD_HD_SCROLL_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,98,110,81,10
GROUPBOX "Modifiers",IDC_STATIC,7,139,178,65
LTEXT "Shift",IDC_STATIC,13,155,15,8
COMBOBOX IDC_ADD_MOD_SHIFT,37,152,48,60,CBS_DROPDOWNLIST |
CONTROL "Half-duplex &Caps Lock",IDC_ADD_HD_CAPS_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,110,165,10
CONTROL "Half-duplex &Num Lock",IDC_ADD_HD_NUM_CHECK,"Button",
BS_AUTOCHECKBOX | WS_TABSTOP,13,122,165,10
CONTROL "Half-duplex Sc&roll Lock",IDC_ADD_HD_SCROLL_CHECK,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,13,134,165,10
GROUPBOX "Modifiers",IDC_STATIC,7,155,178,65
LTEXT "Shift",IDC_STATIC,13,171,15,8
COMBOBOX IDC_ADD_MOD_SHIFT,37,168,48,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Ctrl",IDC_STATIC,13,170,11,8
COMBOBOX IDC_ADD_MOD_CTRL,37,168,48,60,CBS_DROPDOWNLIST |
LTEXT "Ctrl",IDC_STATIC,13,186,11,8
COMBOBOX IDC_ADD_MOD_CTRL,37,184,48,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Alt",IDC_STATIC,13,186,9,8
COMBOBOX IDC_ADD_MOD_ALT,37,184,48,60,CBS_DROPDOWNLIST |
LTEXT "Alt",IDC_STATIC,13,202,9,8
COMBOBOX IDC_ADD_MOD_ALT,37,200,48,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Meta",IDC_STATIC,101,154,17,8
COMBOBOX IDC_ADD_MOD_META,125,152,48,60,CBS_DROPDOWNLIST |
LTEXT "Meta",IDC_STATIC,101,170,17,8
COMBOBOX IDC_ADD_MOD_META,125,168,48,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
LTEXT "Super",IDC_STATIC,101,170,20,8
COMBOBOX IDC_ADD_MOD_SUPER,125,168,48,60,CBS_DROPDOWNLIST |
LTEXT "Super",IDC_STATIC,101,186,20,8
COMBOBOX IDC_ADD_MOD_SUPER,125,184,48,60,CBS_DROPDOWNLIST |
WS_VSCROLL | WS_TABSTOP
DEFPUSHBUTTON "OK",IDOK,79,215,50,14
PUSHBUTTON "Cancel",IDCANCEL,135,215,50,14
DEFPUSHBUTTON "OK",IDOK,79,233,50,14
PUSHBUTTON "Cancel",IDCANCEL,135,233,50,14
END
IDD_WAIT DIALOG DISCARDABLE 0, 0, 186, 54
@ -215,7 +215,7 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,150,248,50,14
END
IDD_ADVANCED_OPTIONS DIALOG DISCARDABLE 0, 0, 230, 133
IDD_ADVANCED_OPTIONS DIALOG DISCARDABLE 0, 0, 230, 186
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
CAPTION "Advanced Options"
FONT 8, "MS Sans Serif"
@ -229,9 +229,13 @@ BEGIN
LTEXT "&Port:",IDC_STATIC,7,90,16,8
EDITTEXT IDC_ADVANCED_PORT_EDIT,63,88,40,12,ES_AUTOHSCROLL |
ES_NUMBER
PUSHBUTTON "&Defaults",IDC_ADVANCED_DEFAULTS,7,112,50,14
DEFPUSHBUTTON "OK",IDOK,118,112,50,14
PUSHBUTTON "Cancel",IDCANCEL,173,112,50,14
LTEXT "The server normally listens for client connections on all network interfaces. Enter the address of a particular interface to listen on just that interface.",
IDC_STATIC,7,110,216,26
LTEXT "&Interface:",IDC_STATIC,7,144,31,8
EDITTEXT IDC_ADVANCED_INTERFACE_EDIT,63,142,81,12,ES_AUTOHSCROLL
PUSHBUTTON "&Defaults",IDC_ADVANCED_DEFAULTS,7,165,50,14
DEFPUSHBUTTON "OK",IDOK,118,165,50,14
PUSHBUTTON "Cancel",IDCANCEL,173,165,50,14
END
@ -256,7 +260,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 185
TOPMARGIN, 7
BOTTOMMARGIN, 229
BOTTOMMARGIN, 247
END
IDD_WAIT, DIALOG
@ -288,7 +292,7 @@ BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 223
TOPMARGIN, 7
BOTTOMMARGIN, 126
BOTTOMMARGIN, 179
END
END
#endif // APSTUDIO_INVOKED
@ -360,6 +364,7 @@ BEGIN
IDS_ERROR_CODE "Error code: %{1}"
IDS_AUTOSTART_PERMISSION_ALL
"You have sufficient access rights to install and uninstall Auto Start for all users or for just yourself."
IDS_INVALID_INTERFACE_NAME "The interface '%{1}' is invalid: %{2}"
END
#endif // English (U.S.) resources

View File

@ -43,6 +43,7 @@
#define IDS_INVALID_TIME 39
#define IDS_ERROR_CODE 39
#define IDS_AUTOSTART_PERMISSION_ALL 40
#define IDS_INVALID_INTERFACE_NAME 41
#define IDD_MAIN 101
#define IDD_ADD 102
#define IDD_WAIT 103
@ -89,6 +90,7 @@
#define IDC_ADVANCED_PORT_EDIT 1039
#define IDC_ADD_HD_SCROLL_CHECK 1039
#define IDC_MAIN_DEBUG 1040
#define IDC_ADVANCED_INTERFACE_EDIT 1040
#define IDC_GLOBAL_DELAY_CHECK 1041
#define IDC_GLOBAL_DELAY_TIME 1042
#define IDC_GLOBAL_TWO_TAP_CHECK 1043