Add implicit FTPS

This commit is contained in:
2019-07-20 16:05:08 +02:00
parent 01fbd0b74e
commit bbd83492a9
3 changed files with 39 additions and 1 deletions

View File

@@ -66,6 +66,12 @@ namespace DearFTP.Configurations
return false; return false;
} }
if (Server.ImplicitFtpsPort != 0 && !Tls.AllowTls)
{
Console.WriteLine("Implicit FTPS is activated but TLS is not allowed");
return false;
}
if (Tls.AllowTls) if (Tls.AllowTls)
{ {
if (string.IsNullOrWhiteSpace(Tls.CertificatePath)) if (string.IsNullOrWhiteSpace(Tls.CertificatePath))

View File

@@ -8,6 +8,7 @@ namespace DearFTP.Configurations
{ {
public ushort Port { get; set; } = 21; public ushort Port { get; set; } = 21;
public ushort ForceDataPort { get; set; } = 0; public ushort ForceDataPort { get; set; } = 0;
public ushort ImplicitFtpsPort { get; set; } = 0;
public string MOTD { get; set; } = "DearFTP v0.1"; public string MOTD { get; set; } = "DearFTP v0.1";
public string LoginMessage { get; set; } = "Logged in as %user%"; public string LoginMessage { get; set; } = "Logged in as %user%";

View File

@@ -21,6 +21,7 @@ namespace DearFTP
private bool _isRunning = true; private bool _isRunning = true;
private TcpListener _listener; private TcpListener _listener;
private TcpListener _ftpsListener;
public FtpServer() public FtpServer()
{ {
@@ -39,13 +40,22 @@ namespace DearFTP
Logger.Log("DearFTP started"); Logger.Log("DearFTP started");
Logger.Log(); Logger.Log();
int implicitFtpsPort = Configuration.Server.ImplicitFtpsPort;
if (implicitFtpsPort != 0)
{
Task.Run(() => FtpsTcpLoop());
}
TcpLoop(); TcpLoop();
} }
public void Stop() public void Stop()
{ {
_isRunning = false; _isRunning = false;
_listener.Stop(); _listener.Stop();
_ftpsListener?.Stop();
StaticDataConnection.Stop(); StaticDataConnection.Stop();
} }
@@ -64,12 +74,33 @@ namespace DearFTP
} }
} }
private void CreateSession(TcpClient client) private void FtpsTcpLoop()
{
_ftpsListener = new TcpListener(IPAddress.Any, Configuration.Server.ImplicitFtpsPort);
_ftpsListener.Start(5);
Logger.Log($"Listening on: {_ftpsListener.LocalEndpoint}");
while (_isRunning)
{
var client = _ftpsListener.AcceptTcpClient();
Task.Run(() => CreateSession(client, true));
}
}
private void CreateSession(TcpClient client, bool implicitFtps = false)
{ {
Logger.Log($"Client connected: {client.Client.RemoteEndPoint}"); Logger.Log($"Client connected: {client.Client.RemoteEndPoint}");
using (var session = new Session(client)) using (var session = new Session(client))
{ {
if (implicitFtps)
{
session.ActivateTls();
session.DataConnection.ActivateTls();
}
session.Start(); session.Start();
} }
} }