protected byte[] ReadToByte(byte b, ValidateByteDelegate validator)
        {
            byte[] dest = null;
            if (this._dataCount == 0)
            {
                this.BufferMoreData();
            }
            int  num       = this._dataOffset + this._dataCount;
            int  srcOffset = this._dataOffset;
            int  index     = srcOffset;
            bool flag      = false;

            while (!flag)
            {
                bool flag2 = index == num;
                flag = !flag2 && (this._dataBuffer[index] == b);
                if (((validator != null) && !flag2) && (!flag && !validator(this._dataBuffer[index])))
                {
                    throw new RemotingException(CoreChannel.GetResourceString("Remoting_Http_InvalidDataReceived"));
                }
                if (flag2 || flag)
                {
                    int count = index - srcOffset;
                    if (dest == null)
                    {
                        dest = new byte[count];
                        StreamHelper.BufferCopy(this._dataBuffer, srcOffset, dest, 0, count);
                    }
                    else
                    {
                        int    length  = dest.Length;
                        byte[] buffer2 = new byte[length + count];
                        StreamHelper.BufferCopy(dest, 0, buffer2, 0, length);
                        StreamHelper.BufferCopy(this._dataBuffer, srcOffset, buffer2, length, count);
                        dest = buffer2;
                    }
                    this._dataOffset += count;
                    this._dataCount  -= count;
                    if (flag2)
                    {
                        this.BufferMoreData();
                        num       = this._dataOffset + this._dataCount;
                        srcOffset = this._dataOffset;
                        index     = srcOffset;
                    }
                    else if (flag)
                    {
                        this._dataOffset++;
                        this._dataCount--;
                    }
                }
                else
                {
                    index++;
                }
            }
            return(dest);
        }
 protected string ReadToChar(char ch, ValidateByteDelegate validator)
 {
     byte[] bytes = this.ReadToByte((byte)ch, validator);
     if (bytes == null)
     {
         return(null);
     }
     if (bytes.Length == 0)
     {
         return(string.Empty);
     }
     return(Encoding.ASCII.GetString(bytes));
 }
Esempio n. 3
0
        } // ReadToChar

        protected String ReadToChar(char ch, ValidateByteDelegate validator)
        {
            byte[] strBytes = ReadToByte((byte)ch, validator);
            if (strBytes == null)
            {
                return(null);
            }
            if (strBytes.Length == 0)
            {
                return(String.Empty);
            }

            String str = Encoding.ASCII.GetString(strBytes);

            return(str);
        } // ReadToChar
        } // ReadToChar
 
        protected String ReadToChar(char ch, ValidateByteDelegate validator) 
        {
            byte[] strBytes = ReadToByte((byte)ch, validator); 
            if (strBytes == null)
                return null;
            if (strBytes.Length == 0)
                return String.Empty; 

            String str = Encoding.ASCII.GetString(strBytes); 
 
            return str;
        } // ReadToChar 
        } /// ReadToByte
 
        protected byte[] ReadToByte(byte b, ValidateByteDelegate validator) 
        {
            byte[] readBytes = null; 

            // start at current position and return byte array consisting of bytes
            //   up to where we found the byte.
            if (_dataCount == 0) 
                BufferMoreData();
 
            int dataEnd = _dataOffset + _dataCount; // one byte past last valid byte 
            int startIndex = _dataOffset; // current position
            int endIndex = startIndex; // current index 

            bool foundByte = false;
            bool bufferEnd;
            while (!foundByte) 
            {
                InternalRemotingServices.RemotingAssert(endIndex <= dataEnd, "endIndex shouldn't pass dataEnd"); 
                bufferEnd = endIndex == dataEnd; 
                foundByte = !bufferEnd && (_dataBuffer[endIndex] == b);
 
                // validate character if necessary
                if ((validator != null) && !bufferEnd && !foundByte)
                {
                    if (!validator(_dataBuffer[endIndex])) 
                    {
                        throw new RemotingException( 
                            CoreChannel.GetResourceString( 
                                "Remoting_Http_InvalidDataReceived"));
                    } 
                }

                // we're at the end of the currently buffered data or we've found our byte
                if (bufferEnd || foundByte) 
                {
                    // store processed byte in the readBytes array 
                    int count = endIndex - startIndex; 
                    if (readBytes == null)
                    { 
                        readBytes = new byte[count];
                        StreamHelper.BufferCopy(_dataBuffer, startIndex, readBytes, 0, count);
                        }
                    else 
                    {
                        int oldSize = readBytes.Length; 
                        byte[] newBytes = new byte[oldSize + count]; 
                        StreamHelper.BufferCopy(readBytes, 0, newBytes, 0, oldSize);
                        StreamHelper.BufferCopy(_dataBuffer, startIndex, newBytes, oldSize, count); 
                        readBytes = newBytes;
                    }

                    // update data counters 
                    _dataOffset += count;
                    _dataCount -= count; 
 
                    if (bufferEnd)
                    { 
                        // we still haven't found the byte, so buffer more data
                        //   and keep looking.
                        BufferMoreData();
 
                        // reset indices
                        dataEnd = _dataOffset + _dataCount; // last valid byte 
                        startIndex = _dataOffset; // current position 
                        endIndex = startIndex; // current index
                    } 
                    else
                    if (foundByte)
                    {
                        // skip over the byte that we were looking for 
                        _dataOffset += 1;
                        _dataCount -= 1; 
                    } 
                }
                else 
                {
                    // still haven't found character or end of buffer, so advance position
                    endIndex++;
                } 
            }
 
            return readBytes; 
        } // ReadToByte
