/* * (c) Copyright Ascensio System SIA 2010-2015 * * This program is a free software product. You can redistribute it and/or * modify it under the terms of the GNU Affero General Public License (AGPL) * version 3 as published by the Free Software Foundation. In accordance with * Section 7(a) of the GNU AGPL its Section 15 shall be amended to the effect * that Ascensio System SIA expressly excludes the warranty of non-infringement * of any third-party rights. * * This program is distributed WITHOUT ANY WARRANTY; without even the implied * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For * details, see the GNU AGPL at: http://www.gnu.org/licenses/agpl-3.0.html * * You can contact Ascensio System SIA at Lubanas st. 125a-25, Riga, Latvia, * EU, LV-1021. * * The interactive user interfaces in modified source and object code versions * of the Program must display Appropriate Legal Notices, as required under * Section 5 of the GNU AGPL version 3. * * Pursuant to Section 7(b) of the License you must retain the original Product * logo when distributing the program. Pursuant to Section 7(e) we decline to * grant you any rights under trademark law for use of our trademarks. * * All the Product's GUI elements, including illustrations and icon sets, as * well as technical writing content are licensed under the terms of the * Creative Commons Attribution-ShareAlike 4.0 International. See the License * terms at http://creativecommons.org/licenses/by-sa/4.0/legalcode * */ using System; using System.Collections.Generic; using System.Text; using System.Xml; using System.Data; using System.Configuration; using System.Net; using System.Web.Script.Serialization; using System.IO; using System.Runtime.Serialization; using System.Runtime.Serialization.Json; using System.Reflection; using System.ComponentModel; using ASC.Common.Data; using ASC.Common.Data.Sql; using ASC.Common.Data.Sql.Expressions; namespace FileConverterUtils2 { public class Constants { public const int gc_nAVS_ERROR_FIRST = -2147220736; public const int gc_nAVS_ERROR_PASSWORD = gc_nAVS_ERROR_FIRST + 0x0005; public const int gc_nAVS_ERROR_DRM = gc_nAVS_ERROR_FIRST + 0x0006; public const int gc_nAVS_FILEUTILS_ERROR_FIRST = gc_nAVS_ERROR_FIRST + 0x1000; public const string mc_sDateTimeFormat = "yyyy-MM-dd HH:mm:ss.fff"; public const string mc_sSqlLiteProvider = "System.Data.SQLite"; public const string mc_sPostgreProvider = "Npgsql"; public static System.Globalization.CultureInfo mc_oCultureInfo = new System.Globalization.CultureInfo(0x409); public const string mc_sResourceServiceUrlRel = "/ResourceService.ashx?path="; public const string mc_sWebClientUserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.0.3705;)"; public const int mc_nBufferSize = 1024 * 1024; } public class Utils { private class TxtCsvPropertiesEncoding { public int codepage { get; set; } public string name { get; set; } public TxtCsvPropertiesEncoding() { } public TxtCsvPropertiesEncoding(int _codepage, string _name) { codepage = _codepage; name = _name; } } private class TxtCsvProperties { public string filename { get; set; } public int? codepage { get; set; } public int? delimiter { get; set; } public List encodings { get; set; } public TxtCsvProperties() { encodings = new List(); } } private static readonly System.Collections.Generic.Dictionary _mappings = new System.Collections.Generic.Dictionary() { {".docx", "application/vnd.openxmlformats-officedocument.wordprocessingml.document"}, {".doc", "application/msword"}, {".odt", "application/vnd.oasis.opendocument.text"}, {".rtf", "application/rtf"}, {".txt", "text/plain"}, {".html", "text/html"}, {".mht", "message/rfc822"}, {".epub", "application/zip"}, {".fb2", "text/xml"}, {".mobi", "application/x-mobipocket-ebook"}, {".prc", "application/x-mobipocket-ebook"}, {".pptx", "application/vnd.openxmlformats-officedocument.presentationml.presentation"}, {".ppt", "application/vnd.ms-powerpoint"}, {".odp", "application/vnd.oasis.opendocument.presentation"}, {".xlsx", "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"}, {".xls", "application/vnd.ms-excel"}, {".ods", "application/vnd.oasis.opendocument.spreadsheet"}, {".csv", "text/csv"}, {".pdf", "application/pdf"}, {".swf", "application/x-shockwave-flash"}, {".djvu", "image/vnd.djvu"}, {".xps", "application/vnd.ms-xpsdocument"}, {".svg", "image/svg+xml"}, { ".jpg", "image/jpeg" }, { ".jpeg", "image/jpeg" }, { ".jpe", "image/jpeg" }, { ".png", "image/png" }, { ".gif", "image/gif" }, { ".bmp", "image/bmp" }, { ".json", "application/json" }, { ".ttc", "application/octet-stream" }, { ".otf", "application/octet-stream" } }; public delegate string getMD5HexStringDelegate(Stream stream); public static string getMD5HexString(Stream stream) { System.Text.StringBuilder sb = new System.Text.StringBuilder(); using (System.Security.Cryptography.MD5 oMD5 = System.Security.Cryptography.MD5.Create()) { byte[] aHash = oMD5.ComputeHash(stream); for (int i = 0, length = aHash.Length; i < length; ++i) sb.Append(aHash[i].ToString("X2")); } return sb.ToString(); } public static string GetSerializedEncodingProperty(string sFilename, int? codepage, int? delimiter) { TxtCsvProperties oCsvProperties = new TxtCsvProperties(); oCsvProperties.filename = sFilename; oCsvProperties.codepage = codepage; oCsvProperties.delimiter = delimiter; System.Text.EncodingInfo[] aSystemEncodings = System.Text.Encoding.GetEncodings(); for (int i = 0; i < aSystemEncodings.Length; i++) { System.Text.EncodingInfo oEncodingInfo = aSystemEncodings[i]; oCsvProperties.encodings.Add(new TxtCsvPropertiesEncoding(oEncodingInfo.CodePage, oEncodingInfo.DisplayName)); } JavaScriptSerializer serializer = new JavaScriptSerializer(); return serializer.Serialize(oCsvProperties); } public static void GetDeserializedEncodingProperty(string sJson, out string sFilename, out int? codepage, out int? delimiter) { sFilename = null; codepage = null; delimiter = null; JavaScriptSerializer serializer = new JavaScriptSerializer(); TxtCsvProperties oTxtCsvProperties = serializer.Deserialize(sJson); if (null != oTxtCsvProperties) { sFilename = oTxtCsvProperties.filename; codepage = oTxtCsvProperties.codepage; delimiter = oTxtCsvProperties.delimiter; } } public static string GetIP4Address(string strUserHostAddress) { string IP4Address = String.Empty; foreach (IPAddress IPA in Dns.GetHostAddresses(strUserHostAddress)) { if (IPA.AddressFamily.ToString() == "InterNetwork") { IP4Address = IPA.ToString(); break; } } if (IP4Address != String.Empty) { return IP4Address; } foreach (IPAddress IPA in Dns.GetHostAddresses(Dns.GetHostName())) { if (IPA.AddressFamily.ToString() == "InterNetwork") { IP4Address = IPA.ToString(); break; } } return IP4Address; } public static string MySqlEscape(string strString, string strConnectionString) { string strConnectionProviderName = GetDbConnectionProviderName(strConnectionString); if (strConnectionProviderName == Constants.mc_sSqlLiteProvider) return strString; else if (strConnectionProviderName == Constants.mc_sPostgreProvider) { if (strString == null) return null; else return strString.Replace("'", "''"); } if (strString == null) { return null; } return System.Text.RegularExpressions.Regex.Replace(strString, @"[\r\n\x00\x1a\\'""]", @"\$0"); } public static string GetDbConnectionProviderName(string strConnectionString) { ConnectionStringSettings oConnectionSettings = ConfigurationManager.ConnectionStrings[strConnectionString]; return oConnectionSettings.ProviderName; } public static int mapAscServerErrorToOldError(ErrorTypes eError) { int nRes = -1; switch(eError) { case ErrorTypes.NoError : nRes = 0;break; case ErrorTypes.TaskQueue : case ErrorTypes.TaskResult : nRes = -6;break; case ErrorTypes.ConvertDownload : nRes = -4;break; case ErrorTypes.ConvertTimeout : nRes = -2;break; case ErrorTypes.ConvertMS_OFFCRYPTO: case ErrorTypes.ConvertUnknownFormat : case ErrorTypes.ConvertReadFile : case ErrorTypes.Convert : nRes = -3;break; case ErrorTypes.UploadContentLength : nRes = -9;break; case ErrorTypes.UploadExtension : nRes = -10;break; case ErrorTypes.UploadCountFiles : nRes = -11;break; case ErrorTypes.VKey : nRes = -8;break; case ErrorTypes.VKeyEncrypt : nRes = -20;break; case ErrorTypes.VKeyKeyExpire : nRes = -21;break; case ErrorTypes.VKeyUserCountExceed : nRes = -22;break; case ErrorTypes.Storage : case ErrorTypes.StorageFileNoFound : case ErrorTypes.StorageRead : case ErrorTypes.StorageWrite : case ErrorTypes.StorageRemoveDir : case ErrorTypes.StorageCreateDir : case ErrorTypes.StorageGetInfo : case ErrorTypes.Upload : case ErrorTypes.ReadRequestStream : case ErrorTypes.Unknown : nRes = -1;break; } return nRes; } public static string GetMimeType(string sPath) { string sExt = Path.GetExtension(sPath).ToLower(); string mime; return _mappings.TryGetValue(sExt, out mime) ? mime : "application/octet-stream"; } public static string GetTempDirectory() { string tempDirectory = null; do { tempDirectory = Path.Combine(Path.GetTempPath(), Path.GetRandomFileName()); } while (Directory.Exists(tempDirectory)); return tempDirectory; } public static string SerializeToXml(Type oType, object oData) { string sRes = ""; using (MemoryStream ms = new MemoryStream()) { XmlWriterSettings ws = new XmlWriterSettings(); ws.NewLineHandling = NewLineHandling.None; ws.Indent = false; ws.Encoding = new UTF8Encoding(false); XmlWriter xw = System.Xml.XmlWriter.Create(ms, ws); System.Xml.Serialization.XmlSerializer formatter = new System.Xml.Serialization.XmlSerializer(oType); formatter.Serialize(xw, oData); sRes = Encoding.UTF8.GetString(ms.GetBuffer(), 0, (int)ms.Position); } return sRes; } public static object DeserializeFromXml(Type oType, string sXml) { object oRes = null; using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(sXml))) { System.Xml.Serialization.XmlSerializer formatter = new System.Xml.Serialization.XmlSerializer(oType); oRes = formatter.Deserialize(ms); } return oRes; } public static bool ConvertGifIcoToPng(byte[] aInput, int nImageFormat, out byte[] aOutput) { aOutput = null; bool bRes = false; if (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_GIF == nImageFormat) { using (MemoryStream ms = new MemoryStream(aInput)) { System.Drawing.Image oImage = System.Drawing.Image.FromStream(ms); using (MemoryStream ms2 = new MemoryStream()) { oImage.Save(ms2, System.Drawing.Imaging.ImageFormat.Png); aOutput = ms2.ToArray(); bRes = true; } } } else if (FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_ICO == nImageFormat) { using (MemoryStream ms = new MemoryStream(aInput)) { System.Drawing.Icon oIcon = new System.Drawing.Icon(ms, new System.Drawing.Size(256, 256)); using (MemoryStream ms2 = new MemoryStream()) { oIcon.ToBitmap().Save(ms2, System.Drawing.Imaging.ImageFormat.Png); aOutput = ms2.ToArray(); bRes = true; } } } return bRes; } public static int CompareStringByLength(string x, string y) { if (null != x && null != y) { if (x.Length == y.Length) return x.CompareTo(y); else return x.Length - y.Length; } else { if (null != x) return 1; else if (null != y) return -1; } return 0; } public static string GetContentDisposition(string sUserAgent, string sBrowser, string sVersion, string sFilename) { string contentDisposition; if (sBrowser == "IE" && (sVersion == "7.0" || sVersion == "8.0")) contentDisposition = "attachment; filename=" + Uri.EscapeDataString(sFilename); else if (sUserAgent != null && sUserAgent.ToLowerInvariant().Contains("android")) contentDisposition = "attachment; filename=\"" + MakeAndroidSafeFileName(sFilename) + "\""; else contentDisposition = "attachment; filename=\"" + sFilename + "\"; filename*=UTF-8''" + Uri.EscapeDataString(sFilename); return contentDisposition; } private static string MakeAndroidSafeFileName(string fileName) { char[] newFileName = fileName.ToCharArray(); for (int i = 0; i < newFileName.Length; i++) { if (-1 == "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ._-+,@£$€!½§~'=()[]{}0123456789".IndexOf(newFileName[i])) newFileName[i] = '_'; } return new string(newFileName); } } public class FileFormats { public static int FromString(string sFormat) { switch (sFormat.ToLower()) { case "docx": return AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX; case "doc": return AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC; case "odt": return AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT; case "rtf": return AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF; case "txt": case "xml": case "xslt": return AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT; case "html": return AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML; case "mht": return AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT; case "epub": return AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB; case "fb2": return AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2; case "mobi": return AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI; case "pptx": return AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX; case "ppt": return AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT; case "odp": return AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP; case "ppsx": return AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX; case "xlsx": return AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX; case "xls": return AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS; case "ods": return AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS; case "csv": return AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV; case "jpeg": case "jpe": case "jpg": return AVS_OFFICESTUDIO_FILE_IMAGE_JPG; case "tif": case "tiff": return AVS_OFFICESTUDIO_FILE_IMAGE_TIFF; case "tga": return AVS_OFFICESTUDIO_FILE_IMAGE_TGA; case "gif": return AVS_OFFICESTUDIO_FILE_IMAGE_GIF; case "png": return AVS_OFFICESTUDIO_FILE_IMAGE_PNG; case "emf": return AVS_OFFICESTUDIO_FILE_IMAGE_EMF; case "wmf": return AVS_OFFICESTUDIO_FILE_IMAGE_WMF; case "bmp": return AVS_OFFICESTUDIO_FILE_IMAGE_BMP; case "cr2": return AVS_OFFICESTUDIO_FILE_IMAGE_CR2; case "pcx": return AVS_OFFICESTUDIO_FILE_IMAGE_PCX; case "ras": return AVS_OFFICESTUDIO_FILE_IMAGE_RAS ; case "psd": return AVS_OFFICESTUDIO_FILE_IMAGE_PSD; case "ico": return AVS_OFFICESTUDIO_FILE_IMAGE_ICO; case "pdf": return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF; case "swf": return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF; case "djvu": return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU; case "xps": return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS; case "svg": return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG; case "htmlr": return AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR; case "doct": return AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY; case "xlst": return AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY; case "pptt": return AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY; default: return AVS_OFFICESTUDIO_FILE_UNKNOWN; } } public static string ToString(int nFormat) { switch (nFormat) { case AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX: return "docx"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC: return "doc"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT: return "odt"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF: return "rtf"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT: return "txt"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML: return "html"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT: return "mht"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB: return "epub"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2: return "fb2"; case AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI: return "mobi"; case AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX: return "pptx"; case AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT: return "ppt"; case AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP: return "odp"; case AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX: return "ppsx"; case AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX: return "xlsx"; case AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS: return "xls"; case AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS: return "ods"; case AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV: return "csv"; case AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF: return "pdf"; case AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF: return "swf"; case AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU: return "djvu"; case AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS: return "xps"; case AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG: return "svg"; case AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR: return "htmlr"; case AVS_OFFICESTUDIO_FILE_OTHER_HTMLZIP: return "zip"; case AVS_OFFICESTUDIO_FILE_IMAGE: return "jpg"; case AVS_OFFICESTUDIO_FILE_IMAGE_JPG: return "jpg"; case AVS_OFFICESTUDIO_FILE_IMAGE_TIFF: return "tiff"; case AVS_OFFICESTUDIO_FILE_IMAGE_TGA: return "tga"; case AVS_OFFICESTUDIO_FILE_IMAGE_GIF: return "gif"; case AVS_OFFICESTUDIO_FILE_IMAGE_PNG: return "png"; case AVS_OFFICESTUDIO_FILE_IMAGE_EMF: return "emf"; case AVS_OFFICESTUDIO_FILE_IMAGE_WMF: return "wmf"; case AVS_OFFICESTUDIO_FILE_IMAGE_BMP: return "bmp"; case AVS_OFFICESTUDIO_FILE_IMAGE_CR2: return "cr2"; case AVS_OFFICESTUDIO_FILE_IMAGE_PCX: return "pcx"; case AVS_OFFICESTUDIO_FILE_IMAGE_RAS: return "ras"; case AVS_OFFICESTUDIO_FILE_IMAGE_PSD: return "psd"; case AVS_OFFICESTUDIO_FILE_IMAGE_ICO: return "ico"; case AVS_OFFICESTUDIO_FILE_CANVAS_WORD: case AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET: case AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION: return "bin"; case AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT: case AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY: return "doct"; case AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY: return "xlst"; case AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION: case AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING: case AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY: return "pptt"; default: return ""; } } public const int AVS_OFFICESTUDIO_FILE_UNKNOWN = 0x0000; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT = 0x0040; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_DOCX = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0001; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0002; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_ODT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0003; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0004; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0005; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0006; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0007; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_EPUB = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0008; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2 = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x0009; public const int AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI = AVS_OFFICESTUDIO_FILE_DOCUMENT + 0x000a; public const int AVS_OFFICESTUDIO_FILE_PRESENTATION = 0x0080; public const int AVS_OFFICESTUDIO_FILE_PRESENTATION_PPTX = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0001; public const int AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0002; public const int AVS_OFFICESTUDIO_FILE_PRESENTATION_ODP = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0003; public const int AVS_OFFICESTUDIO_FILE_PRESENTATION_PPSX = AVS_OFFICESTUDIO_FILE_PRESENTATION + 0x0004; public const int AVS_OFFICESTUDIO_FILE_SPREADSHEET = 0x0100; public const int AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLSX = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0001; public const int AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0002; public const int AVS_OFFICESTUDIO_FILE_SPREADSHEET_ODS = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0003; public const int AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV = AVS_OFFICESTUDIO_FILE_SPREADSHEET + 0x0004; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM = 0x0200; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0001; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SWF = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0002; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0003; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_XPS = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0004; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0005; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLR = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0006; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRMenu = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0007; public const int AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_HTMLRCanvas = AVS_OFFICESTUDIO_FILE_CROSSPLATFORM + 0x0008; public const int AVS_OFFICESTUDIO_FILE_IMAGE = 0x0400; public const int AVS_OFFICESTUDIO_FILE_IMAGE_JPG = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0001; public const int AVS_OFFICESTUDIO_FILE_IMAGE_TIFF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0002; public const int AVS_OFFICESTUDIO_FILE_IMAGE_TGA = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0003; public const int AVS_OFFICESTUDIO_FILE_IMAGE_GIF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0004; public const int AVS_OFFICESTUDIO_FILE_IMAGE_PNG = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0005; public const int AVS_OFFICESTUDIO_FILE_IMAGE_EMF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0006; public const int AVS_OFFICESTUDIO_FILE_IMAGE_WMF = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0007; public const int AVS_OFFICESTUDIO_FILE_IMAGE_BMP = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0008; public const int AVS_OFFICESTUDIO_FILE_IMAGE_CR2 = AVS_OFFICESTUDIO_FILE_IMAGE + 0x0009; public const int AVS_OFFICESTUDIO_FILE_IMAGE_PCX = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000a; public const int AVS_OFFICESTUDIO_FILE_IMAGE_RAS = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000b; public const int AVS_OFFICESTUDIO_FILE_IMAGE_PSD = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000c; public const int AVS_OFFICESTUDIO_FILE_IMAGE_ICO = AVS_OFFICESTUDIO_FILE_IMAGE + 0x000d; public const int AVS_OFFICESTUDIO_FILE_OTHER = 0x0800; public const int AVS_OFFICESTUDIO_FILE_OTHER_EXTRACT_IMAGE = AVS_OFFICESTUDIO_FILE_OTHER + 0x0001; public const int AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO = AVS_OFFICESTUDIO_FILE_OTHER + 0x0002; public const int AVS_OFFICESTUDIO_FILE_OTHER_HTMLZIP = AVS_OFFICESTUDIO_FILE_OTHER + 0x0003; public const int AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT = AVS_OFFICESTUDIO_FILE_OTHER + 0x0004; public const int AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION = AVS_OFFICESTUDIO_FILE_OTHER + 0x0005; public const int AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING = AVS_OFFICESTUDIO_FILE_OTHER + 0x0006; public const int AVS_OFFICESTUDIO_FILE_OTHER_TEAMLAB_INNER = AVS_OFFICESTUDIO_FILE_OTHER + 0x0007; public const int AVS_OFFICESTUDIO_FILE_TEAMLAB = 0x1000; public const int AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY = AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0001; public const int AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY = AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0002; public const int AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY = AVS_OFFICESTUDIO_FILE_TEAMLAB + 0x0003; public const int AVS_OFFICESTUDIO_FILE_CANVAS = 0x2000; public const int AVS_OFFICESTUDIO_FILE_CANVAS_WORD = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0001; public const int AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0002; public const int AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION = AVS_OFFICESTUDIO_FILE_CANVAS + 0x0003; } public enum FileStatus : byte { None = 0, Ok = 1, WaitQueue = 2, NeedParams = 3, Convert = 4, Err = 5, ErrToReload = 6, SaveVersion = 7, UpdateVersion = 8 }; public static class StringEnum { public static string GetStringValue(Enum value) { string output = ""; Type type = value.GetType(); FieldInfo fi = type.GetField(value.ToString()); DescriptionAttribute[] attrs = fi.GetCustomAttributes(typeof(DescriptionAttribute), false) as DescriptionAttribute[]; if (attrs.Length > 0) output = attrs[0].Description; return output; } } public enum FileStatusOut : byte { [Description("Unknown status.")] NotFound = 0, [Description("The document is editing.")] Editing = 1, [Description("The document is ready for save.")] MustSave = 2, [Description("The document corrupted.")] Corrupted = 3, [Description("The document closed.")] Closed = 4 }; public enum ErrorTypes : int { NoError = 0, Unknown = -1, ReadRequestStream = -3, WebRequest = -4, TaskQueue = -20, TaskResult = -40, Storage = -60, StorageFileNoFound = -61, StorageRead = -62, StorageWrite = -63, StorageRemoveDir = -64, StorageCreateDir = -65, StorageGetInfo = -66, Convert = -80, ConvertDownload = -81, ConvertUnknownFormat = -82, ConvertTimeout = -83, ConvertReadFile = -84, ConvertMS_OFFCRYPTO = -85, ConvertCorrupted = -86, ConvertLibreOffice = -87, ConvertParams = -88, Upload = -100, UploadContentLength = -101, UploadExtension = -102, UploadCountFiles = -103, VKey = -120, VKeyEncrypt = -121, VKeyKeyExpire = -122, VKeyUserCountExceed = -123, VKeyTimeExpire = -124, VKeyTimeIncorrect = -125, LicenseError = -140, LicenseErrorType = -141, LicenseErrorArgument = -142, LicenseErrorPermission = -143, LicenseErrorActiveConnectionQuotaExceed = -144, LicenseErrorInvalidDate = -145, LicenseErrorFile = -146, EditorChanges = -160 }; public class InputCommand { public string id { get; set; } public string format { get; set; } public int editorid { get; set; } public string c { get; set; } public string url { get; set; } public string vkey { get; set; } public string title { get; set; } public string data { get; set; } public int? outputformat { get; set; } public string savetype { get; set; } public string savekey { get; set; } public int? codepage { get; set; } public int? delimiter { get; set; } public bool embeddedfonts { get; set; } public bool innersave { get; set; } public string userid { get; set; } public int status { get; set; } public int status_info { get; set; } public TaskQueueData task_queue_data { get; set; } public InputCommand() { innersave = false; } public static string SerializeToJson(InputCommand oData) { return new JavaScriptSerializer().Serialize(oData); } public static InputCommand DeserializeFromJson(string sJson) { return new JavaScriptSerializer().Deserialize(sJson) as InputCommand; } } public enum CsvDelimiter : int { None = 0, Tab = 1, Semicolon = 2, Сolon = 3, Comma = 4, Space = 5 } public enum Priority : int { Low = 0, Normal = 1, High = 2 }; public enum PostMessageType : int { UploadImage = 0 }; public class FormatChecker { private static int GetFileFormatBySignature(byte[] aBuffer) { int nLength = aBuffer.Length; if ((5 <= nLength) && '{' == aBuffer[0] && '\\' == aBuffer[1] && 'r' == aBuffer[2] && 't' == aBuffer[3] && 'f' == aBuffer[4]) return FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_RTF; string sText = Encoding.ASCII.GetString(aBuffer, 0, 20); if (-1 != sText.IndexOf("%PDF-")) return FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_PDF; else if(0 == sText.IndexOf("DOCY")) return FileFormats.AVS_OFFICESTUDIO_FILE_CANVAS_WORD; else if (0 == sText.IndexOf("XLSY")) return FileFormats.AVS_OFFICESTUDIO_FILE_CANVAS_SPREADSHEET; else if (0 == sText.IndexOf("PPTY")) return FileFormats.AVS_OFFICESTUDIO_FILE_CANVAS_PRESENTATION; bool tagOpen = false; for (int i = 0; i < nLength - 11 && i < 100; i++) { if (0x3C == aBuffer[i]) tagOpen = true; else if (0x3E == aBuffer[i]) tagOpen = false; else if (tagOpen && 0x46 == aBuffer[i] && 0x69 == aBuffer[i + 1] && 0x63 == aBuffer[i + 2] && 0x74 == aBuffer[i + 3] && 0x69 == aBuffer[i + 4] && 0x6F == aBuffer[i + 5] && 0x6E == aBuffer[i + 6] && 0x42 == aBuffer[i + 7] && 0x6F == aBuffer[i + 8] && 0x6F == aBuffer[i + 9] && 0x6B == aBuffer[i + 10]) return FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_FB2; else if (tagOpen && (0x48 == aBuffer[i] || 0x68 == aBuffer[i]) && (0x54 == aBuffer[i + 1] || 0x74 == aBuffer[i + 1]) && (0x4d == aBuffer[i + 2] || 0x6d == aBuffer[i + 2]) && (0x4c == aBuffer[i + 3] || 0x6c == aBuffer[i + 3])) return FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML; } if ((8 <= nLength) && 0x41 == aBuffer[0] && 0x54 == aBuffer[1] && 0x26 == aBuffer[2] && 0x54 == aBuffer[3] && 0x46 == aBuffer[4] && 0x4f == aBuffer[5] && 0x52 == aBuffer[6] && 0x4d == aBuffer[7]) return FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_DJVU; if (68 <= nLength && (('B' == aBuffer[60] && 'O' == aBuffer[61] && 'O' == aBuffer[62] && 'K' == aBuffer[63] && 'M' == aBuffer[64] && 'O' == aBuffer[65] && 'B' == aBuffer[66] && 'I' == aBuffer[67]) || ('T' == aBuffer[60] && 'E' == aBuffer[61] && 'X' == aBuffer[62] && 't' == aBuffer[63] && 'R' == aBuffer[64] && 'E' == aBuffer[65] && 'A' == aBuffer[66] && 'D' == aBuffer[67]))) return FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_MOBI; if ((3 <= nLength) && (0xFF == aBuffer[0]) && (0xD8 == aBuffer[1]) && (0xFF == aBuffer[2])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_JPG; if ((34 <= nLength) && (0x42 == aBuffer[0]) && (0x4D == aBuffer[1]) && (0x00 == aBuffer[6]) && (0x00 == aBuffer[7]) && (0x01 == aBuffer[26]) && (0x00 == aBuffer[27]) && ((0x00 == aBuffer[28]) || (0x01 == aBuffer[28]) || (0x04 == aBuffer[28]) || (0x08 == aBuffer[28]) || (0x10 == aBuffer[28]) || (0x18 == aBuffer[28]) || (0x20 == aBuffer[28])) && (0x00 == aBuffer[29]) && ((0x00 == aBuffer[30]) || (0x01 == aBuffer[30]) || (0x02 == aBuffer[30]) || (0x03 == aBuffer[30]) || (0x04 == aBuffer[30]) || (0x05 == aBuffer[30])) && (0x00 == aBuffer[31]) && (0x00 == aBuffer[32]) && (0x00 == aBuffer[33])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_BMP; if ((4 <= nLength) && "GIF8" == System.Text.Encoding.ASCII.GetString(aBuffer, 0, "GIF8".Length)) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_GIF; if ((6 <= nLength) && ("GIF87a" == System.Text.Encoding.ASCII.GetString(aBuffer, 0, "GIF87a".Length) || "GIF89a" == System.Text.Encoding.ASCII.GetString(aBuffer, 0, "GIF89a".Length))) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_GIF; if ((16 <= nLength) && (0x89 == aBuffer[0]) && (0x50 == aBuffer[1]) && (0x4E == aBuffer[2]) && (0x47 == aBuffer[3]) && (0x0D == aBuffer[4]) && (0x0A == aBuffer[5]) && (0x1A == aBuffer[6]) && (0x0A == aBuffer[7]) && (0x00 == aBuffer[8]) && (0x00 == aBuffer[9]) && (0x00 == aBuffer[10]) && (0x0D == aBuffer[11]) && (0x49 == aBuffer[12]) && (0x48 == aBuffer[13]) && (0x44 == aBuffer[14]) && (0x52 == aBuffer[15])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_PNG; if ((10 <= nLength) && (0x49 == aBuffer[0]) && (0x49 == aBuffer[1]) && (0x2A == aBuffer[2]) && (0x00 == aBuffer[3]) && (0x10 == aBuffer[4]) && (0x00 == aBuffer[5]) && (0x00 == aBuffer[6]) && (0x00 == aBuffer[7]) && (0x43 == aBuffer[8]) && (0x52 == aBuffer[9])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_CR2; if (4 <= nLength) { if (((0x49 == aBuffer[0]) && (0x49 == aBuffer[1]) && (0x2A == aBuffer[2]) && (0x00 == aBuffer[3])) || ((0x4D == aBuffer[0]) && (0x4D == aBuffer[1]) && (0x00 == aBuffer[2]) && (0x2A == aBuffer[3])) || ((0x49 == aBuffer[0]) && (0x49 == aBuffer[1]) && (0x2A == aBuffer[2]) && (0x00 == aBuffer[3]))) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_TIFF; } if (6 <= nLength) { if (((0xD7 == aBuffer[0]) && (0xCD == aBuffer[1]) && (0xC6 == aBuffer[2]) && (0x9A == aBuffer[3]) && (0x00 == aBuffer[4]) && (0x00 == aBuffer[5])) || ((0x01 == aBuffer[0]) && (0x00 == aBuffer[1]) && (0x09 == aBuffer[2]) && (0x00 == aBuffer[3]) && (0x00 == aBuffer[4]) && (0x03 == aBuffer[5]))) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_WMF; } if ((44 <= nLength) && (0x01 == aBuffer[0]) && (0x00 == aBuffer[1]) && (0x00 == aBuffer[2]) && (0x00 == aBuffer[3]) && (0x20 == aBuffer[40]) && (0x45 == aBuffer[41]) && (0x4D == aBuffer[42]) && (0x46 == aBuffer[43])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_EMF; if ((4 <= nLength) && (0x0A == aBuffer[0]) && (0x00 == aBuffer[1] || 0x01 == aBuffer[1] || 0x02 == aBuffer[1] || 0x03 == aBuffer[1] || 0x04 == aBuffer[1] || 0x05 == aBuffer[1]) && (0x01 == aBuffer[3] || 0x02 == aBuffer[3] || 0x04 == aBuffer[3] || 0x08 == aBuffer[3])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_PCX; if ((17 <= nLength) && ((0x01 == aBuffer[1] && 0x01 == aBuffer[2]) || (0x00 == aBuffer[1] && 0x02 == aBuffer[2]) || (0x00 == aBuffer[1] && 0x03 == aBuffer[2]) || (0x01 == aBuffer[1] && 0x09 == aBuffer[2]) || (0x00 == aBuffer[1] && 0x0A == aBuffer[2]) || (0x00 == aBuffer[1] && 0x0B == aBuffer[2])) && (0x08 == aBuffer[16] || 0x10 == aBuffer[16] || 0x18 == aBuffer[16] || 0x20 == aBuffer[16])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_TGA; if ((4 <= nLength) && (0x59 == aBuffer[0]) && (0xA6 == aBuffer[1]) && (0x6A == aBuffer[2]) && (0x95 == aBuffer[3])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_RAS; if ((13 <= nLength) && (0x38 == aBuffer[0]) && (0x42 == aBuffer[1]) && (0x50 == aBuffer[2]) && (0x53 == aBuffer[3]) && (0x00 == aBuffer[4]) && (0x01 == aBuffer[5]) && (0x00 == aBuffer[6]) && (0x00 == aBuffer[7]) && (0x00 == aBuffer[8]) && (0x00 == aBuffer[9]) && (0x00 == aBuffer[10]) && (0x00 == aBuffer[11]) && (0x00 == aBuffer[12])) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_PSD; if (4 <= nLength && 0x00 == aBuffer[0] && 0x00 == aBuffer[1] && 0x01 == aBuffer[2] && 0x00 == aBuffer[3]) return FileFormats.AVS_OFFICESTUDIO_FILE_IMAGE_ICO; if ((4 <= nLength) && "= nSignatureLength) { byte[] aSignature = new byte[nSignatureLength]; oMemoryStream.Read(aSignature, 0, nSignatureLength); string sSignature = System.Text.ASCIIEncoding.ASCII.GetString(aSignature); switch (sSignature) { case "DOCY": nFormat = FileFormats.AVS_OFFICESTUDIO_FILE_TEAMLAB_DOCY; break; case "XLSY": nFormat = FileFormats.AVS_OFFICESTUDIO_FILE_TEAMLAB_XLSY; break; case "PPTY": nFormat = FileFormats.AVS_OFFICESTUDIO_FILE_TEAMLAB_PPTY; break; } } } if(FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN != nFormat) return nFormat; } else if (oZipFile.ContainsEntry("Editor.xml")) { return FileFormats.AVS_OFFICESTUDIO_FILE_OTHER_OLD_PRESENTATION; } else if (oZipFile.ContainsEntry("Editor.svg")) { return FileFormats.AVS_OFFICESTUDIO_FILE_OTHER_OLD_DRAWING; } else if (oZipFile.ContainsEntry("Editor.html.arch")) { return FileFormats.AVS_OFFICESTUDIO_FILE_OTHER_OLD_DOCUMENT; } return FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN; } private static int GetFileFormatStorage(OpenMcdf.CompoundFile oCompoundFile) { int format = FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN; try { oCompoundFile.RootStorage.GetStream("WordDocument"); format = FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_DOC; } catch { } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { oCompoundFile.RootStorage.GetStream("Workbook"); format = FileFormats.AVS_OFFICESTUDIO_FILE_SPREADSHEET_XLS; } catch { } } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { oCompoundFile.RootStorage.GetStream("PowerPoint Document"); format = FileFormats.AVS_OFFICESTUDIO_FILE_PRESENTATION_PPT; } catch { } } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { oCompoundFile.RootStorage.GetStorage("\x0006DataSpaces"); format = FileFormats.AVS_OFFICESTUDIO_FILE_OTHER_MS_OFFCRYPTO; } catch { } } return format; } public static int GetFileFormat(string sPath) { int format = FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN; try { if (new FileInfo(sPath).Length == 0) format = FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT; else { using (FileStream fs = new FileStream(sPath, FileMode.Open, FileAccess.Read)) { byte[] aBuffer = new byte[100]; fs.Read(aBuffer, 0, aBuffer.Length); format = GetFileFormatBySignature(aBuffer); } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { OpenMcdf.CompoundFile oCompoundFile = new OpenMcdf.CompoundFile(sPath); format = GetFileFormatStorage(oCompoundFile); oCompoundFile.Close(); } catch { } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { if (Ionic.Zip.ZipFile.IsZipFile(sPath)) { using (Ionic.Zip.ZipFile oZipFile = Ionic.Zip.ZipFile.Read(sPath)) { format = GetFileFormatByZip(oZipFile); } } } catch { } } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { string sExtention = Path.GetExtension(sPath).ToLower(); if (".mht" == sExtention) format = FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_MHT; else if (".txt" == sExtention || ".xml" == sExtention || ".xslt" == sExtention) format = FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT; else if (".csv" == sExtention) format = FileFormats.AVS_OFFICESTUDIO_FILE_SPREADSHEET_CSV; else if (".svg" == sExtention) format = FileFormats.AVS_OFFICESTUDIO_FILE_CROSSPLATFORM_SVG; else if (".html" == sExtention || ".htm" == sExtention) format = FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_HTML; else { string sExt = Path.GetExtension(sPath); if (sExt.Length > 0 && '.' == sExt[0]) sExt = sExt.Substring(1); format = FileFormats.FromString(sExt); } } } } } catch { } return format; } public static int GetFileFormat(byte[] aBuffer) { int format = FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN; try { if (aBuffer.Length == 0) format = FileFormats.AVS_OFFICESTUDIO_FILE_DOCUMENT_TXT; else { format = GetFileFormatBySignature(aBuffer); if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { using (MemoryStream ms = new MemoryStream(aBuffer)) { OpenMcdf.CompoundFile oCompoundFile = new OpenMcdf.CompoundFile(ms); format = GetFileFormatStorage(oCompoundFile); oCompoundFile.Close(); } } catch { } if (FileFormats.AVS_OFFICESTUDIO_FILE_UNKNOWN == format) { try { using (MemoryStream ms = new MemoryStream(aBuffer)) { if (Ionic.Zip.ZipFile.IsZipFile(ms, false)) { using (Ionic.Zip.ZipFile oZipFile = Ionic.Zip.ZipFile.Read(aBuffer)) { format = GetFileFormatByZip(oZipFile); } } } } catch { } } } } } catch { } return format; } } }