Ejemplo n.º 1
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            int required = 2;

            if (frame.PayloadLenght == 126)
                required += 2;
            else
                required += 8;

            if (frame.Length < required)
            {
                nextPartReader = this;
                return -1;
            }

            if (frame.HasMask)
                nextPartReader = MaskKeyReader;
            else
            {
                if (frame.ActualPayloadLength == 0)
                {
                    nextPartReader = null;
                    return (int)((long)frame.Length - required);
                }

                nextPartReader = PayloadDataReader;
            }

            if (frame.Length > required)
                return nextPartReader.Process(required, frame, out nextPartReader);

            return 0;
        }
Ejemplo n.º 2
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            if (frame.Length < 2)
            {
                nextPartReader = this;
                return -1;
            }

            if (frame.PayloadLenght < 126)
            {
                if (frame.HasMask)
                    nextPartReader = MaskKeyReader;
                else
                {
                    if (frame.ActualPayloadLength == 0)
                    {
                        nextPartReader = null;
                        return (int)((long)frame.Length - 2);
                    }

                    nextPartReader = PayloadDataReader;
                }
            }
            else
            {
                nextPartReader = ExtendedLenghtReader;
            }

            if (frame.Length > 2)
                return nextPartReader.Process(2, frame, out nextPartReader);

            return 0;
        }
Ejemplo n.º 3
0
        public override int Process(
            int lastLength,
            WebSocketDataFrame frame,
            out IDataFramePartReader nextPartReader)
        {
            int lastLength1 = lastLength + 4;

            if (frame.Length < lastLength1)
            {
                nextPartReader = (IDataFramePartReader)this;
                return(-1);
            }

            frame.MaskKey = frame.InnerData.ToArrayData(lastLength, 4);
            if (frame.ActualPayloadLength == 0L)
            {
                nextPartReader = (IDataFramePartReader)null;
                return((int)((long)frame.Length - (long)lastLength1));
            }

            nextPartReader = (IDataFramePartReader) new PayloadDataReader();
            if (frame.Length > lastLength1)
            {
                return(nextPartReader.Process(lastLength1, frame, out nextPartReader));
            }
            return(0);
        }
Ejemplo n.º 4
0
        public override int Process(
            int lastLength,
            WebSocketDataFrame frame,
            out IDataFramePartReader nextPartReader)
        {
            int num         = 2;
            int lastLength1 = frame.PayloadLenght != (sbyte)126 ? num + 8 : num + 2;

            if (frame.Length < lastLength1)
            {
                nextPartReader = (IDataFramePartReader)this;
                return(-1);
            }

            if (frame.HasMask)
            {
                nextPartReader = DataFramePartReader.MaskKeyReader;
            }
            else
            {
                if (frame.ActualPayloadLength == 0L)
                {
                    nextPartReader = (IDataFramePartReader)null;
                    return((int)((long)frame.Length - (long)lastLength1));
                }

                nextPartReader = DataFramePartReader.PayloadDataReader;
            }

            if (frame.Length > lastLength1)
            {
                return(nextPartReader.Process(lastLength1, frame, out nextPartReader));
            }
            return(0);
        }
        public WebSocketPackage Filter(ref SequenceReader <byte> reader)
        {
            var package = _currentPackage;

            if (package == null)
            {
                package = _currentPackage = new WebSocketPackage {
                    HttpHeader = _httpHeader
                };
                _currentPartReader = DataFramePartReader.NewReader;
            }

            while (true)
            {
                if (_currentPartReader.Process(package, ref reader, out IDataFramePartReader nextPartReader, out bool needMoreData))
                {
                    Reset();
                    return(package);
                }

                if (nextPartReader != null)
                {
                    _currentPartReader = nextPartReader;
                }

                if (needMoreData || reader.Remaining <= 0)
                {
                    return(null);
                }
            }
        }
