void OnConnectionModeKnown(ListenerConnectionModeReader modeReader)
        {
            lock (ThisLock)
            {
                if (isDisposed)
                {
                    return;
                }

                connectionReaders.Remove(modeReader);
            }

            try
            {
                FramingMode framingMode = modeReader.GetConnectionMode();
                switch (framingMode)
                {
                case FramingMode.Duplex:
                    OnDuplexConnection(modeReader);
                    break;

                case FramingMode.Singleton:
                    OnSingletonConnection(modeReader);
                    break;

                default:
                {
                    Exception inner = new InvalidDataException(SR.GetString(
                                                                   SR.FramingModeNotSupported, framingMode));
                    Exception exception = new ProtocolException(inner.Message, inner);
                    FramingEncodingString.AddFaultString(exception, FramingEncodingString.UnsupportedModeFault);
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception);
                }
                }
            }
            catch (ProtocolException exception)
            {
                DiagnosticUtility.TraceHandledException(exception, TraceEventType.Information);

                modeReader.Dispose();
            }
            catch (Exception exception)
            {
                if (Fx.IsFatal(exception))
                {
                    throw;
                }

                DiagnosticUtility.TraceHandledException(exception, TraceEventType.Error);

                // containment -- abort the errant reader
                modeReader.Dispose();
            }
        }
