コード例 #1
0
ファイル: Remote.cs プロジェクト: morefun0302/Aaru
        /// <summary>Submits a device report</summary>
        /// <param name="report">Device report</param>
        public static void SubmitReport(DeviceReportV2 report)
        {
            var submitThread = new Thread(() =>
            {
                try
                {
                #if DEBUG
                    System.Console.WriteLine("Uploading device report");
                #else
                    Aaru.Console.AaruConsole.DebugWriteLine("Submit stats", "Uploading device report");
                #endif

                    string json = JsonConvert.SerializeObject(report, Formatting.Indented, new JsonSerializerSettings
                    {
                        NullValueHandling = NullValueHandling.Ignore
                    });

                    byte[] jsonBytes = Encoding.UTF8.GetBytes(json);
                    var request      = WebRequest.Create("https://www.aaru.app/api/uploadreportv2");
                    ((HttpWebRequest)request).UserAgent = $"Aaru {typeof(Version).Assembly.GetName().Version}";
                    request.Method        = "POST";
                    request.ContentLength = jsonBytes.Length;
                    request.ContentType   = "application/json";
                    Stream reqStream      = request.GetRequestStream();
                    reqStream.Write(jsonBytes, 0, jsonBytes.Length);
                    reqStream.Close();
                    WebResponse response = request.GetResponse();

                    if (((HttpWebResponse)response).StatusCode != HttpStatusCode.OK)
                    {
                        return;
                    }

                    Stream data = response.GetResponseStream();
                    var reader  = new StreamReader(data ?? throw new InvalidOperationException());

                    reader.ReadToEnd();
                    data.Close();
                    response.Close();
                }
                catch (WebException)
                {
                    // Can't connect to the server, do nothing
                }

                // ReSharper disable once RedundantCatchClause
                catch
                {
                #if DEBUG
                    if (Debugger.IsAttached)
                    {
                        throw;
                    }
                #endif
                }
            });

            submitThread.Start();
        }
コード例 #2
0
 public DeviceDto(DeviceReportV2 report)
 {
     ATA            = report.ATA;
     ATAPI          = report.ATAPI;
     CompactFlash   = report.CompactFlash;
     FireWire       = report.FireWire;
     MultiMediaCard = report.MultiMediaCard;
     PCMCIA         = report.PCMCIA;
     SCSI           = report.SCSI;
     SecureDigital  = report.SecureDigital;
     USB            = report.USB;
     Manufacturer   = report.Manufacturer;
     Model          = report.Model;
     Revision       = report.Revision;
     Type           = report.Type;
 }
コード例 #3
0
 public UploadedReport(DeviceReportV2 report)
 {
     ATA            = report.ATA;
     ATAPI          = report.ATAPI;
     CompactFlash   = report.CompactFlash;
     FireWire       = report.FireWire;
     UploadedWhen   = DateTime.UtcNow;
     MultiMediaCard = report.MultiMediaCard;
     PCMCIA         = report.PCMCIA;
     SCSI           = report.SCSI;
     SecureDigital  = report.SecureDigital;
     USB            = report.USB;
     Manufacturer   = report.Manufacturer;
     Model          = report.Model;
     Revision       = report.Revision;
     Type           = report.Type;
 }
コード例 #4
0
    public ActionResult Index()
    {
        ViewBag.Version = Assembly.GetExecutingAssembly().GetName().Version.ToString();

        try
        {
            if (System.IO.File.Exists(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(),
                                                   "Statistics", "Statistics.xml")))
            {
                try
                {
                    var statistics = new Stats();

                    var xs = new XmlSerializer(statistics.GetType());

                    FileStream fs =
                        WaitForFile(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(), "Statistics", "Statistics.xml"),
                                    FileMode.Open, FileAccess.Read, FileShare.Read);

                    statistics = (Stats)xs.Deserialize(fs);
                    fs.Close();

                    StatsConverter.Convert(statistics);

                    System.IO.File.Delete(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(),
                                                       "Statistics", "Statistics.xml"));
                }
                catch (XmlException)
                {
                    // Do nothing
                }
            }

            if (_ctx.OperatingSystems.Any())
            {
                List <NameValueStats> operatingSystems = new();

                foreach (OperatingSystem nvs in _ctx.OperatingSystems)
                {
                    operatingSystems.Add(new NameValueStats
                    {
                        name =
                            $"{DetectOS.GetPlatformName((PlatformID)Enum.Parse(typeof(PlatformID), nvs.Name), nvs.Version)}{(string.IsNullOrEmpty(nvs.Version) ? "" : " ")}{nvs.Version}",
                        Value = nvs.Count
                    });
                }

                ViewBag.repOperatingSystems = operatingSystems.OrderBy(os => os.name).ToList();
            }

            if (_ctx.Versions.Any())
            {
                List <NameValueStats> versions = new();

                foreach (Version nvs in _ctx.Versions)
                {
                    versions.Add(new NameValueStats
                    {
                        name  = nvs.Name == "previous" ? "Previous than 3.4.99.0" : nvs.Name,
                        Value = nvs.Count
                    });
                }

                ViewBag.repVersions = versions.OrderBy(ver => ver.name).ToList();
            }

            if (_ctx.Commands.Any())
            {
                ViewBag.repCommands = _ctx.Commands.OrderBy(c => c.Name).ToList();
            }

            if (_ctx.Filters.Any())
            {
                ViewBag.repFilters = _ctx.Filters.OrderBy(filter => filter.Name).ToList();
            }

            if (_ctx.MediaFormats.Any())
            {
                ViewBag.repMediaImages = _ctx.MediaFormats.OrderBy(filter => filter.Name).ToList();
            }

            if (_ctx.Partitions.Any())
            {
                ViewBag.repPartitions = _ctx.Partitions.OrderBy(filter => filter.Name).ToList();
            }

            if (_ctx.Filesystems.Any())
            {
                ViewBag.repFilesystems = _ctx.Filesystems.OrderBy(filter => filter.Name).ToList();
            }

            if (_ctx.Medias.Any())
            {
                List <MediaItem> realMedia    = new();
                List <MediaItem> virtualMedia = new();

                foreach (Media nvs in _ctx.Medias)
                {
                    try
                    {
                        (string type, string subType)mediaType =
                            MediaType.MediaTypeToString((CommonTypes.MediaType)Enum.Parse(typeof(CommonTypes.MediaType),
                                                                                          nvs.Type));

                        if (nvs.Real)
                        {
                            realMedia.Add(new MediaItem
                            {
                                Type    = mediaType.type,
                                SubType = mediaType.subType,
                                Count   = nvs.Count
                            });
                        }
                        else
                        {
                            virtualMedia.Add(new MediaItem
                            {
                                Type    = mediaType.type,
                                SubType = mediaType.subType,
                                Count   = nvs.Count
                            });
                        }
                    }
                    catch
                    {
                        if (nvs.Real)
                        {
                            realMedia.Add(new MediaItem
                            {
                                Type    = nvs.Type,
                                SubType = null,
                                Count   = nvs.Count
                            });
                        }
                        else
                        {
                            virtualMedia.Add(new MediaItem
                            {
                                Type    = nvs.Type,
                                SubType = null,
                                Count   = nvs.Count
                            });
                        }
                    }
                }

                if (realMedia.Count > 0)
                {
                    ViewBag.repRealMedia = realMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).
                                           ToList();
                }

                if (virtualMedia.Count > 0)
                {
                    ViewBag.repVirtualMedia = virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).
                                              ToList();
                }
            }

            if (_ctx.DeviceStats.Any())
            {
                List <DeviceItem> devices = new();

                foreach (DeviceStat device in _ctx.DeviceStats.ToList())
                {
                    string xmlFile;

                    if (!string.IsNullOrWhiteSpace(device.Manufacturer) &&
                        !string.IsNullOrWhiteSpace(device.Model) &&
                        !string.IsNullOrWhiteSpace(device.Revision))
                    {
                        xmlFile = device.Manufacturer + "_" + device.Model + "_" + device.Revision + ".xml";
                    }
                    else if (!string.IsNullOrWhiteSpace(device.Manufacturer) &&
                             !string.IsNullOrWhiteSpace(device.Model))
                    {
                        xmlFile = device.Manufacturer + "_" + device.Model + ".xml";
                    }
                    else if (!string.IsNullOrWhiteSpace(device.Model) &&
                             !string.IsNullOrWhiteSpace(device.Revision))
                    {
                        xmlFile = device.Model + "_" + device.Revision + ".xml";
                    }
                    else
                    {
                        xmlFile = device.Model + ".xml";
                    }

                    xmlFile = xmlFile.Replace('/', '_').Replace('\\', '_').Replace('?', '_');

                    if (System.IO.File.Exists(Path.Combine(_env.ContentRootPath, "Reports", xmlFile)))
                    {
                        var deviceReport = new DeviceReport();

                        var xs = new XmlSerializer(deviceReport.GetType());

                        FileStream fs =
                            WaitForFile(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(), "Reports", xmlFile),
                                        FileMode.Open, FileAccess.Read, FileShare.Read);

                        deviceReport = (DeviceReport)xs.Deserialize(fs);
                        fs.Close();

                        var deviceReportV2 = new DeviceReportV2(deviceReport);

                        device.Report = _ctx.Devices.Add(new Device(deviceReportV2)).Entity;
                        _ctx.SaveChanges();

                        System.IO.File.
                        Delete(Path.Combine(_env.ContentRootPath ?? throw new InvalidOperationException(),
                                            "Reports", xmlFile));
                    }

                    devices.Add(new DeviceItem
                    {
                        Manufacturer = device.Manufacturer,
                        Model        = device.Model,
                        Revision     = device.Revision,
                        Bus          = device.Bus,
                        ReportId     = device.Report != null && device.Report.Id != 0 ? device.Report.Id : 0
                    });
                }

                ViewBag.repDevices = devices.OrderBy(device => device.Manufacturer).ThenBy(device => device.Model).
                                     ThenBy(device => device.Revision).ThenBy(device => device.Bus).ToList();
            }
        }
        catch (Exception)
        {
        #if DEBUG
            throw;
        #endif
            return(Content("Could not read statistics"));
        }

        return(View());
    }
