Files
Mass-Imaging-Tool/MIT Master Server/Program.cs

99 lines
3.2 KiB
C#

using Articulate_Network;
using Articulate_Network.Events;
using Articulate_Network.Managers;
using MIT_Packets;
using MIT_Packets.Transfer;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
namespace MIT_Master_Server
{
class Program
{
static Server server;
static FileInfo file = new FileInfo(@"D:\iPad_10.2_15.1_19B74_Restore.ipsw");
static int maxConcurrentTransfers = 5;
static void Main(string[] args)
{
AnnouncePacket.Register();
server = new Server();
var watch = Stopwatch.StartNew();
server.Start("10.136.5.59", 50).ContinueWith(t =>
{
watch.Stop();
Console.WriteLine();
Console.WriteLine($"Server listening on port 50, took {watch.ElapsedMilliseconds} ms");
});
server.ClientConnected += Server_ClientConnected;
server.DataReceived += Server_DataReceived;
Console.ReadLine();
}
private static async void Server_DataReceived(object sender, Articulate_Network.Events.DataReceivedEventArgs e)
{
if (e.Packet is AnnouncePacket)
{
AnnouncePacket p = (AnnouncePacket)e.Packet;
Console.WriteLine($"Received client announcement. Requesting config: {p.RequestConfig}");
Console.WriteLine(p.MacAddress);
int packetsSent = 0;
if (p.RequestConfig)
{
await server.SendPacket(e.Client, new StartFileTransferPacket()
{
FileName = file.FullName,
ExpectedSize = file.Length
});
byte[] buffer = new byte[10240];
using (var fs = new FileStream(file.FullName, FileMode.Open, FileAccess.Read))
{
int bytesRead;
while ((bytesRead = await fs.ReadAsync(buffer, 0, buffer.Length)) > 0)
{
await server.SendPacket(e.Client, new SendFileChunkPacket()
{
Chunk = buffer,
ChunkSize = bytesRead
});
packetsSent += 1;
}
}
Console.WriteLine($"Completed file transfer. Sent {packetsSent} packets.");
await server.SendPacket(e.Client, new EndFileTransferPacket() { Completed = true });
}
}
}
private static async void Server_ClientConnected(object sender, ClientConnectedEventArgs e)
{
//Console.WriteLine($"Client Connected from: {(e.TcpClient.Client.RemoteEndPoint as IPEndPoint).Address}");
await server.SendPacket(e.TcpClient, new TestPacket()
{
TestOne = 50,
TestTwo = true
});
}
}
}