Esempio n. 6
0
        } /// ReadToByte

        protected byte[] ReadToByte(byte b, ValidateByteDelegate validator)
        {
            byte[] readBytes = null;

            // start at current position and return byte array consisting of bytes
            //   up to where we found the byte.
            if (_dataCount == 0)
            {
                BufferMoreData();
            }

            int dataEnd    = _dataOffset + _dataCount; // one byte past last valid byte
            int startIndex = _dataOffset;              // current position
            int endIndex   = startIndex;               // current index

            bool foundByte = false;
            bool bufferEnd;

            while (!foundByte)
            {
                InternalRemotingServices.RemotingAssert(endIndex <= dataEnd, "endIndex shouldn't pass dataEnd");
                bufferEnd = endIndex == dataEnd;
                foundByte = !bufferEnd && (_dataBuffer[endIndex] == b);

                // validate character if necessary
                if ((validator != null) && !bufferEnd && !foundByte)
                {
                    if (!validator(_dataBuffer[endIndex]))
                    {
                        throw new RemotingException(
                                  CoreChannel.GetResourceString(
                                      "Remoting_Http_InvalidDataReceived"));
                    }
                }

                // we're at the end of the currently buffered data or we've found our byte
                if (bufferEnd || foundByte)
                {
                    // store processed byte in the readBytes array
                    int count = endIndex - startIndex;
                    if (readBytes == null)
                    {
                        readBytes = new byte[count];
                        StreamHelper.BufferCopy(_dataBuffer, startIndex, readBytes, 0, count);
                    }
                    else
                    {
                        int    oldSize  = readBytes.Length;
                        byte[] newBytes = new byte[oldSize + count];
                        StreamHelper.BufferCopy(readBytes, 0, newBytes, 0, oldSize);
                        StreamHelper.BufferCopy(_dataBuffer, startIndex, newBytes, oldSize, count);
                        readBytes = newBytes;
                    }

                    // update data counters
                    _dataOffset += count;
                    _dataCount  -= count;

                    if (bufferEnd)
                    {
                        // we still haven't found the byte, so buffer more data
                        //   and keep looking.
                        BufferMoreData();

                        // reset indices
                        dataEnd    = _dataOffset + _dataCount; // last valid byte
                        startIndex = _dataOffset;              // current position
                        endIndex   = startIndex;               // current index
                    }
                    else
                    if (foundByte)
                    {
                        // skip over the byte that we were looking for
                        _dataOffset += 1;
                        _dataCount  -= 1;
                    }
                }
                else
                {
                    // still haven't found character or end of buffer, so advance position
                    endIndex++;
                }
            }

            return(readBytes);
        } // ReadToByte