コード例 #5
0
        public ActionResult Index()
        {
            ViewBag.Version = Assembly.GetExecutingAssembly().GetName().Version.ToString();

            try
            {
                if (
                    System.IO.File
                    .Exists(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
                                         "Statistics", "Statistics.xml")))
                {
                    try
                    {
                        Stats statistics = new Stats();

                        XmlSerializer xs = new XmlSerializer(statistics.GetType());
                        FileStream    fs =
                            WaitForFile(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), "Statistics", "Statistics.xml"),
                                        FileMode.Open, FileAccess.Read, FileShare.Read);
                        statistics = (Stats)xs.Deserialize(fs);
                        fs.Close();

                        StatsConverter.Convert(statistics);

                        System.IO.File
                        .Delete(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
                                             "Statistics", "Statistics.xml"));
                    }
                    catch (XmlException)
                    {
                        // Do nothing
                    }
                }

                if (ctx.OperatingSystems.Any())
                {
                    operatingSystems = new List <NameValueStats>();
                    foreach (OperatingSystem nvs in ctx.OperatingSystems)
                    {
                        operatingSystems.Add(new NameValueStats
                        {
                            name =
                                $"{DetectOS.GetPlatformName((PlatformID)Enum.Parse(typeof(PlatformID), nvs.Name), nvs.Version)}{(string.IsNullOrEmpty(nvs.Version) ? "" : " ")}{nvs.Version}",
                            Value = nvs.Count
                        });
                    }

                    ViewBag.repOperatingSystems = operatingSystems.OrderBy(os => os.name).ToList();

                    List <PieSeriesData> osPieData = new List <PieSeriesData>();

                    decimal totalOsCount = ctx.OperatingSystems.Sum(o => o.Count);
                    foreach (string os in ctx.OperatingSystems.Select(o => o.Name).Distinct().ToList())
                    {
                        decimal osCount = ctx.OperatingSystems.Where(o => o.Name == os).Sum(o => o.Count);

                        osPieData.Add(new PieSeriesData
                        {
                            Name =
                                DetectOS.GetPlatformName((PlatformID)Enum.Parse(typeof(PlatformID),
                                                                                os)),
                            Y        = (double?)(osCount / totalOsCount),
                            Sliced   = os == "Linux",
                            Selected = os == "Linux"
                        });
                    }

                    ViewData["osPieData"] = osPieData;

                    List <PieSeriesData> linuxPieData = new List <PieSeriesData>();

                    decimal linuxCount = ctx.OperatingSystems.Where(o => o.Name == PlatformID.Linux.ToString())
                                         .Sum(o => o.Count);
                    foreach (OperatingSystem version in
                             ctx.OperatingSystems.Where(o => o.Name == PlatformID.Linux.ToString()))
                    {
                        linuxPieData.Add(new PieSeriesData
                        {
                            Name =
                                $"{DetectOS.GetPlatformName(PlatformID.Linux, version.Version)}{(string.IsNullOrEmpty(version.Version) ? "" : " ")}{version.Version}",
                            Y = (double?)(version.Count / linuxCount)
                        });
                    }

                    ViewData["linuxPieData"] = linuxPieData;

                    List <PieSeriesData> macosPieData = new List <PieSeriesData>();

                    decimal macosCount = ctx.OperatingSystems.Where(o => o.Name == PlatformID.MacOSX.ToString())
                                         .Sum(o => o.Count);
                    foreach (OperatingSystem version in
                             ctx.OperatingSystems.Where(o => o.Name == PlatformID.MacOSX.ToString()))
                    {
                        macosPieData.Add(new PieSeriesData
                        {
                            Name =
                                $"{DetectOS.GetPlatformName(PlatformID.MacOSX, version.Version)}{(string.IsNullOrEmpty(version.Version) ? "" : " ")}{version.Version}",
                            Y = (double?)(version.Count / macosCount)
                        });
                    }

                    ViewData["macosPieData"] = macosPieData;

                    List <PieSeriesData> windowsPieData = new List <PieSeriesData>();

                    decimal windowsCount = ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString())
                                           .Sum(o => o.Count);
                    foreach (OperatingSystem version in
                             ctx.OperatingSystems.Where(o => o.Name == PlatformID.Win32NT.ToString()))
                    {
                        windowsPieData.Add(new PieSeriesData
                        {
                            Name =
                                $"{DetectOS.GetPlatformName(PlatformID.Win32NT, version.Version)}{(string.IsNullOrEmpty(version.Version) ? "" : " ")}{version.Version}",
                            Y = (double?)(version.Count / windowsCount)
                        });
                    }

                    ViewData["windowsPieData"] = windowsPieData;
                }

                if (ctx.Versions.Any())
                {
                    versions = new List <NameValueStats>();
                    foreach (Version nvs in ctx.Versions)
                    {
                        versions.Add(new NameValueStats
                        {
                            name  = nvs.Value == "previous" ? "Previous than 3.4.99.0" : nvs.Value,
                            Value = nvs.Count
                        });
                    }

                    ViewBag.repVersions = versions.OrderBy(ver => ver.name).ToList();

                    decimal totalVersionCount = ctx.Versions.Sum(o => o.Count);

                    ViewData["versionsPieData"] = ctx.Versions.Select(version => new PieSeriesData
                    {
                        Name =
                            version.Value == "previous"
                                ? "Previous than 3.4.99.0"
                                : version.Value,
                        Y = (double?)(version.Count /
                                      totalVersionCount),
                        Sliced   = version.Value == "previous",
                        Selected = version.Value == "previous"
                    }).ToList();
                }

                if (ctx.Commands.Any())
                {
                    ViewBag.repCommands = ctx.Commands.OrderBy(c => c.Name).ToList();

                    decimal totalCommandCount = ctx.Commands.Sum(o => o.Count);

                    ViewData["commandsPieData"] = ctx
                                                  .Commands.Select(command => new PieSeriesData
                    {
                        Name = command.Name,
                        Y    = (double?)(command.Count /
                                         totalCommandCount),
                        Sliced   = command.Name == "analyze",
                        Selected = command.Name == "analyze"
                    }).ToList();
                }

                if (ctx.Filters.Any())
                {
                    ViewBag.repFilters = ctx.Filters.OrderBy(filter => filter.Name).ToList();

                    List <PieSeriesData> filtersPieData = new List <PieSeriesData>();

                    decimal totalFiltersCount = ctx.Filters.Sum(o => o.Count);
                    foreach (Filter filter in ctx.Filters.ToList())
                    {
                        filtersPieData.Add(new PieSeriesData
                        {
                            Name     = filter.Name,
                            Y        = (double?)(filter.Count / totalFiltersCount),
                            Sliced   = filter.Name == "No filter",
                            Selected = filter.Name == "No filter"
                        });
                    }

                    ViewData["filtersPieData"] = filtersPieData;
                }

                if (ctx.MediaFormats.Any())
                {
                    ViewBag.repMediaImages = ctx.MediaFormats.OrderBy(filter => filter.Name).ToList();

                    List <PieSeriesData> formatsPieData = new List <PieSeriesData>();

                    decimal totalFormatsCount = ctx.MediaFormats.Sum(o => o.Count);
                    decimal top10FormatCount  = 0;

                    foreach (MediaFormat format in ctx.MediaFormats.OrderByDescending(o => o.Count).Take(10))
                    {
                        top10FormatCount += format.Count;

                        formatsPieData.Add(new PieSeriesData
                        {
                            Name = format.Name, Y = (double?)(format.Count / totalFormatsCount)
                        });
                    }

                    formatsPieData.Add(new PieSeriesData
                    {
                        Name = "Other",
                        Y    = (double?)((totalFormatsCount - top10FormatCount) /
                                         totalFormatsCount),
                        Sliced   = true,
                        Selected = true
                    });

                    ViewData["formatsPieData"] = formatsPieData;
                }

                if (ctx.Partitions.Any())
                {
                    ViewBag.repPartitions = ctx.Partitions.OrderBy(filter => filter.Name).ToList();

                    List <PieSeriesData> partitionsPieData = new List <PieSeriesData>();

                    decimal totalPartitionsCount = ctx.Partitions.Sum(o => o.Count);
                    decimal top10PartitionCount  = 0;

                    foreach (Partition partition in ctx.Partitions.OrderByDescending(o => o.Count).Take(10))
                    {
                        top10PartitionCount += partition.Count;

                        partitionsPieData.Add(new PieSeriesData
                        {
                            Name = partition.Name,
                            Y    = (double?)(partition.Count / totalPartitionsCount)
                        });
                    }

                    partitionsPieData.Add(new PieSeriesData
                    {
                        Name = "Other",
                        Y    = (double?)((totalPartitionsCount - top10PartitionCount) /
                                         totalPartitionsCount),
                        Sliced   = true,
                        Selected = true
                    });

                    ViewData["partitionsPieData"] = partitionsPieData;
                }

                if (ctx.Filesystems.Any())
                {
                    ViewBag.repFilesystems = ctx.Filesystems.OrderBy(filter => filter.Name).ToList();

                    List <PieSeriesData> filesystemsPieData = new List <PieSeriesData>();

                    decimal totalFilesystemsCount = ctx.Filesystems.Sum(o => o.Count);
                    decimal top10FilesystemCount  = 0;

                    foreach (Filesystem filesystem in ctx.Filesystems.OrderByDescending(o => o.Count).Take(10))
                    {
                        top10FilesystemCount += filesystem.Count;

                        filesystemsPieData.Add(new PieSeriesData
                        {
                            Name = filesystem.Name,
                            Y    = (double?)(filesystem.Count / totalFilesystemsCount)
                        });
                    }

                    filesystemsPieData.Add(new PieSeriesData
                    {
                        Name = "Other",
                        Y    = (double?)((totalFilesystemsCount - top10FilesystemCount) /
                                         totalFilesystemsCount),
                        Sliced   = true,
                        Selected = true
                    });

                    ViewData["filesystemsPieData"] = filesystemsPieData;
                }

                if (ctx.Medias.Any())
                {
                    realMedia    = new List <MediaItem>();
                    virtualMedia = new List <MediaItem>();
                    foreach (Media nvs in ctx.Medias)
                    {
                        try
                        {
                            MediaType
                            .MediaTypeToString((CommonTypes.MediaType)Enum.Parse(typeof(CommonTypes.MediaType), nvs.Type),
                                               out string type, out string subtype);

                            if (nvs.Real)
                            {
                                realMedia.Add(new MediaItem {
                                    Type = type, SubType = subtype, Count = nvs.Count
                                });
                            }
                            else
                            {
                                virtualMedia.Add(new MediaItem {
                                    Type = type, SubType = subtype, Count = nvs.Count
                                });
                            }
                        }
                        catch
                        {
                            if (nvs.Real)
                            {
                                realMedia.Add(new MediaItem {
                                    Type = nvs.Type, SubType = null, Count = nvs.Count
                                });
                            }
                            else
                            {
                                virtualMedia.Add(new MediaItem {
                                    Type = nvs.Type, SubType = null, Count = nvs.Count
                                });
                            }
                        }
                    }

                    if (realMedia.Count > 0)
                    {
                        ViewBag.repRealMedia =
                            realMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList();

                        List <PieSeriesData> realMediaPieData = new List <PieSeriesData>();

                        decimal totalRealMediaCount = realMedia.Sum(o => o.Count);
                        decimal top10RealMediaCount = 0;

                        foreach (MediaItem realMediaItem in realMedia.OrderByDescending(o => o.Count).Take(10))
                        {
                            top10RealMediaCount += realMediaItem.Count;

                            realMediaPieData.Add(new PieSeriesData
                            {
                                Name = $"{realMediaItem.Type} ({realMediaItem.SubType})",
                                Y    = (double?)(realMediaItem.Count / totalRealMediaCount)
                            });
                        }

                        realMediaPieData.Add(new PieSeriesData
                        {
                            Name = "Other",
                            Y    = (double?)((totalRealMediaCount - top10RealMediaCount) /
                                             totalRealMediaCount),
                            Sliced   = true,
                            Selected = true
                        });

                        ViewData["realMediaPieData"] = realMediaPieData;
                    }

                    if (virtualMedia.Count > 0)
                    {
                        ViewBag.repVirtualMedia =
                            virtualMedia.OrderBy(media => media.Type).ThenBy(media => media.SubType).ToList();

                        List <PieSeriesData> virtualMediaPieData = new List <PieSeriesData>();

                        decimal totalVirtualMediaCount = virtualMedia.Sum(o => o.Count);
                        decimal top10VirtualMediaCount = 0;

                        foreach (MediaItem virtualMediaItem in virtualMedia.OrderByDescending(o => o.Count).Take(10))
                        {
                            top10VirtualMediaCount += virtualMediaItem.Count;

                            virtualMediaPieData.Add(new PieSeriesData
                            {
                                Name =
                                    $"{virtualMediaItem.Type} ({virtualMediaItem.SubType})",
                                Y = (double?)(virtualMediaItem.Count /
                                              totalVirtualMediaCount)
                            });
                        }

                        virtualMediaPieData.Add(new PieSeriesData
                        {
                            Name = "Other",
                            Y    = (double?)
                                   ((totalVirtualMediaCount - top10VirtualMediaCount) /
                                    totalVirtualMediaCount),
                            Sliced   = true,
                            Selected = true
                        });

                        ViewData["virtualMediaPieData"] = virtualMediaPieData;
                    }
                }

                if (ctx.DeviceStats.Any())
                {
                    devices = new List <DeviceItem>();
                    foreach (DeviceStat device in ctx.DeviceStats.ToList())
                    {
                        string xmlFile;
                        if (!string.IsNullOrWhiteSpace(device.Manufacturer) &&
                            !string.IsNullOrWhiteSpace(device.Model) &&
                            !string.IsNullOrWhiteSpace(device.Revision))
                        {
                            xmlFile = device.Manufacturer + "_" + device.Model + "_" + device.Revision + ".xml";
                        }
                        else if (!string.IsNullOrWhiteSpace(device.Manufacturer) &&
                                 !string.IsNullOrWhiteSpace(device.Model))
                        {
                            xmlFile = device.Manufacturer + "_" + device.Model + ".xml";
                        }
                        else if (!string.IsNullOrWhiteSpace(device.Model) && !string.IsNullOrWhiteSpace(device.Revision))
                        {
                            xmlFile = device.Model + "_" + device.Revision + ".xml";
                        }
                        else
                        {
                            xmlFile = device.Model + ".xml";
                        }

                        xmlFile = xmlFile.Replace('/', '_').Replace('\\', '_').Replace('?', '_');

                        if (System.IO.File.Exists(Path.Combine(HostingEnvironment.MapPath("~"), "Reports", xmlFile)))
                        {
                            DeviceReport deviceReport = new DeviceReport();

                            XmlSerializer xs = new XmlSerializer(deviceReport.GetType());
                            FileStream    fs =
                                WaitForFile(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(), "Reports", xmlFile),
                                            FileMode.Open, FileAccess.Read, FileShare.Read);
                            deviceReport = (DeviceReport)xs.Deserialize(fs);
                            fs.Close();

                            DeviceReportV2 deviceReportV2 = new DeviceReportV2(deviceReport);

                            device.Report = ctx.Devices.Add(new Device(deviceReportV2));
                            ctx.SaveChanges();

                            System.IO.File
                            .Delete(Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
                                                 "Reports", xmlFile));
                        }

                        devices.Add(new DeviceItem
                        {
                            Manufacturer = device.Manufacturer,
                            Model        = device.Model,
                            Revision     = device.Revision,
                            Bus          = device.Bus,
                            ReportId     = device.Report != null && device.Report.Id != 0
                                           ? device.Report.Id
                                           : 0
                        });
                    }

                    ViewBag.repDevices = devices.OrderBy(device => device.Manufacturer).ThenBy(device => device.Model)
                                         .ThenBy(device => device.Revision).ThenBy(device => device.Bus)
                                         .ToList();

                    ViewData["devicesBusPieData"] = (from deviceBus in devices.Select(d => d.Bus).Distinct()
                                                     let deviceBusCount = devices.Count(d => d.Bus == deviceBus)
                                                                          select new PieSeriesData
                    {
                        Name = deviceBus,
                        Y = deviceBusCount / (double)devices.Count
                    }).ToList();

                    ViewData["devicesManufacturerPieData"] =
                        (from manufacturer in
                         devices.Where(d => d.Manufacturer != null).Select(d => d.Manufacturer.ToLowerInvariant())
                         .Distinct()
                         let manufacturerCount = devices.Count(d => d.Manufacturer?.ToLowerInvariant() == manufacturer)
                                                 select new PieSeriesData {
                        Name = manufacturer, Y = manufacturerCount / (double)devices.Count
                    })
                        .ToList();
                }
            }
            catch (Exception)
            {
                #if DEBUG
                throw;
                #endif
                return(Content("Could not read statistics"));
            }

            return(View());
        }
