Beispiel #1
0
        private ArraySegment <byte> CreatePreamble()
        {
            EncodedVia         encodedVia         = new EncodedVia(this.Via.AbsoluteUri);
            EncodedContentType encodedContentType = EncodedContentType.Create(this.MessageEncoder.ContentType);

            // calculate preamble length
            int startSize         = ClientDuplexEncoder.ModeBytes.Length + SessionEncoder.CalcStartSize(encodedVia, encodedContentType);
            int preambleEndOffset = 0;

            if (_upgrade == null)
            {
                preambleEndOffset = startSize;
                startSize        += ClientDuplexEncoder.PreambleEndBytes.Length;
            }

            byte[] startBytes = Fx.AllocateByteArray(startSize);
            Buffer.BlockCopy(ClientDuplexEncoder.ModeBytes, 0, startBytes, 0, ClientDuplexEncoder.ModeBytes.Length);
            SessionEncoder.EncodeStart(startBytes, ClientDuplexEncoder.ModeBytes.Length, encodedVia, encodedContentType);
            if (preambleEndOffset > 0)
            {
                Buffer.BlockCopy(ClientDuplexEncoder.PreambleEndBytes, 0, startBytes, preambleEndOffset, ClientDuplexEncoder.PreambleEndBytes.Length);
            }

            return(new ArraySegment <byte>(startBytes, 0, startSize));
        }
        private ArraySegment <byte> EncodeSessionPreamble()
        {
            EncodedVia         via         = new EncodedVia(this.Via.AbsoluteUri);
            EncodedContentType contentType = EncodedContentType.Create(this.encoder.ContentType);
            int bufferSize = (ClientSimplexEncoder.ModeBytes.Length + SessionEncoder.CalcStartSize(via, contentType)) + SessionEncoder.PreambleEndBytes.Length;

            byte[] dst = this.Factory.BufferManager.TakeBuffer(bufferSize);
            Buffer.BlockCopy(ClientSimplexEncoder.ModeBytes, 0, dst, 0, ClientSimplexEncoder.ModeBytes.Length);
            SessionEncoder.EncodeStart(dst, ClientSimplexEncoder.ModeBytes.Length, via, contentType);
            Buffer.BlockCopy(SessionEncoder.PreambleEndBytes, 0, dst, bufferSize - SessionEncoder.PreambleEndBytes.Length, SessionEncoder.PreambleEndBytes.Length);
            return(new ArraySegment <byte>(dst, 0, bufferSize));
        }
Beispiel #3
0
        ArraySegment <byte> EncodeSessionPreamble()
        {
            EncodedVia         encodedVia         = new EncodedVia(this.Via.AbsoluteUri);
            EncodedContentType encodedContentType = EncodedContentType.Create(this.encoder.ContentType);

            int startSize = ClientSimplexEncoder.ModeBytes.Length
                            + SessionEncoder.CalcStartSize(encodedVia, encodedContentType)
                            + ClientSimplexEncoder.PreambleEndBytes.Length;

            byte[] startBytes = this.Factory.BufferManager.TakeBuffer(startSize);
            Buffer.BlockCopy(ClientSimplexEncoder.ModeBytes, 0, startBytes, 0, ClientSimplexEncoder.ModeBytes.Length);
            SessionEncoder.EncodeStart(startBytes, ClientSimplexEncoder.ModeBytes.Length, encodedVia, encodedContentType);
            Buffer.BlockCopy(ClientSimplexEncoder.PreambleEndBytes, 0, startBytes, startSize - ClientSimplexEncoder.PreambleEndBytes.Length, ClientSimplexEncoder.PreambleEndBytes.Length);

            return(new ArraySegment <byte>(startBytes, 0, startSize));
        }
Beispiel #4
0
        public MsmqOutputChannel(MsmqChannelFactory <IOutputChannel> factory, EndpointAddress to, Uri via, bool manualAddressing) : base(factory, to, via, manualAddressing, factory.MessageVersion)
        {
            byte[]             modeBytes   = ClientSingletonSizedEncoder.ModeBytes;
            EncodedVia         via2        = new EncodedVia(this.Via.AbsoluteUri);
            EncodedContentType contentType = EncodedContentType.Create(factory.MessageEncoderFactory.Encoder.ContentType);

            this.preamble = DiagnosticUtility.Utility.AllocateByteArray(modeBytes.Length + ClientSingletonSizedEncoder.CalcStartSize(via2, contentType));
            Buffer.BlockCopy(modeBytes, 0, this.preamble, 0, modeBytes.Length);
            ClientSingletonSizedEncoder.EncodeStart(this.preamble, modeBytes.Length, via2, contentType);
            this.outputMessages = new SynchronizedDisposablePool <MsmqOutputMessage <IOutputChannel> >(factory.MaxPoolSize);
            if (factory.IsMsmqX509SecurityConfigured)
            {
                this.certificateTokenProvider = factory.CreateX509TokenProvider(to, via);
            }
            this.factory = factory;
        }