Ejemplo n.º 6
0
 // Token: 0x06000638 RID: 1592 RVA: 0x00019F24 File Offset: 0x00018124
 public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
 {
     if (frame.Length < 2)
     {
         nextPartReader = this;
         return(-1);
     }
     if (frame.PayloadLenght < 126)
     {
         if (frame.HasMask)
         {
             nextPartReader = DataFramePartReader.MaskKeyReader;
         }
         else
         {
             if (frame.ActualPayloadLength == 0L)
             {
                 nextPartReader = null;
                 return((int)((long)frame.Length - 2L));
             }
             nextPartReader = DataFramePartReader.PayloadDataReader;
         }
     }
     else
     {
         nextPartReader = DataFramePartReader.ExtendedLenghtReader;
     }
     if (frame.Length > 2)
     {
         return(nextPartReader.Process(2, frame, out nextPartReader));
     }
     return(0);
 }
Ejemplo n.º 7
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            int num = 2;

            num = ((frame.PayloadLenght != 126) ? (num + 8) : (num + 2));
            if (frame.Length < num)
            {
                nextPartReader = this;
                return(-1);
            }
            if (frame.HasMask)
            {
                nextPartReader = DataFramePartReader.MaskKeyReader;
            }
            else
            {
                if (frame.ActualPayloadLength == 0L)
                {
                    nextPartReader = null;
                    return((int)((long)frame.Length - (long)num));
                }
                nextPartReader = DataFramePartReader.PayloadDataReader;
            }
            if (frame.Length > num)
            {
                return(nextPartReader.Process(num, frame, out nextPartReader));
            }
            return(0);
        }
Ejemplo n.º 8
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            int required = lastLength + 4;

            if (frame.Length < required)
            {
                nextPartReader = this;
                return(-1);
            }

            frame.MaskKey = frame.InnerData.ToArrayData(lastLength, 4);

            if (frame.ActualPayloadLength == 0)
            {
                nextPartReader = null;
                return((int)((long)frame.Length - required));
            }

            nextPartReader = PayloadDataReader;

            if (frame.Length > required)
            {
                return(nextPartReader.Process(required, frame, out nextPartReader));
            }

            return(0);
        }
        public WebSocketCommandInfo GetCommandInfo(byte[] readBuffer, int offset, int length, out int left)
        {
            AddArraySegment(m_Frame.InnerData, readBuffer, offset, length, isReusableBuffer: true);
            IDataFramePartReader nextPartReader;
            int num = m_PartReader.Process(m_LastPartLength, m_Frame, out nextPartReader);

            if (num < 0)
            {
                left = 0;
                return(null);
            }
            left = num;
            if (left > 0)
            {
                m_Frame.InnerData.TrimEnd(left);
            }
            if (nextPartReader == null)
            {
                WebSocketCommandInfo result;
                if (m_Frame.IsControlFrame)
                {
                    result = new WebSocketCommandInfo(m_Frame);
                    m_Frame.Clear();
                }
                else if (m_Frame.FIN)
                {
                    if (m_PreviousFrames != null && m_PreviousFrames.Count > 0)
                    {
                        m_PreviousFrames.Add(m_Frame);
                        m_Frame          = new WebSocketDataFrame(new ArraySegmentList());
                        result           = new WebSocketCommandInfo(m_PreviousFrames);
                        m_PreviousFrames = null;
                    }
                    else
                    {
                        result = new WebSocketCommandInfo(m_Frame);
                        m_Frame.Clear();
                    }
                }
                else
                {
                    if (m_PreviousFrames == null)
                    {
                        m_PreviousFrames = new List <WebSocketDataFrame>();
                    }
                    m_PreviousFrames.Add(m_Frame);
                    m_Frame = new WebSocketDataFrame(new ArraySegmentList());
                    result  = null;
                }
                m_LastPartLength = 0;
                m_PartReader     = DataFramePartReader.NewReader;
                return(result);
            }
            m_LastPartLength = m_Frame.InnerData.Count - num;
            m_PartReader     = nextPartReader;
            return(null);
        }
