HeaderInfoTable.cs 5.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. //Copyright 2010 Microsoft Corporation
  2. //
  3. //Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License.
  4. //You may obtain a copy of the License at
  5. //
  6. //http://www.apache.org/licenses/LICENSE-2.0
  7. //
  8. //Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
  9. //"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  10. //See the License for the specific language governing permissions and limitations under the License.
  11. namespace System.Data.Services.Http
  12. {
  13. using System;
  14. using System.Collections.Generic;
  15. using System.Diagnostics;
  16. using System.Reflection;
  17. internal class HeaderInfoTable
  18. {
  19. private static Dictionary<string, HeaderInfo> headerHashTable = CreateHeaderHashTable();
  20. private static HeaderInfo unknownHeaderInfo = new HeaderInfo(string.Empty, false);
  21. internal HeaderInfo this[string name]
  22. {
  23. get
  24. {
  25. Debug.Assert(name != null, "name != null");
  26. HeaderInfo tempHeaderInfo = null;
  27. headerHashTable.TryGetValue(name, out tempHeaderInfo);
  28. if (tempHeaderInfo == null)
  29. {
  30. return unknownHeaderInfo;
  31. }
  32. return tempHeaderInfo;
  33. }
  34. }
  35. private static Dictionary<string, HeaderInfo> CreateHeaderHashTable()
  36. {
  37. HeaderInfo[] infoArray = new HeaderInfo[]
  38. {
  39. new HeaderInfo("Allow", false),
  40. new HeaderInfo("Accept", false),
  41. new HeaderInfo("Authorization", false),
  42. new HeaderInfo("Accept-Charset", false),
  43. new HeaderInfo("Accept-Encoding", false),
  44. new HeaderInfo("Accept-Language", false),
  45. new HeaderInfo("Cookie", false),
  46. new HeaderInfo("Connection", true),
  47. new HeaderInfo("Content-MD5", false),
  48. new HeaderInfo("Content-Type", true),
  49. new HeaderInfo("Cache-Control", false),
  50. new HeaderInfo("Content-Range", false),
  51. new HeaderInfo("Content-Length", false),
  52. new HeaderInfo("Content-Encoding", false),
  53. new HeaderInfo("Content-Language", false),
  54. new HeaderInfo("Content-Location", false),
  55. new HeaderInfo("Date", false),
  56. new HeaderInfo("Expect", false),
  57. new HeaderInfo("Expires", false),
  58. new HeaderInfo("From", false),
  59. new HeaderInfo("Host", false),
  60. new HeaderInfo("If-Match", false),
  61. new HeaderInfo("If-Range", false),
  62. new HeaderInfo("If-None-Match", false),
  63. new HeaderInfo("If-Modified-Since", false),
  64. new HeaderInfo("If-Unmodified-Since", false),
  65. new HeaderInfo("Keep-Alive", false),
  66. new HeaderInfo("Last-Modified", false),
  67. new HeaderInfo("Max-Forwards", false),
  68. new HeaderInfo("Pragma", false),
  69. new HeaderInfo("Proxy-Authorization", false),
  70. new HeaderInfo("Range", false),
  71. new HeaderInfo("Referer", false),
  72. new HeaderInfo("TE", false),
  73. new HeaderInfo("Trailer", false),
  74. new HeaderInfo("Transfer-Encoding", false),
  75. new HeaderInfo("Upgrade", false),
  76. new HeaderInfo("UserAgent", false),
  77. new HeaderInfo("Via", false),
  78. new HeaderInfo("Warning", false),
  79. new HeaderInfo("Accept-Ranges", false),
  80. new HeaderInfo("Age", false),
  81. new HeaderInfo("ETag", false),
  82. new HeaderInfo("Location", false),
  83. new HeaderInfo("Proxy-Authenticate", false),
  84. new HeaderInfo("Retry-After", false),
  85. new HeaderInfo("Server", false),
  86. new HeaderInfo("Set-Cookie", false),
  87. new HeaderInfo("Vary", false),
  88. new HeaderInfo("WWW-Authenticate", false),
  89. new HeaderInfo("P3P", false),
  90. new HeaderInfo("IM", false),
  91. new HeaderInfo("Slug", false),
  92. new HeaderInfo("Content-Disposition", false),
  93. new HeaderInfo("inline", false),
  94. new HeaderInfo("attachment", false),
  95. new HeaderInfo("filename", false),
  96. new HeaderInfo("Wlc-Safe-Agent", false),
  97. new HeaderInfo("with-tombstones", false),
  98. new HeaderInfo("feed", false),
  99. new HeaderInfo("feed-with-tombstones", false),
  100. new HeaderInfo("PagedRead", false),
  101. new HeaderInfo("StatelessClient", false)
  102. };
  103. Dictionary<string, HeaderInfo> dict = new Dictionary<string, HeaderInfo>(infoArray.Length * 2, CaseInsensitiveAscii.StaticInstance);
  104. for (int i = 0; i < infoArray.Length; i++)
  105. {
  106. dict[infoArray[i].HeaderName] = infoArray[i];
  107. }
  108. return dict;
  109. }
  110. }
  111. }