Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / xsp / System / Web / HttpResponseHeader.cs / 7 / 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
// VSWhidbey 257154
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.
//
//-----------------------------------------------------------------------------
/*
* 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
// VSWhidbey 257154
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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- InlineUIContainer.cs
- PathSegmentCollection.cs
- WebErrorHandler.cs
- PermissionRequestEvidence.cs
- CreationContext.cs
- TypeContext.cs
- ViewStateAttachedPropertyFeature.cs
- CalendarButtonAutomationPeer.cs
- XmlSchemaChoice.cs
- GroupPartitionExpr.cs
- HttpCapabilitiesEvaluator.cs
- BehaviorService.cs
- ListSourceHelper.cs
- PropertyGeneratedEventArgs.cs
- ExecutedRoutedEventArgs.cs
- TakeOrSkipQueryOperator.cs
- OleDbError.cs
- DispatcherOperation.cs
- PersonalizationEntry.cs
- UnmanagedMarshal.cs
- System.Data_BID.cs
- CodeDomConfigurationHandler.cs
- ParameterExpression.cs
- BinaryMessageEncodingBindingElement.cs
- ContextMenu.cs
- Pool.cs
- TypeSystem.cs
- CompositionAdorner.cs
- Inflater.cs
- unitconverter.cs
- ExtentCqlBlock.cs
- SourceInterpreter.cs
- XmlQueryCardinality.cs
- Byte.cs
- JournalEntry.cs
- NodeFunctions.cs
- URIFormatException.cs
- ExceptionUtil.cs
- AddInActivator.cs
- ConfigurationStrings.cs
- XmlQualifiedNameTest.cs
- TableColumn.cs
- ActiveDesignSurfaceEvent.cs
- DiagnosticsConfigurationHandler.cs
- ReachSerializationUtils.cs
- HttpMethodAttribute.cs
- DataViewSettingCollection.cs
- DropSource.cs
- MouseEventArgs.cs
- TextDecorationCollection.cs
- GcHandle.cs
- DataRowView.cs
- ToolStripHighContrastRenderer.cs
- HttpCacheVary.cs
- SpeechSynthesizer.cs
- XPathDocumentIterator.cs
- ColumnPropertiesGroup.cs
- ProfileManager.cs
- PropVariant.cs
- MessageHeaderException.cs
- BroadcastEventHelper.cs
- RoutedEventArgs.cs
- IpcChannelHelper.cs
- webeventbuffer.cs
- ExpandedWrapper.cs
- ConcurrentQueue.cs
- DispatcherExceptionEventArgs.cs
- WindowsSlider.cs
- MexHttpBindingElement.cs
- CroppedBitmap.cs
- HttpCookie.cs
- DefaultAssemblyResolver.cs
- ReceiveDesigner.xaml.cs
- PassportIdentity.cs
- SessionPageStatePersister.cs
- DataBindingList.cs
- UnmanagedBitmapWrapper.cs
- HttpRequestWrapper.cs
- WebConvert.cs
- ContentPlaceHolder.cs
- DataGridViewAccessibleObject.cs
- DateTimeFormat.cs
- LinqDataSourceView.cs
- Directory.cs
- PublisherMembershipCondition.cs
- BindValidator.cs
- RawMouseInputReport.cs
- RoleBoolean.cs
- DataObject.cs
- InternalRelationshipCollection.cs
- StrokeIntersection.cs
- DrawListViewItemEventArgs.cs
- MultiSelectRootGridEntry.cs
- ClassDataContract.cs
- ZipIOExtraFieldPaddingElement.cs
- MergeFailedEvent.cs
- MultiPropertyDescriptorGridEntry.cs
- DistinctQueryOperator.cs
- TiffBitmapDecoder.cs
- CustomErrorsSection.cs