Commit 05c2b1de authored by justcoding121's avatar justcoding121

add comments for readability

parent c1593254
...@@ -91,7 +91,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -91,7 +91,7 @@ namespace Titanium.Web.Proxy.Network
/// Cache dictionary /// Cache dictionary
/// </summary> /// </summary>
private readonly ConcurrentDictionary<string, CachedCertificate> certificateCache; private readonly ConcurrentDictionary<string, CachedCertificate> certificateCache;
private readonly ConcurrentDictionary<string, Task<X509Certificate2>> pendingCertificateTasks; private readonly ConcurrentDictionary<string, Task<X509Certificate2>> pendingCertificateCreationTasks;
private readonly Action<Exception> exceptionFunc; private readonly Action<Exception> exceptionFunc;
...@@ -136,7 +136,7 @@ namespace Titanium.Web.Proxy.Network ...@@ -136,7 +136,7 @@ namespace Titanium.Web.Proxy.Network
Engine = CertificateEngine.BouncyCastle; Engine = CertificateEngine.BouncyCastle;
certificateCache = new ConcurrentDictionary<string, CachedCertificate>(); certificateCache = new ConcurrentDictionary<string, CachedCertificate>();
pendingCertificateTasks = new ConcurrentDictionary<string, Task<X509Certificate2>>(); pendingCertificateCreationTasks = new ConcurrentDictionary<string, Task<X509Certificate2>>();
} }
public void ClearRootCertificate() public void ClearRootCertificate()
...@@ -500,13 +500,6 @@ namespace Titanium.Web.Proxy.Network ...@@ -500,13 +500,6 @@ namespace Titanium.Web.Proxy.Network
/// <returns></returns> /// <returns></returns>
internal async Task<X509Certificate2> CreateCertificateAsync(string certificateName) internal async Task<X509Certificate2> CreateCertificateAsync(string certificateName)
{ {
//handle burst requests with same certificate name
Task<X509Certificate2> task;
if (pendingCertificateTasks.TryGetValue(certificateName, out task))
{
return await task;
}
//check in cache first //check in cache first
CachedCertificate cached; CachedCertificate cached;
if (certificateCache.TryGetValue(certificateName, out cached)) if (certificateCache.TryGetValue(certificateName, out cached))
...@@ -515,6 +508,16 @@ namespace Titanium.Web.Proxy.Network ...@@ -515,6 +508,16 @@ namespace Titanium.Web.Proxy.Network
return cached.Certificate; return cached.Certificate;
} }
//handle burst requests with same certificate name
//by checking for existing creation task for same certificate name
Task<X509Certificate2> task;
if (pendingCertificateCreationTasks.TryGetValue(certificateName, out task))
{
//certificate already added to cache
//just return the result here
return await task;
}
//run certificate creation task //run certificate creation task
task = Task.Run(() => task = Task.Run(() =>
{ {
...@@ -532,9 +535,10 @@ namespace Titanium.Web.Proxy.Network ...@@ -532,9 +535,10 @@ namespace Titanium.Web.Proxy.Network
return result; return result;
}); });
pendingCertificateTasks.TryAdd(certificateName, task); //cleanup pending tasks & return result
pendingCertificateCreationTasks.TryAdd(certificateName, task);
var certificate = await task; var certificate = await task;
pendingCertificateTasks.TryRemove(certificateName, out task); pendingCertificateCreationTasks.TryRemove(certificateName, out task);
return certificate; return certificate;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment