public async Task <ActionResult> Create(FormCollection form) { FirmwareUpgradeViewModel vm = new FirmwareUpgradeViewModel(); if (TryUpdateModel(vm)) { byte[] upgradeBytes = null; using (BinaryReader r = new BinaryReader(vm.UploadedFile.InputStream)) { upgradeBytes = r.ReadBytes(vm.UploadedFile.ContentLength); } // Calculate MD5 of the file. string fileMD5 = HexFileUtility.GetMd5Hash(upgradeBytes); FirmwareUpgrade upgrade = new FirmwareUpgrade { Name = vm.Name, FileHash = fileMD5, FileData = upgradeBytes, }; upgrade = await upgradesService.CreateFirmwareUpgrade(upgrade); if (upgrade == null) { ModelState.AddModelError("UpgradeCreationFailed", "Failed to create upgrade. Does an upgrade with this name already exist?"); return(View(vm)); } } return(RedirectToAction("Index")); }
public async Task <HttpResponseMessage> GetFirmware(string deviceName) { string tag = Request.Headers.IfNoneMatch .Select(eTag => eTag.Tag.Replace("\"", "")) .FirstOrDefault(); FirmwareUpgrade upgrade = await devicesService.GetNewFirmware(deviceName, tag); await devicesService.UpdateLastContactTime(deviceName); if (upgrade != null) { // run HEXMOD on the upgrade file (get flash attributes Start, Length, CRC16-CCITT (iReflected, oReflected)) HexFileUtility.FlashCRCData flashCRC = HexFileUtility.ProcessHEX(upgrade.FileData); var response = new HttpResponseMessage(HttpStatusCode.OK); response.Content = new ByteArrayContent(upgrade.FileData.Concat(flashCRC.bytesToAppend).ToArray()); response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/octet-stream"); response.Headers.ETag = new EntityTagHeaderValue(String.Format("\"{0}\"", upgrade.FileHash), false); return(response); } else { return(Request.CreateResponse(HttpStatusCode.NoContent)); } }
/// <summary> /// /// </summary> /// <param name="expected"></param> /// <param name="actual"></param> /// <returns></returns> private bool VerifyHash(byte[] expected, byte[] actual) { bool verified = FirmwareUpgrade.CompareMD5Hash(expected, actual); Log.Debug(string.Format("VerifyHash: expected=\"{0}\"", FirmwareUpgrade.MD5HashToString(expected))); Log.Debug(string.Format("VerifyHash: actual =\"{0}\"", FirmwareUpgrade.MD5HashToString(actual))); Log.Debug(string.Format("VerifyHash: {0}", verified ? "PASSED" : "FAILED")); return(verified); }
public async Task <ActionResult> Delete(FirmwareUpgradeViewModel vm) { FirmwareUpgrade upgrade = new FirmwareUpgrade { Id = vm.Id }; await upgradesService.DeleteFirmwareUpgrade(upgrade); return(RedirectToAction("Index")); }
public async Task DeleteFirmwareUpgrade(FirmwareUpgrade upgrade) { // Attach the upgrade object. db.FirmwareUpgrades.Attach(upgrade); // Load related logging devices so they can have the upgrade unassigned. await db.Entry(upgrade).Collection(dbUpgrade => dbUpgrade.LoggingDevices).LoadAsync(); // Delete upgrade. db.Entry(upgrade).State = EntityState.Deleted; await db.SaveChangesAsync(); }
public async Task <ActionResult> DownloadFirmwareFile(int id) { FirmwareUpgrade upgrade = await upgradesService.GetFirmwareUpgradeFile(id); if (upgrade != null) { return(File(upgrade.FileData, "application/octet-stream", string.Format("{0}_upgradeFile.hex", upgrade.Name))); } else { return(null); } }
public async Task <FirmwareUpgrade> GetFirmwareUpgradeFile(int upgradeId) { FirmwareUpgrade firmwareUpgrade = await FirmwareUpgradeList .SingleOrDefaultAsync(upgrade => upgrade.Id == upgradeId); if (firmwareUpgrade == null) { // Can't find the upgrade. throw new UpgradeNotFoundException(upgradeId); } return(firmwareUpgrade); }
public async Task <FirmwareUpgrade> CreateFirmwareUpgrade(FirmwareUpgrade upgrade) { try { db.Entry(upgrade).State = EntityState.Added; await db.SaveChangesAsync(); } catch (Exception e) { Trace.TraceError("Error saving logging device: {0}", e); return(null); } return(upgrade); }
public Form1() { InitializeComponent(); //파일로 로그를 보려면 아래에서 Log.FileLog(); mPenAgent = PenCommAgent.GetInstance(this); mPenAgent.Init(); fuDlg = new FirmwareUpgrade(mPenAgent); penDataFrm = new PenDataForm(this); width = pictureBox1.Width; height = pictureBox1.Height; mBitmap = new Bitmap(pictureBox1.Width, pictureBox1.Height); }
/// <summary> /// Download firmware zip file from iNet server. /// </summary> /// <remarks> /// </remarks> /// <returns> /// true if call to iNet succeeds, and it returns us new firmware. /// /// false if call to iNet succeeds, but iNet purposely doesn't give us back any firmware. /// /// Throws an exception if we fail to download firmware due to download errors, etc. /// </returns> private bool DownloadFirmware() { string funcMsg = Name + ".DownloadFirmware: "; Log.Debug(string.Format("{0}Attempting to download firmware; the maximum number of tries is {1}", funcMsg, MAX_ATTEMPTS)); string msg = string.Empty; for (int attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) { Log.Debug(string.Format("{0}attempt {1} of {2}", funcMsg, attempt, MAX_ATTEMPTS)); Master.Instance.ConsoleService.UpdateAction(ConsoleServiceResources.DOWNLOADING); //We don't need to consider SubType for DSX as of now, since the Firmware varies only for instrument's Subtype. string equipmentType = Configuration.DockingStation.Type.ToString(); using (InetDownloader inetDownloader = new InetDownloader()) { FirmwareUpgrade = inetDownloader.DownloadFirmwareUpgrade(null, _firmwareUpgradeEvent.Errors, EquipmentTypeCode.VDS, equipmentType, null, equipmentType); } if (FirmwareUpgrade == null) { Log.Debug(string.Format("{0}Nothing returned by iNet.", funcMsg)); return(false); } if (FirmwareUpgrade.Firmware == null) { Log.Debug(string.Format("{0}No firmware returned by iNet.", funcMsg)); return(false); } Log.Debug(string.Format("{0}Firmware DeviceType: {1}.", funcMsg, FirmwareUpgrade.EquipmentCode)); Log.Debug(string.Format("{0}Firmware Version: {1}.", funcMsg, FirmwareUpgrade.Version)); Log.Debug(string.Format("{0}Firmware Size: {1} bytes.", funcMsg, FirmwareUpgrade.Firmware.Length)); Log.Debug(string.Format("{0}Firmware iNet checksum: \"{1}\".", funcMsg, FirmwareUpgrade.MD5HashToString(FirmwareUpgrade.MD5Hash))); if (FirmwareUpgrade.EquipmentCode != Configuration.DockingStation.Type.ToString()) { msg = string.Format("Downloaded firmware is for wrong device type (\"{0}\"). Expected \"{1}\" ", FirmwareUpgrade.EquipmentCode, Configuration.DockingStation.Type.ToString()); Log.Error(msg); throw new FirmwareUpgradeException(msg); } Master.Instance.ConsoleService.UpdateAction(ConsoleServiceResources.VERIFYING); byte[] hash = new MD5CryptoServiceProvider().ComputeHash(FirmwareUpgrade.Firmware); bool verified = VerifyHash(FirmwareUpgrade.MD5Hash, hash); if (verified) { Log.Debug(string.Format("{0}Firmware successfully downloaded.", funcMsg)); return(true); } Log.Debug(string.Format("{0}Verification of MD5 hash failed.", funcMsg)); } msg = string.Format("{0}Unable to download firwmare after {1} attempts.", funcMsg, MAX_ATTEMPTS); Log.Error(msg); throw new FirmwareUpgradeException(msg); }