コード例 #6
0
    public async Task <IActionResult> UploadReport()
    {
        var response = new ContentResult
        {
            StatusCode  = (int)HttpStatusCode.OK,
            ContentType = "text/plain"
        };

        try
        {
            var         newReport = new DeviceReport();
            HttpRequest request   = HttpContext.Request;

            var xs = new XmlSerializer(newReport.GetType());

            newReport =
                (DeviceReport)xs.Deserialize(new StringReader(await new StreamReader(request.Body).ReadToEndAsync()));

            if (newReport == null)
            {
                response.Content = "notstats";

                return(response);
            }

            var reportV2 = new DeviceReportV2(newReport);
            var jsonSw   = new StringWriter();

            await jsonSw.WriteAsync(JsonConvert.SerializeObject(reportV2, Formatting.Indented,
                                                                new JsonSerializerSettings
            {
                NullValueHandling = NullValueHandling.Ignore
            }));

            string reportV2String = jsonSw.ToString();
            jsonSw.Close();

            var newUploadedReport = new UploadedReport(reportV2);

            // Ensure CHS and CurrentCHS are not duplicates
            if (newUploadedReport.ATA?.ReadCapabilities?.CHS != null &&
                newUploadedReport.ATA?.ReadCapabilities?.CurrentCHS != null)
            {
                if (newUploadedReport.ATA.ReadCapabilities.CHS.Cylinders ==
                    newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Cylinders &&
                    newUploadedReport.ATA.ReadCapabilities.CHS.Heads ==
                    newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Heads &&
                    newUploadedReport.ATA.ReadCapabilities.CHS.Sectors ==
                    newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Sectors)
                {
                    newUploadedReport.ATA.ReadCapabilities.CHS = newUploadedReport.ATA.ReadCapabilities.CurrentCHS;
                }
            }

            // Check if the CHS or CurrentCHS of this report already exist in the database
            if (newUploadedReport.ATA?.ReadCapabilities?.CHS != null)
            {
                Chs existingChs =
                    _ctx.Chs.FirstOrDefault(c => c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CHS.Cylinders &&
                                            c.Heads == newUploadedReport.ATA.ReadCapabilities.CHS.Heads &&
                                            c.Sectors == newUploadedReport.ATA.ReadCapabilities.CHS.Sectors);

                if (existingChs != null)
                {
                    newUploadedReport.ATA.ReadCapabilities.CHS = existingChs;
                }
            }

            if (newUploadedReport.ATA?.ReadCapabilities?.CurrentCHS != null)
            {
                Chs existingChs =
                    _ctx.Chs.FirstOrDefault(c =>
                                            c.Cylinders == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.
                                            Cylinders &&
                                            c.Heads == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Heads &&
                                            c.Sectors == newUploadedReport.ATA.ReadCapabilities.CurrentCHS.Sectors);

                if (existingChs != null)
                {
                    newUploadedReport.ATA.ReadCapabilities.CurrentCHS = existingChs;
                }
            }

            if (newUploadedReport.ATA?.RemovableMedias != null)
            {
                foreach (TestedMedia media in newUploadedReport.ATA.RemovableMedias)
                {
                    if (media.CHS != null &&
                        media.CurrentCHS != null)
                    {
                        if (media.CHS.Cylinders == media.CurrentCHS.Cylinders &&
                            media.CHS.Heads == media.CurrentCHS.Heads &&
                            media.CHS.Sectors == media.CurrentCHS.Sectors)
                        {
                            media.CHS = media.CurrentCHS;
                        }
                    }

                    if (media.CHS != null)
                    {
                        Chs existingChs =
                            _ctx.Chs.FirstOrDefault(c => c.Cylinders == media.CHS.Cylinders &&
                                                    c.Heads == media.CHS.Heads && c.Sectors == media.CHS.Sectors);

                        if (existingChs != null)
                        {
                            media.CHS = existingChs;
                        }
                    }

                    if (media.CHS != null)
                    {
                        Chs existingChs =
                            _ctx.Chs.FirstOrDefault(c => c.Cylinders == media.CurrentCHS.Cylinders &&
                                                    c.Heads == media.CurrentCHS.Heads &&
                                                    c.Sectors == media.CurrentCHS.Sectors);

                        if (existingChs != null)
                        {
                            media.CurrentCHS = existingChs;
                        }
                    }
                }
            }

            await _ctx.Reports.AddAsync(newUploadedReport);

            await _ctx.SaveChangesAsync();

            var pgpIn  = new MemoryStream(Encoding.UTF8.GetBytes(reportV2String));
            var pgpOut = new MemoryStream();
            var pgp    = new ChoPGPEncryptDecrypt();

            await pgp.EncryptAsync(pgpIn, pgpOut,
                                   Path.Combine(_environment.ContentRootPath ?? throw new InvalidOperationException(),
                                                "public.asc"));

            pgpOut.Position = 0;
            reportV2String  = Encoding.UTF8.GetString(pgpOut.ToArray());

            var message = new MimeMessage
            {
                Subject = "New device report (old version)",
                Body    = new TextPart("plain")
                {
                    Text = reportV2String
                }
            };

            message.From.Add(new MailboxAddress("Aaru Server", "*****@*****.**"));
            message.To.Add(new MailboxAddress("Natalia Portillo", "*****@*****.**"));

            using (var client = new SmtpClient())
            {
                await client.ConnectAsync("mail.claunia.com", 25, false);

                await client.SendAsync(message);

                await client.DisconnectAsync(true);
            }

            response.Content = "ok";

            return(response);
        }

        // ReSharper disable once RedundantCatchClause
        catch
        {
        #if DEBUG
            if (Debugger.IsAttached)
            {
                throw;
            }
        #endif
            response.Content = "error";

            return(response);
        }
    }
