public TcpSocketRioSession( TcpSocketRioServerConfiguration configuration, IBufferManager bufferManager, RioConnectionOrientedSocket socket, ITcpSocketRioServerMessageDispatcher dispatcher, TcpSocketRioServer server) { if (configuration == null) throw new ArgumentNullException("configuration"); if (bufferManager == null) throw new ArgumentNullException("bufferManager"); if (socket == null) throw new ArgumentNullException("socket"); if (dispatcher == null) throw new ArgumentNullException("dispatcher"); if (server == null) throw new ArgumentNullException("server"); _configuration = configuration; _bufferManager = bufferManager; _socket = socket; _dispatcher = dispatcher; _server = server; _sessionKey = Guid.NewGuid().ToString(); this.StartTime = DateTime.UtcNow; _receiveBuffer = _bufferManager.BorrowBuffer(); _sessionBuffer = _bufferManager.BorrowBuffer(); _sessionBufferCount = 0; _stream = new RioStream(_socket); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialPooledBufferCount, _configuration.ReceiveBufferSize); _keepAliveTracker = KeepAliveTracker.Create(KeepAliveInterval, new TimerCallback((s) => OnKeepAlive())); _keepAliveTimeoutTimer = new Timer(new TimerCallback((s) => OnKeepAliveTimeout()), null, Timeout.Infinite, Timeout.Infinite); _closingTimeoutTimer = new Timer(new TimerCallback((s) => OnCloseTimeout()), null, Timeout.Infinite, Timeout.Infinite); }
public override bool Start() { try { var config = AppServer.Config; int bufferSize = config.ReceiveBufferSize; if (bufferSize <= 0) bufferSize = 1024 * 4; m_BufferManager = AppServer.BufferManager; var initialCount = Math.Min(Math.Max(config.MaxConnectionNumber / 15, 100), config.MaxConnectionNumber); m_SaePool = new IntelliPool<SocketAsyncEventArgs>(initialCount, new SaeCreator(m_BufferManager, bufferSize)); if (!base.Start()) return false; IsRunning = true; return true; } catch (Exception e) { AppServer.Logger.Error(e); return false; } }
public TcpSocketSession( TcpClient tcpClient, TcpSocketServerConfiguration configuration, IBufferManager bufferManager, TcpSocketServer server) { if (tcpClient == null) throw new ArgumentNullException("tcpClient"); if (configuration == null) throw new ArgumentNullException("configuration"); if (bufferManager == null) throw new ArgumentNullException("bufferManager"); if (server == null) throw new ArgumentNullException("server"); _tcpClient = tcpClient; _configuration = configuration; _bufferManager = bufferManager; _server = server; _sessionKey = Guid.NewGuid().ToString(); this.StartTime = DateTime.UtcNow; ConfigureClient(); _remoteEndPoint = Active ? (IPEndPoint)_tcpClient.Client.RemoteEndPoint : null; _localEndPoint = Active ? (IPEndPoint)_tcpClient.Client.LocalEndPoint : null; }
public AsyncTcpSocketSession( TcpClient tcpClient, AsyncTcpSocketServerConfiguration configuration, IBufferManager bufferManager, IAsyncTcpSocketServerMessageDispatcher dispatcher, AsyncTcpSocketServer server) { if (tcpClient == null) throw new ArgumentNullException("tcpClient"); if (configuration == null) throw new ArgumentNullException("configuration"); if (bufferManager == null) throw new ArgumentNullException("bufferManager"); if (dispatcher == null) throw new ArgumentNullException("dispatcher"); if (server == null) throw new ArgumentNullException("server"); _tcpClient = tcpClient; _configuration = configuration; _bufferManager = bufferManager; _dispatcher = dispatcher; _server = server; _sessionKey = Guid.NewGuid().ToString(); this.StartTime = DateTime.UtcNow; _remoteEndPoint = (_tcpClient != null && _tcpClient.Client.Connected) ? (IPEndPoint)_tcpClient.Client.RemoteEndPoint : null; _localEndPoint = (_tcpClient != null && _tcpClient.Client.Connected) ? (IPEndPoint)_tcpClient.Client.LocalEndPoint : null; }
public TcpSocketSaeaSession( TcpSocketSaeaServerConfiguration configuration, IBufferManager bufferManager, SaeaPool saeaPool, ITcpSocketSaeaServerMessageDispatcher dispatcher, TcpSocketSaeaServer server) { if (configuration == null) throw new ArgumentNullException("configuration"); if (bufferManager == null) throw new ArgumentNullException("bufferManager"); if (saeaPool == null) throw new ArgumentNullException("saeaPool"); if (dispatcher == null) throw new ArgumentNullException("dispatcher"); if (server == null) throw new ArgumentNullException("server"); _configuration = configuration; _bufferManager = bufferManager; _saeaPool = saeaPool; _dispatcher = dispatcher; _server = server; _receiveBuffer = _bufferManager.BorrowBuffer(); _receiveBufferOffset = 0; }
public WebSocketContext(ICommunicationChannel channel, IBufferManager bufferManager) { BufferManager = bufferManager; Channel = channel; var session = channel as IAppSession; if (session != null) session.Items.Add(c_WebSocketContextKey, this); }
public TcpPacketizer(IBufferManager bufferManager) { if(bufferManager == null) throw new ArgumentNullException("bufferManager"); _headBuffer = new byte[HEAD_LENGTH]; _bufferManager = bufferManager; _bufferEvaluator = BufferEvaluator.Default; _bufferStates = new Dictionary<long, BufferState>(); }
/// <summary> /// Initializes a new instance of the MultiBufferMemoryStream class with provided IBufferManager. /// </summary> /// <param name="bufferManager">A reference to the IBufferManager for the stream to use to acquire and return buffers. May be null.</param> /// <param name="bufferSize">The Buffer size to use for each block, default is 64 KB. Note this parameter is disregarded when a IBufferManager is specified.</param> public MultiBufferMemoryStream(IBufferManager bufferManager, int bufferSize = MultiBufferMemoryStream.DefaultSmallBufferSize) { this.bufferManager = bufferManager; this.bufferSize = this.bufferManager == null ? bufferSize : this.bufferManager.GetDefaultBufferSize(); if (bufferSize <= 0) { throw new ArgumentOutOfRangeException("bufferSize", "Buffer size must be a positive, non-zero value"); } }
public WorkerManager( IBufferManager bufferManager, TimeSpan timeout, ILogger logger) { _bufferManager = bufferManager; // create worker pool _workerPool = new ConcurrentStack<Worker>( Enumerable.Range(0, bufferManager.MaximumAllocations) .Select(i => new Worker(timeout, logger))); }
protected listener_test_base( TestSettings settings = null) { Settings = settings ?? new TestSettings(); var ipHostInfo = Dns.GetHostEntry(Dns.GetHostName()); _ipAddress = ipHostInfo.AddressList[1]; _manager = new BufferManager(Settings.MaxConnections, Settings.BufferSize); var workerFactory = new WorkerManager(_manager, Settings.Timeout, null); _listener = new Listener( new ListenerSettings(_ipAddress, ++_port), s => workerFactory.Get(new WorkerSocket(s))); _listener.Start(); }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, TableOperation operation, OperationContext ctx) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, ctx); if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { // post tunnelling msg.Headers.Add("X-HTTP-Method", "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { if (operation.Entity.ETag != null) { msg.Headers.Add("If-Match", operation.Entity.ETag); } } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace) { // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = ODataVersion.V2 // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataWriter writer = odataWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, writer); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); } return new Tuple<HttpWebRequest, Stream>(msg, null); }
public static void AppendBuffer(IBufferManager bufferManager, ref byte[] receiveBuffer, int receiveCount, ref byte[] sessionBuffer, ref int sessionBufferCount) { if (sessionBuffer.Length < (sessionBufferCount + receiveCount)) { byte[] autoExpandedBuffer = bufferManager.BorrowBuffer(); if (autoExpandedBuffer.Length < (sessionBufferCount + receiveCount) * 2) { bufferManager.ReturnBuffer(autoExpandedBuffer); autoExpandedBuffer = new byte[(sessionBufferCount + receiveCount) * 2]; } Array.Copy(sessionBuffer, 0, autoExpandedBuffer, 0, sessionBufferCount); var discardBuffer = sessionBuffer; sessionBuffer = autoExpandedBuffer; bufferManager.ReturnBuffer(discardBuffer); } Array.Copy(receiveBuffer, 0, sessionBuffer, sessionBufferCount, receiveCount); sessionBufferCount = sessionBufferCount + receiveCount; }
public static void ShiftBuffer(IBufferManager bufferManager, int shiftStart, ref byte[] sessionBuffer, ref int sessionBufferCount) { if ((sessionBufferCount - shiftStart) < shiftStart) { Array.Copy(sessionBuffer, shiftStart, sessionBuffer, 0, sessionBufferCount - shiftStart); sessionBufferCount = sessionBufferCount - shiftStart; } else { byte[] copyBuffer = bufferManager.BorrowBuffer(); if (copyBuffer.Length < (sessionBufferCount - shiftStart)) { bufferManager.ReturnBuffer(copyBuffer); copyBuffer = new byte[sessionBufferCount - shiftStart]; } Array.Copy(sessionBuffer, shiftStart, copyBuffer, 0, sessionBufferCount - shiftStart); Array.Copy(copyBuffer, 0, sessionBuffer, 0, sessionBufferCount - shiftStart); sessionBufferCount = sessionBufferCount - shiftStart; bufferManager.ReturnBuffer(copyBuffer); } }
public static void ReplaceBuffer(IBufferManager bufferManager, ref byte[] receiveBuffer, ref int receiveBufferOffset, int receiveCount) { if ((receiveBufferOffset + receiveCount) < receiveBuffer.Length) { receiveBufferOffset = receiveBufferOffset + receiveCount; } else { byte[] autoExpandedBuffer = bufferManager.BorrowBuffer(); if (autoExpandedBuffer.Length < (receiveBufferOffset + receiveCount) * 2) { bufferManager.ReturnBuffer(autoExpandedBuffer); autoExpandedBuffer = new byte[(receiveBufferOffset + receiveCount) * 2]; } Array.Copy(receiveBuffer, 0, autoExpandedBuffer, 0, receiveBufferOffset + receiveCount); receiveBufferOffset = receiveBufferOffset + receiveCount; var discardBuffer = receiveBuffer; receiveBuffer = autoExpandedBuffer; bufferManager.ReturnBuffer(discardBuffer); } }
public AsyncWebSocketSession( TcpClient tcpClient, AsyncWebSocketServerConfiguration configuration, IBufferManager bufferManager, AsyncWebSocketRouteResolver routeResolver, AsyncWebSocketServer server) { if (tcpClient == null) throw new ArgumentNullException("tcpClient"); if (configuration == null) throw new ArgumentNullException("configuration"); if (bufferManager == null) throw new ArgumentNullException("bufferManager"); if (routeResolver == null) throw new ArgumentNullException("routeResolver"); if (server == null) throw new ArgumentNullException("server"); _tcpClient = tcpClient; _configuration = configuration; _bufferManager = bufferManager; _routeResolver = routeResolver; _server = server; _sessionKey = Guid.NewGuid().ToString(); this.StartTime = DateTime.UtcNow; _remoteEndPoint = (_tcpClient != null && _tcpClient.Client.Connected) ? (IPEndPoint)_tcpClient.Client.RemoteEndPoint : null; _localEndPoint = (_tcpClient != null && _tcpClient.Client.Connected) ? (IPEndPoint)_tcpClient.Client.LocalEndPoint : null; _keepAliveTracker = KeepAliveTracker.Create(KeepAliveInterval, new TimerCallback((s) => OnKeepAlive())); _keepAliveTimeoutTimer = new Timer(new TimerCallback((s) => OnKeepAliveTimeout()), null, Timeout.Infinite, Timeout.Infinite); _closingTimeoutTimer = new Timer(new TimerCallback((s) => OnCloseTimeout()), null, Timeout.Infinite, Timeout.Infinite); }
internal static Tuple <HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int?timeout, TableOperation operation, OperationContext ctx) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, ctx); if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { // post tunnelling msg.Headers.Add("X-HTTP-Method", "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { if (operation.Entity.ETag != null) { msg.Headers.Add("If-Match", operation.Entity.ETag); } } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace) { // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = ODataVersion.V2 // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataWriter writer = odataWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, writer); return(new Tuple <HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream())); } return(new Tuple <HttpWebRequest, Stream>(msg, null)); }
/// <summary> /// Initializes a new instance of HttpRequestAdapterMessage. /// </summary> /// <param name="msg">The message to adapt.</param> /// <param name="bufferManager">The <see cref="IBufferManager"/> to use to acquire and return buffers for the stream. May be <c>null</c>.</param> /// <param name="bufferSize">The buffer size to use for each block. The default size is 64 KB. Note that this parameter is disregarded when an <see cref="IBufferManager"/> is specified.</param> public HttpRequestAdapterMessage(StorageRequestMessage msg, IBufferManager bufferManager, int bufferSize) { this.msg = msg; this.outStr = new MultiBufferMemoryStream(bufferManager, bufferSize); this.content = new StreamContent(this.outStr); }
private void Release() { _buffer?.Dispose(); _editor = null; _buffer = null; }
public void CreateNew() { Release(); _buffer = BufferManagerFactory.CreateInMemory(); InitBuffer(); }
public Role(PerfArguments perfArgs) { this.bufferManager = perfArgs.BufferPooling ? new BufferManager(256, 2 * 1024 * 1024, 100 * 1024 * 1024) : null; this.perfArgs = perfArgs; this.count = perfArgs.Count; this.progress = perfArgs.Progress; this.completedEvent = new ManualResetEvent(false); }
public DeflateCompression(int initialPooledBufferCount, int bufferSize) { _bufferAllocator = new GrowingByteBufferManager(initialPooledBufferCount, bufferSize); }
// called by listener public TcpTransport(Socket socket, IBufferManager bufferManager) : this(bufferManager) { this.socketTransport = new TcpSocket(this, socket); this.writer = new Writer(this, this.socketTransport); }
public BufferStateCreator(IPool <BufferState> pool, IBufferManager bufferManager, int bufferSize) { m_Pool = pool; m_BufferManager = bufferManager; m_BufferSize = bufferSize; }
public BufferStateItemEnumerable(IPool <BufferState> pool, IBufferManager bufferManager, int bufferSize, int count) { m_BufferManager = bufferManager; m_BufferSize = bufferSize; m_Count = count; }
public AsyncPump(IBufferManager bufferManager, IAsyncTransport transport) { this.bufferManager = bufferManager; this.transport = transport; }
public HttpWebRequestAdapterMessage(HttpWebRequest msg, IBufferManager buffManager) { this.msg = msg; this.outStr = new MultiBufferMemoryStream(buffManager); }
public RedisStreamReader(Stream stream, IBufferManager bufferManager) : base(bufferManager) { _stream = stream; }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialPooledBufferCount, _configuration.ReceiveBufferSize); _routeResolver = new AsyncWebSocketRouteResolver(_catalog); }
internal static Tuple <HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int?timeout, Uri baseUri, string tableName, TableBatchOperation batch, OperationContext ctx) { HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToUri(uri, "$batch"), builder, "POST", timeout, ctx); // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = ODataVersion.V2 // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); // Start Batch ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve; // Query operations should not be inside changeset in payload if (!isQuery) { // Start Operation batchWriter.WriteStartChangeset(); batchWriter.Flush(); } foreach (TableOperation operation in batch) { string httpMethod = operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge ? "MERGE" : operation.HttpMethod; ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(baseUri, tableName)); // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { mimePartMsg.SetHeader("If-Match", operation.Entity.ETag); } if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve) { using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings)) { // Write entity ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter); } } } if (!isQuery) { // End Operation batchWriter.WriteEndChangeset(); } // End Batch batchWriter.WriteEndBatch(); batchWriter.Flush(); return(new Tuple <HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream())); }
// Summary: // Initializes a new instance of the System.Net.Http.HttpRequestMessage class. public HttpRequestAdapterMessage(HttpRequestMessage msg, IBufferManager bufferManager, int bufferSize) { this.msg = msg; this.outStr = new MultiBufferMemoryStream(bufferManager, bufferSize); this.content = new StreamContent(this.outStr); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialPooledBufferCount, _configuration.ReceiveBufferSize); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialBufferAllocationCount, _configuration.ReceiveBufferSize); _acceptSaeaPool = new SaeaPool(16, 32, () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); _handleSaeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return(saea); }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); _sessionPool = new SessionPool(1024, int.MaxValue, () => { var session = new TcpSocketSaeaSession(_configuration, _bufferManager, _handleSaeaPool, _dispatcher, this); return(session); }, (session) => { try { session.Clear(); } catch (Exception ex) { _log.Error(ex.Message, ex); } }); }
internal static ByteBuffer GetByteBuffer(this IBufferManager bufferManager, int size) { return(new ByteBuffer(size, true)); }
public TcpTransport(IBufferManager bufferManager) { this.bufferManager = bufferManager; }
public void AttachToBuffer(byte[] buffer, int startIndex = 0, int length = 0) { _buffer = BufferManagerFactory.CreateInMemory(buffer.Skip(startIndex).Take(length == 0 ? buffer.Length : length)); InitBuffer(); }
// called by listener public TcpTransport(SslStream sslStream, IBufferManager bufferManager) : this(bufferManager) { this.socketTransport = new SslSocket(this, sslStream); this.writer = new Writer(this, this.socketTransport); }
internal static Tuple <HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int?timeout, string tableName, TableBatchOperation batch, bool useVersionHeader, OperationContext ctx, TableRequestOptions options) { HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToSingleUri(uri, "$batch"), builder, "POST", timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); MultiBufferMemoryStream batchContentStream = new MultiBufferMemoryStream(bufferManager); using (StreamWriter contentWriter = new StreamWriter(new NonCloseableStream(batchContentStream))) { string batchID = Guid.NewGuid().ToString(); string changesetID = Guid.NewGuid().ToString(); msg.Headers.Add(Constants.HeaderConstants.DataServiceVersion, Constants.HeaderConstants.DataServiceVersionValue); msg.ContentType = Constants.BatchBoundaryMarker + batchID; string batchSeparator = Constants.BatchSeparator + batchID; string changesetSeparator = Constants.ChangesetSeparator + changesetID; string acceptHeader = "Accept: "; switch (payloadFormat) { case TablePayloadFormat.Json: acceptHeader = acceptHeader + Constants.JsonLightAcceptHeaderValue; break; case TablePayloadFormat.JsonFullMetadata: acceptHeader = acceptHeader + Constants.JsonFullMetadataAcceptHeaderValue; break; case TablePayloadFormat.JsonNoMetadata: acceptHeader = acceptHeader + Constants.JsonNoMetadataAcceptHeaderValue; break; } contentWriter.WriteLine(batchSeparator); bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve; // Query operations should not be inside changeset in payload if (!isQuery) { // Start Operation contentWriter.WriteLine(Constants.ChangesetBoundaryMarker + changesetID); contentWriter.WriteLine(); } foreach (TableOperation operation in batch) { string httpMethod = operation.HttpMethod; if (operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge) { options.AssertNoEncryptionPolicyOrStrictMode(); httpMethod = "MERGE"; } if (operation.OperationType == TableOperationType.RotateEncryptionKey) { httpMethod = "MERGE"; } if (!isQuery) { contentWriter.WriteLine(changesetSeparator); } contentWriter.WriteLine(Constants.ContentTypeApplicationHttp); contentWriter.WriteLine(Constants.ContentTransferEncodingBinary); contentWriter.WriteLine(); string tableURI = Uri.EscapeUriString(operation.GenerateRequestURI(uri, tableName).ToString()); // "EscapeUriString" is almost exactly what we need, except that it contains special logic for // the percent sign, which results in an off-by-one error in the number of times "%" is encoded. // This corrects for that. tableURI = tableURI.Replace(@"%25", @"%"); contentWriter.WriteLine(httpMethod + " " + tableURI + " " + Constants.HTTP1_1); contentWriter.WriteLine(acceptHeader); contentWriter.WriteLine(Constants.ContentTypeApplicationJson); if (operation.OperationType == TableOperationType.Insert) { contentWriter.WriteLine(Constants.HeaderConstants.Prefer + @": " + (operation.EchoContent ? Constants.HeaderConstants.PreferReturnContent : Constants.HeaderConstants.PreferReturnNoContent)); } contentWriter.WriteLine(Constants.HeaderConstants.DataServiceVersion + ": " + Constants.HeaderConstants.DataServiceVersionValue); // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.RotateEncryptionKey) { contentWriter.WriteLine(Constants.HeaderConstants.IfMatch + @": " + operation.ETag); } contentWriter.WriteLine(); if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve) { using (JsonTextWriter jsonWriter = new JsonTextWriter(contentWriter)) { jsonWriter.CloseOutput = false; WriteEntityContent(operation, ctx, options, jsonWriter); } contentWriter.WriteLine(); } } if (!isQuery) { contentWriter.WriteLine(changesetSeparator + "--"); } contentWriter.WriteLine(batchSeparator + "--"); } batchContentStream.Seek(0, SeekOrigin.Begin); msg.ContentLength = batchContentStream.Length; return(new Tuple <HttpWebRequest, Stream>(msg, batchContentStream)); }
internal ByteBuffer Encode(IBufferManager bufferManager, int reservedBytes) { // get some extra space to store the frame header // and the transfer command. int size = reservedBytes + this.GetEstimatedMessageSize(); ByteBuffer buffer = bufferManager.GetByteBuffer(size); buffer.AdjustPosition(buffer.Offset + reservedBytes, 0); this.WriteToBuffer(buffer); return buffer; }
public override void Stop() { if (IsStopped) return; lock (SyncRoot) { if (IsStopped) return; base.Stop(); m_BufferManager = null; IsRunning = false; } }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialBufferAllocationCount, _configuration.ReceiveBufferSize); int pipeLineDeph = 16; int connections = 1024; _sendPool = new RioFixedBufferPool(10 * connections, 140 * pipeLineDeph); _receivePool = new RioFixedBufferPool(10 * connections, 128 * pipeLineDeph); _listener = new RioTcpListener(_sendPool, _receivePool, 1024); _listener.OnAccepted = (acceptedSocket) => { Task.Run(async () => { await Process(acceptedSocket); }) .Forget(); }; }
public StreamHandler(Socket socket, IBufferManager bufferManager) { this.Socket = socket; this.BufferManager = bufferManager; }
private static async Task CheckInAfterWait(ArraySegment <byte> buffer, IBufferManager bufferManager) { await Task.Delay(3000); bufferManager.CheckIn(buffer); }
public ConcurrentProxy(IBufferManager <T> bufferManager) { _bufferManager = bufferManager; }
internal static Tuple <HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int?timeout, TableOperation operation, OperationContext ctx, TablePayloadFormat payloadFormat, string accountName) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, ctx); // Set Accept and Content-Type based on the payload format. SetAcceptHeaderForHttpWebRequest(msg, payloadFormat); Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { SetContentTypeForHttpWebRequest(msg, payloadFormat); } if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { // post tunnelling msg.Headers.Add("X-HTTP-Method", "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { if (operation.Entity.ETag != null) { msg.Headers.Add("If-Match", operation.Entity.ETag); } } // prefer header if (operation.OperationType == TableOperationType.Insert) { msg.Headers.Add("Prefer", operation.EchoContent ? "return-content" : "return-no-content"); } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace) { // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = ODataVersion.V3 // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { SetContentTypeForAdapterMessage(adapterMsg, payloadFormat); } ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings, new TableStorageModel(accountName)); ODataWriter writer = odataWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, writer); return(new Tuple <HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream())); } return(new Tuple <HttpWebRequest, Stream>(msg, null)); }
internal static async Task<IAsyncTransport> OpenAsync(this SaslProfile saslProfile, string hostname, IBufferManager bufferManager, IAsyncTransport transport) { // if transport is closed, pump reader should throw exception TransportWriter writer = new TransportWriter(transport, e => { }); ProtocolHeader myHeader = saslProfile.Start(hostname, writer); AsyncPump pump = new AsyncPump(bufferManager, transport); SaslCode code = SaslCode.Auth; await pump.PumpAsync( header => { saslProfile.OnHeader(myHeader, header); return true; }, buffer => { return saslProfile.OnFrame(writer, buffer, out code); }); await writer.FlushAsync(); if (code != SaslCode.Ok) { throw new AmqpException(ErrorCode.UnauthorizedAccess, Fx.Format(SRAmqp.SaslNegoFailed, code)); } return (IAsyncTransport)saslProfile.UpgradeTransportInternal(transport); }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialBufferAllocationCount, _configuration.ReceiveBufferSize); _saeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return saea; }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { _log.Error(ex.Message, ex); } }); }
public ListenerTcpTransport(Socket socket, IBufferManager bufferManager) : base(bufferManager) { this.socketTransport = new TcpSocket(this, socket); }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, TableOperation operation, bool useVersionHeader, OperationContext ctx, TableRequestOptions options, string accountName) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; // Set Accept and Content-Type based on the payload format. SetAcceptHeaderForHttpWebRequest(msg, payloadFormat); Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { SetContentTypeForHttpWebRequest(msg, payloadFormat); } if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { options.AssertNoEncryptionPolicyOrStrictMode(); // post tunnelling msg.Headers.Add("X-HTTP-Method", "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { if (operation.Entity.ETag != null) { msg.Headers.Add("If-Match", operation.Entity.ETag); } } // prefer header if (operation.OperationType == TableOperationType.Insert) { msg.Headers.Add("Prefer", operation.EchoContent ? "return-content" : "return-no-content"); } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace) { // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = TableConstants.ODataProtocolVersion // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { SetContentTypeForAdapterMessage(adapterMsg, payloadFormat); } ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings, new TableStorageModel(accountName)); ODataWriter writer = odataWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, writer, options); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); } return new Tuple<HttpWebRequest, Stream>(msg, null); }
internal static Tuple <HttpWebRequest, Stream> BuildRequestForTableOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int?timeout, TableOperation operation, bool useVersionHeader, OperationContext ctx, TableRequestOptions options) { HttpWebRequest msg = BuildRequestCore(uri, builder, operation.HttpMethod, timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; // Set Accept and Content-Type based on the payload format. SetAcceptHeaderForHttpWebRequest(msg, payloadFormat); Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); msg.Headers.Add(Constants.HeaderConstants.DataServiceVersion, Constants.HeaderConstants.DataServiceVersionValue); if (operation.HttpMethod != "HEAD" && operation.HttpMethod != "GET") { msg.ContentType = Constants.JsonContentTypeHeaderValue; } if (operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.Merge) { // Client-side encryption is not supported on merge requests. // This is because we maintain the list of encrypted properties as a property on the entity, and we can't update this // properly for merge operations. options.AssertNoEncryptionPolicyOrStrictMode(); // post tunnelling msg.Headers.Add(Constants.HeaderConstants.PostTunnelling, "MERGE"); } if (operation.OperationType == TableOperationType.RotateEncryptionKey) { // post tunnelling msg.Headers.Add(Constants.HeaderConstants.PostTunnelling, "MERGE"); } // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.RotateEncryptionKey) { if (operation.ETag != null) { msg.Headers.Add(Constants.HeaderConstants.IfMatch, operation.ETag); } } // Prefer header if (operation.OperationType == TableOperationType.Insert) { msg.Headers.Add(Constants.HeaderConstants.Prefer, operation.EchoContent ? Constants.HeaderConstants.PreferReturnContent : Constants.HeaderConstants.PreferReturnNoContent); } if (operation.OperationType == TableOperationType.Insert || operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge || operation.OperationType == TableOperationType.InsertOrReplace || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.RotateEncryptionKey) { MultiBufferMemoryStream ms = new MultiBufferMemoryStream(bufferManager); using (JsonTextWriter jsonWriter = new JsonTextWriter(new StreamWriter(new NonCloseableStream(ms)))) { WriteEntityContent(operation, ctx, options, jsonWriter); } ms.Seek(0, SeekOrigin.Begin); msg.ContentLength = ms.Length; return(new Tuple <HttpWebRequest, Stream>(msg, ms)); } return(new Tuple <HttpWebRequest, Stream>(msg, null)); }
/// <summary> /// Asynchronously reads the entire content of the stream and writes it to the given output stream. /// </summary> /// <param name="stream">The origin stream.</param> /// <param name="toStream">The destination stream.</param> /// <param name="bufferManager">IBufferManager instance to use. May be null.</param> /// <param name="copyLength">Number of bytes to copy from source stream to destination stream. Cannot be passed with a value for maxLength.</param> /// <param name="maxLength">Maximum length of the source stream. Cannot be passed with a value for copyLength.</param> /// <param name="calculateChecksum">A value indicating whether the checksums should be calculated.</param> /// <param name="executionState">An object that stores state of the operation.</param> /// <param name="streamCopyState">An object that represents the current state for the copy operation.</param> /// <param name="token">A CancellationToken to observe while waiting for the copy to complete.</param> /// <returns>The task object representing the asynchronous operation.</returns> internal static async Task WriteToAsync <T>(this Stream stream, Stream toStream, IBufferManager bufferManager, long?copyLength, long?maxLength, ChecksumRequested calculateChecksum, ExecutionState <T> executionState, StreamDescriptor streamCopyState, CancellationToken token) { if (copyLength.HasValue && maxLength.HasValue) { throw new ArgumentException(SR.StreamLengthMismatch); } if (stream.CanSeek && maxLength.HasValue && stream.Length - stream.Position > maxLength) { throw new InvalidOperationException(SR.StreamLengthError); } if (stream.CanSeek && copyLength.HasValue && stream.Length - stream.Position < copyLength) { throw new ArgumentOutOfRangeException("copyLength", SR.StreamLengthShortError); } if (streamCopyState != null && calculateChecksum.HasAny && streamCopyState.ChecksumWrapper == null) { streamCopyState.ChecksumWrapper = new ChecksumWrapper(calculateChecksum.MD5, calculateChecksum.CRC64); } CancellationTokenSource cts = null; byte[] buffer = bufferManager != null?bufferManager.TakeBuffer(GetBufferSize(stream)) : new byte[GetBufferSize(stream)]; try { if (executionState.OperationExpiryTime.HasValue) { // Setup token for timeout cts = CancellationTokenSource.CreateLinkedTokenSource(token); cts.CancelAfter(executionState.RemainingTimeout); // Switch tokens token = cts.Token; } long?bytesRemaining = copyLength; int readCount; do { // Determine how many bytes to read this time so that no more than count bytes are read int bytesToRead = bytesRemaining.HasValue && bytesRemaining < buffer.Length ? (int)bytesRemaining : buffer.Length; if (bytesToRead == 0) { break; } readCount = await stream.ReadAsync(buffer, 0, bytesToRead, token).ConfigureAwait(false); if (bytesRemaining.HasValue) { bytesRemaining -= readCount; } if (readCount > 0) { await toStream.WriteAsync(buffer, 0, readCount, token).ConfigureAwait(false); // Update the StreamDescriptor after the bytes are successfully committed to the output stream if (streamCopyState != null) { streamCopyState.Length += readCount; if (maxLength.HasValue && streamCopyState.Length > maxLength.Value) { throw new InvalidOperationException(SR.StreamLengthError); } if (streamCopyState.ChecksumWrapper != null) { streamCopyState.ChecksumWrapper.UpdateHash(buffer, 0, readCount); } } } }while (readCount > 0); if (bytesRemaining.HasValue && bytesRemaining != 0) { throw new ArgumentOutOfRangeException("copyLength", SR.StreamLengthShortError); } } finally { if (cts != null) { cts.Dispose(); cts = null; } if (buffer != null && bufferManager != null) { bufferManager.ReturnBuffer(buffer); } } // Streams opened with AsStreamForWrite extension need to be flushed // to write all buffered data to the underlying Windows Runtime stream. await toStream.FlushAsync().ConfigureAwait(false); if (streamCopyState != null && streamCopyState.ChecksumWrapper != null) { if (streamCopyState.ChecksumWrapper.CRC64 != null) { streamCopyState.Crc64 = streamCopyState.ChecksumWrapper.CRC64.ComputeHash(); } if (streamCopyState.ChecksumWrapper.MD5 != null) { streamCopyState.Md5 = streamCopyState.ChecksumWrapper.MD5.ComputeHash(); } streamCopyState.ChecksumWrapper = null; } }
internal Connection(IBufferManager bufferManager, AmqpSettings amqpSettings, Address address, IAsyncTransport transport, Open open, OnOpened onOpened) : this((ushort)(amqpSettings.MaxSessionsPerConnection - 1), (uint)amqpSettings.MaxFrameSize) { this.BufferManager = bufferManager; this.address = address; this.onOpened = onOpened; this.maxFrameSize = (uint)amqpSettings.MaxFrameSize; this.transport = transport; transport.SetConnection(this); // after getting the transport, move state to open pipe before starting the pump if (open == null) { open = new Open() { ContainerId = amqpSettings.ContainerId, HostName = amqpSettings.HostName ?? this.address.Host, ChannelMax = this.channelMax, MaxFrameSize = this.maxFrameSize }; } this.SendHeader(); this.SendOpen(open); this.state = State.OpenPipe; }
internal static Task WriteToAsync <T>(this Stream stream, Stream toStream, IBufferManager bufferManager, long?copyLength, long?maxLength, ChecksumRequested calculateChecksum, ExecutionState <T> executionState, StreamDescriptor streamCopyState, CancellationToken cancellationToken, Action <ExecutionState <T> > completed = null) { AsyncStreamCopier <T> copier = new AsyncStreamCopier <T>(stream, toStream, executionState, bufferManager, GetBufferSize(stream), calculateChecksum, streamCopyState); return(copier.StartCopyStream(completed, copyLength, maxLength, cancellationToken)); }
public SaeStateCreator(IBufferManager bufferManager, int bufferSize) { m_BufferManager = bufferManager; m_BufferSize = bufferSize; }
internal static Tuple <HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int?timeout, string tableName, TableBatchOperation batch, bool useVersionHeader, OperationContext ctx, TableRequestOptions options, string accountName) { HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToSingleUri(uri, "$batch"), builder, "POST", timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = TableConstants.ODataProtocolVersion // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve; // Query operations should not be inside changeset in payload if (!isQuery) { // Start Operation batchWriter.WriteStartChangeset(); batchWriter.Flush(); } foreach (TableOperation operation in batch) { string httpMethod = operation.HttpMethod; if (operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge) { options.AssertNoEncryptionPolicyOrStrictMode(); httpMethod = "MERGE"; } ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(uri, tableName)); SetAcceptAndContentTypeForODataBatchMessage(mimePartMsg, payloadFormat); // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { mimePartMsg.SetHeader("If-Match", operation.Entity.ETag); } // Prefer header if (operation.OperationType == TableOperationType.Insert) { mimePartMsg.SetHeader("Prefer", operation.EchoContent ? "return-content" : "return-no-content"); } if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve) { using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings, new TableStorageModel(accountName))) { // Write entity ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter, options); } } } if (!isQuery) { // End Operation batchWriter.WriteEndChangeset(); } // End Batch batchWriter.WriteEndBatch(); batchWriter.Flush(); return(new Tuple <HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream())); }
internal static Tuple<HttpWebRequest, Stream> BuildRequestForTableBatchOperation(Uri uri, UriQueryBuilder builder, IBufferManager bufferManager, int? timeout, string tableName, TableBatchOperation batch, bool useVersionHeader, OperationContext ctx, TableRequestOptions options, string accountName) { HttpWebRequest msg = BuildRequestCore(NavigationHelper.AppendPathToSingleUri(uri, "$batch"), builder, "POST", timeout, useVersionHeader, ctx); TablePayloadFormat payloadFormat = options.PayloadFormat.Value; Logger.LogInformational(ctx, SR.PayloadFormat, payloadFormat); // create the writer, indent for readability of the examples. ODataMessageWriterSettings writerSettings = new ODataMessageWriterSettings() { CheckCharacters = false, // sets this flag on the XmlWriter for ATOM Version = TableConstants.ODataProtocolVersion // set the Odata version to use when writing the entry }; HttpWebRequestAdapterMessage adapterMsg = new HttpWebRequestAdapterMessage(msg, bufferManager); ODataMessageWriter odataWriter = new ODataMessageWriter(adapterMsg, writerSettings); ODataBatchWriter batchWriter = odataWriter.CreateODataBatchWriter(); batchWriter.WriteStartBatch(); bool isQuery = batch.Count == 1 && batch[0].OperationType == TableOperationType.Retrieve; // Query operations should not be inside changeset in payload if (!isQuery) { // Start Operation batchWriter.WriteStartChangeset(); batchWriter.Flush(); } foreach (TableOperation operation in batch) { string httpMethod = operation.HttpMethod; if (operation.OperationType == TableOperationType.Merge || operation.OperationType == TableOperationType.InsertOrMerge) { options.AssertNoEncryptionPolicyOrStrictMode(); httpMethod = "MERGE"; } ODataBatchOperationRequestMessage mimePartMsg = batchWriter.CreateOperationRequestMessage(httpMethod, operation.GenerateRequestURI(uri, tableName)); SetAcceptAndContentTypeForODataBatchMessage(mimePartMsg, payloadFormat); // etag if (operation.OperationType == TableOperationType.Delete || operation.OperationType == TableOperationType.Replace || operation.OperationType == TableOperationType.Merge) { mimePartMsg.SetHeader("If-Match", operation.Entity.ETag); } // Prefer header if (operation.OperationType == TableOperationType.Insert) { mimePartMsg.SetHeader("Prefer", operation.EchoContent ? "return-content" : "return-no-content"); } if (operation.OperationType != TableOperationType.Delete && operation.OperationType != TableOperationType.Retrieve) { using (ODataMessageWriter batchEntryWriter = new ODataMessageWriter(mimePartMsg, writerSettings, new TableStorageModel(accountName))) { // Write entity ODataWriter entryWriter = batchEntryWriter.CreateODataEntryWriter(); WriteOdataEntity(operation.Entity, operation.OperationType, ctx, entryWriter, options); } } } if (!isQuery) { // End Operation batchWriter.WriteEndChangeset(); } // End Batch batchWriter.WriteEndBatch(); batchWriter.Flush(); return new Tuple<HttpWebRequest, Stream>(adapterMsg.GetPopulatedMessage(), adapterMsg.GetStream()); }
public SaeItemEnumerable(IBufferManager bufferManager, int bufferSize, int count) { m_BufferManager = bufferManager; m_BufferSize = bufferSize; m_Count = count; }
private void Initialize() { _bufferManager = new GrowingByteBufferManager(_configuration.InitialPooledBufferCount, _configuration.ReceiveBufferSize); _acceptSaeaPool = new SaeaPool(16, 32, () => { var saea = new SaeaAwaitable(); return saea; }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { // _log.Error(ex.Message, ex); } }); _handleSaeaPool = new SaeaPool(1024, int.MaxValue, () => { var saea = new SaeaAwaitable(); return saea; }, (saea) => { try { saea.Saea.AcceptSocket = null; saea.Saea.SetBuffer(EmptyArray, 0, 0); saea.Saea.RemoteEndPoint = null; saea.Saea.SocketFlags = SocketFlags.None; } catch (Exception ex) { // _log.Error(ex.Message, ex); } }); _sessionPool = new SessionPool(1024, int.MaxValue, () => { var session = new TcpSocketSaeaSession(_configuration, _bufferManager, _handleSaeaPool, _dispatcher, this); return session; }, (session) => { try { session.Clear(); } catch (Exception ex) { // _log.Error(ex.Message, ex); } }); }
public RedisBaseWriter(IBufferManager bufferManager) { _bufferManager = bufferManager; }