Exemplo n.º 1
0
        private void BeginSend(IoBuffer buf)
        {
            ArraySegment <Byte> array = buf.GetRemaining();

            try
            {
                //make sync. add by zesus19
                _serialPort.Write(array.Array, array.Offset, array.Count);
                Int32 written = buf.Remaining;
                buf.Position += written;
                EndSend(written);

                //delete async
                //_serialPort.BaseStream.BeginWrite(array.Array, array.Offset, array.Count, SendCallback, buf);
            }
            catch (ObjectDisposedException)
            {
                // ignore
            }
            catch (Exception ex)
            {
                this.FilterChain.FireExceptionCaught(ex);
                //add by zesus19
                Processor.Remove(this);
            }
        }
Exemplo n.º 2
0
        private IoBuffer ReadBuffer()
        {
            IoBuffer buf = IoBuffer.Allocate(_sessionStream.Remaining);

            while (true)
            {
                ArraySegment <Byte> array = buf.GetRemaining();
                Int32 bytesRead           = _sslStream.Read(array.Array, array.Offset, array.Count);
                if (bytesRead <= 0)
                {
                    break;
                }
                buf.Position += bytesRead;

                if (_sessionStream.Remaining == 0)
                {
                    break;
                }
                else
                {
                    // We have to grow the target buffer, it's too small.
                    buf.Capacity <<= 1;
                    buf.Limit      = buf.Capacity;
                }
            }

            buf.Flip();
            return(buf);
        }
Exemplo n.º 3
0
        public void ScheduleFilterWrite(INextFilter nextFilter, IWriteRequest writeRequest)
        {
            if (!_authenticated)
            {
                if (_session.Connected)
                {
                    // Handshake not complete yet.
                    _preHandshakeEventQueue.Enqueue(new IoFilterEvent(nextFilter, IoEventType.Write, _session, writeRequest));
                }
                return;
            }

            IoBuffer buf = (IoBuffer)writeRequest.Message;

            if (buf.Remaining == 0)
            {
                return;
            }

            //lock (_sessionStream)
            //{
            ArraySegment <Byte> array = buf.GetRemaining();

            _currentNextFilter   = nextFilter;
            _currentWriteRequest = writeRequest;
            // SSL encrypt
            _sslStream.Write(array.Array, array.Offset, array.Count);
            _sslStream.Flush();
            //}
        }
Exemplo n.º 4
0
        public void ScheduleFilterWrite(INextFilter nextFilter, IWriteRequest writeRequest)
        {
            if (!_authenticated)
            {
                if (_session.Connected)
                {
                    // Handshake not complete yet.
                    _preHandshakeEventQueue.Enqueue(new IoFilterEvent(nextFilter, IoEventType.Write, _session, writeRequest));
                }
                return;
            }

            IoBuffer buf = (IoBuffer)writeRequest.Message;

            if (!buf.HasRemaining)
            {
                // empty message will break this SSL stream?
                return;
            }
            lock (this)
            {
                ArraySegment <Byte> array = buf.GetRemaining();
                _currentNextFilter   = nextFilter;
                _currentWriteRequest = writeRequest;
                // SSL encrypt
                _sslStream.Write(array.Array, array.Offset, array.Count);
            }
        }
Exemplo n.º 5
0
        /// <inheritdoc/>
        protected override void PutInternal(IoBuffer src)
        {
            ArraySegment <Byte> array = src.GetRemaining();

            if (array.Count > Remaining)
            {
                throw new OverflowException();
            }
            PutInternal(array.Array, array.Offset, array.Count);
            src.Position += array.Count;
        }
Exemplo n.º 6
0
        public MessageDecoderResult Decode(IoSession session, IoBuffer input, IProtocolDecoderOutput output)
        {
            var value = input.GetRemaining().Array;

            input.Position = value.Length;
            if (value == null)
            {
                return(MessageDecoderResult.NeedData);
            }

            output.Write(value);

            return(MessageDecoderResult.OK);
        }
            private void BeginSend(AsyncDatagramSession session, IoBuffer buf, EndPoint remoteEP)
            {
                ArraySegment <Byte> array = buf.GetRemaining();

                try
                {
                    Socket.BeginSendTo(array.Array, array.Offset, array.Count, SocketFlags.None, remoteEP, SendCallback, session);
                }
                catch (ObjectDisposedException)
                {
                    // ignore
                }
                catch (Exception ex)
                {
                    EndSend(session, ex);
                }
            }
