Code:
/ FXUpdate3074 / FXUpdate3074 / 1.1 / untmp / whidbey / QFE / ndp / fx / src / xsp / System / Web / HttpResponseHeader.cs / 3 / HttpResponseHeader.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
/*
* Single http header representation
*
* Copyright (c) 1998 Microsoft Corporation
*/
namespace System.Web {
using System.Collections;
using System.Text;
/*
* Response header (either known or unknown)
*/
internal class HttpResponseHeader {
private String _unknownHeader;
private int _knownHeaderIndex;
private String _value;
private static readonly string[] EncodingTable = new string[] { "%00", "%01", "%02", "%03", "%04",
"%05", "%06", "%07", "%08", "%09",
"%0a", "%0b", "%0c", "%0d", "%0e",
"%0f", "%10", "%11", "%12", "%13",
"%14", "%15", "%16", "%17", "%18",
"%19", "%1a", "%1b", "%1c", "%1d",
"%1e", "%1f" };
internal HttpResponseHeader(int knownHeaderIndex, String value) {
_unknownHeader = null;
_knownHeaderIndex = knownHeaderIndex;
// encode header value if
if(HttpRuntime.EnableHeaderChecking) {
_value = MaybeEncodeHeader(value);
}
else {
_value = value;
}
}
internal HttpResponseHeader(String unknownHeader, String value) {
if(HttpRuntime.EnableHeaderChecking) {
_unknownHeader = MaybeEncodeHeader(unknownHeader);
_knownHeaderIndex = HttpWorkerRequest.GetKnownResponseHeaderIndex(_unknownHeader);
_value = MaybeEncodeHeader(value);
}
else {
_unknownHeader = unknownHeader;
_knownHeaderIndex = HttpWorkerRequest.GetKnownResponseHeaderIndex(_unknownHeader);
_value = value;
}
}
internal virtual String Name {
get {
if (_unknownHeader != null)
return _unknownHeader;
else
return HttpWorkerRequest.GetKnownResponseHeaderName(_knownHeaderIndex);
}
}
internal String Value {
get { return _value;}
}
internal void Send(HttpWorkerRequest wr) {
if (_knownHeaderIndex >= 0)
wr.SendKnownResponseHeader(_knownHeaderIndex, _value);
else
wr.SendUnknownResponseHeader(_unknownHeader, _value);
}
// Encode the header if it contains a CRLF pair
//
internal static string MaybeEncodeHeader(string value) {
string sanitizedHeader = value;
if (NeedsEncoding(value)) {
// DevDiv Bugs 146028
// Denial Of Service scenarios involving
// control characters are possible.
// We are encoding the following characters:
// - All CTL characters except HT (horizontal tab)
// - DEL character (\x7f)
StringBuilder sb = new StringBuilder();
foreach (char c in value) {
if (c < 32 && c != 9) {
sb.Append(EncodingTable[c]);
}
else if (c == 127) {
sb.Append("%7f");
}
else {
sb.Append(c);
}
}
sanitizedHeader = sb.ToString();
}
return sanitizedHeader;
}
// Returns true if the string contains a control character (other than horizontal tab) or the DEL character.
internal static bool NeedsEncoding(string value) {
foreach (char c in value) {
if ((c < 32 && c != 9) || (c == 127)) {
return true;
}
}
return false;
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ToolBarOverflowPanel.cs
- NegotiateStream.cs
- DataGridItemEventArgs.cs
- ELinqQueryState.cs
- DBSqlParser.cs
- JavaScriptString.cs
- XmlMembersMapping.cs
- SurrogateEncoder.cs
- WebBrowserDesigner.cs
- EntityDescriptor.cs
- MessageSecurityOverMsmq.cs
- OptimisticConcurrencyException.cs
- Propagator.JoinPropagator.cs
- HtmlSelect.cs
- RepeatBehaviorConverter.cs
- ScriptResourceMapping.cs
- DbConnectionPoolGroupProviderInfo.cs
- Deflater.cs
- ColorConvertedBitmap.cs
- Root.cs
- PictureBox.cs
- DBCSCodePageEncoding.cs
- TimelineCollection.cs
- OleDbStruct.cs
- DataRowExtensions.cs
- ComponentDispatcher.cs
- CommonXSendMessage.cs
- GridViewCommandEventArgs.cs
- LocatorManager.cs
- ReadingWritingEntityEventArgs.cs
- ResourcesGenerator.cs
- LoginDesignerUtil.cs
- RangeValueProviderWrapper.cs
- ReferencedAssemblyResolver.cs
- RestHandlerFactory.cs
- CompModSwitches.cs
- DataBindEngine.cs
- ReliableMessagingHelpers.cs
- Encoding.cs
- ParameterModifier.cs
- ObjectStateEntryDbUpdatableDataRecord.cs
- ParserHooks.cs
- SizeIndependentAnimationStorage.cs
- StyleSelector.cs
- Identity.cs
- VBIdentifierTrimConverter.cs
- Preprocessor.cs
- COM2IDispatchConverter.cs
- CacheOutputQuery.cs
- TypedLocationWrapper.cs
- _AutoWebProxyScriptWrapper.cs
- ApplicationHost.cs
- XmlBinaryWriterSession.cs
- CodeDomSerializer.cs
- Rect.cs
- InlineUIContainer.cs
- BitArray.cs
- CmsInterop.cs
- EditorZone.cs
- SurrogateEncoder.cs
- UnsafeNativeMethods.cs
- Site.cs
- DbModificationCommandTree.cs
- DLinqAssociationProvider.cs
- ApplicationFileParser.cs
- ComEventsHelper.cs
- CapabilitiesRule.cs
- SchemaHelper.cs
- DefaultPrintController.cs
- SyntaxCheck.cs
- XmlKeywords.cs
- SBCSCodePageEncoding.cs
- Signature.cs
- QueryContinueDragEventArgs.cs
- EmbossBitmapEffect.cs
- MaskDesignerDialog.cs
- FileLogRecordStream.cs
- GenericUriParser.cs
- SiteOfOriginPart.cs
- _WebProxyDataBuilder.cs
- RsaSecurityToken.cs
- SpeechRecognitionEngine.cs
- safex509handles.cs
- OnOperation.cs
- TextBlock.cs
- ObjectDataSourceView.cs
- SQLDecimalStorage.cs
- PostBackOptions.cs
- CodeGotoStatement.cs
- DataTableReaderListener.cs
- RSAPKCS1SignatureDeformatter.cs
- SafeUserTokenHandle.cs
- CompletedAsyncResult.cs
- DataSourceListEditor.cs
- Single.cs
- FrameSecurityDescriptor.cs
- DateTimeConverter2.cs
- HtmlInputPassword.cs
- CodeCompileUnit.cs
- Calendar.cs