internal static string NormalizeString(byte[] value, int offset, int length, bool allowUTF8) { if (length >= 2 && length <= 32) { int num = MimeData.HashValue(value, offset, length); int num2 = MimeData.valueHashTable[num]; if (num2 > 0) { string value2; for (;;) { value2 = MimeData.values[num2].value; if (ByteString.EqualsI(value2, value, offset, length, allowUTF8)) { break; } num2++; if ((int)MimeData.values[num2].hash != num) { goto IL_54; } } return(value2); } } IL_54: return(ByteString.BytesToString(value, offset, length, allowUTF8).ToLowerInvariant()); }
public override string ToString() { if (this.data != null) { return(ByteString.BytesToString(this.data, this.offset, this.Length, true)); } return(string.Empty); }
internal string GetRawValue(bool allowUTF8) { byte[] rawValue = this.RawValue; if (rawValue == null || rawValue.Length == 0) { return(string.Empty); } return(ByteString.BytesToString(rawValue, allowUTF8)); }
// Token: 0x06000542 RID: 1346 RVA: 0x0001CD50 File Offset: 0x0001AF50 internal static void ConvertDisplayNameBack(AddressItem addressItem, MimeStringList displayNameFragments, bool allowUTF8) { byte[] sz = displayNameFragments.GetSz(4026531839U); if (sz == null) { addressItem.DecodedDisplayName = null; return; } string decodedDisplayName = ByteString.BytesToString(sz, allowUTF8); addressItem.DecodedDisplayName = decodedDisplayName; }
private void FinishClause(ref MimeString param, ref MimeStringList value, bool allowUTF8) { if (param.Length != 0) { byte[] sz = value.GetSz(); string text = (sz == null) ? null : ByteString.BytesToString(sz, allowUTF8); uint num = param.ComputeCrcI(); if (num <= 2556329580U) { if (num != 271896810U) { if (num != 2115158205U) { if (num == 2556329580U) { this.fromValue = text; } } else { this.byValue = text; } } else { this.forValue = text; } } else if (num != 3117694226U) { if (num != 3740702146U) { if (num == 4276123055U) { this.idValue = text; } } else { this.viaValue = text; } } else { this.withValue = text; } value.Reset(); param = MimeString.Empty; } }
// Token: 0x060004A4 RID: 1188 RVA: 0x0001A7C4 File Offset: 0x000189C4 public override string ToString() { int count = this.Count; if (count <= 1) { return(this.first.ToString()); } StringBuilder stringBuilder = ScratchPad.GetStringBuilder(this.Length); for (int i = 0; i < count; i++) { MimeString mimeString = this[i]; string value = ByteString.BytesToString(mimeString.Data, mimeString.Offset, mimeString.Length, true); stringBuilder.Append(value); } ScratchPad.ReleaseStringBuilder(); return(stringBuilder.ToString()); }
// Token: 0x06000300 RID: 768 RVA: 0x000109E4 File Offset: 0x0000EBE4 internal bool FallBackIfRequired(byte[] bytes, DecodingOptions decodingOptions, out string value) { if ((DecodingFlags.FallbackToRaw & decodingOptions.DecodingFlags) != DecodingFlags.None) { if (bytes == null) { value = string.Empty; } else { value = ByteString.BytesToString(bytes, decodingOptions.AllowUTF8); if ((DecodingFlags.AllowControlCharacters & decodingOptions.DecodingFlags) == DecodingFlags.None) { value = MimeParameter.CorrectValue(value); } } return(true); } value = null; return(false); }
private bool ParseEncodedWord(string lastEncodedWordCharsetName, string lastEncodedWordLanguage, ref byte[] byteBuffer, out string encodedWordCharsetName, out string encodedWordLanguage, out byte bOrQ, out ValuePosition encodedWordContentStart, out ValuePosition encodedWordContentEnd) { encodedWordCharsetName = null; encodedWordLanguage = null; bOrQ = 0; ValuePosition valuePosition = default(ValuePosition); encodedWordContentEnd = valuePosition; encodedWordContentStart = (encodedWordContentEnd = valuePosition); int num = this.iterator.Get(); if (this.iterator.Get() != 63) { return(false); } if (byteBuffer == null) { byteBuffer = ScratchPad.GetByteBuffer(Math.Max(this.maxCharsetNameLength + 1, Math.Min(1024, this.iterator.TotalLength))); } int num2 = -1; int i; for (i = 0; i < this.maxCharsetNameLength + 1; i++) { num = this.iterator.Get(); if (!ValueDecoder.Is2047Token((byte)num)) { break; } byteBuffer[i] = (byte)num; if (num2 == -1 && num == 42) { num2 = i; } } if (i == this.maxCharsetNameLength + 1 || num != 63 || i == 0 || num2 == 0) { return(false); } num = this.iterator.Get(); bOrQ = ((num == 66 || num == 98) ? 66 : ((num == 81 || num == 113) ? 81 : 0)); if (bOrQ == 0 || this.iterator.Get() != 63) { return(false); } if (num2 != -1) { int num3 = num2 + 1; int num4 = i - (num2 + 1); i = num2; if (num4 != 0) { if (lastEncodedWordLanguage != null && num4 == lastEncodedWordLanguage.Length) { int num5 = 0; while (num5 < num4 && lastEncodedWordLanguage[num5] == (char)byteBuffer[num3 + num5]) { num5++; } if (num5 != num4) { encodedWordLanguage = ByteString.BytesToString(byteBuffer, num3, num4, false); } else { encodedWordLanguage = lastEncodedWordLanguage; } } else { encodedWordLanguage = ByteString.BytesToString(byteBuffer, num3, num4, false); } } } if (lastEncodedWordCharsetName != null && i == lastEncodedWordCharsetName.Length) { int num6 = 0; while (num6 < i && lastEncodedWordCharsetName[num6] == (char)byteBuffer[num6]) { num6++; } if (num6 != i) { encodedWordCharsetName = ByteString.BytesToString(byteBuffer, 0, i, false); } else { encodedWordCharsetName = lastEncodedWordCharsetName; } } else { encodedWordCharsetName = ByteString.BytesToString(byteBuffer, 0, i, false); } encodedWordContentStart = this.iterator.CurrentPosition; bool flag = false; for (;;) { encodedWordContentEnd = this.iterator.CurrentPosition; num = this.iterator.Get(); if (num == -1) { break; } if (MimeScan.IsLWSP((byte)num)) { flag = true; } else { if (num == 63) { num = this.iterator.Get(); if (num == -1) { return(false); } if (num == 61) { return(true); } this.iterator.Unget(); if (bOrQ != 81) { return(false); } } else if (num == 61 && flag) { num = this.iterator.Get(); if (num == -1) { return(false); } if (num == 63) { goto Block_33; } this.iterator.Unget(); } flag = false; } } return(false); Block_33: this.iterator.Unget(); this.iterator.Unget(); return(false); }
// Token: 0x0600030B RID: 779 RVA: 0x000112A8 File Offset: 0x0000F4A8 private bool TryDecodeRfc2231(ref DecodingOptions decodingOptions, out DecodingResults decodingResults, out string value) { decodingResults = default(DecodingResults); decodingResults.EncodingScheme = EncodingScheme.Rfc2231; Charset charset = null; byte[] sz = this.valueFragments.GetSz(4026531839U); int num = 0; if (this.valueEncoded) { int num2 = (sz == null) ? -1 : ByteString.IndexOf(sz, 39, 0, sz.Length); if (-1 < num2 && num2 < sz.Length - 1) { int num3 = ByteString.IndexOf(sz, 39, ++num2, sz.Length - num2); if (-1 < num3) { decodingResults.CharsetName = ByteString.BytesToString(sz, 0, num2 - 1, false); decodingResults.CultureName = ByteString.BytesToString(sz, num2, num3 - num2, false); if (!Charset.TryGetCharset(decodingResults.CharsetName, out charset)) { decodingResults.DecodingFailed = true; return(this.FallBackIfRequired(sz, decodingOptions, out value)); } num = num3 + 1; } } } if (charset == null) { charset = decodingOptions.Charset; if (charset == null) { charset = DecodingOptions.DefaultCharset; } } decodingResults.CharsetName = charset.Name; Encoding encoding; if (!charset.TryGetEncoding(out encoding)) { decodingResults.DecodingFailed = true; return(this.FallBackIfRequired(sz, decodingOptions, out value)); } int num4 = this.valueFragments.Length - num; for (MimeNode mimeNode = base.FirstChild; mimeNode != null; mimeNode = mimeNode.NextSibling) { MimeParameter mimeParameter = mimeNode as MimeParameter; if (mimeParameter != null) { num4 += mimeParameter.RawLength; } } byte[] array = new byte[num4]; int num5 = 0; if (sz != null && num < sz.Length) { num5 += this.DecodeRfc2231Octets(this.valueEncoded, sz, num, array, 0); } for (MimeNode mimeNode = base.FirstChild; mimeNode != null; mimeNode = mimeNode.NextSibling) { MimeParameter mimeParameter2 = mimeNode as MimeParameter; if (mimeParameter2 != null) { byte[] rawValue = mimeParameter2.RawValue; if (rawValue != null) { num5 += this.DecodeRfc2231Octets(mimeParameter2.valueEncoded, mimeParameter2.RawValue, 0, array, num5); } } } value = ((num5 != 0) ? encoding.GetString(array, 0, num5) : string.Empty); if ((DecodingFlags.AllowControlCharacters & decodingOptions.DecodingFlags) == DecodingFlags.None) { value = MimeParameter.CorrectValue(value); } return(true); }
private void Parse() { this.Reset(); this.parsed = true; DecodingOptions headerDecodingOptions = base.GetHeaderDecodingOptions(); ValueParser valueParser = new ValueParser(base.Lines, headerDecodingOptions.AllowUTF8); MimeStringList mimeStringList = default(MimeStringList); MimeStringList mimeStringList2 = default(MimeStringList); MimeString mimeString = default(MimeString); MimeString mimeString2 = MimeString.Empty; ReceivedHeader.ParseState parseState = ReceivedHeader.ParseState.None; for (;;) { valueParser.ParseWhitespace(true, ref mimeStringList); byte b = valueParser.ParseGet(); if (b == 0) { break; } if (59 == b) { parseState = ReceivedHeader.ParseState.Date; } else if (40 == b && parseState == ReceivedHeader.ParseState.DomainValue) { parseState = ReceivedHeader.ParseState.DomainAddress; } else { valueParser.ParseUnget(); mimeString = valueParser.ParseToken(); if (mimeString.Length == 0) { valueParser.ParseGet(); mimeStringList2.TakeOverAppend(ref mimeStringList); valueParser.ParseAppendLastByte(ref mimeStringList2); continue; } ReceivedHeader.ParseState parseState2 = this.StateFromToken(mimeString); if (ReceivedHeader.ParseState.None != parseState2) { parseState = parseState2; } } switch (parseState) { case ReceivedHeader.ParseState.Domain: case ReceivedHeader.ParseState.OptInfo: if (mimeString2.Length != 0) { this.FinishClause(ref mimeString2, ref mimeStringList2, headerDecodingOptions.AllowUTF8); } else { mimeStringList2.Reset(); } mimeString2 = mimeString; valueParser.ParseWhitespace(false, ref mimeStringList); mimeStringList.Reset(); parseState++; break; case ReceivedHeader.ParseState.DomainValue: mimeStringList2.TakeOverAppend(ref mimeStringList); mimeStringList2.AppendFragment(mimeString); break; case ReceivedHeader.ParseState.DomainAddress: { bool flag = mimeString2.CompareEqI(ReceivedHeader.ParamFrom); this.FinishClause(ref mimeString2, ref mimeStringList2, headerDecodingOptions.AllowUTF8); mimeStringList.Reset(); valueParser.ParseUnget(); valueParser.ParseComment(true, false, ref mimeStringList2, true); byte[] sz = mimeStringList2.GetSz(); string text = (sz == null) ? null : ByteString.BytesToString(sz, headerDecodingOptions.AllowUTF8); if (flag) { this.fromTcpInfoValue = text; } else { this.byTcpInfoValue = text; } mimeStringList2.Reset(); parseState = ReceivedHeader.ParseState.None; break; } case ReceivedHeader.ParseState.OptInfoValue: mimeStringList2.TakeOverAppend(ref mimeStringList); mimeStringList2.AppendFragment(mimeString); break; case ReceivedHeader.ParseState.Date: { this.FinishClause(ref mimeString2, ref mimeStringList2, headerDecodingOptions.AllowUTF8); mimeStringList.Reset(); valueParser.ParseWhitespace(false, ref mimeStringList); valueParser.ParseToEnd(ref mimeStringList2); byte[] sz2 = mimeStringList2.GetSz(); this.dateValue = ((sz2 == null) ? null : ByteString.BytesToString(sz2, false)); break; } case ReceivedHeader.ParseState.None: mimeStringList2.Reset(); break; } } this.FinishClause(ref mimeString2, ref mimeStringList2, headerDecodingOptions.AllowUTF8); }
internal RoutingAddress(byte[] address) { this.address = ((address != null && address.Length != 0) ? ByteString.BytesToString(address, true) : null); }
public static string BytesToString(byte[] bytes, int offset, int count, bool allowUTF8 = true) { return(ByteString.BytesToString(bytes, offset, count, allowUTF8)); }
public static string BytesToString(byte[] bytes, bool allowUTF8 = true) { return(ByteString.BytesToString(bytes, allowUTF8)); }