Esempio n. 1
0
 static DataFramePartReader()
 {
     FixPartReader        = new FixPartReader();
     ExtendedLenghtReader = new ExtendedLenghtReader();
     MaskKeyReader        = new MaskKeyReader();
     PayloadDataReader    = new PayloadDataReader();
 }
Esempio n. 2
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);
        }
Esempio n. 3
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 = new PayloadDataReader();

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

            return 0;
        }
Esempio n. 4
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;
        }
Esempio n. 5
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;
        }
        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);
                }
            }
        }
Esempio n. 7
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);
        }
 // 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);
 }
Esempio n. 9
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);
        }
        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 = new PayloadDataReader();

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

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

            if (num < 0)
            {
                left = 0;
                return((WebSocketCommandInfo)null);
            }

            left = num;
            if (left > 0)
            {
                this.m_Frame.InnerData.TrimEnd(left);
            }
            if (nextPartReader == null)
            {
                WebSocketCommandInfo socketCommandInfo;
                if (this.m_Frame.FIN)
                {
                    if (this.m_PreviousFrames != null && this.m_PreviousFrames.Count > 0)
                    {
                        this.m_PreviousFrames.Add(this.m_Frame);
                        this.m_Frame          = new WebSocketDataFrame(new ArraySegmentList());
                        socketCommandInfo     = new WebSocketCommandInfo((IList <WebSocketDataFrame>) this.m_PreviousFrames);
                        this.m_PreviousFrames = (List <WebSocketDataFrame>)null;
                    }
                    else
                    {
                        socketCommandInfo = new WebSocketCommandInfo(this.m_Frame);
                        this.m_Frame.Clear();
                    }
                }
                else
                {
                    if (this.m_PreviousFrames == null)
                    {
                        this.m_PreviousFrames = new List <WebSocketDataFrame> ();
                    }
                    this.m_PreviousFrames.Add(this.m_Frame);
                    this.m_Frame      = new WebSocketDataFrame(new ArraySegmentList());
                    socketCommandInfo = (WebSocketCommandInfo)null;
                }

                this.m_LastPartLength = 0;
                this.m_PartReader     = DataFramePartReader.NewReader;
                return(socketCommandInfo);
            }

            this.m_LastPartLength = this.m_Frame.InnerData.Count - num;
            this.m_PartReader     = nextPartReader;
            return((WebSocketCommandInfo)null);
        }
        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);
        }
Esempio n. 13
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            long num = lastLength + frame.ActualPayloadLength;

            if (frame.Length < num)
            {
                nextPartReader = this;
                return(-1);
            }
            nextPartReader = null;
            return((int)(frame.Length - num));
        }
Esempio n. 14
0
        public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
        {
            long required = lastLength + frame.ActualPayloadLength;

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

            nextPartReader = null;

            return (int)((long)frame.Length - required);
        }
Esempio n. 15
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);
        }
Esempio n. 17
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);
        }
Esempio n. 18
0
 public WebSocketDataFrameReader(IAppServer appServer)
 {
     AppServer    = appServer;
     m_PartReader = DataFramePartReader.NewReader;
 }
Esempio n. 19
0
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader)
        {
            if (reader.Length < 2)
            {
                nextPartReader = this;
                return(false);
            }

            reader.TryRead(out byte firstByte);
            package.OpCode     = (OpCode)firstByte;
            package.OpCodeByte = firstByte;

            reader.TryRead(out byte secondByte);
            package.PayloadLength = secondByte & 0x7f;
            package.HasMask       = (secondByte & 0x80) == 0x80;

            if (package.PayloadLength >= 126)
            {
                nextPartReader = ExtendedLenghtReader;
            }
            else
            {
                if (package.HasMask)
                {
                    nextPartReader = MaskKeyReader;
                }
                else
                {
                    // no body
                    if (package.PayloadLength == 0)
                    {
                        nextPartReader = null;
                        return(true);
                    }

                    nextPartReader = PayloadDataReader;
                }
            }

            return(false);
        }
Esempio n. 20
0
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader, out bool needMoreData)
        {
            nextPartReader = null;

            long required = package.PayloadLength;

            if (reader.Length < required)
            {
                needMoreData = true;
                return(false);
            }

            needMoreData = false;
            package.Data = reader.Sequence.Slice(0, required);
            reader.Advance(required);

            return(true);
        }
