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

194 lines
4.0 KiB
C#

using System;
namespace System.Net
{
// Token: 0x0200020F RID: 527
internal class DigestHeaderParser
{
// Token: 0x060011E7 RID: 4583 RVA: 0x00035390 File Offset: 0x00033590
public DigestHeaderParser(string header)
{
this.header = header.Trim();
}
// Token: 0x170005DC RID: 1500
// (get) Token: 0x060011E9 RID: 4585 RVA: 0x000353FC File Offset: 0x000335FC
public string Realm
{
get
{
return this.values[0];
}
}
// Token: 0x170005DD RID: 1501
// (get) Token: 0x060011EA RID: 4586 RVA: 0x00035408 File Offset: 0x00033608
public string Opaque
{
get
{
return this.values[1];
}
}
// Token: 0x170005DE RID: 1502
// (get) Token: 0x060011EB RID: 4587 RVA: 0x00035414 File Offset: 0x00033614
public string Nonce
{
get
{
return this.values[2];
}
}
// Token: 0x170005DF RID: 1503
// (get) Token: 0x060011EC RID: 4588 RVA: 0x00035420 File Offset: 0x00033620
public string Algorithm
{
get
{
return this.values[3];
}
}
// Token: 0x170005E0 RID: 1504
// (get) Token: 0x060011ED RID: 4589 RVA: 0x0003542C File Offset: 0x0003362C
public string QOP
{
get
{
return this.values[4];
}
}
// Token: 0x060011EE RID: 4590 RVA: 0x00035438 File Offset: 0x00033638
public bool Parse()
{
if (!this.header.ToLower().StartsWith("digest "))
{
return false;
}
this.pos = 6;
this.length = this.header.Length;
while (this.pos < this.length)
{
string text;
string text2;
if (!this.GetKeywordAndValue(out text, out text2))
{
return false;
}
this.SkipWhitespace();
if (this.pos < this.length && this.header[this.pos] == ',')
{
this.pos++;
}
int num = Array.IndexOf<string>(DigestHeaderParser.keywords, text);
if (num != -1)
{
if (this.values[num] != null)
{
return false;
}
this.values[num] = text2;
}
}
return this.Realm != null && this.Nonce != null;
}
// Token: 0x060011EF RID: 4591 RVA: 0x00035528 File Offset: 0x00033728
private void SkipWhitespace()
{
char c = ' ';
while (this.pos < this.length && (c == ' ' || c == '\t' || c == '\r' || c == '\n'))
{
c = this.header[this.pos++];
}
this.pos--;
}
// Token: 0x060011F0 RID: 4592 RVA: 0x0003559C File Offset: 0x0003379C
private string GetKey()
{
this.SkipWhitespace();
int num = this.pos;
while (this.pos < this.length && this.header[this.pos] != '=')
{
this.pos++;
}
return this.header.Substring(num, this.pos - num).Trim().ToLower();
}
// Token: 0x060011F1 RID: 4593 RVA: 0x00035614 File Offset: 0x00033814
private bool GetKeywordAndValue(out string key, out string value)
{
key = null;
value = null;
key = this.GetKey();
if (this.pos >= this.length)
{
return false;
}
this.SkipWhitespace();
if (this.pos + 1 >= this.length || this.header[this.pos++] != '=')
{
return false;
}
this.SkipWhitespace();
if (this.pos + 1 >= this.length)
{
return false;
}
bool flag = false;
if (this.header[this.pos] == '"')
{
this.pos++;
flag = true;
}
int num = this.pos;
if (flag)
{
this.pos = this.header.IndexOf('"', this.pos);
if (this.pos == -1)
{
return false;
}
}
else
{
do
{
char c = this.header[this.pos];
if (c == ',' || c == ' ' || c == '\t' || c == '\r' || c == '\n')
{
break;
}
}
while (++this.pos < this.length);
if (this.pos >= this.length && num == this.pos)
{
return false;
}
}
value = this.header.Substring(num, this.pos - num);
this.pos += 2;
return true;
}
// Token: 0x04000FA4 RID: 4004
private string header;
// Token: 0x04000FA5 RID: 4005
private int length;
// Token: 0x04000FA6 RID: 4006
private int pos;
// Token: 0x04000FA7 RID: 4007
private static string[] keywords = new string[] { "realm", "opaque", "nonce", "algorithm", "qop" };
// Token: 0x04000FA8 RID: 4008
private string[] values = new string[DigestHeaderParser.keywords.Length];
}
}