Exemplo n.º 8
0
        private void BeginSend(IoBuffer buf)
        {
            ArraySegment <Byte> array = buf.GetRemaining();

            try
            {
                _serialPort.BaseStream.BeginWrite(array.Array, array.Offset, array.Count, SendCallback, buf);
            }
            catch (ObjectDisposedException)
            {
                // ignore
            }
            catch (Exception ex)
            {
                this.FilterChain.FireExceptionCaught(ex);
            }
        }
        /// <inheritdoc/>
        protected override void BeginSend(IWriteRequest request, IoBuffer buf)
        {
            ArraySegment <Byte> array = buf.GetRemaining();

            try
            {
                Socket.BeginSend(array.Array, array.Offset, array.Count, SocketFlags.None, SendCallback, new SendingContext(Socket, buf));
            }
            catch (ObjectDisposedException)
            {
                // ignore
            }
            catch (Exception ex)
            {
                EndSend(ex);
            }
        }
Exemplo n.º 10
0
        private void BeginSend(IoBuffer buf, EndPoint destination)
        {
            ArraySegment <Byte> array = buf.GetRemaining();

            try
            {
                Socket.BeginSendTo(array.Array, array.Offset, array.Count, SocketFlags.None, destination, SendCallback, new SendingContext(Socket, buf));
            }
            catch (ObjectDisposedException)
            {
                // ignore
            }
            catch (Exception ex)
            {
                EndSend(ex);
            }
        }
Exemplo n.º 11
0
        private void DecodeNormal(Context ctx, IoSession session, IoBuffer input, IProtocolDecoderOutput output)
        {
            Int32 matchCount = ctx.MatchCount;

            // Try to find a match
            Int32 oldPos = input.Position, oldLimit = input.Limit;

            while (input.HasRemaining)
            {
                Byte b = input.Get();

                if (_delimBuf[matchCount] == b)
                {
                    matchCount++;

                    if (matchCount == _delimBuf.Length)
                    {
                        // Found a match.
                        Int32 pos = input.Position;
                        input.Limit    = pos;
                        input.Position = oldPos;

                        ctx.Append(input);

                        input.Limit    = oldLimit;
                        input.Position = pos;

                        if (ctx.OverflowPosition == 0)
                        {
                            IoBuffer buf = ctx.Buffer;
                            buf.Flip();
                            buf.Limit -= matchCount;
                            ArraySegment <Byte> bytes = buf.GetRemaining();
                            try
                            {
                                String str = _encoding.GetString(bytes.Array, bytes.Offset, bytes.Count);
                                WriteText(session, str, output);
                            }
                            finally
                            {
                                buf.Clear();
                            }
                        }
                        else
                        {
                            Int32 overflowPosition = ctx.OverflowPosition;
                            ctx.Reset();
                            throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition);
                        }

                        oldPos     = pos;
                        matchCount = 0;
                    }
                }
                else
                {
                    input.Position = Math.Max(0, input.Position - matchCount);
                    matchCount     = 0;
                }
            }

            // Put remainder to buf.
            input.Position = oldPos;
            ctx.Append(input);
            ctx.MatchCount = matchCount;
        }
Exemplo n.º 12
0
        private void DecodeAuto(Context ctx, IoSession session, IoBuffer input, IProtocolDecoderOutput output)
        {
            Int32 matchCount = ctx.MatchCount;

            // Try to find a match
            Int32 oldPos = input.Position, oldLimit = input.Limit;

            while (input.HasRemaining)
            {
                Byte    b       = input.Get();
                Boolean matched = false;

                switch (b)
                {
                case 0x0d:     // \r
                    // Might be Mac, but we don't auto-detect Mac EOL
                    // to avoid confusion.
                    matchCount++;
                    break;

                case 0x0a:     // \n
                    // UNIX
                    matchCount++;
                    matched = true;
                    break;

                default:
                    matchCount = 0;
                    break;
                }

                if (matched)
                {
                    // Found a match.
                    Int32 pos = input.Position;
                    input.Limit    = pos;
                    input.Position = oldPos;

                    ctx.Append(input);

                    input.Limit    = oldLimit;
                    input.Position = pos;

                    if (ctx.OverflowPosition == 0)
                    {
                        IoBuffer buf = ctx.Buffer;
                        buf.Flip();
                        buf.Limit -= matchCount;
                        ArraySegment <Byte> bytes = buf.GetRemaining();
                        try
                        {
                            String str = _encoding.GetString(bytes.Array, bytes.Offset, bytes.Count);
                            WriteText(session, str, output);
                        }
                        finally
                        {
                            buf.Clear();
                        }
                    }
                    else
                    {
                        Int32 overflowPosition = ctx.OverflowPosition;
                        ctx.Reset();
                        throw new RecoverableProtocolDecoderException("Line is too long: " + overflowPosition);
                    }

                    oldPos     = pos;
                    matchCount = 0;
                }
            }

            // Put remainder to buf.
            input.Position = oldPos;
            ctx.Append(input);
            ctx.MatchCount = matchCount;
        }