コード例 #7
0
        public async Task <IActionResult> UploadReport()
        {
            var response = new ContentResult
            {
                StatusCode = (int)HttpStatusCode.OK, ContentType = "text/plain"
            };

            try
            {
                var         newReport = new DeviceReport();
                HttpRequest request   = HttpContext.Request;

                var xs = new XmlSerializer(newReport.GetType());

                newReport =
                    (DeviceReport)
                    xs.Deserialize(new StringReader(await new StreamReader(request.Body).ReadToEndAsync()));

                if (newReport == null)
                {
                    response.Content = "notstats";

                    return(response);
                }

                var reportV2 = new DeviceReportV2(newReport);
                var jsonSw   = new StringWriter();

                jsonSw.Write(JsonConvert.SerializeObject(reportV2, Formatting.Indented, new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                }));

                string reportV2String = jsonSw.ToString();
                jsonSw.Close();

                ctx.Reports.Add(new UploadedReport(reportV2));
                ctx.SaveChanges();

                var pgpIn  = new MemoryStream(Encoding.UTF8.GetBytes(reportV2String));
                var pgpOut = new MemoryStream();
                var pgp    = new ChoPGPEncryptDecrypt();

                pgp.Encrypt(pgpIn, pgpOut,
                            Path.Combine(_environment.ContentRootPath ?? throw new InvalidOperationException(),
                                         "public.asc"));

                pgpOut.Position = 0;
                reportV2String  = Encoding.UTF8.GetString(pgpOut.ToArray());

                var message = new MimeMessage
                {
                    Subject = "New device report (old version)", Body = new TextPart("plain")
                    {
                        Text = reportV2String
                    }
                };

                message.From.Add(new MailboxAddress("DiscImageChef", "*****@*****.**"));
                message.To.Add(new MailboxAddress("Natalia Portillo", "*****@*****.**"));

                using (var client = new SmtpClient())
                {
                    client.Connect("mail.claunia.com", 25, false);
                    client.Send(message);
                    client.Disconnect(true);
                }

                response.Content = "ok";

                return(response);
            }

            // ReSharper disable once RedundantCatchClause
            catch
            {
            #if DEBUG
                if (Debugger.IsAttached)
                {
                    throw;
                }
            #endif
                response.Content = "error";

                return(response);
            }
        }
