PageRenderTime 40ms CodeModel.GetById 20ms RepoModel.GetById 1ms app.codeStats 0ms

/WCFWebApi/src/Microsoft.ServiceModel.Internal/Microsoft/ServiceModel/Channels/BufferManagerOutputStream.cs

#
C# | 95 lines | 66 code | 17 blank | 12 comment | 2 complexity | 3c7db6f631f378a55c94bd43a463cccd MD5 | raw file
Possible License(s): CC-BY-SA-3.0, Apache-2.0
  1. // <copyright>
  2. // Copyright (c) Microsoft Corporation. All rights reserved.
  3. // </copyright>
  4. namespace Microsoft.ServiceModel.Channels
  5. {
  6. using System;
  7. using System.Globalization;
  8. using System.ServiceModel; // for QuotaExceededException
  9. using System.ServiceModel.Channels;
  10. using Microsoft.Server.Common;
  11. internal class BufferManagerOutputStream : BufferedOutputStream
  12. {
  13. private string quotaExceededString;
  14. public BufferManagerOutputStream(string quotaExceededString)
  15. : base()
  16. {
  17. this.quotaExceededString = quotaExceededString;
  18. }
  19. public BufferManagerOutputStream(string quotaExceededString, int maxSize)
  20. : base(maxSize)
  21. {
  22. this.quotaExceededString = quotaExceededString;
  23. }
  24. // ALTERED_FOR_PORT:
  25. // We're not getting the internal buffer manager as we do in the framework but just wrapping the bufferManager
  26. public BufferManagerOutputStream(string quotaExceededString, int initialSize, int maxSize, BufferManager bufferManager)
  27. : base(initialSize, maxSize, GetInternalBufferManager(bufferManager))
  28. {
  29. this.quotaExceededString = quotaExceededString;
  30. }
  31. public void Init(int initialSize, int maxSizeQuota, BufferManager bufferManager)
  32. {
  33. this.Init(initialSize, maxSizeQuota, maxSizeQuota, bufferManager);
  34. }
  35. public void Init(int initialSize, int maxSizeQuota, int effectiveMaxSize, BufferManager bufferManager)
  36. {
  37. // ALTERED_FOR_PORT:
  38. // We're not getting the internal buffer manager as we do in the framework but just wrapping the bufferManager
  39. this.Reinitialize(initialSize, maxSizeQuota, effectiveMaxSize, GetInternalBufferManager(bufferManager));
  40. }
  41. protected override Exception CreateQuotaExceededException(int maxSizeQuota)
  42. {
  43. string excMsg = string.Format(CultureInfo.CurrentCulture, this.quotaExceededString, maxSizeQuota);
  44. // TODO: CSDMAIN 205175 -- reactivate when tracing and logging are available:
  45. //// if (TD.MaxSentMessageSizeExceededIsEnabled())
  46. //// {
  47. //// TD.MaxSentMessageSizeExceeded(excMsg);
  48. //// }
  49. return new QuotaExceededException(excMsg);
  50. }
  51. private static InternalBufferManager GetInternalBufferManager(BufferManager bufferManager)
  52. {
  53. Fx.Assert(bufferManager != null, "The 'bufferManager' parameter should not be null.");
  54. return new WrappingInternalBufferManager(bufferManager);
  55. }
  56. private class WrappingInternalBufferManager : InternalBufferManager
  57. {
  58. private BufferManager bufferManager;
  59. public WrappingInternalBufferManager(BufferManager bufferManager)
  60. {
  61. Fx.Assert(bufferManager != null, "The 'bufferManager' parameter should not be null.");
  62. this.bufferManager = bufferManager;
  63. }
  64. public override byte[] TakeBuffer(int bufferSize)
  65. {
  66. return this.bufferManager.TakeBuffer(bufferSize);
  67. }
  68. public override void ReturnBuffer(byte[] buffer)
  69. {
  70. this.bufferManager.ReturnBuffer(buffer);
  71. }
  72. public override void Clear()
  73. {
  74. this.bufferManager.Clear();
  75. }
  76. }
  77. }
  78. }