コード例 #1
0
ファイル: NvItemUtils.cs プロジェクト: seunggil1/EfsTools
        private static void PhoneUploadNvItem(QcdmManager manager, string path, ushort nvItemId, Logger logger)
        {
            try
            {
                var filePath = PathUtils.GetNvItemFileName(nvItemId);
                filePath = Path.Combine(path, filePath);
                if (File.Exists(filePath))
                {
                    using (var input = FileUtils.LocalOpenRead(filePath))
                    {
                        using (var output = NvOpenWrite(manager, nvItemId))
                        {
                            StreamUtils.Copy(input, output);
                            output.Flush();
                            output.Close();
                        }

                        input.Close();
                    }
                }
            }
            catch
            {
            }
        }
コード例 #2
0
 public QcdmManagerNvWriteStreamAdapter(QcdmManager manager, ushort id)
 {
     _manager = manager;
     _stream  = new MemoryStream();
     _id      = id;
     _closed  = false;
 }
コード例 #3
0
ファイル: EfsStore.cs プロジェクト: seunggil1/EfsTools
 public EfsStore(QcdmManager manager, bool readOnly, Logger logger, LogLevel logLevel)
 {
     _manager  = manager;
     _readOnly = readOnly;
     _logger   = logger;
     _logLevel = logLevel;
 }
コード例 #4
0
        private static void PhoneUploadFile(QcdmManager manager, string computerPath, string efsPath,
                                            bool createItemFilesAsDefault, int subscription, Logger logger)
        {
            try
            {
                var fileName = Path.GetFileName(computerPath);
                if (fileName != null)
                {
                    var isItemFile = createItemFilesAsDefault;
                    var permission = 0x81FF;
                    var info       = PathUtils.ParsePath(fileName);
                    if (info != null)
                    {
                        permission = info.Permission;
                        isItemFile = info.IsItemFile;
                    }

                    // Fail-safe in case we're trying to write a large item file
                    if (isItemFile)
                    {
                        var size = GetFileSize(computerPath);
                        if (size > 2048)
                        {
                            isItemFile = false;
                        }
                    }

                    PhoneWriteFile(manager, computerPath, efsPath, permission, isItemFile, subscription, logger);
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnUploadFormat, efsPath, e.Message));
            }
        }
コード例 #5
0
        public static void PhoneUploadDirectory(QcdmManager manager, string computerPath, string efsPath,
                                                bool createItemFilesAsDefault, Logger logger)
        {
            try
            {
                logger.LogInfo(string.Format(Strings.QcdmProcessingFormat, computerPath));
                var directories = Directory.EnumerateDirectories(computerPath);
                var files       = Directory.EnumerateFiles(computerPath);
                PhoneCreateDirectory(manager, efsPath, true, logger);

                foreach (var directory in directories)
                {
                    var name = Path.GetFileName(directory);
                    var path = $"{efsPath}{name}/";
                    PhoneUploadDirectory(manager, directory, path, createItemFilesAsDefault, logger);
                }

                foreach (var file in files)
                {
                    if (file != null && !PathUtils.IsNvItemFileName(file))
                    {
                        var fileName = Path.GetFileName(file);
                        var path     = PathUtils.RemoveExtraData(fileName, efsPath);
                        PhoneUploadFile(manager, file, path, createItemFilesAsDefault, logger);
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnUploadDirectoryFormat, efsPath, e.Message));
            }
        }