Beispiel #5
0
        private ArraySegment <byte> CreatePreamble()
        {
            EncodedVia         via         = new EncodedVia(this.Via.AbsoluteUri);
            EncodedContentType contentType = EncodedContentType.Create(base.MessageEncoder.ContentType);
            int size      = ClientDuplexEncoder.ModeBytes.Length + SessionEncoder.CalcStartSize(via, contentType);
            int dstOffset = 0;

            if (this.upgrade == null)
            {
                dstOffset = size;
                size     += SessionEncoder.PreambleEndBytes.Length;
            }
            byte[] dst = DiagnosticUtility.Utility.AllocateByteArray(size);
            Buffer.BlockCopy(ClientDuplexEncoder.ModeBytes, 0, dst, 0, ClientDuplexEncoder.ModeBytes.Length);
            SessionEncoder.EncodeStart(dst, ClientDuplexEncoder.ModeBytes.Length, via, contentType);
            if (dstOffset > 0)
            {
                Buffer.BlockCopy(SessionEncoder.PreambleEndBytes, 0, dst, dstOffset, SessionEncoder.PreambleEndBytes.Length);
            }
            return(new ArraySegment <byte>(dst, 0, size));
        }
Beispiel #6
0
        protected override void OnOpened()
        {
            EncodedVia         via         = new EncodedVia(base.Via.AbsoluteUri);
            EncodedContentType contentType = EncodedContentType.Create(this.settings.MessageEncoderFactory.Encoder.ContentType);
            int size      = ClientSingletonEncoder.ModeBytes.Length + ClientSingletonEncoder.CalcStartSize(via, contentType);
            int dstOffset = 0;

            if (this.upgrade == null)
            {
                dstOffset = size;
                size     += SessionEncoder.PreambleEndBytes.Length;
            }
            this.startBytes = DiagnosticUtility.Utility.AllocateByteArray(size);
            Buffer.BlockCopy(ClientSingletonEncoder.ModeBytes, 0, this.startBytes, 0, ClientSingletonEncoder.ModeBytes.Length);
            ClientSingletonEncoder.EncodeStart(this.startBytes, ClientSingletonEncoder.ModeBytes.Length, via, contentType);
            if (dstOffset > 0)
            {
                Buffer.BlockCopy(ClientSingletonEncoder.PreambleEndBytes, 0, this.startBytes, dstOffset, ClientSingletonEncoder.PreambleEndBytes.Length);
            }
            base.OnOpened();
        }
        protected override void OnOpened()
        {
            // setup our preamble which we'll use for all connections we establish
            EncodedVia         encodedVia         = new EncodedVia(this.Via.AbsoluteUri);
            EncodedContentType encodedContentType = EncodedContentType.Create(_settings.MessageEncoderFactory.Encoder.ContentType);
            int startSize         = ClientSingletonEncoder.ModeBytes.Length + ClientSingletonEncoder.CalcStartSize(encodedVia, encodedContentType);
            int preambleEndOffset = 0;

            if (_upgrade == null)
            {
                preambleEndOffset = startSize;
                startSize        += ClientDuplexEncoder.PreambleEndBytes.Length;
            }
            _startBytes = Fx.AllocateByteArray(startSize);
            Buffer.BlockCopy(ClientSingletonEncoder.ModeBytes, 0, _startBytes, 0, ClientSingletonEncoder.ModeBytes.Length);
            ClientSingletonEncoder.EncodeStart(_startBytes, ClientSingletonEncoder.ModeBytes.Length, encodedVia, encodedContentType);
            if (preambleEndOffset > 0)
            {
                Buffer.BlockCopy(ClientSingletonEncoder.PreambleEndBytes, 0, _startBytes, preambleEndOffset, ClientSingletonEncoder.PreambleEndBytes.Length);
            }

            // and then transition to the Opened state
            base.OnOpened();
        }
 public static void EncodeStart(byte[] buffer, int offset, EncodedVia via, EncodedContentType contentType)
 {
     Buffer.BlockCopy(via.EncodedBytes, 0, buffer, offset, via.EncodedBytes.Length);
     Buffer.BlockCopy(contentType.EncodedBytes, 0, buffer, offset + via.EncodedBytes.Length, contentType.EncodedBytes.Length);
 }
 public static int CalcStartSize(EncodedVia via, EncodedContentType contentType)
 {
     return via.EncodedBytes.Length + contentType.EncodedBytes.Length;
 }
 public static void EncodeStart(byte[] buffer, int offset, EncodedVia via, EncodedContentType contentType)
 {
     Buffer.BlockCopy(via.EncodedBytes, 0, buffer, offset, via.EncodedBytes.Length);
     Buffer.BlockCopy(contentType.EncodedBytes, 0, buffer, offset + via.EncodedBytes.Length, contentType.EncodedBytes.Length);
 }
 public static int CalcStartSize(EncodedVia via, EncodedContentType contentType)
 {
     return(via.EncodedBytes.Length + contentType.EncodedBytes.Length);
 }