123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376 |
- using AwInitilizer.Assist;
- using AwInitilizer.Model;
- using InitializerModel;
- using Newtonsoft.Json;
- using System;
- using System.Collections.Generic;
- using System.Collections.Specialized;
- using System.ComponentModel;
- using System.Globalization;
- using System.IO;
- using System.Linq;
- using System.Net;
- using System.Text;
- using System.Threading.Tasks;
- using System.Web;
- using System.Windows.Ink;
- namespace AwInitilizer.Procedure
- {
- public class FirmwareUpdateProcedure : ProcedureBase
- {
- internal string Version;
- internal string fileName;
- internal string module;
-
- private FirmwareUpdateModel _model;
- public FirmwareUpdateProcedure(FirmwareUpdateModel model) :base()
- {
- _model = model;
- Name = string.Format("Firmware {0}", model.Module);
- Content = string.Format("Update {0} Firemware and check version matched", model.Module);
- Version = model.Version;
- fileName = model.FirmwareFileName;
- module = model.Module;
- }
- internal override async Task<bool> Run()
- {
- var oldVersion = await GetSpecificVersion();
- MesLogData.Add($"{module}OldVersion", oldVersion, true);
- if (string.IsNullOrEmpty(oldVersion))
- {
- InfoLog += $"Get {Name} version failed\n";
- Logger.Print($"Get {Name} version failed",isError:true);
- return false;
- }
- InfoLog += $"version before update : {oldVersion}\n";
- if (oldVersion == Version)
- {
- Logger.Print("Updated version detected");
- }
- Logger.Print("Firmware Uploading...");
- var uploadResult = await Uploadfiremware(fileName);
- MesLogData.Add($"{module}Upload", uploadResult.ToString(), true);
- if (uploadResult)
- {
-
- Logger.Print("Waiting restart..");
- bool response = false;
- int pollinfCnt = 0;
- await Task.Delay(TimeSpan.FromMinutes(2));
- for (pollinfCnt = 0; pollinfCnt < 28; pollinfCnt++)
- {
- await Task.Delay(TimeSpan.FromSeconds(15));
- response = await ChekCsuBootCompelete();
- if (response)
- break;
- }
-
- if(pollinfCnt>=28)
- {
- Logger.Print("Wait restart timeout",isError:true);
- return false;
- }
- }
- else
- {
- InfoLog += $"Upload {Name} failed\n";
- Logger.Print($"Upload {Name} failed", isError: true);
- return false;
- }
- var updatedVersion = await GetSpecificVersion();
-
- if (string.IsNullOrEmpty(updatedVersion))
- {
- InfoLog += $"Get updated {Name} version failed\n";
- Logger.Print($"Get updated {Name} version failed", isError: true);
- MesLogData.Add($"{module}NewVersion", "empty" , false);
- return false;
- }
- InfoLog += $"Get updated version : {updatedVersion}\n";
- bool isVersionMatched = false;
- if(module== "CsuRootFsFwRev")
- {
- isVersionMatched = updatedVersion.StartsWith(Version);
- }
- else
- {
- isVersionMatched = updatedVersion == Version;
- }
- if (isVersionMatched)
- {
- InfoLog += $"{Name}:Updated Version mismatched\n";
- Logger.Print($"{Name}:Updated Version mismatched", isError: true);
- MesLogData.Add($"{module}NewVersion", updatedVersion, false);
- return false;
- }
- else
- {
- MesLogData.Add($"{module}NewVersion", updatedVersion, true);
- Logger.Print($"{Name}:updated success");
- }
- return true;
- }
- internal virtual async Task<string> GetSpecificVersion()
- {
- var versions = await GetVersion();
- if(versions == null ||
- !versions.ContainsKey(module))
- {
- return "";
- }
- return versions[module];
- }
- internal async Task<Dictionary<string,string>> GetVersion(bool isConnectTest = false)
- {
- try
- {
- var result = await EvApi.GetVersion();
- InfoLog += $"get version response:{result.Response}\n";
- return result.Result;
- }
- catch(Exception e)
- {
- if (!isConnectTest)
- {
- Logger.Print("Get Version Failed", isError: true);
- Logger.Print(e.Message + "", isError: true);
- InfoLog += "Get Version Failed\n";
- InfoLog += e.Message;
- InfoLog += "\n";
- }
- return null;
- }
- }
- internal async Task<bool> Uploadfiremware(string fileName)
- {
- try
- {
- var result = await EvApi.Uploadfirmware(fileName);
- InfoLog += $"get firmware update response {result.Response}\n";
- if (result.Response != null && result.Response.Contains("file is uploaded"))
- return true;
- return false;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- }
- catch(Exception e)
- {
- Logger.Print("Upload Firmware Failed", isError: true);
- Logger.Print(e.Message + "", isError: true);
- InfoLog += "Upload Firmware Failed\n";
- InfoLog += e.Message;
- InfoLog += "\n";
- return false;
- }
- }
- public async Task<byte[]> UploadFiles(string address, IEnumerable<UploadFile> files, NameValueCollection values)
- {
- var request = (HttpWebRequest) HttpWebRequest.Create(address);
-
- request.KeepAlive = true;
- request.Accept = "*/*";
- request.Method = "POST";
- request.Referer = address;
- request.Expect = "";
- var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
- request.ContentType = "multipart/form-data; boundary=" + boundary;
- boundary = "--" + boundary;
- using (var requestStream = request.GetRequestStream())
- {
-
- foreach (string name in values.Keys)
- {
- var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine));
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.UTF8.GetBytes(values[name] + Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- }
-
- foreach (var file in files)
- {
- var buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.UTF8.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"; filename=\"{1}\"{2}", file.Name, file.Filename, Environment.NewLine));
- requestStream.Write(buffer, 0, buffer.Length);
- var ctype = MimeMapping.GetMimeMapping(file.Filename);
- buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", MimeMapping.GetMimeMapping(file.Filename), Environment.NewLine));
- requestStream.Write(buffer, 0, buffer.Length);
- file.Stream.CopyTo(requestStream);
- buffer = Encoding.ASCII.GetBytes(Environment.NewLine);
- requestStream.Write(buffer, 0, buffer.Length);
- }
- var boundaryBuffer = Encoding.ASCII.GetBytes(boundary + "--");
- requestStream.Write(boundaryBuffer, 0, boundaryBuffer.Length);
- }
- using (var response = await request.GetResponseAsync())
- using (var responseStream = response.GetResponseStream())
- using (var stream = new MemoryStream())
- {
- responseStream.CopyTo(stream);
- return stream.ToArray();
- }
- }
- [Obsolete]
- public void UploadFileAsync(NameValueCollection values, UploadFile file )
- {
-
- var _asyncOperation = AsyncOperationManager.CreateOperation(null);
- var ms = new MemoryStream();
-
- file.Stream.CopyTo(ms);
-
- ms.Position = 0;
- Task.Factory.StartNew(() =>
- {
- try
- {
- const string contentType = "application/octet-stream";
- var request = WebRequest.Create($"https://{ServerIpAddress}/get_query_action.php");
- request.Method = "POST";
- var boundary = "---------------------------" + DateTime.Now.Ticks.ToString("x", NumberFormatInfo.InvariantInfo);
- request.ContentType = "multipart/form-data; boundary=" + boundary;
- boundary = "--" + boundary;
- var dataStream = new MemoryStream();
- byte[] buffer;
-
- foreach (string name in values.Keys)
- {
- buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
- dataStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.ASCII.GetBytes(string.Format("Content-Disposition: form-data; name=\"{0}\"{1}{1}", name, Environment.NewLine));
- dataStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.UTF8.GetBytes(values[name] + Environment.NewLine);
- dataStream.Write(buffer, 0, buffer.Length);
- }
-
- buffer = Encoding.ASCII.GetBytes(boundary + Environment.NewLine);
- dataStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.UTF8.GetBytes($"Content-Disposition: form-data; name=\"{file.Name}\"; filename=\"{file.Filename}\"{Environment.NewLine}");
- dataStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.ASCII.GetBytes(string.Format("Content-Type: {0}{1}{1}", MimeMapping.GetMimeMapping(file.Filename), Environment.NewLine));
- dataStream.Write(buffer, 0, buffer.Length);
- ms.CopyTo(dataStream);
- buffer = Encoding.ASCII.GetBytes(Environment.NewLine);
- dataStream.Write(buffer, 0, buffer.Length);
- buffer = Encoding.ASCII.GetBytes(boundary + "--");
- dataStream.Write(buffer, 0, buffer.Length);
- dataStream.Position = 0;
-
- request.ContentLength = dataStream.Length;
- var requestStream = request.GetRequestStream();
-
- var size = dataStream.Length;
- const int chunkSize = 64 * 1024;
- buffer = new byte[chunkSize];
- long bytesSent = 0;
- int readBytes;
- while ((readBytes = dataStream.Read(buffer, 0, buffer.Length)) > 0)
- {
- requestStream.Write(buffer, 0, readBytes);
- bytesSent += readBytes;
- var status = "Uploading... " + bytesSent / 1024 + "KB of " + size / 1024 + "KB";
- Console.WriteLine(status);
- }
-
- using (var response = request.GetResponse())
- using (var responseStream = response.GetResponseStream())
- using (var stream = new MemoryStream())
- {
-
- responseStream.CopyTo(stream);
- var result = Encoding.Default.GetString(stream.ToArray());
- Console.WriteLine(result);
- }
- }
- catch (Exception e )
- {
- Console.WriteLine(e);
- }
- }, System.Threading.CancellationToken.None, TaskCreationOptions.LongRunning, TaskScheduler.Default);
- }
- }
- }
|