コード例 #6
0
        public static void PhoneDownloadDirectory(QcdmManager manager, string efsPath, string computerPath,
                                                  bool noExtraData, Logger logger)
        {
            try
            {
                var entries = PhoneOpenDirectory(manager, efsPath, logger);
                if (entries != null)
                {
                    Directory.CreateDirectory(computerPath);
                    foreach (var entry in entries)
                    {
                        if (entry.EntryType == DirectoryEntryType.Directory)
                        {
                            var path            = $"{efsPath}{entry.Name}/";
                            var newComputerPath = $"{computerPath}{entry.Name}/";
                            PhoneDownloadDirectory(manager, path, newComputerPath, noExtraData, logger);
                            continue;
                        }

                        if (entry.EntryType == DirectoryEntryType.File ||
                            entry.EntryType == DirectoryEntryType.ItemFile)
                        {
                            PhoneDownloadFile(manager, entry, efsPath, computerPath, noExtraData, logger);
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnDownloadDirectoryFormat, efsPath, e.Message));
            }
        }
コード例 #7
0
        public static void PhoneFixFileNames(QcdmManager manager, string path, Logger logger)
        {
            try
            {
                if (!string.IsNullOrEmpty(path))
                {
                    var entries = PhoneOpenDirectory(manager, path, logger);
                    if (entries != null)
                    {
                        foreach (var entry in entries)
                        {
                            if (entry.EntryType == DirectoryEntryType.Directory)
                            {
                                var path1 = $"{path}{entry.Name}/";
                                PhoneFixFileNames(manager, path1, logger);
                                continue;
                            }

                            if (entry.EntryType == DirectoryEntryType.File ||
                                entry.EntryType == DirectoryEntryType.ItemFile)
                            {
                                PhoneCheckAndFixFileName(manager, entry.Name, path, logger);
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnFixFileNamesFormat, path, e.Message));
            }
        }
コード例 #8
0
        public static Dictionary <string, object> PhoneLoadItems(QcdmManager manager, int subscription)
        {
            var items = new Dictionary <string, object>();

            foreach (var filePath in ItemsFactory.SupportedEfsFilePaths)
            {
                var realFilePath = GetEfsFilePath(filePath, subscription);
                if (manager.Efs.FileExists(realFilePath))
                {
                    var itemType = ItemsFactory.GetEfsFileType(filePath);
                    using (var stream = FileUtils.PhoneOpenRead(manager, realFilePath))
                    {
                        var item = ItemsBinarySerializer.Deserialize(stream, itemType);
                        items.Add(itemType.Name, item);
                        stream.Close();
                    }
                }
            }

            foreach (var nvItemId in ItemsFactory.SupportedNvItemIds)
            {
                var itemType = ItemsFactory.GetNvItemType(nvItemId);
                using (var stream = NvOpenRead(manager, (ushort)nvItemId))
                {
                    if (stream != null)
                    {
                        var item = ItemsBinarySerializer.Deserialize(stream, itemType);
                        items.Add(itemType.Name, item);
                        stream.Close();
                    }
                }
            }

            return(items);
        }
コード例 #9
0
        public static void PhoneCreateDirectory(QcdmManager manager, string path, bool recursive, Logger logger)
        {
            if (!string.IsNullOrEmpty(path) && path != "/")
            {
                var p = path;
                if (p[p.Length - 1] == '/')
                {
                    p = p.Substring(0, p.Length - 1);
                }

                if (recursive)
                {
                    var ind = p.LastIndexOf('/');
                    if (ind > 0)
                    {
                        var parentPath = p.Substring(0, ind);
                        if (!string.IsNullOrEmpty(parentPath) && parentPath != "/")
                        {
                            PhoneCreateDirectory(manager, parentPath, true, logger);
                        }
                    }

                    PhoneCreateDirectory(manager, p, logger);
                }
                else
                {
                    PhoneCreateDirectory(manager, p, logger);
                }
            }
        }
コード例 #10
0
        private static void PhoneCheckAndFixFileName(QcdmManager manager, string entryName, string efsPath,
                                                     Logger logger)
        {
            var newEntryName = entryName.Replace("\n", "");

            newEntryName = newEntryName.Replace("\r", "");
            var efs = manager.Efs;

            if (newEntryName != entryName)
            {
                var oldPath = $"{efsPath}{entryName}";
                var newPath = $"{efsPath}{newEntryName}";
                if (efs.FileExists(newPath))
                {
                    efs.DeleteFile(oldPath);
                    efs.SyncNoWait(newPath, 1);
                }
                else
                {
                    efs.RenameFile(oldPath, newPath);
                    efs.SyncNoWait(newPath, 1);
                }

                //var stat1 = manager.Efs.FileStat(newPath);
                //var stat2 = manager.Efs.FileStat(oldPath);
                logger.LogInfo(string.Format(Strings.QcdmFixFileNameFormat, entryName, newEntryName, efsPath));
            }
        }
コード例 #11
0
ファイル: FileUtils.cs プロジェクト: mikalovtch/EfsTools
        private static void PhoneUploadFile(QcdmManager manager, string computerPath, string efsPath,
                                            bool createItemFilesAsDefault, Logger logger)
        {
            try
            {
                var fileName = Path.GetFileName(computerPath);
                if (fileName != null)
                {
                    var isItemFile = false;
                    var permission = 0777;
                    var info       = PathUtils.ParsePath(fileName);
                    if (info == null)
                    {
                        isItemFile = createItemFilesAsDefault;
                    }
                    else
                    {
                        permission = info.Permission;
                        isItemFile = info.IsItemFile;
                    }

                    PhoneWriteFile(manager, computerPath, efsPath, permission, isItemFile, logger);
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnUploadFormat, efsPath, e.Message));
            }
        }
コード例 #12
0
ファイル: NvItemUtils.cs プロジェクト: seunggil1/EfsTools
        private static void PhoneDownloadNvItem(QcdmManager manager, string path, ushort nvItemId, Logger logger)
        {
            var filePath = string.Empty;

            try
            {
                filePath = PathUtils.GetNvItemFileName(nvItemId);
                filePath = Path.Combine(path, filePath);
                using (var input = NvOpenRead(manager, nvItemId))
                {
                    if (input != null)
                    {
                        using (var output = FileUtils.LocalCreateWrite(filePath))
                        {
                            StreamUtils.Copy(input, output);
                            output.Flush();
                            output.Close();
                        }
                        input.Close();
                    }
                }
            }
            catch
            {
                if (!string.IsNullOrEmpty(filePath) && File.Exists(filePath))
                {
                    File.Delete(filePath);
                }
            }
        }
コード例 #13
0
 public QcdmManagerItemWriteStreamAdapter(QcdmManager manager, string path, int permission)
 {
     _manager    = manager;
     _stream     = new MemoryStream();
     _path       = path;
     _permission = permission;
     _closed     = false;
 }
コード例 #14
0
        public static EfsStoreItem Create(QcdmManager manager, string name, string uniqueKey, string path,
                                          bool isReadOnly, Logger logger, LogLevel logLevel)
        {
            var item = new EfsStoreItem(manager, name, uniqueKey, path, isReadOnly, logger, logLevel);

            item.Initialize();
            return(item);
        }
コード例 #15
0
ファイル: NvItemUtils.cs プロジェクト: seunggil1/EfsTools
 public static void PhoneUploadNvItems(QcdmManager manager, string path, Logger logger)
 {
     logger.LogInfo(string.Format(Strings.QcdmUploadingNvItems));
     for (ushort nvItemId = 1; nvItemId < ushort.MaxValue; ++nvItemId)
     {
         PhoneUploadNvItem(manager, path, nvItemId, logger);
     }
 }
コード例 #16
0
 public QcdmEfsFileStream(QcdmManager manager, string fileName, EfsFileFlag flags, int permission)
 {
     _file       = -1;
     _fileName   = fileName;
     _flags      = flags;
     _permission = permission;
     _manager    = manager;
     _position   = 0;
 }
コード例 #17
0
        public static void PhoneSaveItems(QcdmManager manager, Dictionary <string, object> items, Logger logger)
        {
            var efs = manager.Efs;

            foreach (var item in items)
            {
                var type          = item.Value.GetType();
                var fileAttribute = EfsFileAttributeUtils.Get(type);
                if (fileAttribute == null)
                {
                    var nvItemIdAttribute = NvItemIdAttributeUtils.Get(type);
                    if (nvItemIdAttribute != null && nvItemIdAttribute.Id <= UInt16.MaxValue)
                    {
                        using (var stream = NvOpenWrite(manager, (ushort)nvItemIdAttribute.Id))
                        {
                            ItemsBinarySerializer.Serialize(item.Value, stream);
                            stream.Flush();
                            stream.Close();
                        }
                    }
                }
                else
                {
                    var path             = fileAttribute.Path;
                    var subscriptionPath = PathUtils.GetSubscriptionPath(path, 1);
                    if (efs.FileExists(subscriptionPath))
                    {
                        efs.DeleteFile(subscriptionPath);
                    }
                    else
                    {
                        subscriptionPath = string.Empty;
                    }
                    using (var stream = fileAttribute.IsItemFile
                        ? FileUtils.PhoneItemCreateWrite(manager, path, fileAttribute.Permissions, logger)
                        : FileUtils.PhoneCreateWrite(manager, path, fileAttribute.Permissions, logger))
                    {
                        ItemsBinarySerializer.Serialize(item.Value, stream);
                        stream.Flush();
                        stream.Close();
                    }

                    if (!string.IsNullOrEmpty(subscriptionPath))
                    {
                        using (var stream = fileAttribute.IsItemFile
                            ? FileUtils.PhoneItemCreateWrite(manager, subscriptionPath, fileAttribute.Permissions,
                                                             logger)
                            : FileUtils.PhoneCreateWrite(manager, subscriptionPath, fileAttribute.Permissions, logger))
                        {
                            ItemsBinarySerializer.Serialize(item.Value, stream);
                            stream.Flush();
                            stream.Close();
                        }
                    }
                }
            }
        }
コード例 #18
0
 public static void PhoneDeleteFile(QcdmManager manager, string path, Logger logger)
 {
     try
     {
         manager.Efs.DeleteFile(path);
     }
     catch (Exception e)
     {
         logger.LogError(string.Format(Strings.QcdmErrorOnDeleteFileFormat, path, e.Message));
     }
 }
コード例 #19
0
ファイル: NvItemUtils.cs プロジェクト: seunggil1/EfsTools
 private static Stream NvOpenWrite(QcdmManager manager, ushort nvItemId)
 {
     try
     {
         return(new QcdmManagerNvWriteStreamAdapter(manager, nvItemId));
     }
     catch
     {
         return(null);
     }
 }
コード例 #20
0
 private static void PhoneCreateDirectory(QcdmManager manager, string efsPath, Logger logger)
 {
     try
     {
         manager.Efs.CreateDirectory(efsPath, 0777);
     }
     catch (Exception e)
     {
         logger.LogError(string.Format(Strings.QcdmErrorOnCreateDirectoryFormat, efsPath, e.Message));
     }
 }
コード例 #21
0
        public static void PhoneListDirectory(QcdmManager manager, string path, bool recursive, string offset,
                                              Logger logger)
        {
            try
            {
                if (!string.IsNullOrEmpty(path))
                {
                    var p = path;
                    if (p[p.Length - 1] == '/')
                    {
                        p = p.Substring(0, p.Length - 1);
                    }

                    var entries = PhoneOpenDirectoryForList(manager, p, logger);
                    if (entries != null)
                    {
                        foreach (var entry in entries)
                        {
                            if (entry.EntryType == DirectoryEntryType.Directory)
                            {
                                logger.LogInfo($"{offset}[{entry.Name}]");
                                if (recursive)
                                {
                                    var of      = $"{offset}  ";
                                    var dirPath = $"{p}/{entry.Name}";
                                    PhoneListDirectory(manager, dirPath, true, of, logger);
                                }

                                continue;
                            }

                            if (entry.EntryType == DirectoryEntryType.File ||
                                entry.EntryType == DirectoryEntryType.ItemFile)
                            {
                                var offsetName = $"{offset}{entry.Name}";
                                var len        = 80 - offsetName.Length;
                                if (len <= 0)
                                {
                                    len = 1;
                                }

                                var fill = GetFillString(len);
                                logger.LogInfo($"{offsetName}{fill}{entry.Size} b\t{entry.Mode:X}\t{entry.EntryType}");
                            }
                        }
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnDeleteDirectoryFormat, path, e.Message));
            }
        }
コード例 #22
0
ファイル: NvItemUtils.cs プロジェクト: seunggil1/EfsTools
 private static Stream NvOpenRead(QcdmManager manager, ushort nvItemId)
 {
     try
     {
         var data = manager.Nv.Read(nvItemId);
         return(new MemoryStream(data));
     }
     catch
     {
         return(null);
     }
 }
コード例 #23
0
 private EfsStoreItem(QcdmManager manager, string name, string uniqueKey, string path, bool isReadOnly,
                      Logger logger, LogLevel logLevel)
 {
     _manager       = manager;
     _name          = name;
     _uniqueKey     = uniqueKey;
     _path          = path;
     _isReadOnly    = isReadOnly;
     _logger        = logger;
     _logLevel      = logLevel;
     LockingManager = new EfsStoreLockingManager();
 }
コード例 #24
0
        public static void PhoneDeleteDirectory(QcdmManager manager, string path, bool recursive, Logger logger)
        {
            try
            {
                if (!string.IsNullOrEmpty(path))
                {
                    var p = path;
                    if (p[p.Length - 1] == '/')
                    {
                        p = p.Substring(0, p.Length - 1);
                    }

                    if (recursive)
                    {
                        var ind = p.LastIndexOf('/');
                        if (ind >= 0)
                        {
                            var entries = PhoneOpenDirectory(manager, p, logger);
                            if (entries != null)
                            {
                                foreach (var entry in entries)
                                {
                                    if (entry.EntryType == DirectoryEntryType.Directory)
                                    {
                                        var dirPath = $"{p}/{entry.Name}";
                                        PhoneDeleteDirectory(manager, dirPath, true, logger);
                                        continue;
                                    }

                                    if (entry.EntryType == DirectoryEntryType.File ||
                                        entry.EntryType == DirectoryEntryType.ItemFile)
                                    {
                                        var filePath = $"{p}/{entry.Name}";
                                        PhoneDeleteFile(manager, filePath, logger);
                                    }
                                }
                            }
                        }

                        manager.Efs.DeleteDirectory(p);
                    }
                    else
                    {
                        manager.Efs.DeleteDirectory(p);
                    }
                }
            }
            catch (Exception e)
            {
                logger.LogError(string.Format(Strings.QcdmErrorOnDeleteDirectoryFormat, path, e.Message));
            }
        }
コード例 #25
0
        private QcdmManager OpenQcdmManager()
        {
            var manager = new QcdmManager(_config.Port, _config.Baudrate, 5000);

            if (_config.Port != manager.PortName)
            {
                _logger.LogInfo(Strings.QcdmUseComPortFormat, manager.PortName);
            }
            manager.Open();
            manager.SendPassword(_config.Password);
            manager.SendSpc(_config.Spc);
            return(manager);
        }
コード例 #26
0
ファイル: NvItemUtils.cs プロジェクト: seunggil1/EfsTools
        public static Dictionary <string, object> PhoneLoadItems(QcdmManager manager, int subscription, Logger logger, bool verbose,
                                                                 HashSet <string> configItems)
        {
            var items = new Dictionary <string, object>();

            foreach (var filePath in ItemsFactory.SupportedEfsFilePaths)
            {
                var realFilePath = PathUtils.GetEfsFilePath(filePath, subscription);
                var itemType     = ItemsFactory.GetEfsFileType(filePath);
                if (configItems == null || configItems.Contains(itemType.Name))
                {
                    if (manager.Efs.FileExists(realFilePath))
                    {
                        using (var stream = FileUtils.PhoneOpenReadMemory(manager, realFilePath))
                        {
                            if (verbose)
                            {
                                logger.LogInfo(string.Format(Strings.QcdmProcessingFormat, filePath));
                            }
                            var item = ItemsBinarySerializer.Deserialize(stream, itemType);
                            items.Add(itemType.Name, item);
                            stream.Close();
                        }
                    }
                }
            }

            foreach (var nvItemId in ItemsFactory.SupportedNvItemIds)
            {
                var itemType = ItemsFactory.GetNvItemType(nvItemId);
                if (configItems == null || configItems.Contains(itemType.Name))
                {
                    using (var stream = NvOpenRead(manager, (ushort)nvItemId))
                    {
                        if (stream != null)
                        {
                            if (verbose)
                            {
                                logger.LogInfo(string.Format(Strings.QcdmProcessingFormat, itemType.Name));
                            }
                            var item = ItemsBinarySerializer.Deserialize(stream, itemType);
                            items.Add(itemType.Name, item);
                            stream.Close();
                        }
                    }
                }
            }

            return(items);
        }
コード例 #27
0
 private static void PhoneDownloadFile(QcdmManager manager, DirectoryEntry entry, string efsPath,
                                       string computerPath, bool noExtraData, Logger logger)
 {
     try
     {
         var entryName = entry.Name;
         var path1     = $"{efsPath}{entryName}";
         var path2     = PathUtils.BuildPath(computerPath, entryName, entry.Mode, entry.EntryType, noExtraData);
         PhoneReadFile(manager, path1, path2, logger);
     }
     catch (Exception e)
     {
         logger.LogError(string.Format(Strings.QcdmErrorOnDownloadFormat, efsPath, e.Message));
     }
 }
コード例 #28
0
        public static Stream PhoneItemCreateWrite(QcdmManager manager, string path, int permission, Logger logger)
        {
            var efs = manager.Efs;

            if (efs.FileExists(path))
            {
                efs.DeleteFile(path);
            }
            var directoryPath = PathUtils.GetDirectoryName(path);

            if (!efs.FileExists(directoryPath))
            {
                PhoneCreateDirectory(manager, directoryPath, true, logger);
            }
            return(new QcdmManagerItemWriteStreamAdapter(manager, path, permission));
        }
コード例 #29
0
 private static bool CheckQualcommPort(string port, int baudrate, bool _hdlcSendControlChar, bool ignoreUnsupportedCommands, Logger logger)
 {
     try
     {
         using (var manager = new QcdmManager(port, baudrate, 500, _hdlcSendControlChar, ignoreUnsupportedCommands, logger))
         {
             manager.Open();
             var version = manager.Version;
             manager.Close();
             return(true);
         }
     }
     catch
     {
     }
     return(false);
 }
コード例 #30
0
        private QcdmManager OpenQcdmManager()
        {
            var manager = new QcdmManager(_config.Port, _config.Baudrate, 7000,
                                          _config.HdlcSendControlChar, _config.IgnoreUnsupportedCommands, _logger);

            if (_config.Port != manager.PortName)
            {
                _logger.LogInfo(Strings.QcdmUseComPortFormat, manager.PortName);
            }

            manager.Open();
            manager.SendPassword(_config.Password);
            manager.SendSpc(_config.Spc);
            manager.DisableLogs();
            manager.DisableMessages();
            return(manager);
        }