public void SetContentType(MajorContentType contentType, MimeString boundaryValue) { if (contentType == MajorContentType.Multipart) { int offset; int count; var data = boundaryValue.GetData(out offset, out count); var numArray = new byte[MimeString.TwoDashes.Length + count + MimeString.TwoDashes.Length]; var length = MimeString.TwoDashes.Length; System.Buffer.BlockCopy(MimeString.TwoDashes, 0, numArray, 0, length); System.Buffer.BlockCopy(data, offset, numArray, length, count); var num1 = length + count; boundaryCrc = Internal.ByteString.ComputeCrc(numArray, 0, num1); System.Buffer.BlockCopy(MimeString.TwoDashes, 0, numArray, num1, MimeString.TwoDashes.Length); var num2 = num1 + MimeString.TwoDashes.Length; endBoundaryCrc = Internal.ByteString.ComputeCrc(numArray, 0, num2); this.boundaryValue = new MimeString(numArray, 0, num2); } else { this.boundaryValue = new MimeString(); boundaryCrc = 0U; endBoundaryCrc = 0U; } this.ContentType = contentType; }
private bool IsQuotingRequired(MimeString mimeStr, bool allowUTF8) { var writeState = WriteState.Begin; var mimeString = new MimeString(WordBreakBytes, 0, WordBreakBytes.Length); int offset; int count; var data = mimeStr.GetData(out offset, out count); while (count != 0) { switch (writeState) { case WriteState.Begin: var characterCount = 0; var endOf = MimeScan.FindEndOf(MimeScan.Token.Atom, data, offset, count, out characterCount, allowUTF8); if (endOf == 0) { if (count <= 3 || offset != 0 || !mimeString.HasPrefixEq(data, 0, 3)) return true; offset += 3; count -= 3; writeState = WriteState.Begin; continue; } offset += endOf; count -= endOf; writeState = WriteState.Atom; continue; case WriteState.Atom: if ((count < 2 || data[offset] != 32) && (count < 1 || data[offset] != 46)) return true; ++offset; --count; writeState = WriteState.Begin; continue; default: continue; } } return false; }