예제 #1
0
        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);
        }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }
예제 #4
0
        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));
        }
예제 #5
0
        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);
        }
예제 #6
0
        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));
        }
예제 #7
0
        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();
        }
예제 #8
0
파일: Base64Stream.cs 프로젝트: jnm2/corefx
 internal Base64Stream(Base64WriteStateInfo writeStateInfo) : base(new MemoryStream())
 {
     _lineLength = writeStateInfo.MaxLineLength;
     _writeState = writeStateInfo;
 }
예제 #9
0
파일: Base64Stream.cs 프로젝트: jnm2/corefx
 internal Base64Stream(Stream stream, int lineLength) : base(stream)
 {
     _lineLength = lineLength;
     _writeState = new Base64WriteStateInfo();
 }
예제 #10
0
파일: Base64Stream.cs 프로젝트: jnm2/corefx
 internal Base64Stream(Stream stream, Base64WriteStateInfo writeStateInfo) : base(stream)
 {
     _writeState = new Base64WriteStateInfo();
     _lineLength = writeStateInfo.MaxLineLength;
 }
예제 #11
0
 internal Base64Stream(Base64WriteStateInfo writeStateInfo) : base(new MemoryStream())
 {
     _writeState = writeStateInfo;
     _encoder    = new Base64Encoder(_writeState, writeStateInfo.MaxLineLength);
 }
예제 #12
0
 internal Base64Stream(Stream stream, Base64WriteStateInfo writeStateInfo) : base(stream)
 {
     _writeState = new Base64WriteStateInfo();
     _encoder    = new Base64Encoder(_writeState, writeStateInfo.MaxLineLength);
 }
예제 #13
0
 internal Base64Stream(Base64WriteStateInfo writeStateInfo)
 {
     this.lineLength = writeStateInfo.MaxLineLength;
     this.writeState = writeStateInfo;
 }
예제 #14
0
        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);
        }