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()); } }