Files
2026-06-04 11:42:34 +02:00

138 lines
3.3 KiB
C#

using System;
using System.Collections;
namespace System.Net
{
// Token: 0x02000211 RID: 529
internal class DigestClient : IAuthenticationModule
{
// Token: 0x170005E8 RID: 1512
// (get) Token: 0x06001203 RID: 4611 RVA: 0x00035C6C File Offset: 0x00033E6C
private static Hashtable Cache
{
get
{
object syncRoot = DigestClient.cache.SyncRoot;
lock (syncRoot)
{
DigestClient.CheckExpired(DigestClient.cache.Count);
}
return DigestClient.cache;
}
}
// Token: 0x06001204 RID: 4612 RVA: 0x00035CC8 File Offset: 0x00033EC8
private static void CheckExpired(int count)
{
if (count < 10)
{
return;
}
DateTime dateTime = DateTime.MaxValue;
DateTime now = DateTime.Now;
ArrayList arrayList = null;
foreach (object obj in DigestClient.cache.Keys)
{
int num = (int)obj;
DigestSession digestSession = (DigestSession)DigestClient.cache[num];
if (digestSession.LastUse < dateTime && (digestSession.LastUse - now).Ticks > 6000000000L)
{
dateTime = digestSession.LastUse;
if (arrayList == null)
{
arrayList = new ArrayList();
}
arrayList.Add(num);
}
}
if (arrayList != null)
{
foreach (object obj2 in arrayList)
{
int num2 = (int)obj2;
DigestClient.cache.Remove(num2);
}
}
}
// Token: 0x06001205 RID: 4613 RVA: 0x00035E34 File Offset: 0x00034034
public Authorization Authenticate(string challenge, WebRequest webRequest, ICredentials credentials)
{
if (credentials == null || challenge == null)
{
return null;
}
string text = challenge.Trim();
if (text.ToLower().IndexOf("digest") == -1)
{
return null;
}
HttpWebRequest httpWebRequest = webRequest as HttpWebRequest;
if (httpWebRequest == null)
{
return null;
}
int num = httpWebRequest.Address.GetHashCode() ^ credentials.GetHashCode();
DigestSession digestSession = (DigestSession)DigestClient.Cache[num];
bool flag = digestSession == null;
if (flag)
{
digestSession = new DigestSession();
}
if (!digestSession.Parse(challenge))
{
return null;
}
if (flag)
{
DigestClient.Cache.Add(num, digestSession);
}
return digestSession.Authenticate(webRequest, credentials);
}
// Token: 0x06001206 RID: 4614 RVA: 0x00035EE8 File Offset: 0x000340E8
public Authorization PreAuthenticate(WebRequest webRequest, ICredentials credentials)
{
HttpWebRequest httpWebRequest = webRequest as HttpWebRequest;
if (httpWebRequest == null)
{
return null;
}
if (credentials == null)
{
return null;
}
int num = httpWebRequest.Address.GetHashCode() ^ credentials.GetHashCode();
DigestSession digestSession = (DigestSession)DigestClient.Cache[num];
if (digestSession == null)
{
return null;
}
return digestSession.Authenticate(webRequest, credentials);
}
// Token: 0x170005E9 RID: 1513
// (get) Token: 0x06001207 RID: 4615 RVA: 0x00035F48 File Offset: 0x00034148
public string AuthenticationType
{
get
{
return "Digest";
}
}
// Token: 0x170005EA RID: 1514
// (get) Token: 0x06001208 RID: 4616 RVA: 0x00035F50 File Offset: 0x00034150
public bool CanPreAuthenticate
{
get
{
return true;
}
}
// Token: 0x04000FAF RID: 4015
private static readonly Hashtable cache = Hashtable.Synchronized(new Hashtable());
}
}