コード例 #8
0
        public void ReportScsiModes(ref DeviceReportV2 report, out byte[] cdromMode, out MediumTypes mediumType)
        {
            Modes.DecodedMode?    decMode = null;
            PeripheralDeviceTypes devType = _dev.ScsiType;

            byte[] mode10Buffer;
            byte[] mode6Buffer;
            bool   sense;

            mediumType = 0;

            AaruConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (10)...");

            foreach (ScsiModeSensePageControl pageControl in new[]
            {
                ScsiModeSensePageControl.Default, ScsiModeSensePageControl.Current, ScsiModeSensePageControl.Changeable
            })
            {
                bool saveBuffer = false;

                sense = _dev.ModeSense10(out mode10Buffer, out _, false, true, pageControl, 0x3F, 0xFF, _dev.Timeout,
                                         out _);

                if (sense || _dev.Error)
                {
                    sense = _dev.ModeSense10(out mode10Buffer, out _, false, false, pageControl, 0x3F, 0xFF,
                                             _dev.Timeout, out _);

                    if (sense || _dev.Error)
                    {
                        sense = _dev.ModeSense10(out mode10Buffer, out _, false, true, pageControl, 0x3F, 0x00,
                                                 _dev.Timeout, out _);

                        if (sense || _dev.Error)
                        {
                            sense = _dev.ModeSense10(out mode10Buffer, out _, false, false, pageControl, 0x3F, 0x00,
                                                     _dev.Timeout, out _);

                            if (!sense &&
                                !_dev.Error)
                            {
                                report.SCSI.SupportsModeSense10 = true;
                                decMode ??= Modes.DecodeMode10(mode10Buffer, devType);
                                saveBuffer = true;
                            }
                        }
                        else
                        {
                            report.SCSI.SupportsModeSense10 = true;
                            decMode ??= Modes.DecodeMode10(mode10Buffer, devType);
                            saveBuffer = true;
                        }
                    }
                    else
                    {
                        report.SCSI.SupportsModeSense10  = true;
                        report.SCSI.SupportsModeSubpages = true;
                        decMode ??= Modes.DecodeMode10(mode10Buffer, devType);
                        saveBuffer = true;
                    }
                }
                else
                {
                    report.SCSI.SupportsModeSense10  = true;
                    report.SCSI.SupportsModeSubpages = true;
                    decMode ??= Modes.DecodeMode10(mode10Buffer, devType);
                    saveBuffer = true;
                }

                if (!saveBuffer)
                {
                    continue;
                }

                switch (pageControl)
                {
                case ScsiModeSensePageControl.Default:
                    report.SCSI.ModeSense10Data = mode10Buffer;

                    break;

                case ScsiModeSensePageControl.Changeable:
                    report.SCSI.ModeSense10ChangeableData = mode10Buffer;

                    break;

                case ScsiModeSensePageControl.Current:
                    report.SCSI.ModeSense10CurrentData = mode10Buffer;

                    break;
                }
            }

            AaruConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (6)...");

            foreach (ScsiModeSensePageControl pageControl in new[]
            {
                ScsiModeSensePageControl.Default, ScsiModeSensePageControl.Current, ScsiModeSensePageControl.Changeable
            })
            {
                bool saveBuffer = false;
                sense = _dev.ModeSense6(out mode6Buffer, out _, true, pageControl, 0x3F, 0xFF, _dev.Timeout, out _);

                if (sense || _dev.Error)
                {
                    sense = _dev.ModeSense6(out mode6Buffer, out _, false, pageControl, 0x3F, 0xFF, _dev.Timeout,
                                            out _);

                    if (sense || _dev.Error)
                    {
                        sense = _dev.ModeSense6(out mode6Buffer, out _, true, pageControl, 0x3F, 0x00, _dev.Timeout,
                                                out _);

                        if (sense || _dev.Error)
                        {
                            sense = _dev.ModeSense6(out mode6Buffer, out _, false, pageControl, 0x3F, 0x00,
                                                    _dev.Timeout, out _);

                            if (sense || _dev.Error)
                            {
                                sense = _dev.ModeSense6(out mode6Buffer, out _, true, pageControl, 0x00, 0x00,
                                                        _dev.Timeout, out _);

                                if (sense || _dev.Error)
                                {
                                    sense = _dev.ModeSense6(out mode6Buffer, out _, false, pageControl, 0x00, 0x00,
                                                            _dev.Timeout, out _);

                                    if (!sense &&
                                        !_dev.Error)
                                    {
                                        report.SCSI.SupportsModeSense6 = true;
                                        decMode ??= Modes.DecodeMode6(mode6Buffer, devType);
                                        saveBuffer = true;
                                    }
                                }
                                else
                                {
                                    report.SCSI.SupportsModeSense6 = true;
                                    decMode ??= Modes.DecodeMode6(mode6Buffer, devType);
                                    saveBuffer = true;
                                }
                            }
                            else
                            {
                                report.SCSI.SupportsModeSense6 = true;
                                decMode ??= Modes.DecodeMode6(mode6Buffer, devType);
                                saveBuffer = true;
                            }
                        }
                        else
                        {
                            report.SCSI.SupportsModeSense6 = true;
                            decMode ??= Modes.DecodeMode6(mode6Buffer, devType);
                            saveBuffer = true;
                        }
                    }
                    else
                    {
                        report.SCSI.SupportsModeSense10  = true;
                        report.SCSI.SupportsModeSubpages = true;
                        decMode ??= Modes.DecodeMode6(mode6Buffer, devType);
                        saveBuffer = true;
                    }
                }
                else
                {
                    report.SCSI.SupportsModeSense6   = true;
                    report.SCSI.SupportsModeSubpages = true;
                    decMode ??= Modes.DecodeMode6(mode6Buffer, devType);
                    saveBuffer = true;
                }

                if (!saveBuffer)
                {
                    continue;
                }

                switch (pageControl)
                {
                case ScsiModeSensePageControl.Default:
                    report.SCSI.ModeSense6Data = mode6Buffer;

                    break;

                case ScsiModeSensePageControl.Changeable:
                    report.SCSI.ModeSense6ChangeableData = mode6Buffer;

                    break;

                case ScsiModeSensePageControl.Current:
                    report.SCSI.ModeSense6CurrentData = mode6Buffer;

                    break;
                }
            }

            cdromMode = null;

            if (!decMode.HasValue)
            {
                return;
            }

            mediumType = decMode.Value.Header.MediumType;

            report.SCSI.ModeSense = new ScsiMode
            {
                BlankCheckEnabled = decMode.Value.Header.EBC,
                DPOandFUA         = decMode.Value.Header.DPOFUA,
                WriteProtected    = decMode.Value.Header.WriteProtected
            };

            if (decMode.Value.Header.BufferedMode > 0)
            {
                report.SCSI.ModeSense.BufferedMode = decMode.Value.Header.BufferedMode;
            }

            if (decMode.Value.Header.Speed > 0)
            {
                report.SCSI.ModeSense.Speed = decMode.Value.Header.Speed;
            }

            if (decMode.Value.Pages == null)
            {
                return;
            }

            List <ScsiPage> modePages = new List <ScsiPage>();

            foreach (Modes.ModePage page in decMode.Value.Pages)
            {
                var modePage = new ScsiPage
                {
                    page    = page.Page,
                    subpage = page.Subpage,
                    value   = page.PageResponse
                };

                modePages.Add(modePage);

                if (modePage.page == 0x2A &&
                    modePage.subpage == 0x00)
                {
                    cdromMode = page.PageResponse;
                }
            }

            if (modePages.Count > 0)
            {
                report.SCSI.ModeSense.ModePages = modePages;
            }
        }
