Skip to content

Commit 256668f

Browse files
committed
Move server logic out of UI layer.
1 parent cecdb9f commit 256668f

21 files changed

+348
-188
lines changed
File renamed without changes.

TSTunnels.Server/Program.cs TSTunnels.UI/Program.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
using System.Collections.Generic;
33
using System.Windows.Forms;
44

5-
namespace TSTunnels.Server
5+
namespace TSTunnels.UI
66
{
77
static class Program
88
{
@@ -14,7 +14,7 @@ static void Main()
1414
{
1515
Application.EnableVisualStyles();
1616
Application.SetCompatibleTextRenderingDefault(false);
17-
Application.Run(new Server());
17+
Application.Run(new UI());
1818
}
1919
}
2020
}

TSTunnels.Server/Properties/AssemblyInfo.cs TSTunnels.UI/Properties/AssemblyInfo.cs

+2-2
Original file line numberDiff line numberDiff line change
@@ -5,11 +5,11 @@
55
// General Information about an assembly is controlled through the following
66
// set of attributes. Change these attribute values to modify the information
77
// associated with an assembly.
8-
[assembly: AssemblyTitle("TSTunnels.Server")]
8+
[assembly: AssemblyTitle("TSTunnels.UI")]
99
[assembly: AssemblyDescription("")]
1010
[assembly: AssemblyConfiguration("")]
1111
[assembly: AssemblyCompany("")]
12-
[assembly: AssemblyProduct("TSTunnels.Server")]
12+
[assembly: AssemblyProduct("TSTunnels.UI")]
1313
[assembly: AssemblyCopyright("Copyright © Darkskies 2009")]
1414
[assembly: AssemblyTrademark("")]
1515
[assembly: AssemblyCulture("")]

TSTunnels.Server/Properties/Resources.Designer.cs TSTunnels.UI/Properties/Resources.Designer.cs

+2-2
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TSTunnels.Server/Properties/Settings.Designer.cs TSTunnels.UI/Properties/Settings.Designer.cs

+1-1
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TSTunnels.Server/TSTunnels.Server.csproj TSTunnels.UI/TSTunnels.UI.csproj

+7-8
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@
88
<ProjectGuid>{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}</ProjectGuid>
99
<OutputType>WinExe</OutputType>
1010
<AppDesignerFolder>Properties</AppDesignerFolder>
11-
<RootNamespace>TSTunnels.Server</RootNamespace>
12-
<AssemblyName>TSTunnels.Server</AssemblyName>
11+
<RootNamespace>TSTunnels.UI</RootNamespace>
12+
<AssemblyName>TSTunnels.UI</AssemblyName>
1313
<TargetFrameworkVersion>v2.0</TargetFrameworkVersion>
1414
<FileAlignment>512</FileAlignment>
1515
<ApplicationIcon>App.ico</ApplicationIcon>
@@ -40,16 +40,16 @@
4040
<Reference Include="System.Xml" />
4141
</ItemGroup>
4242
<ItemGroup>
43-
<Compile Include="Server.cs">
43+
<Compile Include="UI.cs">
4444
<SubType>Form</SubType>
4545
</Compile>
46-
<Compile Include="Server.Designer.cs">
47-
<DependentUpon>Server.cs</DependentUpon>
46+
<Compile Include="UI.Designer.cs">
47+
<DependentUpon>UI.cs</DependentUpon>
4848
</Compile>
4949
<Compile Include="Program.cs" />
5050
<Compile Include="Properties\AssemblyInfo.cs" />
51-
<EmbeddedResource Include="Server.resx">
52-
<DependentUpon>Server.cs</DependentUpon>
51+
<EmbeddedResource Include="UI.resx">
52+
<DependentUpon>UI.cs</DependentUpon>
5353
</EmbeddedResource>
5454
<EmbeddedResource Include="Properties\Resources.resx">
5555
<Generator>ResXFileCodeGenerator</Generator>
@@ -70,7 +70,6 @@
7070
<DesignTimeSharedInput>True</DesignTimeSharedInput>
7171
</Compile>
7272
<Compile Include="Win32Api.cs" />
73-
<Compile Include="WtsApi32.cs" />
7473
</ItemGroup>
7574
<ItemGroup>
7675
<ProjectReference Include="..\TSTunnels\TSTunnels.csproj">

TSTunnels.Server/Server.Designer.cs TSTunnels.UI/UI.Designer.cs

+7-20
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

TSTunnels.UI/UI.cs

