Beispiel #1
0
 protected override bool DecodeBytes(byte[] buffer, ref int offset, ref int size, ref bool isAtEof)
 {
     while (size > 0)
     {
         int num = this.connectionPoolHelper.Decoder.Decode(buffer, offset, size);
         if (num > 0)
         {
             offset = offset + num;
             size   = size - num;
         }
         Microsoft.ServiceBus.Channels.ClientFramingDecoderState currentState = this.connectionPoolHelper.Decoder.CurrentState;
         if (currentState == Microsoft.ServiceBus.Channels.ClientFramingDecoderState.EnvelopeStart)
         {
             return(true);
         }
         if (currentState == Microsoft.ServiceBus.Channels.ClientFramingDecoderState.End)
         {
             isAtEof = true;
             return(false);
         }
     }
     return(false);
 }
Beispiel #2
0
        protected override Message DecodeMessage(byte[] buffer, ref int offset, ref int size, ref bool isAtEOF, TimeSpan timeout)
        {
            while (size > 0)
            {
                int num = this.decoder.Decode(buffer, offset, size);
                if (num > 0)
                {
                    if (base.EnvelopeBuffer != null)
                    {
                        if (!object.ReferenceEquals(buffer, base.EnvelopeBuffer))
                        {
                            Buffer.BlockCopy(buffer, offset, base.EnvelopeBuffer, base.EnvelopeOffset, num);
                        }
                        Microsoft.ServiceBus.Channels.ClientDuplexConnectionReader envelopeOffset = this;
                        envelopeOffset.EnvelopeOffset = envelopeOffset.EnvelopeOffset + num;
                    }
                    offset = offset + num;
                    size   = size - num;
                }
                Microsoft.ServiceBus.Channels.ClientFramingDecoderState currentState = this.decoder.CurrentState;
                if (currentState == Microsoft.ServiceBus.Channels.ClientFramingDecoderState.Fault)
                {
                    this.channel.Session.CloseOutputSession(((IDefaultCommunicationTimeouts)this.channel).CloseTimeout);
                    throw Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.ThrowHelperError(Microsoft.ServiceBus.Channels.FaultStringDecoder.GetFaultException(this.decoder.Fault, this.channel.RemoteAddress.Uri.AbsoluteUri, this.messageEncoder.ContentType));
                }
                switch (currentState)
                {
                case Microsoft.ServiceBus.Channels.ClientFramingDecoderState.EnvelopeStart:
                {
                    int envelopeSize = this.decoder.EnvelopeSize;
                    if (envelopeSize > this.maxBufferSize)
                    {
                        throw Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.ThrowHelperError(Microsoft.ServiceBus.Channels.MaxMessageSizeStream.CreateMaxReceivedMessageSizeExceededException((long)this.maxBufferSize));
                    }
                    base.EnvelopeBuffer = this.bufferManager.TakeBuffer(envelopeSize);
                    base.EnvelopeOffset = 0;
                    base.EnvelopeSize   = envelopeSize;
                    continue;
                }

                case Microsoft.ServiceBus.Channels.ClientFramingDecoderState.EnvelopeEnd:
                {
                    if (base.EnvelopeBuffer == null)
                    {
                        continue;
                    }
                    Message message = null;
                    try
                    {
                        using (IDisposable disposable = Microsoft.ServiceBus.Channels.ClientDuplexConnectionReader.CreateProcessActionActivity())
                        {
                            message = this.messageEncoder.ReadMessage(new ArraySegment <byte>(base.EnvelopeBuffer, 0, base.EnvelopeSize), this.bufferManager);
                        }
                    }
                    catch (XmlException xmlException1)
                    {
                        XmlException xmlException = xmlException1;
                        throw Microsoft.ServiceBus.Diagnostics.DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ProtocolException(Microsoft.ServiceBus.SR.GetString(Resources.MessageXmlProtocolError, new object[0]), xmlException));
                    }
                    base.EnvelopeBuffer = null;
                    return(message);
                }

                case Microsoft.ServiceBus.Channels.ClientFramingDecoderState.End:
                {
                    isAtEOF = true;
                    return(null);
                }

                default:
                {
                    continue;
                }
                }
            }
            return(null);
        }