예제 #2
0
        public override int Decode(ReadOnlySequence <byte> buffer)
        {
            DecoderHelper.ValidateSize(buffer.Length);
            var data = buffer.First.Span;

            try
            {
                int bytesConsumed;
                switch (currentState)
                {
                case State.ReadingVersionRecord:
                    ValidateRecordType(FramingRecordType.Version, (FramingRecordType)data[0]);
                    currentState  = State.ReadingMajorVersion;
                    bytesConsumed = 1;
                    break;

                case State.ReadingMajorVersion:
                    majorVersion = data[0];
                    ValidateMajorVersion(majorVersion);
                    currentState  = State.ReadingMinorVersion;
                    bytesConsumed = 1;
                    break;

                case State.ReadingMinorVersion:
                    minorVersion  = data[0];
                    currentState  = State.ReadingModeRecord;
                    bytesConsumed = 1;
                    break;

                case State.ReadingModeRecord:
                    ValidateRecordType(FramingRecordType.Mode, (FramingRecordType)data[0]);
                    currentState  = State.ReadingModeValue;
                    bytesConsumed = 1;
                    break;

                case State.ReadingModeValue:
                    mode = (FramingMode)data[0];
                    ValidateFramingMode(mode);
                    currentState  = State.Done;
                    bytesConsumed = 1;
                    break;

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
                              CreateException(new InvalidDataException(SR.InvalidDecoderStateMachine)));
                }

                return(bytesConsumed);
            }
            catch (InvalidDataException e)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateException(e));
            }
        }
        public int Decode(byte[] bytes, int offset, int size)
        {
            int num2;

            DecoderHelper.ValidateSize(size);
            try
            {
                int num;
                switch (this.currentState)
                {
                case State.ReadingVersionRecord:
                    base.ValidateRecordType(FramingRecordType.Version, (FramingRecordType)bytes[offset]);
                    this.currentState = State.ReadingMajorVersion;
                    num = 1;
                    break;

                case State.ReadingMajorVersion:
                    this.majorVersion = bytes[offset];
                    base.ValidateMajorVersion(this.majorVersion);
                    this.currentState = State.ReadingMinorVersion;
                    num = 1;
                    break;

                case State.ReadingMinorVersion:
                    this.minorVersion = bytes[offset];
                    this.currentState = State.ReadingModeRecord;
                    num = 1;
                    break;

                case State.ReadingModeRecord:
                    base.ValidateRecordType(FramingRecordType.Mode, (FramingRecordType)bytes[offset]);
                    this.currentState = State.ReadingModeValue;
                    num = 1;
                    break;

                case State.ReadingModeValue:
                    this.mode = (FramingMode)bytes[offset];
                    base.ValidateFramingMode(this.mode);
                    this.currentState = State.Done;
                    num = 1;
                    break;

                default:
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(base.CreateException(new InvalidDataException(System.ServiceModel.SR.GetString("InvalidDecoderStateMachine"))));
                }
                base.StreamPosition += num;
                num2 = num;
            }
            catch (InvalidDataException exception)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(base.CreateException(exception));
            }
            return(num2);
        }
        public int Decode(byte[] bytes, int offset, int size)
        {
            int num2;
            DecoderHelper.ValidateSize(size);
            try
            {
                int num;
                switch (this.currentState)
                {
                    case State.ReadingVersionRecord:
                        base.ValidateRecordType(FramingRecordType.Version, (FramingRecordType) bytes[offset]);
                        this.currentState = State.ReadingMajorVersion;
                        num = 1;
                        break;

                    case State.ReadingMajorVersion:
                        this.majorVersion = bytes[offset];
                        base.ValidateMajorVersion(this.majorVersion);
                        this.currentState = State.ReadingMinorVersion;
                        num = 1;
                        break;

                    case State.ReadingMinorVersion:
                        this.minorVersion = bytes[offset];
                        this.currentState = State.ReadingModeRecord;
                        num = 1;
                        break;

                    case State.ReadingModeRecord:
                        base.ValidateRecordType(FramingRecordType.Mode, (FramingRecordType) bytes[offset]);
                        this.currentState = State.ReadingModeValue;
                        num = 1;
                        break;

                    case State.ReadingModeValue:
                        this.mode = (FramingMode) bytes[offset];
                        base.ValidateFramingMode(this.mode);
                        this.currentState = State.Done;
                        num = 1;
                        break;

                    default:
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(base.CreateException(new InvalidDataException(System.ServiceModel.SR.GetString("InvalidDecoderStateMachine"))));
                }
                base.StreamPosition += num;
                num2 = num;
            }
            catch (InvalidDataException exception)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(base.CreateException(exception));
            }
            return num2;
        }
 protected void ValidateFramingMode(FramingMode mode)
 {
     switch (mode)
     {
         case FramingMode.Singleton:
         case FramingMode.Duplex:
         case FramingMode.Simplex:
         case FramingMode.SingletonSized:
             return;
     }
     Exception exception = this.CreateException(new InvalidDataException(System.ServiceModel.SR.GetString("FramingModeNotSupported", new object[] { mode.ToString() })), "http://schemas.microsoft.com/ws/2006/05/framing/faults/UnsupportedMode");
     throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception);
 }
        protected void ValidateFramingMode(FramingMode mode)
        {
            switch (mode)
            {
            case FramingMode.Singleton:
            case FramingMode.Duplex:
            case FramingMode.Simplex:
            case FramingMode.SingletonSized:
                return;
            }
            Exception exception = this.CreateException(new InvalidDataException(System.ServiceModel.SR.GetString("FramingModeNotSupported", new object[] { mode.ToString() })), "http://schemas.microsoft.com/ws/2006/05/framing/faults/UnsupportedMode");

            throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception);
        }
예제 #7
0
        protected void ValidateFramingMode(FramingMode mode)
        {
            switch (mode)
            {
            case FramingMode.Singleton:
            case FramingMode.Duplex:
            case FramingMode.Simplex:
            case FramingMode.SingletonSized:
                break;

            default:
            {
                Exception exception = CreateException(new InvalidDataException(string.Format(
                                                                                   SRServiceModel.FramingModeNotSupported, mode.ToString())), FramingEncodingString.UnsupportedModeFault);
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception);
            }
            }
        }
예제 #8
0
        protected void ValidateFramingMode(FramingMode mode)
        {
            switch (mode)
            {
            case FramingMode.Singleton:
            case FramingMode.Duplex:
            case FramingMode.Simplex:
            case FramingMode.SingletonSized:
            {
                return;
            }

            default:
            {
                string    framingModeNotSupported = Resources.FramingModeNotSupported;
                object[]  str       = new object[] { mode.ToString() };
                Exception exception = this.CreateException(new InvalidDataException(Microsoft.ServiceBus.SR.GetString(framingModeNotSupported, str)), "http://schemas.microsoft.com/ws/2006/05/framing/faults/UnsupportedMode");
                throw Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception);
            }
            }
        }