コード例 #9
0
ファイル: Scsi.cs プロジェクト: Acidburn0zzz/DiscImageChef
        public void ReportScsiModes(ref DeviceReportV2 report, out byte[] cdromMode)
        {
            Modes.DecodedMode?    decMode = null;
            PeripheralDeviceTypes devType = _dev.ScsiType;

            byte[] mode10CurrentBuffer;
            byte[] mode10ChangeableBuffer;
            byte[] mode6CurrentBuffer;
            byte[] mode6ChangeableBuffer;

            DicConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (10)...");

            bool sense = _dev.ModeSense10(out byte[] mode10Buffer, out _, false, true, ScsiModeSensePageControl.Default,
                                          0x3F, 0xFF, _dev.Timeout, out _);

            if (sense || _dev.Error)
            {
                DicConsole.WriteLine("Querying all mode pages using SCSI MODE SENSE (10)...");

                sense = _dev.ModeSense10(out mode10Buffer, out _, false, true, ScsiModeSensePageControl.Default, 0x3F,
                                         0x00, _dev.Timeout, out _);

                if (!sense &&
                    !_dev.Error)
                {
                    report.SCSI.SupportsModeSense10  = true;
                    report.SCSI.SupportsModeSubpages = false;
                    decMode = Modes.DecodeMode10(mode10Buffer, devType);

                    {
                        sense = _dev.ModeSense10(out mode10CurrentBuffer, out _, false, true,
                                                 ScsiModeSensePageControl.Current, 0x3F, 0x00, _dev.Timeout, out _);

                        if (!sense &&
                            !_dev.Error)
                        {
                            report.SCSI.ModeSense10CurrentData = mode10CurrentBuffer;
                        }

                        sense = _dev.ModeSense10(out mode10ChangeableBuffer, out _, false, true,
                                                 ScsiModeSensePageControl.Changeable, 0x3F, 0x00, _dev.Timeout, out _);

                        if (!sense &&
                            !_dev.Error)
                        {
                            report.SCSI.ModeSense10ChangeableData = mode10ChangeableBuffer;
                        }
                    }
                }
            }
            else
            {
                report.SCSI.SupportsModeSense10  = true;
                report.SCSI.SupportsModeSubpages = true;
                decMode = Modes.DecodeMode10(mode10Buffer, devType);

                {
                    sense = _dev.ModeSense10(out mode10CurrentBuffer, out _, false, true,
                                             ScsiModeSensePageControl.Current, 0x3F, 0xFF, _dev.Timeout, out _);

                    if (!sense &&
                        !_dev.Error)
                    {
                        report.SCSI.ModeSense10CurrentData = mode10CurrentBuffer;
                    }

                    sense = _dev.ModeSense10(out mode10ChangeableBuffer, out _, false, true,
                                             ScsiModeSensePageControl.Changeable, 0x3F, 0xFF, _dev.Timeout, out _);

                    if (!sense &&
                        !_dev.Error)
                    {
                        report.SCSI.ModeSense10ChangeableData = mode10ChangeableBuffer;
                    }
                }
            }

            DicConsole.WriteLine("Querying all mode pages and subpages using SCSI MODE SENSE (6)...");

            sense = _dev.ModeSense6(out byte[] mode6Buffer, out _, false, ScsiModeSensePageControl.Default, 0x3F, 0xFF,
                                    _dev.Timeout, out _);

            if (sense || _dev.Error)
            {
                DicConsole.WriteLine("Querying all mode pages using SCSI MODE SENSE (6)...");

                sense = _dev.ModeSense6(out mode6Buffer, out _, false, ScsiModeSensePageControl.Default, 0x3F, 0x00,
                                        _dev.Timeout, out _);

                if (sense || _dev.Error)
                {
                    DicConsole.WriteLine("Querying SCSI MODE SENSE (6)...");
                    sense = _dev.ModeSense(out mode6Buffer, out _, _dev.Timeout, out _);
                }
                else
                {
                    sense = _dev.ModeSense6(out mode6CurrentBuffer, out _, false, ScsiModeSensePageControl.Current,
                                            0x3F, 0x00, _dev.Timeout, out _);

                    if (!sense &&
                        !_dev.Error)
                    {
                        report.SCSI.ModeSense6CurrentData = mode6CurrentBuffer;
                    }

                    sense = _dev.ModeSense6(out mode6ChangeableBuffer, out _, false,
                                            ScsiModeSensePageControl.Changeable, 0x3F, 0x00, _dev.Timeout, out _);

                    if (!sense &&
                        !_dev.Error)
                    {
                        report.SCSI.ModeSense6ChangeableData = mode6ChangeableBuffer;
                    }
                }
            }
            else
            {
                report.SCSI.SupportsModeSubpages = true;

                {
                    sense = _dev.ModeSense6(out mode6CurrentBuffer, out _, false, ScsiModeSensePageControl.Current,
                                            0x3F, 0xFF, _dev.Timeout, out _);

                    if (!sense &&
                        !_dev.Error)
                    {
                        report.SCSI.ModeSense6CurrentData = mode6CurrentBuffer;
                    }

                    sense = _dev.ModeSense6(out mode6ChangeableBuffer, out _, false,
                                            ScsiModeSensePageControl.Changeable, 0x3F, 0xFF, _dev.Timeout, out _);

                    if (!sense &&
                        !_dev.Error)
                    {
                        report.SCSI.ModeSense6ChangeableData = mode6ChangeableBuffer;
                    }
                }
            }

            if (!sense &&
                !_dev.Error &&
                !decMode.HasValue)
            {
                decMode = Modes.DecodeMode6(mode6Buffer, devType);
            }

            report.SCSI.SupportsModeSense6 |= !sense && !_dev.Error;

            cdromMode = null;

            if (report.SCSI.SupportsModeSense6)
            {
                report.SCSI.ModeSense6Data = mode6Buffer;
            }

            if (report.SCSI.SupportsModeSense10)
            {
                report.SCSI.ModeSense10Data = mode10Buffer;
            }

            if (!decMode.HasValue)
            {
                return;
            }

            report.SCSI.ModeSense = new ScsiMode
            {
                BlankCheckEnabled = decMode.Value.Header.EBC, DPOandFUA = decMode.Value.Header.DPOFUA,
                WriteProtected    = decMode.Value.Header.WriteProtected
            };

            if (decMode.Value.Header.BufferedMode > 0)
            {
                report.SCSI.ModeSense.BufferedMode = decMode.Value.Header.BufferedMode;
            }

            if (decMode.Value.Header.Speed > 0)
            {
                report.SCSI.ModeSense.Speed = decMode.Value.Header.Speed;
            }

            if (decMode.Value.Pages == null)
            {
                return;
            }

            List <ScsiPage> modePages = new List <ScsiPage>();

            foreach (Modes.ModePage page in decMode.Value.Pages)
            {
                var modePage = new ScsiPage
                {
                    page = page.Page, subpage = page.Subpage, value = page.PageResponse
                };

                modePages.Add(modePage);

                if (modePage.page == 0x2A &&
                    modePage.subpage == 0x00)
                {
                    cdromMode = page.PageResponse;
                }
            }

            if (modePages.Count > 0)
            {
                report.SCSI.ModeSense.ModePages = modePages;
            }
        }
