diff --git a/LibreHardwareMonitor/LibreHardwareMonitor.csproj b/LibreHardwareMonitor/LibreHardwareMonitor.csproj index 8d6b444..158ea57 100644 --- a/LibreHardwareMonitor/LibreHardwareMonitor.csproj +++ b/LibreHardwareMonitor/LibreHardwareMonitor.csproj @@ -44,8 +44,8 @@ ParameterForm.cs - - PortForm.cs + + InterfacePortForm.cs @@ -61,8 +61,8 @@ ParameterForm.cs - - PortForm.cs + + InterfacePortForm.cs diff --git a/LibreHardwareMonitor/UI/PortForm.Designer.cs b/LibreHardwareMonitor/UI/InterfacePortForm.Designer.cs similarity index 81% rename from LibreHardwareMonitor/UI/PortForm.Designer.cs rename to LibreHardwareMonitor/UI/InterfacePortForm.Designer.cs index 5672d54..b791af2 100644 --- a/LibreHardwareMonitor/UI/PortForm.Designer.cs +++ b/LibreHardwareMonitor/UI/InterfacePortForm.Designer.cs @@ -6,7 +6,7 @@ namespace LibreHardwareMonitor.UI { - partial class PortForm + partial class InterfacePortForm { /// /// Required designer variable. @@ -34,7 +34,7 @@ namespace LibreHardwareMonitor.UI /// private void InitializeComponent() { - System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PortForm)); + System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(InterfacePortForm)); this.portOKButton = new System.Windows.Forms.Button(); this.portCancelButton = new System.Windows.Forms.Button(); this.label1 = new System.Windows.Forms.Label(); @@ -44,12 +44,14 @@ namespace LibreHardwareMonitor.UI this.webServerLinkLabel = new System.Windows.Forms.LinkLabel(); this.portNumericUpDn = new System.Windows.Forms.NumericUpDown(); this.label5 = new System.Windows.Forms.Label(); + this.interfaceLabel = new System.Windows.Forms.Label(); + this.interfaceComboBox = new System.Windows.Forms.ComboBox(); ((System.ComponentModel.ISupportInitialize)(this.portNumericUpDn)).BeginInit(); this.SuspendLayout(); // // portOKButton // - this.portOKButton.Location = new System.Drawing.Point(244, 137); + this.portOKButton.Location = new System.Drawing.Point(244, 162); this.portOKButton.Name = "portOKButton"; this.portOKButton.Size = new System.Drawing.Size(75, 23); this.portOKButton.TabIndex = 0; @@ -60,7 +62,7 @@ namespace LibreHardwareMonitor.UI // portCancelButton // this.portCancelButton.DialogResult = System.Windows.Forms.DialogResult.Cancel; - this.portCancelButton.Location = new System.Drawing.Point(162, 137); + this.portCancelButton.Location = new System.Drawing.Point(162, 162); this.portCancelButton.Name = "portCancelButton"; this.portCancelButton.Size = new System.Drawing.Size(75, 23); this.portCancelButton.TabIndex = 1; @@ -71,7 +73,7 @@ namespace LibreHardwareMonitor.UI // label1 // this.label1.AutoSize = true; - this.label1.Location = new System.Drawing.Point(13, 106); + this.label1.Location = new System.Drawing.Point(13, 131); this.label1.Name = "label1"; this.label1.Size = new System.Drawing.Size(377, 13); this.label1.TabIndex = 3; @@ -81,16 +83,16 @@ namespace LibreHardwareMonitor.UI // label2 // this.label2.AutoSize = true; - this.label2.Location = new System.Drawing.Point(13, 9); + this.label2.Location = new System.Drawing.Point(13, 34); this.label2.Name = "label2"; - this.label2.Size = new System.Drawing.Size(193, 13); + this.label2.Size = new System.Drawing.Size(190, 13); this.label2.TabIndex = 4; - this.label2.Text = "Port number for the remote web server:"; + this.label2.Text = "Port number for the remote web server:"; // // label3 // this.label3.AutoSize = true; - this.label3.Location = new System.Drawing.Point(13, 39); + this.label3.Location = new System.Drawing.Point(13, 64); this.label3.Name = "label3"; this.label3.Size = new System.Drawing.Size(443, 13); this.label3.TabIndex = 5; @@ -100,7 +102,7 @@ namespace LibreHardwareMonitor.UI // label4 // this.label4.AutoSize = true; - this.label4.Location = new System.Drawing.Point(13, 62); + this.label4.Location = new System.Drawing.Point(13, 86); this.label4.Name = "label4"; this.label4.Size = new System.Drawing.Size(262, 13); this.label4.TabIndex = 6; @@ -109,7 +111,7 @@ namespace LibreHardwareMonitor.UI // webServerLinkLabel // this.webServerLinkLabel.AutoSize = true; - this.webServerLinkLabel.Location = new System.Drawing.Point(269, 62); + this.webServerLinkLabel.Location = new System.Drawing.Point(269, 86); this.webServerLinkLabel.Name = "webServerLinkLabel"; this.webServerLinkLabel.Size = new System.Drawing.Size(55, 13); this.webServerLinkLabel.TabIndex = 7; @@ -119,7 +121,7 @@ namespace LibreHardwareMonitor.UI // // portNumericUpDn // - this.portNumericUpDn.Location = new System.Drawing.Point(208, 7); + this.portNumericUpDn.Location = new System.Drawing.Point(208, 32); this.portNumericUpDn.Maximum = new decimal(new int[] { 20000, 0, @@ -144,18 +146,40 @@ namespace LibreHardwareMonitor.UI // label5 // this.label5.AutoSize = true; - this.label5.Location = new System.Drawing.Point(13, 84); + this.label5.Location = new System.Drawing.Point(13, 109); this.label5.Name = "label5"; this.label5.Size = new System.Drawing.Size(304, 13); this.label5.TabIndex = 9; this.label5.Text = "You will have to start the server by clicking Run from the menu."; // - // PortForm + // interfaceLabel + // + this.interfaceLabel.AutoSize = true; + this.interfaceLabel.Location = new System.Drawing.Point(14, 8); + this.interfaceLabel.Name = "interfaceLabel"; + this.interfaceLabel.Size = new System.Drawing.Size(217, 13); + this.interfaceLabel.TabIndex = 10; + this.interfaceLabel.Text = "Network interface for the remote web server:"; + // + // interfaceComboBox + // + this.interfaceComboBox.DropDownStyle = System.Windows.Forms.ComboBoxStyle.DropDownList; + this.interfaceComboBox.FormattingEnabled = true; + this.interfaceComboBox.Location = new System.Drawing.Point(233, 6); + this.interfaceComboBox.Margin = new System.Windows.Forms.Padding(2); + this.interfaceComboBox.Name = "interfaceComboBox"; + this.interfaceComboBox.Size = new System.Drawing.Size(221, 21); + this.interfaceComboBox.TabIndex = 11; + this.interfaceComboBox.SelectedIndexChanged += new System.EventHandler(this.interfaceComboBox_SelectedIndexChanged); + // + // InterfacePortForm // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.CancelButton = this.portCancelButton; - this.ClientSize = new System.Drawing.Size(466, 170); + this.ClientSize = new System.Drawing.Size(466, 202); + this.Controls.Add(this.interfaceComboBox); + this.Controls.Add(this.interfaceLabel); this.Controls.Add(this.label5); this.Controls.Add(this.portNumericUpDn); this.Controls.Add(this.webServerLinkLabel); @@ -169,7 +193,7 @@ namespace LibreHardwareMonitor.UI this.Icon = ((System.Drawing.Icon)(resources.GetObject("$this.Icon"))); this.MaximizeBox = false; this.MinimizeBox = false; - this.Name = "PortForm"; + this.Name = "InterfacePortForm"; this.SizeGripStyle = System.Windows.Forms.SizeGripStyle.Hide; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterParent; this.Text = "Set Port"; @@ -191,5 +215,7 @@ namespace LibreHardwareMonitor.UI private System.Windows.Forms.LinkLabel webServerLinkLabel; private System.Windows.Forms.NumericUpDown portNumericUpDn; private System.Windows.Forms.Label label5; + private System.Windows.Forms.Label interfaceLabel; + private System.Windows.Forms.ComboBox interfaceComboBox; } } diff --git a/LibreHardwareMonitor/UI/PortForm.cs b/LibreHardwareMonitor/UI/InterfacePortForm.cs similarity index 57% rename from LibreHardwareMonitor/UI/PortForm.cs rename to LibreHardwareMonitor/UI/InterfacePortForm.cs index e30d57b..c02d6c8 100644 --- a/LibreHardwareMonitor/UI/PortForm.cs +++ b/LibreHardwareMonitor/UI/InterfacePortForm.cs @@ -9,36 +9,50 @@ using System.Windows.Forms; using System.Net; using System.Net.Sockets; using System.Diagnostics; +using static System.Windows.Forms.VisualStyles.VisualStyleElement; +using System.Net.NetworkInformation; namespace LibreHardwareMonitor.UI; -public partial class PortForm : Form +public partial class InterfacePortForm : Form { private readonly MainForm _parent; - private readonly string _localIP; - public PortForm(MainForm m) + private string _localIP; + + public InterfacePortForm(MainForm m) { InitializeComponent(); _parent = m; - _localIP = GetLocalIP(); + _localIP = LoadNetworkInterfaces(_parent.Server.ListenerIp); } - private void PortTextBox_TextChanged(object sender, EventArgs e) - { - - } - - private string GetLocalIP() + private string LoadNetworkInterfaces(string selectedListenerIp) { IPHostEntry host; - string localIP = "?"; + interfaceComboBox.Items.Clear(); host = Dns.GetHostEntry(Dns.GetHostName()); foreach (IPAddress ip in host.AddressList) { if (ip.AddressFamily == AddressFamily.InterNetwork) - localIP = ip.ToString(); + interfaceComboBox.Items.Add(ip.ToString()); } - return localIP; + // select the last one by default to match the existing behavior + if (interfaceComboBox.Items.Count > 0) + { + interfaceComboBox.SelectedIndex = interfaceComboBox.Items.Count - 1; + } else + { + // default to ? just like previous version + interfaceComboBox.Items.Add("?"); + interfaceComboBox.SelectedIndex = 0; + } + // check to see if the selected listener IP is in our list. + if (interfaceComboBox.Items.Contains(selectedListenerIp)) + { + // default it to the previously selected IP. + interfaceComboBox.SelectedItem = selectedListenerIp; + } + return interfaceComboBox.SelectedItem as string; } private void PortNumericUpDn_ValueChanged(object sender, EventArgs e) @@ -52,6 +66,7 @@ public partial class PortForm : Form private void PortOKButton_Click(object sender, EventArgs e) { _parent.Server.ListenerPort = (int)portNumericUpDn.Value; + _parent.Server.ListenerIp = _localIP; Close(); } @@ -62,6 +77,7 @@ public partial class PortForm : Form private void PortForm_Load(object sender, EventArgs e) { + interfaceComboBox.SelectedValue = _parent.Server.ListenerIp; portNumericUpDn.Value = _parent.Server.ListenerPort; PortNumericUpDn_ValueChanged(null, null); } @@ -79,4 +95,11 @@ public partial class PortForm : Form { PortNumericUpDn_ValueChanged(null, null); } -} \ No newline at end of file + + private void interfaceComboBox_SelectedIndexChanged(object sender, EventArgs e) + { + + _localIP = interfaceComboBox.SelectedItem as string; + PortNumericUpDn_ValueChanged(null, null); + } +} diff --git a/LibreHardwareMonitor/UI/PortForm.resx b/LibreHardwareMonitor/UI/InterfacePortForm.resx similarity index 100% rename from LibreHardwareMonitor/UI/PortForm.resx rename to LibreHardwareMonitor/UI/InterfacePortForm.resx diff --git a/LibreHardwareMonitor/UI/MainForm.Designer.cs b/LibreHardwareMonitor/UI/MainForm.Designer.cs index 1291b25..e7785cd 100644 --- a/LibreHardwareMonitor/UI/MainForm.Designer.cs +++ b/LibreHardwareMonitor/UI/MainForm.Designer.cs @@ -138,7 +138,7 @@ namespace LibreHardwareMonitor.UI this.webMenuItemSeparator = new System.Windows.Forms.ToolStripSeparator(); this.webMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.runWebServerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); - this.serverPortMenuItem = new System.Windows.Forms.ToolStripMenuItem(); + this.serverInterfacePortMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.authWebServerMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.helpMenuItem = new System.Windows.Forms.ToolStripMenuItem(); this.aboutMenuItem = new System.Windows.Forms.ToolStripMenuItem(); @@ -938,7 +938,7 @@ namespace LibreHardwareMonitor.UI // this.webMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] { this.runWebServerMenuItem, - this.serverPortMenuItem, + this.serverInterfacePortMenuItem, this.authWebServerMenuItem}); this.webMenuItem.Name = "webMenuItem"; this.webMenuItem.Size = new System.Drawing.Size(221, 22); @@ -952,10 +952,10 @@ namespace LibreHardwareMonitor.UI // // serverPortMenuItem // - this.serverPortMenuItem.Name = "serverPortMenuItem"; - this.serverPortMenuItem.Size = new System.Drawing.Size(153, 22); - this.serverPortMenuItem.Text = "Port"; - this.serverPortMenuItem.Click += new System.EventHandler(this.ServerPortMenuItem_Click); + this.serverInterfacePortMenuItem.Name = "serverInterfacePortMenuItem"; + this.serverInterfacePortMenuItem.Size = new System.Drawing.Size(153, 22); + this.serverInterfacePortMenuItem.Text = "Interface / Port"; + this.serverInterfacePortMenuItem.Click += new System.EventHandler(this.ServerInterfacePortMenuItem_Click); // // authWebServerMenuItem // @@ -1141,7 +1141,7 @@ namespace LibreHardwareMonitor.UI private ToolStripRadioButtonMenuItem splitPanelFixedSensorScalingMenuItem; private System.Windows.Forms.ToolStripMenuItem webMenuItem; private System.Windows.Forms.ToolStripMenuItem runWebServerMenuItem; - private System.Windows.Forms.ToolStripMenuItem serverPortMenuItem; + private System.Windows.Forms.ToolStripMenuItem serverInterfacePortMenuItem; private System.Windows.Forms.ToolStripMenuItem menuItemFileHardware; private System.Windows.Forms.ToolStripMenuItem mainboardMenuItem; private System.Windows.Forms.ToolStripMenuItem cpuMenuItem; diff --git a/LibreHardwareMonitor/UI/MainForm.cs b/LibreHardwareMonitor/UI/MainForm.cs index f1b9a13..45bacab 100644 --- a/LibreHardwareMonitor/UI/MainForm.cs +++ b/LibreHardwareMonitor/UI/MainForm.cs @@ -244,6 +244,7 @@ public sealed partial class MainForm : Form fahrenheitMenuItem.Checked = !celsiusMenuItem.Checked; Server = new HttpServer(_root, + _settings.GetValue("listenerIp", "?"), _settings.GetValue("listenerPort", 8085), _settings.GetValue("authenticationEnabled", false), _settings.GetValue("authenticationUserName", ""), @@ -878,6 +879,7 @@ public sealed partial class MainForm : Form foreach (TreeColumn column in treeView.Columns) _settings.SetValue("treeView.Columns." + column.Header + ".Width", column.Width); + _settings.SetValue("listenerIp", Server.ListenerIp); _settings.SetValue("listenerPort", Server.ListenerPort); _settings.SetValue("authenticationEnabled", Server.AuthEnabled); _settings.SetValue("authenticationUserName", Server.UserName); @@ -1296,9 +1298,9 @@ public sealed partial class MainForm : Form } } - private void ServerPortMenuItem_Click(object sender, EventArgs e) + private void ServerInterfacePortMenuItem_Click(object sender, EventArgs e) { - new PortForm(this).ShowDialog(); + new InterfacePortForm(this).ShowDialog(); } private void AuthWebServerMenuItem_Click(object sender, EventArgs e) diff --git a/LibreHardwareMonitor/Utilities/HttpServer.cs b/LibreHardwareMonitor/Utilities/HttpServer.cs index 494f6c6..a975ffa 100644 --- a/LibreHardwareMonitor/Utilities/HttpServer.cs +++ b/LibreHardwareMonitor/Utilities/HttpServer.cs @@ -1,4 +1,4 @@ -// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. +// This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. // If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/. // Copyright (C) LibreHardwareMonitor and Contributors. // Partial Copyright (C) Michael Möller and Contributors. @@ -31,9 +31,10 @@ public class HttpServer private readonly Node _root; private Thread _listenerThread; - public HttpServer(Node node, int port, bool authEnabled = false, string userName = "", string password = "") + public HttpServer(Node node, string ip, int port, bool authEnabled = false, string userName = "", string password = "") { _root = node; + ListenerIp = ip; ListenerPort = port; AuthEnabled = authEnabled; UserName = userName; @@ -60,6 +61,8 @@ public class HttpServer public bool AuthEnabled { get; set; } + public string ListenerIp { get; set; } + public int ListenerPort { get; set; } public string Password @@ -87,7 +90,26 @@ public class HttpServer if (_listener.IsListening) return true; - string prefix = "http://+:" + ListenerPort + "/"; + // validate that the selected IP exists (it could have been previously selected before switching networks) + IPHostEntry host = Dns.GetHostEntry(Dns.GetHostName()); + bool ipFound = false; + foreach (IPAddress ip in host.AddressList) + { + if (ListenerIp == ip.ToString()) + { + ipFound = true; + break; + } + } + + if (!ipFound) + { + // default to behavior of previous version if we don't know what interface to use. + ListenerIp = "+"; + } + + string prefix = "http://" + ListenerIp + ":" + ListenerPort + "/"; + _listener.Prefixes.Clear(); _listener.Prefixes.Add(prefix); _listener.Realm = "Libre Hardware Monitor";