예제 #9
0
        public int Decode(byte[] bytes, int offset, int size)
        {
            int num;
            int num1;

            DecoderHelper.ValidateSize(size);
            try
            {
                switch (this.currentState)
                {
                case ServerModeDecoder.State.ReadingVersionRecord:
                {
                    base.ValidateRecordType(FramingRecordType.Version, (FramingRecordType)bytes[offset]);
                    this.currentState = ServerModeDecoder.State.ReadingMajorVersion;
                    num = 1;
                    break;
                }

                case ServerModeDecoder.State.ReadingMajorVersion:
                {
                    this.majorVersion = bytes[offset];
                    base.ValidateMajorVersion(this.majorVersion);
                    this.currentState = ServerModeDecoder.State.ReadingMinorVersion;
                    num = 1;
                    break;
                }

                case ServerModeDecoder.State.ReadingMinorVersion:
                {
                    this.minorVersion = bytes[offset];
                    this.currentState = ServerModeDecoder.State.ReadingModeRecord;
                    num = 1;
                    break;
                }

                case ServerModeDecoder.State.ReadingModeRecord:
                {
                    base.ValidateRecordType(FramingRecordType.Mode, (FramingRecordType)bytes[offset]);
                    this.currentState = ServerModeDecoder.State.ReadingModeValue;
                    num = 1;
                    break;
                }

                case ServerModeDecoder.State.ReadingModeValue:
                {
                    this.mode = (FramingMode)bytes[offset];
                    base.ValidateFramingMode(this.mode);
                    this.currentState = ServerModeDecoder.State.Done;
                    num = 1;
                    break;
                }

                default:
                {
                    throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(base.CreateException(new InvalidDataException(Microsoft.ServiceBus.SR.GetString(Resources.InvalidDecoderStateMachine, new object[0]))));
                }
                }
                ServerModeDecoder streamPosition = this;
                streamPosition.StreamPosition = streamPosition.StreamPosition + (long)num;
                num1 = num;
            }
            catch (InvalidDataException invalidDataException)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(base.CreateException(invalidDataException));
            }
            return(num1);
        }
예제 #10
0
        public int Decode(byte[] bytes, int offset, int size)
        {
            DecoderHelper.ValidateSize(size);

            try
            {
                int bytesConsumed;
                switch (currentState)
                {
                    case State.ReadingVersionRecord:
                        ValidateRecordType(FramingRecordType.Version, (FramingRecordType)bytes[offset]);
                        currentState = State.ReadingMajorVersion;
                        bytesConsumed = 1;
                        break;
                    case State.ReadingMajorVersion:
                        majorVersion = bytes[offset];
                        ValidateMajorVersion(majorVersion);
                        currentState = State.ReadingMinorVersion;
                        bytesConsumed = 1;
                        break;
                    case State.ReadingMinorVersion:
                        minorVersion = bytes[offset];
                        currentState = State.ReadingModeRecord;
                        bytesConsumed = 1;
                        break;
                    case State.ReadingModeRecord:
                        ValidateRecordType(FramingRecordType.Mode, (FramingRecordType)bytes[offset]);
                        currentState = State.ReadingModeValue;
                        bytesConsumed = 1;
                        break;
                    case State.ReadingModeValue:
                        mode = (FramingMode)bytes[offset];
                        ValidateFramingMode(mode);
                        currentState = State.Done;
                        bytesConsumed = 1;
                        break;
                    default:
                        throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
                            CreateException(new InvalidDataException(SR.GetString(SR.InvalidDecoderStateMachine))));
                }

                StreamPosition += bytesConsumed;
                return bytesConsumed;
            }
            catch (InvalidDataException e)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(CreateException(e));
            }
        }
예제 #11
0
 protected void ValidateFramingMode(FramingMode mode)
 {
     switch (mode)
     {
         case FramingMode.Singleton:
         case FramingMode.Duplex:
         case FramingMode.Simplex:
         case FramingMode.SingletonSized:
             break;
         default:
             {
                 Exception exception = CreateException(new InvalidDataException(SR.GetString(
                     SR.FramingModeNotSupported, mode.ToString())), FramingEncodingString.UnsupportedModeFault);
                 throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(exception);
             }
     }
 }