Esempio n. 21
0
 public WebSocketDataFrameReceiveFilter()
 {
     m_Frame      = new WebSocketDataFrame(new ArraySegmentList());
     m_PartReader = DataFramePartReader.NewReader;
 }
 public abstract int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader);
 public abstract int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader);
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader, out bool needMoreData)
        {
            int required = 4;

            if (reader.Remaining < required)
            {
                nextPartReader = null;
                needMoreData   = true;
                return(false);
            }

            needMoreData = false;

            package.MaskKey = reader.Sequence.Slice(reader.Consumed, 4).ToArray();
            reader.Advance(4);

            nextPartReader = PayloadDataReader;
            return(false);
        }
 public void Reset()
 {
     _currentPackage    = null;
     _currentPartReader = null;
 }
Esempio n. 26
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);
                }
            }
        }
Esempio n. 27
0
 public DraftHybi10DataReader()
 {
     this.m_Frame      = new WebSocketDataFrame(new ArraySegmentList());
     this.m_PartReader = DataFramePartReader.NewReader;
 }
Esempio n. 28
0
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader)
        {
            int required = 4;

            if (reader.Length < required)
            {
                nextPartReader = this;
                return(false);
            }

            package.MaskKey = reader.Sequence.Slice(0, 4).ToArray();
            reader.Advance(4);

            nextPartReader = PayloadDataReader;
            return(false);
        }
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader, out bool needMoreData)
        {
            nextPartReader = null;

            long required = package.PayloadLength;

            if (reader.Remaining < required)
            {
                needMoreData = true;
                return(false);
            }

            needMoreData = false;

            var seq = reader.Sequence.Slice(reader.Consumed, required);

            if (package.HasMask)
            {
                DecodeMask(seq, package.MaskKey);
            }

            if (package.Data.Length == 0)
            {
                package.Data = seq;
            }
            else
            {
                package.Data = ConcactSequence(package.Data, seq);
            }

            try
            {
                if (package.FIN)
                {
                    if (package.OpCode == OpCode.Text)
                    {
                        package.Message = package.Data.GetString(Encoding.UTF8);
                        package.Data    = default;
                    }

                    return(true);
                }
                else
                {
                    // start to process next fragment
                    nextPartReader = FixPartReader;
                    return(false);
                }
            }
            finally
            {
                reader.Advance(required);
            }
        }
Esempio n. 30
0
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader)
        {
            long required = package.PayloadLength;

            if (reader.Length < required)
            {
                nextPartReader = this;
                return(false);
            }

            package.Data   = reader.Sequence;
            nextPartReader = null;
            return(true);
        }
Esempio n. 31
0
 public abstract bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader, out bool needMoreData);
Esempio n. 32
0
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader, out bool needMoreData)
        {
            nextPartReader = null;

            long required = package.PayloadLength;

            if (reader.Length < required)
            {
                needMoreData = true;
                return(false);
            }

            needMoreData = false;

            var seq = reader.Sequence.Slice(0, required);

            if (package.OpCode == OpCode.Binary)
            {
                package.Data = seq;
            }
            else
            {
                package.Message = seq.GetString(Encoding.UTF8);
            }

            reader.Advance(required);

            return(true);
        }
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader, out bool needMoreData)
        {
            int required;

            if (package.PayloadLength == 126)
            {
                required = 2;
            }
            else
            {
                required = 8;
            }

            if (reader.Remaining < required)
            {
                nextPartReader = null;
                needMoreData   = true;
                return(false);
            }

            needMoreData = false;

            if (required == 2)
            {
                reader.TryReadBigEndian(out short len);
                package.PayloadLength = len;
            }
            else // required == 8 (long)
            {
                reader.TryReadBigEndian(out long len);
                package.PayloadLength = len;
            }

            if (package.HasMask)
            {
                nextPartReader = MaskKeyReader;
            }
            else
            {
                nextPartReader = PayloadDataReader;
            }

            return(false);
        }
Esempio n. 34
0
        public override bool Process(WebSocketPackage package, ref SequenceReader <byte> reader, out IDataFramePartReader nextPartReader)
        {
            int required;

            if (package.PayloadLength == 126)
            {
                required = 2;
            }
            else
            {
                required = 8;
            }

            if (reader.Length < required)
            {
                nextPartReader = this;
                return(false);
            }

            if (required == 2)
            {
                reader.TryReadLittleEndian(out short len);
                package.PayloadLength = len;
            }
            else // required == 8 (long)
            {
                reader.TryReadLittleEndian(out long len);
                package.PayloadLength = len;
            }

            if (package.HasMask)
            {
                nextPartReader = MaskKeyReader;
            }
            else
            {
                nextPartReader = PayloadDataReader;
            }

            return(false);
        }