internal static Stream PrepareStreamed(Uri uri, HTTPResponse response)
        {
            if (!IsSupported)
            {
                return(null);
            }
            lock (Library)
            {
                if (!Library.TryGetValue(uri, out HTTPCacheFileInfo value))
                {
                    Library.Add(uri, value = new HTTPCacheFileInfo(uri));
                    UsedIndexes.Add(value.MappedNameIDX, value);
                }
                try
                {
                    return(value.GetSaveStream(response));

IL_005b:
                    Stream result;
                    return(result);
                }
                catch
                {
                    DeleteEntity(uri);
                    throw;
IL_006b:
                    Stream result;
                    return(result);
                }
            }
        }
        internal static HTTPCacheFileInfo Store(Uri uri, HTTPMethods method, HTTPResponse response)
        {
            if (response == null || response.Data == null || response.Data.Length == 0)
            {
                return(null);
            }
            if (!IsSupported)
            {
                return(null);
            }
            HTTPCacheFileInfo value = null;

            lock (Library)
            {
                if (!Library.TryGetValue(uri, out value))
                {
                    Library.Add(uri, value = new HTTPCacheFileInfo(uri));
                    UsedIndexes.Add(value.MappedNameIDX, value);
                }
                try
                {
                    value.Store(response);
                    return(value);
                }
                catch
                {
                    DeleteEntity(uri);
                    throw;
IL_0087:
                    return(value);
                }
            }
        }
 private static void LoadLibrary()
 {
     if (library == null && IsSupported)
     {
         library = new Dictionary <Uri, HTTPCacheFileInfo>();
         if (!File.Exists(LibraryPath))
         {
             DeleteUnusedFiles();
         }
         else
         {
             try
             {
                 int num;
                 lock (library)
                 {
                     using (FileStream input = new FileStream(LibraryPath, FileMode.Open))
                     {
                         using (BinaryReader binaryReader = new BinaryReader(input))
                         {
                             num = binaryReader.ReadInt32();
                             if (num > 1)
                             {
                                 NextNameIDX = binaryReader.ReadUInt64();
                             }
                             int num2 = binaryReader.ReadInt32();
                             for (int i = 0; i < num2; i++)
                             {
                                 Uri uri = new Uri(binaryReader.ReadString());
                                 HTTPCacheFileInfo hTTPCacheFileInfo = new HTTPCacheFileInfo(uri, binaryReader, num);
                                 if (hTTPCacheFileInfo.IsExists())
                                 {
                                     library.Add(uri, hTTPCacheFileInfo);
                                     if (num > 1)
                                     {
                                         UsedIndexes.Add(hTTPCacheFileInfo.MappedNameIDX, hTTPCacheFileInfo);
                                     }
                                 }
                             }
                         }
                     }
                 }
                 if (num == 1)
                 {
                     BeginClear();
                 }
                 else
                 {
                     DeleteUnusedFiles();
                 }
             }
             catch
             {
             }
         }
     }
 }
 internal static void SetBodyLength(Uri uri, int bodyLength)
 {
     if (IsSupported)
     {
         lock (Library)
         {
             if (Library.TryGetValue(uri, out HTTPCacheFileInfo value))
             {
                 value.BodyLength = bodyLength;
             }
             else
             {
                 Library.Add(uri, value = new HTTPCacheFileInfo(uri, DateTime.UtcNow, bodyLength));
                 UsedIndexes.Add(value.MappedNameIDX, value);
             }
         }
     }
 }
 public static void BeginMaintainence(HTTPCacheMaintananceParams maintananceParam)
 {
     if (maintananceParam == null)
     {
         throw new ArgumentNullException("maintananceParams == null");
     }
     if (IsSupported && !InMaintainenceThread)
     {
         InMaintainenceThread = true;
         SetupCacheFolder();
         new Thread((ParameterizedThreadStart) delegate
         {
             try
             {
                 lock (Library)
                 {
                     DateTime t = DateTime.UtcNow - maintananceParam.DeleteOlder;
                     List <HTTPCacheFileInfo> list = new List <HTTPCacheFileInfo>();
                     foreach (KeyValuePair <Uri, HTTPCacheFileInfo> item in Library)
                     {
                         if (item.Value.LastAccess < t && DeleteEntity(item.Key, removeFromLibrary: false))
                         {
                             list.Add(item.Value);
                         }
                     }
                     for (int i = 0; i < list.Count; i++)
                     {
                         Library.Remove(list[i].Uri);
                         UsedIndexes.Remove(list[i].MappedNameIDX);
                     }
                     list.Clear();
                     ulong num = GetCacheSize();
                     if (num > maintananceParam.MaxCacheSize)
                     {
                         List <HTTPCacheFileInfo> list2 = new List <HTTPCacheFileInfo>(library.Count);
                         foreach (KeyValuePair <Uri, HTTPCacheFileInfo> item2 in library)
                         {
                             list2.Add(item2.Value);
                         }
                         list2.Sort();
                         int num2 = 0;
                         while (num >= maintananceParam.MaxCacheSize && num2 < list2.Count)
                         {
                             try
                             {
                                 HTTPCacheFileInfo hTTPCacheFileInfo = list2[num2];
                                 ulong num3 = (ulong)hTTPCacheFileInfo.BodyLength;
                                 DeleteEntity(hTTPCacheFileInfo.Uri);
                                 num -= num3;
                             }
                             catch
                             {
                             }
                             finally
                             {
                                 num2++;
                             }
                         }
                     }
                 }
             }
             finally
             {
                 SaveLibrary();
                 InMaintainenceThread = false;
             }
         }).Start();
     }
 }