Exemplo n.º 1
0
        public static int ProcessFileW(IntPtr arcData, int operation,
                                       [MarshalAs(UnmanagedType.LPWStr)] string destPath,
                                       [MarshalAs(UnmanagedType.LPWStr)] string destName)
        {
            PackerResult         result = PackerResult.NotSupported;
            ProcessFileOperation oper   = (ProcessFileOperation)operation;
            string fileName             = String.IsNullOrEmpty(destPath) ? destName : Path.Combine(destPath, destName);

            callSignature = String.Format("ProcessFile ({0}, {1}, {2})",
                                          arcData.ToString(), oper.ToString(), fileName);
            try {
                object o = TcHandles.GetObject(arcData);
                if (o != null)
                {
                    result = Plugin.ProcessFile(o, oper, fileName);
                    if (result == PackerResult.OK)
                    {
                        TcHandles.UpdateHandle(arcData, o);
                    }
                }

                // !!! may produce much trace info !!!
                TraceCall(TraceLevel.Verbose, result.ToString());
            } catch (Exception ex) {
                ProcessException(ex);
            }
            return((int)result);
        }
Exemplo n.º 2
0
        public override PackerResult ProcessFile(object arcData, ProcessFileOperation operation, string destFile)
        {
            if (operation.Equals(ProcessFileOperation.Skip))
            {
                return(PackerResult.OK);
            }
            string extension = Path.GetExtension(archiveFile);

            if (extension != null)
            {
                string arcExt = extension.ToUpper();
                if (!ExtensionsToOpen.Contains(arcExt))
                {
                    return(PackerResult.UnknownFormat);
                }
                if (!(arcData is IEnumerator))
                {
                    return(PackerResult.ErrorRead);
                }
                IEnumerator fileEnum = (IEnumerator)arcData;
                object      current  = fileEnum.Current;
                bool        isOk     = false;
                if (current != null)
                {
                    if (current is Array)
                    {
                        string[] node    = (string[])current;
                        string   fName   = node[0];
                        string   nodeSum = node[1];
                        bool     found   = node.Length > 2 && Convert.ToBoolean(node[2]);

                        string checkSum = String.Empty;
                        string fileName = Path.Combine(Path.GetDirectoryName(archiveFile), fName);
                        if (found)
                        {
                            checkSum = arcExt.EndsWith("MD5") ?
                                       GetFileHash(fileName, MD5.Create()) : GetFileHash(fileName, SHA1.Create());
                            isOk = (checkSum ?? String.Empty).Equals(nodeSum);
                        }
                        if (operation.Equals(ProcessFileOperation.Test))
                        {
                            return(isOk ? PackerResult.OK : PackerResult.BadArchive);
                        }
                        using (StreamWriter sw = new StreamWriter(destFile)) {
                            sw.WriteLine(fileName + "\n");
                            sw.WriteLine("expected:	" + nodeSum);
                            sw.WriteLine("computed:	" + (found ? checkSum : "???"));
                            sw.WriteLine("\n" + (arcExt.EndsWith("MD5") ? "MD5" : "SHA") +
                                         " checksum " + (isOk ? "OK!" : "FAILED!"));
                            sw.Flush();
                        }
                        return(PackerResult.OK);
                    }
                    return(PackerResult.ErrorRead);
                }
                return(PackerResult.ErrorRead);
            }
            return(PackerResult.UnknownFormat);
        }
Exemplo n.º 3
0
 public override PackerResult ProcessFile(object arcData, ProcessFileOperation operation, string destFile)
 {
     return(PackerResult.NotSupported);
 }
Exemplo n.º 4
0
 public virtual PackerResult ProcessFile(object arcData, ProcessFileOperation operation, string destFile)
 {
     throw new MethodNotSupportedException(nameof(ProcessFile));
 }