mirror of
https://github.com/Ylianst/MeshCentralRouter
synced 2025-12-06 00:13:33 +00:00
Added websocket deflate support to remote desktop.
This commit is contained in:
@@ -30,8 +30,8 @@ namespace MeshCentralRouter
|
|||||||
private bool remotepause = true;
|
private bool remotepause = true;
|
||||||
private Bitmap desktop = null;
|
private Bitmap desktop = null;
|
||||||
private Graphics desktopGraphics = null;
|
private Graphics desktopGraphics = null;
|
||||||
private uint screenWidth = 0;
|
public uint screenWidth = 0;
|
||||||
private uint screenHeight = 0;
|
public uint screenHeight = 0;
|
||||||
private Pen RedPen = new Pen(System.Drawing.Color.Red);
|
private Pen RedPen = new Pen(System.Drawing.Color.Red);
|
||||||
private Font DebugFont = new Font(FontFamily.GenericSansSerif, 14);
|
private Font DebugFont = new Font(FontFamily.GenericSansSerif, 14);
|
||||||
private int compressionlevel = 60; // 60% compression
|
private int compressionlevel = 60; // 60% compression
|
||||||
@@ -502,12 +502,15 @@ namespace MeshCentralRouter
|
|||||||
public void Send(BinaryWriter bw)
|
public void Send(BinaryWriter bw)
|
||||||
{
|
{
|
||||||
//if (state == ConnectState.Disconnected) { RecycleBinaryWriter(bw); return; }
|
//if (state == ConnectState.Disconnected) { RecycleBinaryWriter(bw); return; }
|
||||||
try
|
//try
|
||||||
|
//{
|
||||||
|
if ((parent != null) && (parent.wc != null))
|
||||||
{
|
{
|
||||||
parent.wc.SendBinary(((MemoryStream)bw.BaseStream).GetBuffer(), 0, (int)((MemoryStream)bw.BaseStream).Length);
|
parent.wc.SendBinary(((MemoryStream)bw.BaseStream).GetBuffer(), 0, (int)((MemoryStream)bw.BaseStream).Length);
|
||||||
bytesent += (int)((MemoryStream)bw.BaseStream).Length;
|
bytesent += (int)((MemoryStream)bw.BaseStream).Length;
|
||||||
}
|
}
|
||||||
catch (Exception) { }
|
//}
|
||||||
|
//catch (Exception) { }
|
||||||
RecycleBinaryWriter(bw);
|
RecycleBinaryWriter(bw);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
184
KVMViewer.Designer.cs
generated
184
KVMViewer.Designer.cs
generated
@@ -46,23 +46,6 @@ namespace MeshCentralRouter
|
|||||||
{
|
{
|
||||||
this.components = new System.ComponentModel.Container();
|
this.components = new System.ComponentModel.Container();
|
||||||
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KVMViewer));
|
System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(KVMViewer));
|
||||||
this.mainMenu = new System.Windows.Forms.MenuStrip();
|
|
||||||
this.toolStripMenuItem2 = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.MenuItemConnect = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.MenuItemDisconnect = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripMenuItem5 = new System.Windows.Forms.ToolStripSeparator();
|
|
||||||
this.settingsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripMenuItem1 = new System.Windows.Forms.ToolStripSeparator();
|
|
||||||
this.MenuItemExit = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.viewToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.zoomtofitToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.statusToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.debugToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.toolStripMenuItem6 = new System.Windows.Forms.ToolStripSeparator();
|
|
||||||
this.refreshToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.pauseToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.actionsToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.sendCtrlAltDelToolStripMenuItem = new System.Windows.Forms.ToolStripMenuItem();
|
|
||||||
this.mainStatusStrip = new System.Windows.Forms.StatusStrip();
|
this.mainStatusStrip = new System.Windows.Forms.StatusStrip();
|
||||||
this.mainToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
|
this.mainToolStripStatusLabel = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
|
this.toolStripStatusLabel1 = new System.Windows.Forms.ToolStripStatusLabel();
|
||||||
@@ -73,133 +56,13 @@ namespace MeshCentralRouter
|
|||||||
this.zoomButton = new System.Windows.Forms.Button();
|
this.zoomButton = new System.Windows.Forms.Button();
|
||||||
this.cadButton = new System.Windows.Forms.Button();
|
this.cadButton = new System.Windows.Forms.Button();
|
||||||
this.connectButton = new System.Windows.Forms.Button();
|
this.connectButton = new System.Windows.Forms.Button();
|
||||||
|
this.consoleMessage = new System.Windows.Forms.Label();
|
||||||
this.resizeKvmControl = new MeshCentralRouter.KVMResizeControl();
|
this.resizeKvmControl = new MeshCentralRouter.KVMResizeControl();
|
||||||
this.mainMenu.SuspendLayout();
|
this.consoleTimer = new System.Windows.Forms.Timer(this.components);
|
||||||
this.mainStatusStrip.SuspendLayout();
|
this.mainStatusStrip.SuspendLayout();
|
||||||
this.topPanel.SuspendLayout();
|
this.topPanel.SuspendLayout();
|
||||||
this.SuspendLayout();
|
this.SuspendLayout();
|
||||||
//
|
//
|
||||||
// mainMenu
|
|
||||||
//
|
|
||||||
this.mainMenu.BackColor = System.Drawing.SystemColors.Menu;
|
|
||||||
this.mainMenu.Items.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.toolStripMenuItem2,
|
|
||||||
this.viewToolStripMenuItem,
|
|
||||||
this.actionsToolStripMenuItem});
|
|
||||||
resources.ApplyResources(this.mainMenu, "mainMenu");
|
|
||||||
this.mainMenu.Name = "mainMenu";
|
|
||||||
//
|
|
||||||
// toolStripMenuItem2
|
|
||||||
//
|
|
||||||
this.toolStripMenuItem2.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.MenuItemConnect,
|
|
||||||
this.MenuItemDisconnect,
|
|
||||||
this.toolStripMenuItem5,
|
|
||||||
this.settingsToolStripMenuItem,
|
|
||||||
this.toolStripMenuItem1,
|
|
||||||
this.MenuItemExit});
|
|
||||||
this.toolStripMenuItem2.Name = "toolStripMenuItem2";
|
|
||||||
resources.ApplyResources(this.toolStripMenuItem2, "toolStripMenuItem2");
|
|
||||||
this.toolStripMenuItem2.DropDownOpening += new System.EventHandler(this.toolStripMenuItem2_DropDownOpening);
|
|
||||||
//
|
|
||||||
// MenuItemConnect
|
|
||||||
//
|
|
||||||
this.MenuItemConnect.Name = "MenuItemConnect";
|
|
||||||
resources.ApplyResources(this.MenuItemConnect, "MenuItemConnect");
|
|
||||||
this.MenuItemConnect.Click += new System.EventHandler(this.MenuItemConnect_Click);
|
|
||||||
//
|
|
||||||
// MenuItemDisconnect
|
|
||||||
//
|
|
||||||
this.MenuItemDisconnect.Name = "MenuItemDisconnect";
|
|
||||||
resources.ApplyResources(this.MenuItemDisconnect, "MenuItemDisconnect");
|
|
||||||
this.MenuItemDisconnect.Click += new System.EventHandler(this.MenuItemDisconnect_Click);
|
|
||||||
//
|
|
||||||
// toolStripMenuItem5
|
|
||||||
//
|
|
||||||
this.toolStripMenuItem5.Name = "toolStripMenuItem5";
|
|
||||||
resources.ApplyResources(this.toolStripMenuItem5, "toolStripMenuItem5");
|
|
||||||
//
|
|
||||||
// settingsToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.settingsToolStripMenuItem.Name = "settingsToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.settingsToolStripMenuItem, "settingsToolStripMenuItem");
|
|
||||||
this.settingsToolStripMenuItem.Click += new System.EventHandler(this.settingsToolStripMenuItem_Click);
|
|
||||||
//
|
|
||||||
// toolStripMenuItem1
|
|
||||||
//
|
|
||||||
this.toolStripMenuItem1.Name = "toolStripMenuItem1";
|
|
||||||
resources.ApplyResources(this.toolStripMenuItem1, "toolStripMenuItem1");
|
|
||||||
//
|
|
||||||
// MenuItemExit
|
|
||||||
//
|
|
||||||
this.MenuItemExit.Name = "MenuItemExit";
|
|
||||||
resources.ApplyResources(this.MenuItemExit, "MenuItemExit");
|
|
||||||
this.MenuItemExit.Click += new System.EventHandler(this.MenuItemExit_Click);
|
|
||||||
//
|
|
||||||
// viewToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.viewToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.zoomtofitToolStripMenuItem,
|
|
||||||
this.statusToolStripMenuItem,
|
|
||||||
this.debugToolStripMenuItem,
|
|
||||||
this.toolStripMenuItem6,
|
|
||||||
this.refreshToolStripMenuItem,
|
|
||||||
this.pauseToolStripMenuItem});
|
|
||||||
this.viewToolStripMenuItem.Name = "viewToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.viewToolStripMenuItem, "viewToolStripMenuItem");
|
|
||||||
this.viewToolStripMenuItem.DropDownOpening += new System.EventHandler(this.viewToolStripMenuItem_DropDownOpening);
|
|
||||||
//
|
|
||||||
// zoomtofitToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.zoomtofitToolStripMenuItem.CheckOnClick = true;
|
|
||||||
this.zoomtofitToolStripMenuItem.Name = "zoomtofitToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.zoomtofitToolStripMenuItem, "zoomtofitToolStripMenuItem");
|
|
||||||
this.zoomtofitToolStripMenuItem.CheckStateChanged += new System.EventHandler(this.zoomtofitToolStripMenuItem_CheckStateChanged);
|
|
||||||
//
|
|
||||||
// statusToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.statusToolStripMenuItem.Checked = true;
|
|
||||||
this.statusToolStripMenuItem.CheckOnClick = true;
|
|
||||||
this.statusToolStripMenuItem.CheckState = System.Windows.Forms.CheckState.Checked;
|
|
||||||
this.statusToolStripMenuItem.Name = "statusToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.statusToolStripMenuItem, "statusToolStripMenuItem");
|
|
||||||
this.statusToolStripMenuItem.CheckedChanged += new System.EventHandler(this.statusToolStripMenuItem_CheckedChanged);
|
|
||||||
//
|
|
||||||
// debugToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.debugToolStripMenuItem.CheckOnClick = true;
|
|
||||||
this.debugToolStripMenuItem.Name = "debugToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.debugToolStripMenuItem, "debugToolStripMenuItem");
|
|
||||||
this.debugToolStripMenuItem.Click += new System.EventHandler(this.debugToolStripMenuItem_Click);
|
|
||||||
//
|
|
||||||
// toolStripMenuItem6
|
|
||||||
//
|
|
||||||
this.toolStripMenuItem6.Name = "toolStripMenuItem6";
|
|
||||||
resources.ApplyResources(this.toolStripMenuItem6, "toolStripMenuItem6");
|
|
||||||
//
|
|
||||||
// refreshToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.refreshToolStripMenuItem.Name = "refreshToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.refreshToolStripMenuItem, "refreshToolStripMenuItem");
|
|
||||||
//
|
|
||||||
// pauseToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.pauseToolStripMenuItem.Name = "pauseToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.pauseToolStripMenuItem, "pauseToolStripMenuItem");
|
|
||||||
//
|
|
||||||
// actionsToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.actionsToolStripMenuItem.DropDownItems.AddRange(new System.Windows.Forms.ToolStripItem[] {
|
|
||||||
this.sendCtrlAltDelToolStripMenuItem});
|
|
||||||
this.actionsToolStripMenuItem.Name = "actionsToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.actionsToolStripMenuItem, "actionsToolStripMenuItem");
|
|
||||||
//
|
|
||||||
// sendCtrlAltDelToolStripMenuItem
|
|
||||||
//
|
|
||||||
this.sendCtrlAltDelToolStripMenuItem.Name = "sendCtrlAltDelToolStripMenuItem";
|
|
||||||
resources.ApplyResources(this.sendCtrlAltDelToolStripMenuItem, "sendCtrlAltDelToolStripMenuItem");
|
|
||||||
this.sendCtrlAltDelToolStripMenuItem.Click += new System.EventHandler(this.sendCtrlAltDelToolStripMenuItem_Click);
|
|
||||||
//
|
|
||||||
// mainStatusStrip
|
// mainStatusStrip
|
||||||
//
|
//
|
||||||
this.mainStatusStrip.BackColor = System.Drawing.SystemColors.Menu;
|
this.mainStatusStrip.BackColor = System.Drawing.SystemColors.Menu;
|
||||||
@@ -277,6 +140,12 @@ namespace MeshCentralRouter
|
|||||||
this.connectButton.UseVisualStyleBackColor = true;
|
this.connectButton.UseVisualStyleBackColor = true;
|
||||||
this.connectButton.Click += new System.EventHandler(this.MenuItemDisconnect_Click);
|
this.connectButton.Click += new System.EventHandler(this.MenuItemDisconnect_Click);
|
||||||
//
|
//
|
||||||
|
// consoleMessage
|
||||||
|
//
|
||||||
|
resources.ApplyResources(this.consoleMessage, "consoleMessage");
|
||||||
|
this.consoleMessage.ForeColor = System.Drawing.Color.Black;
|
||||||
|
this.consoleMessage.Name = "consoleMessage";
|
||||||
|
//
|
||||||
// resizeKvmControl
|
// resizeKvmControl
|
||||||
//
|
//
|
||||||
this.resizeKvmControl.BackColor = System.Drawing.Color.Gray;
|
this.resizeKvmControl.BackColor = System.Drawing.Color.Gray;
|
||||||
@@ -286,21 +155,24 @@ namespace MeshCentralRouter
|
|||||||
this.resizeKvmControl.StateChanged += new System.EventHandler(this.kvmControl_StateChanged);
|
this.resizeKvmControl.StateChanged += new System.EventHandler(this.kvmControl_StateChanged);
|
||||||
this.resizeKvmControl.DisplaysReceived += new System.EventHandler(this.resizeKvmControl_DisplaysReceived);
|
this.resizeKvmControl.DisplaysReceived += new System.EventHandler(this.resizeKvmControl_DisplaysReceived);
|
||||||
//
|
//
|
||||||
|
// consoleTimer
|
||||||
|
//
|
||||||
|
this.consoleTimer.Interval = 5000;
|
||||||
|
this.consoleTimer.Tick += new System.EventHandler(this.consoleTimer_Tick);
|
||||||
|
//
|
||||||
// KVMViewer
|
// KVMViewer
|
||||||
//
|
//
|
||||||
resources.ApplyResources(this, "$this");
|
resources.ApplyResources(this, "$this");
|
||||||
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font;
|
||||||
this.BackColor = System.Drawing.Color.Gray;
|
this.BackColor = System.Drawing.Color.Gray;
|
||||||
|
this.Controls.Add(this.consoleMessage);
|
||||||
this.Controls.Add(this.resizeKvmControl);
|
this.Controls.Add(this.resizeKvmControl);
|
||||||
this.Controls.Add(this.topPanel);
|
this.Controls.Add(this.topPanel);
|
||||||
this.Controls.Add(this.mainStatusStrip);
|
this.Controls.Add(this.mainStatusStrip);
|
||||||
this.Controls.Add(this.mainMenu);
|
|
||||||
this.Name = "KVMViewer";
|
this.Name = "KVMViewer";
|
||||||
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing);
|
this.FormClosing += new System.Windows.Forms.FormClosingEventHandler(this.Main_FormClosing);
|
||||||
this.Load += new System.EventHandler(this.MainForm_Load);
|
this.Load += new System.EventHandler(this.MainForm_Load);
|
||||||
this.Resize += new System.EventHandler(this.MainForm_Resize);
|
this.Resize += new System.EventHandler(this.MainForm_Resize);
|
||||||
this.mainMenu.ResumeLayout(false);
|
|
||||||
this.mainMenu.PerformLayout();
|
|
||||||
this.mainStatusStrip.ResumeLayout(false);
|
this.mainStatusStrip.ResumeLayout(false);
|
||||||
this.mainStatusStrip.PerformLayout();
|
this.mainStatusStrip.PerformLayout();
|
||||||
this.topPanel.ResumeLayout(false);
|
this.topPanel.ResumeLayout(false);
|
||||||
@@ -310,43 +182,19 @@ namespace MeshCentralRouter
|
|||||||
}
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
private MenuStrip mainMenu;
|
|
||||||
private ToolStripMenuItem toolStripMenuItem2;
|
|
||||||
private ToolStripMenuItem MenuItemConnect;
|
|
||||||
private ToolStripMenuItem MenuItemExit;
|
|
||||||
private ToolStripMenuItem MenuItemDisconnect;
|
|
||||||
private StatusStrip mainStatusStrip;
|
private StatusStrip mainStatusStrip;
|
||||||
private ToolStripStatusLabel mainToolStripStatusLabel;
|
private ToolStripStatusLabel mainToolStripStatusLabel;
|
||||||
private Timer updateTimer;
|
private Timer updateTimer;
|
||||||
private ToolStripSeparator toolStripMenuItem1;
|
|
||||||
private ToolStripMenuItem viewToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem statusToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem debugToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem settingsToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem refreshToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem pauseToolStripMenuItem;
|
|
||||||
private ToolStripSeparator toolStripMenuItem5;
|
|
||||||
private KVMResizeControl resizeKvmControl;
|
private KVMResizeControl resizeKvmControl;
|
||||||
private ToolStripStatusLabel toolStripStatusLabel1;
|
private ToolStripStatusLabel toolStripStatusLabel1;
|
||||||
private ToolStripMenuItem zoomtofitToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem actionsToolStripMenuItem;
|
|
||||||
private ToolStripMenuItem sendCtrlAltDelToolStripMenuItem;
|
|
||||||
private Panel topPanel;
|
private Panel topPanel;
|
||||||
private Button connectButton;
|
private Button connectButton;
|
||||||
private Button cadButton;
|
private Button cadButton;
|
||||||
private Button zoomButton;
|
private Button zoomButton;
|
||||||
private Button settingsButton;
|
private Button settingsButton;
|
||||||
private ComboBox displaySelectComboBox;
|
private ComboBox displaySelectComboBox;
|
||||||
private ToolStripSeparator toolStripMenuItem6;
|
private Label consoleMessage;
|
||||||
|
private Timer consoleTimer;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
112
KVMViewer.cs
112
KVMViewer.cs
@@ -15,15 +15,11 @@ limitations under the License.
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
using System;
|
using System;
|
||||||
using System.IO;
|
|
||||||
using System.Text;
|
|
||||||
using System.Drawing;
|
using System.Drawing;
|
||||||
using System.Net.Sockets;
|
|
||||||
using System.Net.Security;
|
|
||||||
using System.Windows.Forms;
|
using System.Windows.Forms;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Security.Cryptography.X509Certificates;
|
using System.Web.Script.Serialization;
|
||||||
using Microsoft.Win32;
|
using Microsoft.Win32;
|
||||||
|
|
||||||
namespace MeshCentralRouter
|
namespace MeshCentralRouter
|
||||||
@@ -36,7 +32,9 @@ namespace MeshCentralRouter
|
|||||||
private int state = 0;
|
private int state = 0;
|
||||||
private RandomNumberGenerator rand = RandomNumberGenerator.Create();
|
private RandomNumberGenerator rand = RandomNumberGenerator.Create();
|
||||||
private string randomIdHex = null;
|
private string randomIdHex = null;
|
||||||
|
private bool sessionIsRecorded = false;
|
||||||
public webSocketClient wc = null;
|
public webSocketClient wc = null;
|
||||||
|
public Dictionary<string, int> userSessions = null;
|
||||||
|
|
||||||
public KVMViewer(MeshCentralServer server, NodeClass node)
|
public KVMViewer(MeshCentralServer server, NodeClass node)
|
||||||
{
|
{
|
||||||
@@ -46,11 +44,17 @@ namespace MeshCentralRouter
|
|||||||
this.server = server;
|
this.server = server;
|
||||||
kvmControl = resizeKvmControl.KVM;
|
kvmControl = resizeKvmControl.KVM;
|
||||||
kvmControl.parent = this;
|
kvmControl.parent = this;
|
||||||
|
kvmControl.DesktopSizeChanged += KvmControl_DesktopSizeChanged;
|
||||||
resizeKvmControl.ZoomToFit = true;
|
resizeKvmControl.ZoomToFit = true;
|
||||||
UpdateStatus();
|
UpdateStatus();
|
||||||
this.MouseWheel += MainForm_MouseWheel;
|
this.MouseWheel += MainForm_MouseWheel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void KvmControl_DesktopSizeChanged(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
kvmControl.Visible = true;
|
||||||
|
}
|
||||||
|
|
||||||
private void Server_onStateChanged(int state)
|
private void Server_onStateChanged(int state)
|
||||||
{
|
{
|
||||||
UpdateStatus();
|
UpdateStatus();
|
||||||
@@ -65,7 +69,6 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
private void MainForm_Load(object sender, EventArgs e)
|
private void MainForm_Load(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
this.Controls.Remove(mainMenu);
|
|
||||||
this.Size = new Size(820, 480);
|
this.Size = new Size(820, 480);
|
||||||
resizeKvmControl.CenterKvmControl(false);
|
resizeKvmControl.CenterKvmControl(false);
|
||||||
topPanel.Visible = true;
|
topPanel.Visible = true;
|
||||||
@@ -113,6 +116,7 @@ namespace MeshCentralRouter
|
|||||||
case webSocketClient.ConnectionStates.Connecting:
|
case webSocketClient.ConnectionStates.Connecting:
|
||||||
{
|
{
|
||||||
state = 1;
|
state = 1;
|
||||||
|
displayMessage(null);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case webSocketClient.ConnectionStates.Connected:
|
case webSocketClient.ConnectionStates.Connected:
|
||||||
@@ -120,6 +124,7 @@ namespace MeshCentralRouter
|
|||||||
state = 2;
|
state = 2;
|
||||||
string u = "*/meshrelay.ashx?p=2&nodeid=" + node.nodeid + "&id=" + randomIdHex + "&rauth=" + server.rauthCookie;
|
string u = "*/meshrelay.ashx?p=2&nodeid=" + node.nodeid + "&id=" + randomIdHex + "&rauth=" + server.rauthCookie;
|
||||||
server.sendCommand("{ \"action\": \"msg\", \"type\": \"tunnel\", \"nodeid\": \"" + node.nodeid + "\", \"value\": \"" + u.ToString() + "\", \"usage\": 2 }");
|
server.sendCommand("{ \"action\": \"msg\", \"type\": \"tunnel\", \"nodeid\": \"" + node.nodeid + "\", \"value\": \"" + u.ToString() + "\", \"usage\": 2 }");
|
||||||
|
displayMessage(null);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -130,15 +135,50 @@ namespace MeshCentralRouter
|
|||||||
{
|
{
|
||||||
if ((state == 2) && ((data == "c") || (data == "cr")))
|
if ((state == 2) && ((data == "c") || (data == "cr")))
|
||||||
{
|
{
|
||||||
|
if (data == "cr") { sessionIsRecorded = true; }
|
||||||
state = 3;
|
state = 3;
|
||||||
kvmControl.Send("2");
|
kvmControl.Send("2");
|
||||||
kvmControl.SendCompressionLevel();
|
kvmControl.SendCompressionLevel();
|
||||||
kvmControl.SendPause(false);
|
kvmControl.SendPause(false);
|
||||||
kvmControl.SendRefresh();
|
kvmControl.SendRefresh();
|
||||||
UpdateStatus();
|
UpdateStatus();
|
||||||
|
displayMessage(null);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
if (state != 3) return;
|
if (state != 3) return;
|
||||||
|
|
||||||
|
// Parse the received JSON
|
||||||
|
Dictionary<string, object> jsonAction = new Dictionary<string, object>();
|
||||||
|
jsonAction = new JavaScriptSerializer().Deserialize<Dictionary<string, object>>(data);
|
||||||
|
if ((jsonAction == null) || (jsonAction.ContainsKey("type") == false) || (jsonAction["type"].GetType() != typeof(string))) return;
|
||||||
|
|
||||||
|
string action = jsonAction["type"].ToString();
|
||||||
|
switch (action)
|
||||||
|
{
|
||||||
|
case "metadata":
|
||||||
|
{
|
||||||
|
if ((jsonAction.ContainsKey("users") == false) || (jsonAction["users"] == null)) return;
|
||||||
|
Dictionary <string, object> usersex = (Dictionary<string, object>)jsonAction["users"];
|
||||||
|
userSessions = new Dictionary<string, int>();
|
||||||
|
foreach (string user in usersex.Keys) { userSessions.Add(user, (int)usersex[user]); }
|
||||||
|
UpdateStatus();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case "console":
|
||||||
|
{
|
||||||
|
string msg = null;
|
||||||
|
int msgid = -1;
|
||||||
|
if ((jsonAction.ContainsKey("msg")) && (jsonAction["msg"] != null)) { msg = jsonAction["msg"].ToString(); }
|
||||||
|
if (jsonAction.ContainsKey("msgid")) { msgid = (int)jsonAction["msgid"]; }
|
||||||
|
if (msgid == 1) { msg = "Waiting for user to grant access..."; }
|
||||||
|
if (msgid == 2) { msg = "Denied"; }
|
||||||
|
if (msgid == 3) { msg = "Failed to start remote terminal session"; } // , {0} ({1})
|
||||||
|
if (msgid == 4) { msg = "Timeout"; }
|
||||||
|
if (msgid == 5) { msg = "Received invalid network data"; }
|
||||||
|
displayMessage(msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private void Wc_onBinaryData(byte[] data, int offset, int length)
|
private void Wc_onBinaryData(byte[] data, int offset, int length)
|
||||||
@@ -162,6 +202,7 @@ namespace MeshCentralRouter
|
|||||||
// Connect
|
// Connect
|
||||||
MenuItemConnect_Click(null, null);
|
MenuItemConnect_Click(null, null);
|
||||||
}
|
}
|
||||||
|
displayMessage(null);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -178,6 +219,8 @@ namespace MeshCentralRouter
|
|||||||
mainToolStripStatusLabel.Text = "Disconnected";
|
mainToolStripStatusLabel.Text = "Disconnected";
|
||||||
displaySelectComboBox.Visible = false;
|
displaySelectComboBox.Visible = false;
|
||||||
kvmControl.Visible = false;
|
kvmControl.Visible = false;
|
||||||
|
kvmControl.screenWidth = 0;
|
||||||
|
kvmControl.screenHeight = 0;
|
||||||
connectButton.Text = "Connect";
|
connectButton.Text = "Connect";
|
||||||
break;
|
break;
|
||||||
case 1: // Connecting
|
case 1: // Connecting
|
||||||
@@ -193,15 +236,17 @@ namespace MeshCentralRouter
|
|||||||
connectButton.Text = "Disconnect";
|
connectButton.Text = "Disconnect";
|
||||||
break;
|
break;
|
||||||
case 3: // Connected
|
case 3: // Connected
|
||||||
//string extras = ".";
|
string label = "Connected";
|
||||||
//if (kvmControl.touchEnabled) extras = ", touch enabled.";
|
if (sessionIsRecorded) { label += ", Recorded Session"; }
|
||||||
//mainToolStripStatusLabel.Text = string.Format("Connected. {0} tiles received, {1} tiles copied, {2} received, {3} sent{4}", kvmControl.tilecount, kvmControl.tilecopy, MeshUtils.GetKiloShortString((ulong)kvmControl.byterecv), MeshUtils.GetKiloShortString((ulong)kvmControl.bytesent), extras);
|
if ((userSessions != null) && (userSessions.Count > 1)) { label += string.Format(", {0} users", userSessions.Count); }
|
||||||
mainToolStripStatusLabel.Text = "Connected.";
|
label += ".";
|
||||||
kvmControl.Visible = true;
|
mainToolStripStatusLabel.Text = label;
|
||||||
connectButton.Text = "Disconnect";
|
connectButton.Text = "Disconnect";
|
||||||
kvmControl.SendCompressionLevel();
|
kvmControl.SendCompressionLevel();
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cadButton.Enabled = (state == 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void updateTimer_Tick(object sender, EventArgs e)
|
private void updateTimer_Tick(object sender, EventArgs e)
|
||||||
@@ -222,11 +267,6 @@ namespace MeshCentralRouter
|
|||||||
node.desktopViewer = null;
|
node.desktopViewer = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private void statusToolStripMenuItem_CheckedChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
mainStatusStrip.Visible = statusToolStripMenuItem.Checked;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void toolStripMenuItem2_DropDownOpening(object sender, EventArgs e)
|
private void toolStripMenuItem2_DropDownOpening(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
//MenuItemConnect.Enabled = (kvmControl.State == KVMControl.ConnectState.Disconnected);
|
//MenuItemConnect.Enabled = (kvmControl.State == KVMControl.ConnectState.Disconnected);
|
||||||
@@ -235,17 +275,6 @@ namespace MeshCentralRouter
|
|||||||
//serviceDisconnectToolStripMenuItem.Enabled = (server != null && server.CurrentState != MeshSwarmServer.State.Disconnected);
|
//serviceDisconnectToolStripMenuItem.Enabled = (server != null && server.CurrentState != MeshSwarmServer.State.Disconnected);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void viewToolStripMenuItem_DropDownOpening(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
debugToolStripMenuItem.Checked = kvmControl.debugmode;
|
|
||||||
//pauseToolStripMenuItem.Checked = kvmControl.Pause;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void debugToolStripMenuItem_Click(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
if (kvmControl != null) kvmControl.debugmode = debugToolStripMenuItem.Checked;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void kvmControl_StateChanged(object sender, EventArgs e)
|
private void kvmControl_StateChanged(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
UpdateStatus();
|
UpdateStatus();
|
||||||
@@ -271,11 +300,6 @@ namespace MeshCentralRouter
|
|||||||
if (kvmControl != null) kvmControl.SendPause(WindowState == FormWindowState.Minimized);
|
if (kvmControl != null) kvmControl.SendPause(WindowState == FormWindowState.Minimized);
|
||||||
}
|
}
|
||||||
|
|
||||||
private void zoomtofitToolStripMenuItem_CheckStateChanged(object sender, EventArgs e)
|
|
||||||
{
|
|
||||||
resizeKvmControl.ZoomToFit = zoomtofitToolStripMenuItem.Checked;
|
|
||||||
}
|
|
||||||
|
|
||||||
private void sendCtrlAltDelToolStripMenuItem_Click(object sender, EventArgs e)
|
private void sendCtrlAltDelToolStripMenuItem_Click(object sender, EventArgs e)
|
||||||
{
|
{
|
||||||
if (kvmControl != null) kvmControl.SendCtrlAltDel();
|
if (kvmControl != null) kvmControl.SendCtrlAltDel();
|
||||||
@@ -323,7 +347,7 @@ namespace MeshCentralRouter
|
|||||||
if (displayText == "All Displays") displaynum = 0xFFFF;
|
if (displayText == "All Displays") displaynum = 0xFFFF;
|
||||||
if (displaynum != 0 || int.TryParse(displayText.Substring(8), out displaynum))
|
if (displaynum != 0 || int.TryParse(displayText.Substring(8), out displaynum))
|
||||||
{
|
{
|
||||||
//if (kvmControl != null) kvmControl.SendDisplay(displaynum);
|
if (kvmControl != null) kvmControl.SendDisplay(displaynum);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -372,5 +396,27 @@ namespace MeshCentralRouter
|
|||||||
try { return Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\OpenSource\MeshRouter", name, "").ToString(); } catch (Exception) { return ""; }
|
try { return Registry.GetValue(@"HKEY_CURRENT_USER\SOFTWARE\OpenSource\MeshRouter", name, "").ToString(); } catch (Exception) { return ""; }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public delegate void displayMessageHandler(string msg);
|
||||||
|
public void displayMessage(string msg)
|
||||||
|
{
|
||||||
|
if (this.InvokeRequired) { this.Invoke(new displayMessageHandler(displayMessage), msg); return; }
|
||||||
|
if (msg == null)
|
||||||
|
{
|
||||||
|
consoleMessage.Visible = false;
|
||||||
|
consoleTimer.Enabled = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
consoleMessage.Text = msg;
|
||||||
|
consoleMessage.Visible = true;
|
||||||
|
//consoleTimer.Enabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void consoleTimer_Tick(object sender, EventArgs e)
|
||||||
|
{
|
||||||
|
consoleMessage.Visible = false;
|
||||||
|
consoleTimer.Enabled = false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
303
KVMViewer.resx
303
KVMViewer.resx
@@ -117,134 +117,12 @@
|
|||||||
<resheader name="writer">
|
<resheader name="writer">
|
||||||
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</resheader>
|
</resheader>
|
||||||
<metadata name="mainMenu.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
|
||||||
<value>17, 17</value>
|
|
||||||
</metadata>
|
|
||||||
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
|
||||||
<data name="MenuItemConnect.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>167, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="MenuItemConnect.Text" xml:space="preserve">
|
|
||||||
<value>&Connect...</value>
|
|
||||||
</data>
|
|
||||||
<data name="MenuItemDisconnect.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>167, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="MenuItemDisconnect.Text" xml:space="preserve">
|
|
||||||
<value>&Disconnect</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripMenuItem5.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>164, 6</value>
|
|
||||||
</data>
|
|
||||||
<data name="settingsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>167, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="settingsToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>Session Settings...</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripMenuItem1.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>164, 6</value>
|
|
||||||
</data>
|
|
||||||
<data name="MenuItemExit.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>167, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="MenuItemExit.Text" xml:space="preserve">
|
|
||||||
<value>E&xit</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripMenuItem2.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>59, 20</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripMenuItem2.Text" xml:space="preserve">
|
|
||||||
<value>&Control</value>
|
|
||||||
</data>
|
|
||||||
<data name="zoomtofitToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>138, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="zoomtofitToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>&Zoom-to-fit</value>
|
|
||||||
</data>
|
|
||||||
<data name="statusToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>138, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="statusToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>&Status</value>
|
|
||||||
</data>
|
|
||||||
<data name="debugToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>138, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="debugToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>&Debug</value>
|
|
||||||
</data>
|
|
||||||
<data name="toolStripMenuItem6.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>135, 6</value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="refreshToolStripMenuItem.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
|
|
||||||
<value>F5</value>
|
|
||||||
</data>
|
|
||||||
<data name="refreshToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>138, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="refreshToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>&Refresh</value>
|
|
||||||
</data>
|
|
||||||
<data name="pauseToolStripMenuItem.ShortcutKeys" type="System.Windows.Forms.Keys, System.Windows.Forms">
|
|
||||||
<value>F7</value>
|
|
||||||
</data>
|
|
||||||
<data name="pauseToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>138, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="pauseToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>&Pause</value>
|
|
||||||
</data>
|
|
||||||
<data name="viewToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>44, 20</value>
|
|
||||||
</data>
|
|
||||||
<data name="viewToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>&View</value>
|
|
||||||
</data>
|
|
||||||
<data name="sendCtrlAltDelToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>164, 22</value>
|
|
||||||
</data>
|
|
||||||
<data name="sendCtrlAltDelToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>Send &Ctrl-Alt-Del</value>
|
|
||||||
</data>
|
|
||||||
<data name="actionsToolStripMenuItem.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>59, 20</value>
|
|
||||||
</data>
|
|
||||||
<data name="actionsToolStripMenuItem.Text" xml:space="preserve">
|
|
||||||
<value>Actions</value>
|
|
||||||
</data>
|
|
||||||
<data name="mainMenu.Location" type="System.Drawing.Point, System.Drawing">
|
|
||||||
<value>0, 0</value>
|
|
||||||
</data>
|
|
||||||
<data name="mainMenu.Size" type="System.Drawing.Size, System.Drawing">
|
|
||||||
<value>1227, 24</value>
|
|
||||||
</data>
|
|
||||||
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
|
||||||
<data name="mainMenu.TabIndex" type="System.Int32, mscorlib">
|
|
||||||
<value>1</value>
|
|
||||||
</data>
|
|
||||||
<data name="mainMenu.Text" xml:space="preserve">
|
|
||||||
<value>menuStrip1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>mainMenu.Name" xml:space="preserve">
|
|
||||||
<value>mainMenu</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>mainMenu.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.MenuStrip, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>mainMenu.Parent" xml:space="preserve">
|
|
||||||
<value>$this</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>mainMenu.ZOrder" xml:space="preserve">
|
|
||||||
<value>3</value>
|
|
||||||
</data>
|
|
||||||
<metadata name="mainStatusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="mainStatusStrip.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>127, 17</value>
|
<value>127, 17</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
|
<assembly alias="System.Drawing" name="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
|
||||||
<data name="mainToolStripStatusLabel.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="mainToolStripStatusLabel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1212, 17</value>
|
<value>1029, 17</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="mainToolStripStatusLabel.Text" xml:space="preserve">
|
<data name="mainToolStripStatusLabel.Text" xml:space="preserve">
|
||||||
<value>---</value>
|
<value>---</value>
|
||||||
@@ -258,14 +136,15 @@
|
|||||||
<data name="toolStripStatusLabel1.Text" xml:space="preserve">
|
<data name="toolStripStatusLabel1.Text" xml:space="preserve">
|
||||||
<value>v</value>
|
<value>v</value>
|
||||||
</data>
|
</data>
|
||||||
|
<assembly alias="mscorlib" name="mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
<data name="toolStripStatusLabel1.Visible" type="System.Boolean, mscorlib">
|
<data name="toolStripStatusLabel1.Visible" type="System.Boolean, mscorlib">
|
||||||
<value>False</value>
|
<value>False</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="mainStatusStrip.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="mainStatusStrip.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 787</value>
|
<value>0, 772</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="mainStatusStrip.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="mainStatusStrip.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1227, 22</value>
|
<value>1044, 22</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="mainStatusStrip.TabIndex" type="System.Int32, mscorlib">
|
<data name="mainStatusStrip.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>9</value>
|
<value>9</value>
|
||||||
@@ -283,7 +162,7 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>mainStatusStrip.ZOrder" xml:space="preserve">
|
<data name=">>mainStatusStrip.ZOrder" xml:space="preserve">
|
||||||
<value>2</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
<metadata name="updateTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
<metadata name="updateTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
<value>264, 17</value>
|
<value>264, 17</value>
|
||||||
@@ -312,6 +191,10 @@
|
|||||||
<data name=">>displaySelectComboBox.ZOrder" xml:space="preserve">
|
<data name=">>displaySelectComboBox.ZOrder" xml:space="preserve">
|
||||||
<value>0</value>
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
|
<assembly alias="System.Windows.Forms" name="System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
|
||||||
|
<data name="settingsButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
<data name="settingsButton.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="settingsButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>288, 3</value>
|
<value>288, 3</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -336,6 +219,9 @@
|
|||||||
<data name=">>settingsButton.ZOrder" xml:space="preserve">
|
<data name=">>settingsButton.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="zoomButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
<data name="zoomButton.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="zoomButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>193, 3</value>
|
<value>193, 3</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -360,6 +246,9 @@
|
|||||||
<data name=">>zoomButton.ZOrder" xml:space="preserve">
|
<data name=">>zoomButton.ZOrder" xml:space="preserve">
|
||||||
<value>2</value>
|
<value>2</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="cadButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
<data name="cadButton.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="cadButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>98, 3</value>
|
<value>98, 3</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -384,6 +273,9 @@
|
|||||||
<data name=">>cadButton.ZOrder" xml:space="preserve">
|
<data name=">>cadButton.ZOrder" xml:space="preserve">
|
||||||
<value>3</value>
|
<value>3</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name="connectButton.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
<data name="connectButton.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="connectButton.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>3, 3</value>
|
<value>3, 3</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -412,10 +304,10 @@
|
|||||||
<value>Top</value>
|
<value>Top</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="topPanel.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="topPanel.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 24</value>
|
<value>0, 0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="topPanel.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="topPanel.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1227, 32</value>
|
<value>1044, 32</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="topPanel.TabIndex" type="System.Int32, mscorlib">
|
<data name="topPanel.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>11</value>
|
<value>11</value>
|
||||||
@@ -433,16 +325,52 @@
|
|||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>topPanel.ZOrder" xml:space="preserve">
|
<data name=">>topPanel.ZOrder" xml:space="preserve">
|
||||||
<value>1</value>
|
<value>2</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.AutoSize" type="System.Boolean, mscorlib">
|
||||||
|
<value>True</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.Font" type="System.Drawing.Font, System.Drawing">
|
||||||
|
<value>Microsoft Sans Serif, 15.75pt</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.ImeMode" type="System.Windows.Forms.ImeMode, System.Windows.Forms">
|
||||||
|
<value>NoControl</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
|
<value>12, 59</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
|
<value>70, 25</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.TabIndex" type="System.Int32, mscorlib">
|
||||||
|
<value>12</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.Text" xml:space="preserve">
|
||||||
|
<value>label1</value>
|
||||||
|
</data>
|
||||||
|
<data name="consoleMessage.Visible" type="System.Boolean, mscorlib">
|
||||||
|
<value>False</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>consoleMessage.Name" xml:space="preserve">
|
||||||
|
<value>consoleMessage</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>consoleMessage.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Label, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>consoleMessage.Parent" xml:space="preserve">
|
||||||
|
<value>$this</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>consoleMessage.ZOrder" xml:space="preserve">
|
||||||
|
<value>0</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="resizeKvmControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
<data name="resizeKvmControl.Dock" type="System.Windows.Forms.DockStyle, System.Windows.Forms">
|
||||||
<value>Fill</value>
|
<value>Fill</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="resizeKvmControl.Location" type="System.Drawing.Point, System.Drawing">
|
<data name="resizeKvmControl.Location" type="System.Drawing.Point, System.Drawing">
|
||||||
<value>0, 56</value>
|
<value>0, 32</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="resizeKvmControl.Size" type="System.Drawing.Size, System.Drawing">
|
<data name="resizeKvmControl.Size" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1227, 731</value>
|
<value>1044, 740</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="resizeKvmControl.TabIndex" type="System.Int32, mscorlib">
|
<data name="resizeKvmControl.TabIndex" type="System.Int32, mscorlib">
|
||||||
<value>10</value>
|
<value>10</value>
|
||||||
@@ -451,14 +379,17 @@
|
|||||||
<value>resizeKvmControl</value>
|
<value>resizeKvmControl</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>resizeKvmControl.Type" xml:space="preserve">
|
<data name=">>resizeKvmControl.Type" xml:space="preserve">
|
||||||
<value>MeshCentralRouter.KVMResizeControl, MeshCentralRouter, Version=1.0.7529.21143, Culture=neutral, PublicKeyToken=null</value>
|
<value>MeshCentralRouter.KVMResizeControl, MeshCentralRouter, Version=1.0.7531.27756, Culture=neutral, PublicKeyToken=null</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>resizeKvmControl.Parent" xml:space="preserve">
|
<data name=">>resizeKvmControl.Parent" xml:space="preserve">
|
||||||
<value>$this</value>
|
<value>$this</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>resizeKvmControl.ZOrder" xml:space="preserve">
|
<data name=">>resizeKvmControl.ZOrder" xml:space="preserve">
|
||||||
<value>0</value>
|
<value>1</value>
|
||||||
</data>
|
</data>
|
||||||
|
<metadata name="consoleTimer.TrayLocation" type="System.Drawing.Point, System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a">
|
||||||
|
<value>385, 17</value>
|
||||||
|
</metadata>
|
||||||
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
<metadata name="$this.Localizable" type="System.Boolean, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
|
||||||
<value>True</value>
|
<value>True</value>
|
||||||
</metadata>
|
</metadata>
|
||||||
@@ -466,7 +397,7 @@
|
|||||||
<value>6, 13</value>
|
<value>6, 13</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
<data name="$this.ClientSize" type="System.Drawing.Size, System.Drawing">
|
||||||
<value>1227, 809</value>
|
<value>1044, 794</value>
|
||||||
</data>
|
</data>
|
||||||
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
<data name="$this.Icon" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
|
||||||
<value>
|
<value>
|
||||||
@@ -902,102 +833,6 @@
|
|||||||
<data name="$this.Text" xml:space="preserve">
|
<data name="$this.Text" xml:space="preserve">
|
||||||
<value>Remote Desktop</value>
|
<value>Remote Desktop</value>
|
||||||
</data>
|
</data>
|
||||||
<data name=">>toolStripMenuItem2.Name" xml:space="preserve">
|
|
||||||
<value>toolStripMenuItem2</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem2.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>MenuItemConnect.Name" xml:space="preserve">
|
|
||||||
<value>MenuItemConnect</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>MenuItemConnect.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>MenuItemDisconnect.Name" xml:space="preserve">
|
|
||||||
<value>MenuItemDisconnect</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>MenuItemDisconnect.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem5.Name" xml:space="preserve">
|
|
||||||
<value>toolStripMenuItem5</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem5.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>settingsToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>settingsToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>settingsToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem1.Name" xml:space="preserve">
|
|
||||||
<value>toolStripMenuItem1</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem1.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>MenuItemExit.Name" xml:space="preserve">
|
|
||||||
<value>MenuItemExit</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>MenuItemExit.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>viewToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>viewToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>viewToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>zoomtofitToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>zoomtofitToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>zoomtofitToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>statusToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>statusToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>statusToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>debugToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>debugToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>debugToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem6.Name" xml:space="preserve">
|
|
||||||
<value>toolStripMenuItem6</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>toolStripMenuItem6.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripSeparator, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>refreshToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>refreshToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>refreshToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>pauseToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>pauseToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>pauseToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>actionsToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>actionsToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>actionsToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>sendCtrlAltDelToolStripMenuItem.Name" xml:space="preserve">
|
|
||||||
<value>sendCtrlAltDelToolStripMenuItem</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>sendCtrlAltDelToolStripMenuItem.Type" xml:space="preserve">
|
|
||||||
<value>System.Windows.Forms.ToolStripMenuItem, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
|
||||||
</data>
|
|
||||||
<data name=">>mainToolStripStatusLabel.Name" xml:space="preserve">
|
<data name=">>mainToolStripStatusLabel.Name" xml:space="preserve">
|
||||||
<value>mainToolStripStatusLabel</value>
|
<value>mainToolStripStatusLabel</value>
|
||||||
</data>
|
</data>
|
||||||
@@ -1016,6 +851,12 @@
|
|||||||
<data name=">>updateTimer.Type" xml:space="preserve">
|
<data name=">>updateTimer.Type" xml:space="preserve">
|
||||||
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
</data>
|
</data>
|
||||||
|
<data name=">>consoleTimer.Name" xml:space="preserve">
|
||||||
|
<value>consoleTimer</value>
|
||||||
|
</data>
|
||||||
|
<data name=">>consoleTimer.Type" xml:space="preserve">
|
||||||
|
<value>System.Windows.Forms.Timer, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
|
||||||
|
</data>
|
||||||
<data name=">>$this.Name" xml:space="preserve">
|
<data name=">>$this.Name" xml:space="preserve">
|
||||||
<value>KVMViewer</value>
|
<value>KVMViewer</value>
|
||||||
</data>
|
</data>
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ using System.IO;
|
|||||||
using System.Text;
|
using System.Text;
|
||||||
using System.Net.Sockets;
|
using System.Net.Sockets;
|
||||||
using System.Net.Security;
|
using System.Net.Security;
|
||||||
|
using System.IO.Compression;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Security.Cryptography;
|
using System.Security.Cryptography;
|
||||||
using System.Security.Cryptography.X509Certificates;
|
using System.Security.Cryptography.X509Certificates;
|
||||||
@@ -45,6 +46,11 @@ namespace MeshCentralRouter
|
|||||||
public bool xdebug = false;
|
public bool xdebug = false;
|
||||||
public bool xignoreCert = false;
|
public bool xignoreCert = false;
|
||||||
public string extraHeaders = null;
|
public string extraHeaders = null;
|
||||||
|
private MemoryStream inflateMemory;
|
||||||
|
private DeflateStream inflate;
|
||||||
|
private MemoryStream deflateMemory;
|
||||||
|
private static byte[] inflateEnd = { 0x00, 0x00, 0xff, 0xff };
|
||||||
|
private static byte[] inflateStart = { 0x00, 0x00, 0x00, 0x00 };
|
||||||
|
|
||||||
public enum ConnectionStates
|
public enum ConnectionStates
|
||||||
{
|
{
|
||||||
@@ -128,6 +134,7 @@ namespace MeshCentralRouter
|
|||||||
wsclient = new TcpClient();
|
wsclient = new TcpClient();
|
||||||
wsclient.BeginConnect(url.Host, url.Port, new AsyncCallback(OnConnectSink), this);
|
wsclient.BeginConnect(url.Host, url.Port, new AsyncCallback(OnConnectSink), this);
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -245,7 +252,9 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
// Send the HTTP headers
|
// Send the HTTP headers
|
||||||
Debug("Websocket TLS setup, sending HTTP header...");
|
Debug("Websocket TLS setup, sending HTTP header...");
|
||||||
string header = "GET " + url.PathAndQuery + " HTTP/1.1\r\nHost: " + url.Host + "\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nSec-WebSocket-Version: 13\r\n" + extraHeaders + "\r\n";
|
//string header = "GET " + url.PathAndQuery + " HTTP/1.1\r\nHost: " + url.Host + "\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nSec-WebSocket-Version: 13\r\n" + extraHeaders + "\r\n";
|
||||||
|
//string header = "GET " + url.PathAndQuery + " HTTP/1.1\r\nHost: " + url.Host + "\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Extensions: permessage-deflate; client_no_context_takeover; server_no_context_takeover\r\n" + extraHeaders + "\r\n";
|
||||||
|
string header = "GET " + url.PathAndQuery + " HTTP/1.1\r\nHost: " + url.Host + "\r\nUpgrade: websocket\r\nConnection: Upgrade\r\nSec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\nSec-WebSocket-Version: 13\r\nSec-WebSocket-Extensions: permessage-deflate; client_no_context_takeover\r\n" + extraHeaders + "\r\n";
|
||||||
wsstream.Write(UTF8Encoding.UTF8.GetBytes(header));
|
wsstream.Write(UTF8Encoding.UTF8.GetBytes(header));
|
||||||
|
|
||||||
// Start receiving data
|
// Start receiving data
|
||||||
@@ -313,6 +322,14 @@ namespace MeshCentralRouter
|
|||||||
if ((parsedHeader == null) || (parsedHeader["_Path"] != "101")) { Debug("Websocket bad header."); return -1; } // Bad header, close the connection
|
if ((parsedHeader == null) || (parsedHeader["_Path"] != "101")) { Debug("Websocket bad header."); return -1; } // Bad header, close the connection
|
||||||
Debug("Websocket got setup upgrade header.");
|
Debug("Websocket got setup upgrade header.");
|
||||||
SetState(ConnectionStates.Connected);
|
SetState(ConnectionStates.Connected);
|
||||||
|
|
||||||
|
if ((parsedHeader.ContainsKey("sec-websocket-extensions") && (parsedHeader["sec-websocket-extensions"].IndexOf("permessage-deflate") >= 0)))
|
||||||
|
{
|
||||||
|
inflateMemory = new MemoryStream();
|
||||||
|
inflate = new DeflateStream(inflateMemory, CompressionMode.Decompress);
|
||||||
|
deflateMemory = new MemoryStream();
|
||||||
|
}
|
||||||
|
|
||||||
fragmentParsingState = 1;
|
fragmentParsingState = 1;
|
||||||
return len; // TODO: Technically we need to return the header length before UTF8 convert.
|
return len; // TODO: Technically we need to return the header length before UTF8 convert.
|
||||||
}
|
}
|
||||||
@@ -371,13 +388,32 @@ namespace MeshCentralRouter
|
|||||||
|
|
||||||
private void ProcessWsBuffer(byte[] data, int offset, int len, int op)
|
private void ProcessWsBuffer(byte[] data, int offset, int len, int op)
|
||||||
{
|
{
|
||||||
|
MemoryStream mem = null;
|
||||||
|
if (((op & 0x40) != 0) && (inflateMemory != null))
|
||||||
|
{
|
||||||
|
// This is a deflate compressed frame
|
||||||
|
inflateMemory.SetLength(0);
|
||||||
|
inflateMemory.Write(data, offset, len);
|
||||||
|
inflateMemory.Write(inflateEnd, 0, 4);
|
||||||
|
inflateMemory.Seek(0, SeekOrigin.Begin);
|
||||||
|
MemoryStream memoryStream = new MemoryStream();
|
||||||
|
inflate.CopyTo(memoryStream);
|
||||||
|
data = memoryStream.GetBuffer();
|
||||||
|
offset = 0;
|
||||||
|
len = (int)memoryStream.Length;
|
||||||
|
}
|
||||||
|
|
||||||
if ((op & 1) == 0) {
|
if ((op & 1) == 0) {
|
||||||
|
// This is a birnay frame
|
||||||
Debug("Websocket got binary data, len = " + len);
|
Debug("Websocket got binary data, len = " + len);
|
||||||
if (onBinaryData != null) { onBinaryData(data, offset, len); }
|
if (onBinaryData != null) { onBinaryData(data, offset, len); }
|
||||||
} else {
|
} else {
|
||||||
|
// This is a string frame
|
||||||
Debug("Websocket got string data, len = " + len);
|
Debug("Websocket got string data, len = " + len);
|
||||||
if (onStringData != null) { onStringData(UTF8Encoding.UTF8.GetString(data, offset, len)); }
|
if (onStringData != null) { onStringData(UTF8Encoding.UTF8.GetString(data, offset, len)); }
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (mem != null) { mem.Dispose(); mem = null; }
|
||||||
}
|
}
|
||||||
|
|
||||||
private Dictionary<string, string> ParseHttpHeader(string header)
|
private Dictionary<string, string> ParseHttpHeader(string header)
|
||||||
@@ -425,47 +461,47 @@ namespace MeshCentralRouter
|
|||||||
public void SendString(string data)
|
public void SendString(string data)
|
||||||
{
|
{
|
||||||
if (state != ConnectionStates.Connected) return;
|
if (state != ConnectionStates.Connected) return;
|
||||||
|
byte[] buf = UTF8Encoding.UTF8.GetBytes(data);
|
||||||
// Convert the string into a buffer with 4 byte of header space.
|
SendFragment(buf, 0, buf.Length, 129);
|
||||||
int len = UTF8Encoding.UTF8.GetByteCount(data);
|
|
||||||
byte[] buf = new byte[4 + len];
|
|
||||||
UTF8Encoding.UTF8.GetBytes(data, 0, data.Length, buf, 4);
|
|
||||||
len = buf.Length - 4;
|
|
||||||
|
|
||||||
// Check that everything is ok
|
|
||||||
if ((len < 1) || (len > 65535)) { Dispose(); return; }
|
|
||||||
|
|
||||||
//Console.Write("Length: " + len + "\r\n");
|
|
||||||
//System.Threading.Thread.Sleep(0);
|
|
||||||
|
|
||||||
if (len < 126)
|
|
||||||
{
|
|
||||||
// Small fragment
|
|
||||||
buf[2] = 129; // Fragment op code (129 = text, 130 = binary)
|
|
||||||
buf[3] = (byte)(len & 0x7F);
|
|
||||||
//try { wsstream.BeginWrite(buf, 2, len + 2, new AsyncCallback(WriteWebSocketAsyncDone), args); } catch (Exception) { Dispose(); return; }
|
|
||||||
wsstream.Write(buf, 2, len + 2);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Large fragment
|
|
||||||
buf[0] = 129; // Fragment op code (129 = text, 130 = binary)
|
|
||||||
buf[1] = 126;
|
|
||||||
buf[2] = (byte)((len >> 8) & 0xFF);
|
|
||||||
buf[3] = (byte)(len & 0xFF);
|
|
||||||
//try { wsstream.BeginWrite(buf, 0, len + 4, new AsyncCallback(WriteWebSocketAsyncDone), args); } catch (Exception) { Dispose(); return; }
|
|
||||||
wsstream.Write(buf, 0, len + 4);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void SendBinary(byte[] data, int offset, int len)
|
public void SendBinary(byte[] data, int offset, int len) { SendFragment(data, offset, len, 130); }
|
||||||
|
|
||||||
|
// Fragment op code (129 = text, 130 = binary)
|
||||||
|
public void SendFragment(byte[] data, int offset, int len, byte op)
|
||||||
{
|
{
|
||||||
if (state != ConnectionStates.Connected) return;
|
if (state != ConnectionStates.Connected) return;
|
||||||
|
byte[] buf;
|
||||||
|
|
||||||
// Convert the string into a buffer with 4 byte of header space.
|
// If deflate is active, attempt to compress the data here.
|
||||||
byte[] buf = new byte[4 + len];
|
if ((deflateMemory != null) && (len > 32))
|
||||||
Array.Copy(data, offset, buf, 4, len);
|
{
|
||||||
len = buf.Length - 4;
|
deflateMemory.SetLength(0);
|
||||||
|
deflateMemory.Write(inflateStart, 0, 4);
|
||||||
|
DeflateStream deflate = new DeflateStream(deflateMemory, CompressionMode.Compress, true);
|
||||||
|
deflate.Write(data, offset, len);
|
||||||
|
deflate.Dispose();
|
||||||
|
deflate = null;
|
||||||
|
if (deflateMemory.Length < len)
|
||||||
|
{
|
||||||
|
// Use the compressed data
|
||||||
|
int newlen = (int)deflateMemory.Length;
|
||||||
|
buf = deflateMemory.GetBuffer();
|
||||||
|
len = newlen - 4;
|
||||||
|
op |= 0x40; // Add compression op
|
||||||
|
} else {
|
||||||
|
// Don't use the compress data
|
||||||
|
// Convert the string into a buffer with 4 byte of header space.
|
||||||
|
buf = new byte[4 + len];
|
||||||
|
Array.Copy(data, offset, buf, 4, len);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Convert the string into a buffer with 4 byte of header space.
|
||||||
|
buf = new byte[4 + len];
|
||||||
|
Array.Copy(data, offset, buf, 4, len);
|
||||||
|
}
|
||||||
|
|
||||||
// Check that everything is ok
|
// Check that everything is ok
|
||||||
if ((len < 1) || (len > 65535)) { Dispose(); return; }
|
if ((len < 1) || (len > 65535)) { Dispose(); return; }
|
||||||
@@ -476,7 +512,7 @@ namespace MeshCentralRouter
|
|||||||
if (len < 126)
|
if (len < 126)
|
||||||
{
|
{
|
||||||
// Small fragment
|
// Small fragment
|
||||||
buf[2] = 130; // Fragment op code (129 = text, 130 = binary)
|
buf[2] = op;
|
||||||
buf[3] = (byte)(len & 0x7F);
|
buf[3] = (byte)(len & 0x7F);
|
||||||
//try { wsstream.BeginWrite(buf, 2, len + 2, new AsyncCallback(WriteWebSocketAsyncDone), args); } catch (Exception) { Dispose(); return; }
|
//try { wsstream.BeginWrite(buf, 2, len + 2, new AsyncCallback(WriteWebSocketAsyncDone), args); } catch (Exception) { Dispose(); return; }
|
||||||
wsstream.Write(buf, 2, len + 2);
|
wsstream.Write(buf, 2, len + 2);
|
||||||
@@ -484,7 +520,7 @@ namespace MeshCentralRouter
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Large fragment
|
// Large fragment
|
||||||
buf[0] = 130; // Fragment op code (129 = text, 130 = binary)
|
buf[0] = op;
|
||||||
buf[1] = 126;
|
buf[1] = 126;
|
||||||
buf[2] = (byte)((len >> 8) & 0xFF);
|
buf[2] = (byte)((len >> 8) & 0xFF);
|
||||||
buf[3] = (byte)(len & 0xFF);
|
buf[3] = (byte)(len & 0xFF);
|
||||||
|
|||||||
Reference in New Issue
Block a user