コード例 #10
0
        public DeviceDto(DeviceReportV2 report, int id, int optimalMultipleSectorsRead)
        {
            ATA            = report.ATA;
            ATAPI          = report.ATAPI;
            CompactFlash   = report.CompactFlash;
            FireWire       = report.FireWire;
            MultiMediaCard = report.MultiMediaCard;
            PCMCIA         = report.PCMCIA;
            SCSI           = report.SCSI;
            SecureDigital  = report.SecureDigital;
            USB            = report.USB;
            Manufacturer   = report.Manufacturer;
            Model          = report.Model;
            Revision       = report.Revision;
            Type           = report.Type;

            if (ATA != null)
            {
                ATA.Identify         = null;
                ATA.ReadCapabilities = ClearBinaries(ATA.ReadCapabilities);
                if (ATA.RemovableMedias != null)
                {
                    TestedMedia[] medias = ATA.RemovableMedias.ToArray();
                    ATA.RemovableMedias = new List <TestedMedia>();
                    foreach (TestedMedia media in medias)
                    {
                        ATA.RemovableMedias.Add(ClearBinaries(media));
                    }
                }
            }

            if (ATAPI != null)
            {
                ATAPI.Identify         = null;
                ATAPI.ReadCapabilities = ClearBinaries(ATAPI.ReadCapabilities);
                if (ATAPI.RemovableMedias != null)
                {
                    TestedMedia[] medias = ATAPI.RemovableMedias.ToArray();
                    ATAPI.RemovableMedias = new List <TestedMedia>();
                    foreach (TestedMedia media in medias)
                    {
                        ATAPI.RemovableMedias.Add(ClearBinaries(media));
                    }
                }
            }

            if (PCMCIA != null)
            {
                PCMCIA.AdditionalInformation = null;
                PCMCIA.CIS = null;
            }

            MultiMediaCard = null;
            SecureDigital  = null;

            if (SCSI != null)
            {
                SCSI.EVPDPages                 = null;
                SCSI.InquiryData               = null;
                SCSI.ModeSense6Data            = null;
                SCSI.ModeSense10Data           = null;
                SCSI.ModeSense6CurrentData     = null;
                SCSI.ModeSense10CurrentData    = null;
                SCSI.ModeSense6ChangeableData  = null;
                SCSI.ModeSense10ChangeableData = null;
                SCSI.ReadCapabilities          = ClearBinaries(SCSI.ReadCapabilities);

                if (SCSI.ModeSense != null)
                {
                    SCSI.ModeSense.BlockDescriptors = null;
                    SCSI.ModeSense.ModePages        = null;
                }

                if (SCSI.RemovableMedias != null)
                {
                    TestedMedia[] medias = SCSI.RemovableMedias.ToArray();
                    SCSI.RemovableMedias = new List <TestedMedia>();
                    foreach (TestedMedia media in medias)
                    {
                        SCSI.RemovableMedias.Add(ClearBinaries(media));
                    }
                }

                if (SCSI.MultiMediaDevice != null)
                {
                    SCSI.MultiMediaDevice.ModeSense2AData = null;

                    if (SCSI.MultiMediaDevice.Features != null)
                    {
                        SCSI.MultiMediaDevice.Features.BinaryData = null;
                    }

                    if (SCSI.MultiMediaDevice.TestedMedia != null)
                    {
                        TestedMedia[] medias = SCSI.MultiMediaDevice.TestedMedia.ToArray();
                        SCSI.MultiMediaDevice.TestedMedia = new List <TestedMedia>();
                        foreach (TestedMedia media in medias)
                        {
                            SCSI.MultiMediaDevice.TestedMedia.Add(ClearBinaries(media));
                        }
                    }
                }

                SCSI.SequentialDevice = null;
            }

            if (USB != null)
            {
                USB.Descriptors = null;
            }

            Id = id;
            OptimalMultipleSectorsRead = optimalMultipleSectorsRead;
        }
