Exemplo n.º 1
0
        public void TestDecode()
        {
            ArraySegmentList source = new ArraySegmentList();

            StringBuilder sb = new StringBuilder();

            List <int> countArray = new List <int>();

            int from, to;

            Random rd = new Random();

            from = rd.Next(0, 19);
            to   = rd.Next(from + 1, 20);

            for (var i = 0; i < 20; i++)
            {
                var line    = Guid.NewGuid().ToString();
                var element = Encoding.UTF8.GetBytes(line);

                if (i >= from && i <= to)
                {
                    countArray.Add(source.Count);
                    Console.WriteLine(source.Count);
                    sb.Append(line);
                    source.AddSegment(element, 0, element.Length);
                    countArray.Add(source.Count);
                    Console.WriteLine(source.Count);
                }
                else
                {
                    source.AddSegment(element, 0, element.Length);
                }
            }

            Assert.AreEqual(sb.ToString(), source.Decode(Encoding.UTF8, countArray[0], countArray[countArray.Count - 1] - countArray[0]));
        }
Exemplo n.º 2
0
        public void TestDecode()
        {
            ArraySegmentList source = new ArraySegmentList();

            StringBuilder sb = new StringBuilder();

            List<int> countArray = new List<int>();

            int from, to;

            Random rd = new Random();

            from = rd.Next(0, 19);
            to = rd.Next(from + 1, 20);

            for (var i = 0; i < 20; i++)
            {
                var line = Guid.NewGuid().ToString();
                var element = Encoding.UTF8.GetBytes(line);

                if (i >= from && i <= to)
                {
                    countArray.Add(source.Count);
                    Console.WriteLine(source.Count);
                    sb.Append(line);
                    source.AddSegment(element, 0, element.Length);
                    countArray.Add(source.Count);
                    Console.WriteLine(source.Count);
                }
                else
                {
                    source.AddSegment(element, 0, element.Length);
                }
            }

            Assert.AreEqual(sb.ToString(), source.Decode(Encoding.UTF8, countArray[0], countArray[countArray.Count - 1] - countArray[0]));
        }
        public override BinaryRequestInfo Filter(byte[] readBuffer, int offset, int length, bool toBeCopied, out int left)
        {
            if (!m_FixedHeadLoaded)
            {
                return(base.Filter(readBuffer, offset, length, toBeCopied, out left));
            }

            var session = m_Session;

            left = 0;
            int pos = FindEnd(readBuffer, offset, length);

            if (pos >= 0)
            {
                if (session.Type == ProxyType.Socks4a) //4a
                {
                    if (m_GotUserID)
                    {
                        if (pos != offset)
                        {
                            this.AddSegment(readBuffer, offset, pos - offset, toBeCopied);
                        }

                        if (m_Buffer == null || m_Buffer.Count <= 0)
                        {
                            session.Close(CloseReason.ProtocolError);
                            return(null);
                        }

                        m_TargetEndPoint = new DnsEndPoint(m_Buffer.Decode(Encoding.ASCII), m_Port);
                        TryStartProxy(m_TargetEndPoint);
                        return(null);
                    }
                    else
                    {
                        m_GotUserID = true;

                        if (pos != offset)
                        {
                            this.AddSegment(readBuffer, offset, pos - offset, toBeCopied);
                        }

                        if (m_Buffer == null || m_Buffer.Count <= 0)
                        {
                            m_UserID = string.Empty;
                        }
                        else
                        {
                            m_UserID = m_Buffer.Decode(Encoding.ASCII);
                        }

                        session.UserID = m_UserID;

                        int posHost = FindEnd(readBuffer, pos + 1, offset + length - pos - 1);

                        if (posHost >= 0)
                        {
                            m_TargetEndPoint = new DnsEndPoint(Encoding.ASCII.GetString(readBuffer, pos + 1, posHost - pos - 1), m_Port);
                            TryStartProxy(m_TargetEndPoint);
                            return(null);
                        }

                        this.AddSegment(readBuffer, pos + 1, offset + length - pos - 1, toBeCopied);
                        return(null);
                    }
                }
                else//4a
                {
                    if (pos != offset)
                    {
                        this.AddSegment(readBuffer, offset, pos - offset, toBeCopied);
                    }

                    if (m_Buffer == null || m_Buffer.Count <= 0)
                    {
                        m_UserID = string.Empty;
                    }
                    else
                    {
                        m_UserID = m_Buffer.Decode(Encoding.ASCII);
                    }

                    session.UserID = m_UserID;

                    TryStartProxy(m_TargetEndPoint);
                    return(null);
                }
            }
            else
            {
                this.AddSegment(readBuffer, offset, length, toBeCopied);
                return(null);
            }
        }