+136
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,136 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.ComponentModel;
4+
using System.Data;
5+
using System.Drawing;
6+
using System.Text;
7+
using System.Windows.Forms;
8+
using TSTunnels.Server;
9+
10+
namespace TSTunnels.UI
11+
{
12+
public partial class UI : Form
13+
{
14+
private readonly Server.Server Server;
15+
16+
public UI()
17+
{
18+
InitializeComponent();
19+
Icon = Win32Api.GetApplicationIcon();
20+
Server = new Server.Server();
21+
Server.Connected += Server_Connected;
22+
Server.ForwardedPortAdded += Server_ForwardedPortAdded;
23+
Server.ForwardedPortRemoved += Server_ForwardedPortRemoved;
24+
Server.MessageLogged += Server_MessageLogged;
25+
}
26+
27+
private void UI_Load(object sender, EventArgs e)
28+
{
29+
Server.Connect();
30+
}
31+
32+
private bool CloseInProgress;
33+
private void UI_FormClosing(object sender, FormClosingEventArgs e)
34+
{
35+
if (CloseInProgress || forwardedPortsListBox.Items.Count == 0) return;
36+
CloseInProgress = true;
37+
e.Cancel = true;
38+
AppendLogMessage("Cancelling all port forwardings");
39+
foreach (ForwardedPort forwardedPort in forwardedPortsListBox.Items)
40+
{
41+
forwardedPort.Remove();
42+
}
43+
}
44+
45+
private void UI_FormClosed(object sender, FormClosedEventArgs e)
46+
{
47+
Server.Disconnect();
48+
}
49+
50+
private void Server_ForwardedPortAdded(object sender, ForwardedPortEventArgs e)
51+
{
52+
if (InvokeRequired)
53+
{
54+
Invoke(new EventHandler<ForwardedPortEventArgs>(Server_ForwardedPortAdded), new[] { sender, e });
55+
return;
56+
}
57+
forwardedPortsListBox.Items.Add(e.ForwardedPort);
58+
sourceTextBox.Text = string.Empty;
59+
destinationTextBox.Text = string.Empty;
60+
}
61+
62+
private void Server_ForwardedPortRemoved(object sender, ForwardedPortEventArgs e)
63+
{
64+
if (InvokeRequired)
65+
{
66+
Invoke(new EventHandler<ForwardedPortEventArgs>(Server_ForwardedPortRemoved), new[] { sender, e });
67+
return;
68+
}
69+
forwardedPortsListBox.Items.Remove(e.ForwardedPort);
70+
sourceTextBox.Text = e.ForwardedPort.ListenEndPoint;
71+
destinationTextBox.Text = e.ForwardedPort.ConnectEndPoint;
72+
(e.ForwardedPort.Direction == ForwardDirection.Local ? localRadioButton : remoteRadioButton).Checked = true;
73+
if (CloseInProgress && forwardedPortsListBox.Items.Count == 0) Close();
74+
}
75+
76+
public void Server_Connected(object sender, ConnectedEventArgs e)
77+
{
78+
if (InvokeRequired)
79+
{
80+
Invoke(new EventHandler<ConnectedEventArgs>(Server_Connected), new[] { sender, e });
81+
return;
82+
}
83+
portForwardingGroupBox.Enabled = true;
84+
}
85+
86+
public void Server_MessageLogged(object sender, MessageLoggedEventArgs e)
87+
{
88+
if (InvokeRequired)
89+
{
90+
Invoke(new EventHandler<MessageLoggedEventArgs>(Server_MessageLogged), new[] { sender, e });
91+
return;
92+
}
93+
if (!portForwardingGroupBox.Enabled && e.Message == "RDP Virtual channel Write Failed: Incorrect Function") return;
94+
AppendLogMessage(e.Message);
95+
}
96+
97+
private void AppendLogMessage(object message)
98+
{
99+
eventLogListBox.SelectedIndex = eventLogListBox.Items.Add(DateTime.Now + "\t" + message);
100+
}
101+
102+
private void addButton_Click(object sender, EventArgs e)
103+
{
104+
try
105+
{
106+
var listenEndPoint = sourceTextBox.Text.Split(':');
107+
if (listenEndPoint[0].Length == 0 || listenEndPoint.Length > 2)
108+
{
109+
MessageBox.Show("You need to specify a source address in the form \"[host.name:]port\"", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
110+
return;
111+
}
112+
var listenAddress = listenEndPoint.Length > 1 ? listenEndPoint[0] : "127.0.0.1";
113+
var listenPort = int.Parse(listenEndPoint.Length > 1 ? listenEndPoint[1] : listenEndPoint[0]);
114+
var connectEndPoint = destinationTextBox.Text.Split(':');
115+
if (connectEndPoint[0].Length == 0 || connectEndPoint.Length > 2)
116+
{
117+
MessageBox.Show("You need to specify a destination address in the form \"[host.name:]port\"", "Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
118+
return;
119+
}
120+
var connectAddress = connectEndPoint.Length > 1 ? connectEndPoint[0] : "127.0.0.1";
121+
var connectPort = int.Parse(connectEndPoint.Length > 1 ? connectEndPoint[1] : connectEndPoint[0]);
122+
(localRadioButton.Checked ? (Server.Server.CreatePort)Server.CreateClientPort : Server.CreateServerPort)(listenAddress, listenPort, connectAddress, connectPort);
123+
}
124+
catch (Exception ex)
125+
{
126+
AppendLogMessage(ex);
127+
}
128+
}
129+
130+
private void removeButton_Click(object sender, EventArgs e)
131+
{
132+
var forwardedPort = forwardedPortsListBox.SelectedItem as ForwardedPort;
133+
if (forwardedPort != null) forwardedPort.Remove();
134+
}
135+
}
136+
}
File renamed without changes.

TSTunnels.Server/Win32Api.cs TSTunnels.UI/Win32Api.cs

+1-1
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using System.Runtime.InteropServices;
55
using System.Text;
66

7-
namespace TSTunnels.Server
7+
namespace TSTunnels.UI
88
{
99
class Win32Api
1010
{

TSTunnels.sln

+6-6
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,24 @@
11

22
Microsoft Visual Studio Solution File, Format Version 10.00
33
# Visual Studio 2008
4-
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TSTunnels.Server", "TSTunnels.Server\TSTunnels.Server.csproj", "{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}"
5-
EndProject
64
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TSTunnels", "TSTunnels\TSTunnels.csproj", "{46202B33-3B41-4B2B-B349-9DE165C8883A}"
75
EndProject
6+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TSTunnels.UI", "TSTunnels.UI\TSTunnels.UI.csproj", "{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}"
7+
EndProject
88
Global
99
GlobalSection(SolutionConfigurationPlatforms) = preSolution
1010
Debug|Any CPU = Debug|Any CPU
1111
Release|Any CPU = Release|Any CPU
1212
EndGlobalSection
1313
GlobalSection(ProjectConfigurationPlatforms) = postSolution
14-
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
15-
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Debug|Any CPU.Build.0 = Debug|Any CPU
16-
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Release|Any CPU.ActiveCfg = Release|Any CPU
17-
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Release|Any CPU.Build.0 = Release|Any CPU
1814
{46202B33-3B41-4B2B-B349-9DE165C8883A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
1915
{46202B33-3B41-4B2B-B349-9DE165C8883A}.Debug|Any CPU.Build.0 = Debug|Any CPU
2016
{46202B33-3B41-4B2B-B349-9DE165C8883A}.Release|Any CPU.ActiveCfg = Release|Any CPU
2117
{46202B33-3B41-4B2B-B349-9DE165C8883A}.Release|Any CPU.Build.0 = Release|Any CPU
18+
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
19+
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Debug|Any CPU.Build.0 = Debug|Any CPU
20+
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Release|Any CPU.ActiveCfg = Release|Any CPU
21+
{8D98224E-FDA0-422F-BDAA-8AF5BCE5F28A}.Release|Any CPU.Build.0 = Release|Any CPU
2222
EndGlobalSection
2323
GlobalSection(SolutionProperties) = preSolution
2424
HideSolutionNode = FALSE

TSTunnels/Client/Client.cs

+9-8
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,15 @@ public void VirtualChannelOpenEvent(int openHandle, ChannelEvents Event, IntPtr
126126

127127
#region Implementation of IStreamServer
128128

129+
public int ConnectionCount { get; set; }
130+
public IDictionary<int, TcpListener> Listeners { get; private set; }
131+
public IDictionary<int, Stream> Streams { get; private set; }
132+
133+
public void Log(object message)
134+
{
135+
Debug.Print(DateTime.Now + " " + Environment.MachineName + ": Log: " + message);
136+
}
137+
129138
public void MessageReceived(ChannelMessage msg)
130139
{
131140
switch (msg.Type)
@@ -151,10 +160,6 @@ public void MessageReceived(ChannelMessage msg)
151160
}
152161
}
153162

154-
public int ConnectionCount { get; set; }
155-
public IDictionary<int, Stream> Streams { get; private set; }
156-
public IDictionary<int, TcpListener> Listeners { get; private set; }
157-
158163
public bool WriteMessage(ChannelMessage msg)
159164
{
160165
var data = msg.ToByteArray();
@@ -166,10 +171,6 @@ public bool WriteMessage(ChannelMessage msg)
166171
return ret == ChannelReturnCodes.Ok;
167172
}
168173

169-
public void Log(object message)
170-
{
171-
}
172-
173174
#endregion
174175
}
175176
}

0 commit comments

Comments
 (0)