コード例 #11
0
        public HttpResponseMessage UploadReport()
        {
            HttpResponseMessage response = new HttpResponseMessage {
                StatusCode = HttpStatusCode.OK
            };

            try
            {
                DeviceReport newReport = new DeviceReport();
                HttpRequest  request   = HttpContext.Current.Request;

                XmlSerializer xs = new XmlSerializer(newReport.GetType());
                newReport = (DeviceReport)xs.Deserialize(request.InputStream);

                if (newReport == null)
                {
                    response.Content = new StringContent("notstats", Encoding.UTF8, "text/plain");
                    return(response);
                }

                DeviceReportV2 reportV2 = new DeviceReportV2(newReport);
                StringWriter   jsonSw   = new StringWriter();
                jsonSw.Write(JsonConvert.SerializeObject(reportV2, Formatting.Indented,
                                                         new JsonSerializerSettings
                {
                    NullValueHandling = NullValueHandling.Ignore
                }));
                string reportV2String = jsonSw.ToString();
                jsonSw.Close();

                ctx.Reports.Add(new UploadedReport(reportV2));
                ctx.SaveChanges();

                MemoryStream         pgpIn  = new MemoryStream(Encoding.UTF8.GetBytes(reportV2String));
                MemoryStream         pgpOut = new MemoryStream();
                ChoPGPEncryptDecrypt pgp    = new ChoPGPEncryptDecrypt();
                pgp.Encrypt(pgpIn, pgpOut,
                            Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
                                         "public.asc"), true);
                pgpOut.Position = 0;
                reportV2String  = Encoding.UTF8.GetString(pgpOut.ToArray());

                MimeMessage message = new MimeMessage
                {
                    Subject = "New device report (old version)",
                    Body    = new TextPart("plain")
                    {
                        Text = reportV2String
                    }
                };
                message.From.Add(new MailboxAddress("DiscImageChef", "*****@*****.**"));
                message.To.Add(new MailboxAddress("Natalia Portillo", "*****@*****.**"));

                using (SmtpClient client = new SmtpClient())
                {
                    client.Connect("mail.claunia.com", 25, false);
                    client.Send(message);
                    client.Disconnect(true);
                }

                response.Content = new StringContent("ok", Encoding.UTF8, "text/plain");
                return(response);
            }
            // ReSharper disable once RedundantCatchClause
            catch
            {
                #if DEBUG
                if (Debugger.IsAttached)
                {
                    throw;
                }
                #endif
                response.Content = new StringContent("error", Encoding.UTF8, "text/plain");
                return(response);
            }
        }
コード例 #12
0
        public HttpResponseMessage UploadReportV2()
        {
            HttpResponseMessage response = new HttpResponseMessage {
                StatusCode = HttpStatusCode.OK
            };

            try
            {
                HttpRequest request = HttpContext.Current.Request;

                StreamReader   sr         = new StreamReader(request.InputStream);
                string         reportJson = sr.ReadToEnd();
                DeviceReportV2 newReport  = JsonConvert.DeserializeObject <DeviceReportV2>(reportJson);

                if (newReport == null)
                {
                    response.Content = new StringContent("notstats", Encoding.UTF8, "text/plain");
                    return(response);
                }

                ctx.Reports.Add(new UploadedReport(newReport));
                ctx.SaveChanges();

                MemoryStream         pgpIn  = new MemoryStream(Encoding.UTF8.GetBytes(reportJson));
                MemoryStream         pgpOut = new MemoryStream();
                ChoPGPEncryptDecrypt pgp    = new ChoPGPEncryptDecrypt();
                pgp.Encrypt(pgpIn, pgpOut,
                            Path.Combine(HostingEnvironment.MapPath("~") ?? throw new InvalidOperationException(),
                                         "public.asc"), true);
                pgpOut.Position = 0;
                reportJson      = Encoding.UTF8.GetString(pgpOut.ToArray());

                MimeMessage message = new MimeMessage
                {
                    Subject = "New device report", Body = new TextPart("plain")
                    {
                        Text = reportJson
                    }
                };
                message.From.Add(new MailboxAddress("DiscImageChef", "*****@*****.**"));
                message.To.Add(new MailboxAddress("Natalia Portillo", "*****@*****.**"));

                using (SmtpClient client = new SmtpClient())
                {
                    client.Connect("mail.claunia.com", 25, false);
                    client.Send(message);
                    client.Disconnect(true);
                }

                response.Content = new StringContent("ok", Encoding.UTF8, "text/plain");
                return(response);
            }
            // ReSharper disable once RedundantCatchClause
            catch
            {
                #if DEBUG
                if (Debugger.IsAttached)
                {
                    throw;
                }
                #endif
                response.Content = new StringContent("error", Encoding.UTF8, "text/plain");
                return(response);
            }
        }