/// <summary> /// Contacts server for Login Check /// </summary> /// <param name="Username">Username</param> /// <param name="Password">Password</param> /// <param name="HWID">Hardware ID</param> /// <param name="Token">Users Token</param> /// <returns></returns> public string Login(string Username, string Password, out string Token) { string Success; if (!clientSocket.Connected) { Connect(); } CleanStream(); Token = ""; if (!Prepare.PrepareString(Username) || !Prepare.PrepareString(Password)) { if (!Prepare.PrepareString(Username)) { Console.WriteLine("Prepare Failed: Username="******"Prepare Failed: Password="******"Empty Credentials"); } //Sockets Connection //Debug - Log Times Stopwatch timer = new Stopwatch(); timer.Start(); string Response = API.SendAPIRequest(clientSocket, "Request=Login&Username="******"&Password="******"Login Found") { Token = Response.Split('-')[1]; Console.WriteLine("Login Found: " + Username + " -> " + Password + " -> " + Token); Success = "Login Found"; } else { Console.WriteLine("Error: Login not Found -> " + Response); Success = Response; } Console.WriteLine(timer.Elapsed.TotalMilliseconds + "ms"); timer.Reset(); return(Success); }
public bool Download(string Token, string SyncPath, string RelevantPath, string FileName) { string FullPath = SyncPath + "\\" + RelevantPath + "\\" + FileName; if (!clientSocket.Connected) { Connect(); } CleanStream(); if (!Prepare.PrepareString(Token)) { if (!Prepare.PrepareString(Token)) { Console.WriteLine("Prepare Failed: Token=" + Token); } return(false); } Stopwatch timer = new Stopwatch(); timer.Start(); serverStream = clientSocket.GetStream(); byte[] outStream = Encoding.ASCII.GetBytes("Request=Download&Token=" + Token + "&SyncPath=" + SyncPath + "&RelevantPath=" + RelevantPath + "&FileName=" + FileName); byte[] outSize = BitConverter.GetBytes(outStream.Length); Console.WriteLine("Raw Data: " + BitConverter.ToInt32(outSize, 0) + " -> " + Encoding.ASCII.GetString(outStream)); //Write Bytes serverStream.Write(outSize, 0, outSize.Length); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); byte[] size = new byte[4]; serverStream.Read(size, 0, size.Length); byte[] bytesFrom = new byte[BitConverter.ToInt32(size, 0)]; Console.WriteLine("ExpectedSize: " + BitConverter.ToInt32(size, 0) + " bytesFrom Length: " + bytesFrom.Length); serverStream.Read(bytesFrom, 0, bytesFrom.Length); string returndata = Encoding.ASCII.GetString(bytesFrom); //Out of memory???? Console.WriteLine("Data from Server: " + returndata); if (Request.Contains("Size", returndata)) { long ExpectedSize = Convert.ToInt64(Request.Get("Size", returndata)); //Chunked Data Sizes byte[] buffer = new byte[4096]; using (FileStream fileStream = new FileStream(FullPath, FileMode.OpenOrCreate)) { long bytesReadTotal = 0; int bytesRead = 0; while (ExpectedSize > bytesReadTotal && (bytesRead = serverStream.Read(buffer, 0, buffer.Length)) > 0) { fileStream.Write(buffer, 0, bytesRead); bytesReadTotal += bytesRead; Console.WriteLine("\rNetwork Size: {0} Bytes Read: {1}", bytesRead, bytesReadTotal); double pctComplete = ((double)bytesReadTotal / ExpectedSize) * 100; Console.WriteLine("Completed: {0}%", pctComplete); } fileStream.Dispose(); } Console.WriteLine("Download Completed: " + FullPath + " -> Size: " + ExpectedSize); } else { Console.WriteLine("Size Parameter was not provided"); } Console.WriteLine(timer.Elapsed.TotalMilliseconds + "ms"); timer.Reset(); //Get Response size = new byte[4]; serverStream.Read(size, 0, size.Length); bytesFrom = new byte[BitConverter.ToInt32(size, 0)]; Console.WriteLine("ExpectedSize: " + BitConverter.ToInt32(size, 0) + " bytesFrom Length: " + bytesFrom.Length); serverStream.Read(bytesFrom, 0, bytesFrom.Length); returndata = Encoding.ASCII.GetString(bytesFrom); Console.WriteLine("Data from Server: " + returndata); string Created; string LastModified; string Status; if (API.Contains("Created", returndata)) { Created = API.Get("Created", returndata); if (API.Contains("LastModified", returndata)) { LastModified = API.Get("LastModified", returndata); if (API.Contains("Status", returndata)) { Status = API.Get("Status", returndata); if (Status == "File Upload Completed") { File.SetCreationTimeUtc(FullPath, DateTime.FromBinary(Convert.ToInt64(Created))); File.SetLastWriteTimeUtc(FullPath, DateTime.FromBinary(Convert.ToInt64(LastModified))); Console.WriteLine("File Download Completed"); return(true); } else { Console.WriteLine("File Download Failed!"); } } else { Console.WriteLine("Status Parameter not found"); } } else { Console.WriteLine("LastModified Parameter not found"); } } else { Console.WriteLine("Created Parameter not found"); } return(false); }
/// <summary> /// Contacts server for a download - Cheat / Update /// </summary> /// <param name="Token">User Token</param> /// <param name="File">File to Download</param> /// <param name="productid">Product ID</param> /// <returns></returns> public bool Upload(string Token, string SyncPath, string RelevantPath, string FileName) { string FullPath = SyncPath + "\\" + RelevantPath + "\\" + FileName; long Created = File.GetCreationTimeUtc(FullPath).ToBinary(); long LastModified = File.GetLastWriteTimeUtc(FullPath).ToBinary(); long Size = new FileInfo(FullPath).Length; if (!clientSocket.Connected) { Connect(); } CleanStream(); if (!Prepare.PrepareString(Token)) { if (!Prepare.PrepareString(Token)) { Console.WriteLine("Prepare Failed: Token=" + Token); } return(false); } //Sockets Connection //Debug - Log Times Stopwatch timer = new Stopwatch(); timer.Start(); serverStream = clientSocket.GetStream(); byte[] outStream = Encoding.ASCII.GetBytes("Request=Upload&Token=" + Token + "&SyncPath=" + SyncPath + "&RelevantPath=" + RelevantPath + "&FileName=" + FileName + "&Created=" + Created + "&LastModified=" + LastModified + "&Size=" + Size); byte[] outSize = BitConverter.GetBytes(outStream.Length); Console.WriteLine("Raw Data: " + BitConverter.ToInt32(outSize, 0) + " -> " + Encoding.ASCII.GetString(outStream)); //Write Bytes serverStream.Write(outSize, 0, outSize.Length); serverStream.Write(outStream, 0, outStream.Length); serverStream.Flush(); //Wait for Response - TODO: Add Recieve Byte outSize using (FileStream fileStream = File.OpenRead(FullPath)) { int totalBytes = 0; int bytesRead = 0; while (true) { byte[] buffer = new byte[13106]; //65536 Bytes * 2 = 1310720 Bytes/ps || 10 Mbps if ((totalBytes + buffer.Length) <= Size) //sent bytes + sending bytes smaller than or equal to Size of File { if ((bytesRead = fileStream.Read(buffer, 0, buffer.Length)) > 0) { serverStream.Write(buffer, 0, bytesRead); totalBytes += bytesRead; Console.Write("\rNetwork Size: {0} Bytes Read: {1}", buffer.Length, totalBytes); } else { Console.WriteLine("FileStream == 0"); break; } } else { if ((bytesRead = fileStream.Read(buffer, 0, (int)Size - totalBytes)) > 0) { serverStream.Write(buffer, 0, bytesRead); totalBytes += bytesRead; Console.WriteLine("\rNetwork Size: {0} Bytes Read: {1}", buffer.Length, totalBytes); } else { Console.WriteLine("FileStream == 0"); break; } } Thread.Sleep(1); //10ms = 10 mbps //1ms = 100mbps } serverStream.Flush(); } Console.WriteLine(timer.Elapsed.TotalMilliseconds + "ms"); timer.Reset(); //Get Response byte[] size = new byte[4]; serverStream.Read(size, 0, size.Length); byte[] bytesFrom = new byte[BitConverter.ToInt32(size, 0)]; Console.WriteLine("ExpectedSize: " + BitConverter.ToInt32(size, 0) + " bytesFrom Length: " + bytesFrom.Length); serverStream.Read(bytesFrom, 0, bytesFrom.Length); string returndata = Encoding.ASCII.GetString(bytesFrom); Console.WriteLine("Data from Server: " + returndata); if (returndata == "File Download Completed") { return(true); } return(false); }