Ejemplo n.º 10
0
        public IWebSocketFragment Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int left)
        {
            if (m_Frame == null)
            {
                m_Frame = new WebSocketDataFrame(new ArraySegmentList());
            }

            this.AddArraySegment(m_Frame.InnerData, readBuffer, offset, length, toBeCopied);

            IDataFramePartReader nextPartReader;

            int thisLength = m_PartReader.Process(m_LastPartLength, m_Frame, out nextPartReader);

            if (thisLength < 0)
            {
                left = 0;
                return(null);
            }
            else
            {
                left = thisLength;

                if (left > 0)
                {
                    m_Frame.InnerData.TrimEnd(left);
                }

                //Means this part reader is the last one
                if (nextPartReader == null)
                {
                    m_LastPartLength = 0;
                    m_PartReader     = DataFramePartReader.NewReader;

                    var frame = m_Frame;
                    m_Frame = null;
                    return(frame);
                }
                else
                {
                    m_LastPartLength = m_Frame.InnerData.Count - thisLength;
                    m_PartReader     = nextPartReader;

                    return(null);
                }
            }
        }
        public WebSocketPackage Filter(ref SequenceReader <byte> reader)
        {
            var package = _currentPackage;

            if (package == null)
            {
                _currentPackage    = package = new WebSocketPackage();
                _currentPartReader = DataFramePartReader.NewReader;
            }

            if (!_currentPartReader.Process(package, ref reader, out IDataFramePartReader nextPartReader))
            {
                _currentPartReader = nextPartReader;
                return(null);
            }

            Reset();
            return(package);
        }
Ejemplo n.º 12
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            int required = 2;

            if (frame.PayloadLenght == 126)
            {
                required += 2;
            }
            else
            {
                required += 8;
            }

            if (frame.Length < required)
            {
                nextPartReader = this;
                return(-1);
            }

            if (frame.HasMask)
            {
                nextPartReader = MaskKeyReader;
            }
            else
            {
                if (frame.ActualPayloadLength == 0)
                {
                    nextPartReader = null;
                    return((int)((long)frame.Length - required));
                }

                nextPartReader = PayloadDataReader;
            }

            if (frame.Length > required)
            {
                return(nextPartReader.Process(required, frame, out nextPartReader));
            }

            return(0);
        }
Ejemplo n.º 13
0
        public WebSocketCommandInfo GetCommandInfo(byte[] readBuffer, int offset, int length, out int left)
        {
            this.AddArraySegment(m_Frame.InnerData, readBuffer, offset, length, true);

            IDataFramePartReader nextPartReader;

            int thisLength = m_PartReader.Process(m_LastPartLength, m_Frame, out nextPartReader);

            if (thisLength < 0)
            {
                left = 0;
                return(null);
            }
            else
            {
                left = thisLength;

                if (left > 0)
                {
                    m_Frame.InnerData.TrimEnd(left);
                }

                //Means this part reader is the last one
                if (nextPartReader == null)
                {
                    WebSocketCommandInfo commandInfo;

                    if (m_Frame.FIN)
                    {
                        if (m_PreviousFrames != null && m_PreviousFrames.Count > 0)
                        {
                            m_PreviousFrames.Add(m_Frame);
                            m_Frame          = new WebSocketDataFrame(new ArraySegmentList());
                            commandInfo      = new WebSocketCommandInfo(m_PreviousFrames);
                            m_PreviousFrames = null;
                        }
                        else
                        {
                            commandInfo = new WebSocketCommandInfo(m_Frame);
                            m_Frame.Clear();
                        }
                    }
                    else
                    {
                        if (m_PreviousFrames == null)
                        {
                            m_PreviousFrames = new List <WebSocketDataFrame>();
                        }

                        m_PreviousFrames.Add(m_Frame);
                        m_Frame = new WebSocketDataFrame(new ArraySegmentList());

                        commandInfo = null;
                    }

                    //BufferSegments.ClearSegements();
                    m_LastPartLength = 0;
                    m_PartReader     = DataFramePartReader.NewReader;

                    return(commandInfo);
                }
                else
                {
                    m_LastPartLength = m_Frame.InnerData.Count - thisLength;
                    m_PartReader     = nextPartReader;

                    return(null);
                }
            }
        }