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)); }
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)); }
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; }
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)); }
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 int CalcStartSize(EncodedVia via, EncodedContentType contentType) { return(via.EncodedBytes.Length + contentType.EncodedBytes.Length); }