public void WriteStateInfo_WithSmallBuffer_WhenResizeAlot_ShouldQuadrupleBufferSize() { int bufferSize = 1024; var stateInfo = new Base64WriteStateInfo(bufferSize, null, null, 0, 0); // Fill the buffer * 2 + 1, Make it resize twice for (int i = 0; i <= bufferSize * 2; i++) { stateInfo.Append((byte)'a'); } Assert.Equal(bufferSize * 4, stateInfo.Buffer.Length); }
public void WriteStateInfo_WithSmallBuffer_WhenResize_ShouldDoubleBufferSize() { int bufferSize = 1024; var stateInfo = new Base64WriteStateInfo(bufferSize, null, null, 0, 0); // Fill the buffer + 1 for (int i = 0; i <= bufferSize; i++) { stateInfo.Append((byte)'a'); } Assert.Equal(bufferSize * 2, stateInfo.Buffer.Length); }
public void Base64Stream_EncodeString_WithVeryLongString_ShouldEncodeProperly() { var writeStateInfo = new Base64WriteStateInfo(10, new byte[0], new byte[0], 70, 0); var s = new Base64Stream(writeStateInfo); s.EncodeString(LongString, Encoding.UTF8); string encodedString = s.GetEncodedString(); byte[] stringToDecode = Encoding.ASCII.GetBytes(encodedString); int result = s.DecodeBytes(stringToDecode, 0, encodedString.Length); Assert.Equal(LongString, Encoding.UTF8.GetString(stringToDecode, 0, result)); }
public void Base64Stream_WithVeryLongString_ShouldEncodeProperly() { var writeStateInfo = new Base64WriteStateInfo(10, new byte[0], new byte[0], 70, 0); var s = new Base64Stream(writeStateInfo); byte[] buffer = Encoding.UTF8.GetBytes(LongString); s.EncodeBytes(buffer, 0, buffer.Length); string encodedString = s.GetEncodedString(); byte[] stringToDecode = Encoding.ASCII.GetBytes(encodedString); int result = s.DecodeBytes(stringToDecode, 0, encodedString.Length); Assert.Equal(LongString, Encoding.UTF8.GetString(stringToDecode, 0, result)); }
public override void Close() { if ((this.writeState != null) && (this.WriteState.Length > 0)) { switch (this.WriteState.Padding) { case 1: { int num5; int num6; Base64WriteStateInfo writeState = this.WriteState; writeState.Length = (num5 = writeState.Length) + 1; this.WriteState.Buffer[num5] = base64EncodeMap[this.WriteState.LastBits]; Base64WriteStateInfo info5 = this.WriteState; info5.Length = (num6 = info5.Length) + 1; this.WriteState.Buffer[num6] = base64EncodeMap[0x40]; break; } case 2: { int num2; int num3; int num4; Base64WriteStateInfo info1 = this.WriteState; info1.Length = (num2 = info1.Length) + 1; this.WriteState.Buffer[num2] = base64EncodeMap[this.WriteState.LastBits]; Base64WriteStateInfo info2 = this.WriteState; info2.Length = (num3 = info2.Length) + 1; this.WriteState.Buffer[num3] = base64EncodeMap[0x40]; Base64WriteStateInfo info3 = this.WriteState; info3.Length = (num4 = info3.Length) + 1; this.WriteState.Buffer[num4] = base64EncodeMap[0x40]; break; } } this.WriteState.Padding = 0; this.FlushInternal(); } base.Close(); }
internal Base64Stream(Base64WriteStateInfo writeStateInfo) : base(new MemoryStream()) { _lineLength = writeStateInfo.MaxLineLength; _writeState = writeStateInfo; }
internal Base64Stream(Stream stream, int lineLength) : base(stream) { _lineLength = lineLength; _writeState = new Base64WriteStateInfo(); }
internal Base64Stream(Stream stream, Base64WriteStateInfo writeStateInfo) : base(stream) { _writeState = new Base64WriteStateInfo(); _lineLength = writeStateInfo.MaxLineLength; }
internal Base64Stream(Base64WriteStateInfo writeStateInfo) : base(new MemoryStream()) { _writeState = writeStateInfo; _encoder = new Base64Encoder(_writeState, writeStateInfo.MaxLineLength); }
internal Base64Stream(Stream stream, Base64WriteStateInfo writeStateInfo) : base(stream) { _writeState = new Base64WriteStateInfo(); _encoder = new Base64Encoder(_writeState, writeStateInfo.MaxLineLength); }
internal Base64Stream(Base64WriteStateInfo writeStateInfo) { this.lineLength = writeStateInfo.MaxLineLength; this.writeState = writeStateInfo; }
internal int EncodeBytes(byte[] buffer, int offset, int count, bool dontDeferFinalBytes, bool shouldAppendSpaceToCRLF) { bool flag = this.writeState.HeaderLength != 0; int index = offset; this.WriteState.AppendHeader(); Base64WriteStateInfo writeState = this.WriteState; writeState.CurrentLineLength += this.writeState.MimeHeaderLength; switch (this.WriteState.Padding) { case 1: { int num7; int num8; Base64WriteStateInfo info6 = this.WriteState; info6.Length = (num7 = info6.Length) + 1; this.WriteState.Buffer[num7] = base64EncodeMap[this.WriteState.LastBits | ((buffer[index] & 0xc0) >> 6)]; Base64WriteStateInfo info7 = this.WriteState; info7.Length = (num8 = info7.Length) + 1; this.WriteState.Buffer[num8] = base64EncodeMap[buffer[index] & 0x3f]; index++; count--; this.WriteState.Padding = 0; Base64WriteStateInfo info8 = this.WriteState; info8.CurrentLineLength++; break; } case 2: { int num4; Base64WriteStateInfo info2 = this.WriteState; info2.Length = (num4 = info2.Length) + 1; this.WriteState.Buffer[num4] = base64EncodeMap[this.WriteState.LastBits | ((buffer[index] & 240) >> 4)]; if (count != 1) { int num5; int num6; Base64WriteStateInfo info3 = this.WriteState; info3.Length = (num5 = info3.Length) + 1; this.WriteState.Buffer[num5] = base64EncodeMap[((buffer[index] & 15) << 2) | ((buffer[index + 1] & 0xc0) >> 6)]; Base64WriteStateInfo info4 = this.WriteState; info4.Length = (num6 = info4.Length) + 1; this.WriteState.Buffer[num6] = base64EncodeMap[buffer[index + 1] & 0x3f]; index += 2; count -= 2; this.WriteState.Padding = 0; Base64WriteStateInfo info5 = this.WriteState; info5.CurrentLineLength += 2; break; } this.WriteState.LastBits = (byte)((buffer[index] & 15) << 2); this.WriteState.Padding = 1; return(index - offset); } } int num2 = index + (count - (count % 3)); while (index < num2) { int num12; int num13; int num14; int num15; if (((this.lineLength != -1) && ((this.WriteState.CurrentLineLength + 4) > (this.lineLength - 3))) && !flag) { int num9; int num10; if ((this.WriteState.Length + 3) >= this.WriteState.Buffer.Length) { this.WriteState.ResizeBuffer(); } Base64WriteStateInfo info9 = this.WriteState; info9.Length = (num9 = info9.Length) + 1; this.WriteState.Buffer[num9] = 13; Base64WriteStateInfo info10 = this.WriteState; info10.Length = (num10 = info10.Length) + 1; this.WriteState.Buffer[num10] = 10; if (shouldAppendSpaceToCRLF) { int num11; Base64WriteStateInfo info11 = this.WriteState; info11.Length = (num11 = info11.Length) + 1; this.WriteState.Buffer[num11] = 0x20; } this.WriteState.CurrentLineLength = 0; } if ((this.WriteState.Length + 4) > this.WriteState.Buffer.Length) { this.WriteState.ResizeBuffer(); } Base64WriteStateInfo info12 = this.WriteState; info12.Length = (num12 = info12.Length) + 1; this.WriteState.Buffer[num12] = base64EncodeMap[(buffer[index] & 0xfc) >> 2]; Base64WriteStateInfo info13 = this.WriteState; info13.Length = (num13 = info13.Length) + 1; this.WriteState.Buffer[num13] = base64EncodeMap[((buffer[index] & 3) << 4) | ((buffer[index + 1] & 240) >> 4)]; Base64WriteStateInfo info14 = this.WriteState; info14.Length = (num14 = info14.Length) + 1; this.WriteState.Buffer[num14] = base64EncodeMap[((buffer[index + 1] & 15) << 2) | ((buffer[index + 2] & 0xc0) >> 6)]; Base64WriteStateInfo info15 = this.WriteState; info15.Length = (num15 = info15.Length) + 1; this.WriteState.Buffer[num15] = base64EncodeMap[buffer[index + 2] & 0x3f]; Base64WriteStateInfo info16 = this.WriteState; info16.CurrentLineLength += 4; if ((((this.WriteState.CurrentLineLength + 4) + this.writeState.FooterLength) >= EncodedStreamFactory.DefaultMaxLineLength) && flag) { int num16; int num17; if (((this.WriteState.Length + this.writeState.FooterLength) + this.writeState.HeaderLength) > this.WriteState.Buffer.Length) { this.WriteState.ResizeBuffer(); } this.WriteState.AppendFooter(); Base64WriteStateInfo info17 = this.WriteState; info17.Length = (num16 = info17.Length) + 1; this.writeState.Buffer[num16] = 13; Base64WriteStateInfo info18 = this.WriteState; info18.Length = (num17 = info18.Length) + 1; this.writeState.Buffer[num17] = 10; if (shouldAppendSpaceToCRLF) { int num18; Base64WriteStateInfo info19 = this.WriteState; info19.Length = (num18 = info19.Length) + 1; this.WriteState.Buffer[num18] = 0x20; } this.WriteState.AppendHeader(); this.WriteState.CurrentLineLength = this.WriteState.HeaderLength + 1; } index += 3; } index = num2; if ((this.WriteState.Length + 4) > this.WriteState.Buffer.Length) { this.WriteState.ResizeBuffer(); } switch ((count % 3)) { case 1: { int num24; Base64WriteStateInfo info26 = this.WriteState; info26.Length = (num24 = info26.Length) + 1; this.WriteState.Buffer[num24] = base64EncodeMap[(buffer[index] & 0xfc) >> 2]; if (!dontDeferFinalBytes) { this.WriteState.LastBits = (byte)((buffer[index] & 3) << 4); this.WriteState.Padding = 2; Base64WriteStateInfo info31 = this.WriteState; info31.CurrentLineLength++; } else { int num25; int num26; int num27; Base64WriteStateInfo info27 = this.WriteState; info27.Length = (num25 = info27.Length) + 1; this.WriteState.Buffer[num25] = base64EncodeMap[(byte)((buffer[index] & 3) << 4)]; Base64WriteStateInfo info28 = this.WriteState; info28.Length = (num26 = info28.Length) + 1; this.WriteState.Buffer[num26] = base64EncodeMap[0x40]; Base64WriteStateInfo info29 = this.WriteState; info29.Length = (num27 = info29.Length) + 1; this.WriteState.Buffer[num27] = base64EncodeMap[0x40]; this.WriteState.Padding = 0; Base64WriteStateInfo info30 = this.WriteState; info30.CurrentLineLength += 4; } index++; goto Label_07B2; } case 2: { int num20; int num21; int num22; int num23; Base64WriteStateInfo info20 = this.WriteState; info20.Length = (num20 = info20.Length) + 1; this.WriteState.Buffer[num20] = base64EncodeMap[(buffer[index] & 0xfc) >> 2]; Base64WriteStateInfo info21 = this.WriteState; info21.Length = (num21 = info21.Length) + 1; this.WriteState.Buffer[num21] = base64EncodeMap[((buffer[index] & 3) << 4) | ((buffer[index + 1] & 240) >> 4)]; if (!dontDeferFinalBytes) { this.WriteState.LastBits = (byte)((buffer[index + 1] & 15) << 2); this.WriteState.Padding = 1; Base64WriteStateInfo info25 = this.WriteState; info25.CurrentLineLength += 2; break; } Base64WriteStateInfo info22 = this.WriteState; info22.Length = (num22 = info22.Length) + 1; this.WriteState.Buffer[num22] = base64EncodeMap[(buffer[index + 1] & 15) << 2]; Base64WriteStateInfo info23 = this.WriteState; info23.Length = (num23 = info23.Length) + 1; this.WriteState.Buffer[num23] = base64EncodeMap[0x40]; this.WriteState.Padding = 0; Base64WriteStateInfo info24 = this.WriteState; info24.CurrentLineLength += 4; break; } default: goto Label_07B2; } index += 2; Label_07B2: this.WriteState.AppendFooter(); return(index - offset); }