Code:
/ Net / Net / 3.5.50727.3053 / DEVDIV / depot / DevDiv / releases / whidbey / netfxsp / ndp / fx / src / Net / System / Net / cookiecollection.cs / 1 / cookiecollection.cs
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net {
using System.Collections;
using System.Globalization;
using System.Runtime.Serialization;
//
// CookieCollection
//
// A list of cookies maintained in Sorted order. Only one cookie with matching Name/Domain/Path
//
///
/// [To be supplied.]
///
[Serializable]
public class CookieCollection : ICollection {
// fields
internal enum Stamp {
Check = 0,
Set = 1,
SetToUnused = 2,
SetToMaxUsed = 3,
}
internal int m_version;
ArrayList m_list = new ArrayList();
DateTime m_TimeStamp = DateTime.MinValue;
bool m_has_other_versions;
[OptionalField]
bool m_IsReadOnly;
// constructors
///
/// [To be supplied.]
///
public CookieCollection() {
m_IsReadOnly = true;
}
internal CookieCollection(bool IsReadOnly) {
m_IsReadOnly = IsReadOnly;
}
// properties
///
/// [To be supplied.]
///
public bool IsReadOnly {
get {
return m_IsReadOnly;
}
}
///
/// [To be supplied.]
///
public Cookie this[int index] {
get {
if (index < 0 || index >= m_list.Count) {
throw new ArgumentOutOfRangeException("index");
}
return (Cookie)(m_list[index]);
}
}
///
/// [To be supplied.]
///
public Cookie this[string name] {
get {
foreach (Cookie c in m_list) {
if (string.Compare(c.Name, name, StringComparison.OrdinalIgnoreCase ) == 0) {
return c;
}
}
return null;
}
}
// methods
///
/// [To be supplied.]
///
public void Add(Cookie cookie) {
if (cookie == null) {
throw new ArgumentNullException("cookie");
}
++m_version;
int idx = IndexOf(cookie);
if (idx == -1) {
m_list.Add(cookie);
}
else {
m_list[idx] = cookie;
}
}
///
/// [To be supplied.]
///
public void Add(CookieCollection cookies) {
if (cookies == null) {
throw new ArgumentNullException("cookies");
}
//if (cookies == this) {
// cookies = new CookieCollection(cookies);
//}
foreach (Cookie cookie in cookies) {
Add(cookie);
}
}
// ICollection interface
///
/// [To be supplied.]
///
public int Count {
get {
return m_list.Count;
}
}
///
/// [To be supplied.]
///
public bool IsSynchronized {
get {
return false;
}
}
///
/// [To be supplied.]
///
public object SyncRoot {
get {
return this;
}
}
///
/// [To be supplied.]
///
public void CopyTo(Array array, int index) {
m_list.CopyTo(array, index);
}
///
/// [To be supplied.]
///
public void CopyTo(Cookie[] array, int index)
{
m_list.CopyTo(array, index);
}
internal DateTime TimeStamp(Stamp how) {
switch (how) {
case Stamp.Set:
m_TimeStamp = DateTime.Now;
break;
case Stamp.SetToMaxUsed:
m_TimeStamp = DateTime.MaxValue;
break;
case Stamp.SetToUnused:
m_TimeStamp = DateTime.MinValue;
break;
case Stamp.Check:
default:
break;
}
return m_TimeStamp;
}
// This is for internal cookie container usage
// For others not that m_has_other_versions gets changed ONLY in InternalAdd
internal bool IsOtherVersionSeen{
get {
return m_has_other_versions;
}
}
// If isStrict == false, assumes that incoming cookie is unique
// If isStrict == true, replace the cookie if found same with newest Variant
// returns 1 if added, 0 if replaced or rejected
internal int InternalAdd(Cookie cookie, bool isStrict) {
int ret = 1;
if (isStrict) {
IComparer comp = Cookie.GetComparer();
int idx = 0;
foreach (Cookie c in m_list) {
if (comp.Compare(cookie, c) == 0) {
ret = 0; //will replace or reject
//Cookie2 spec requires that new Variant cookie overwrite the old one
if (c.Variant <= cookie.Variant) {
m_list[idx] = cookie;
}
break;
}
++idx;
}
if (idx == m_list.Count) {
m_list.Add(cookie);
}
}
else {
m_list.Add(cookie);
}
if (cookie.Version != Cookie.MaxSupportedVersion) {
m_has_other_versions = true;
}
return ret;
}
internal int IndexOf(Cookie cookie) {
IComparer comp = Cookie.GetComparer();
int idx = 0;
foreach (Cookie c in m_list) {
if (comp.Compare(cookie, c) == 0) {
return idx;
}
++idx;
}
return -1;
}
internal void RemoveAt(int idx) {
m_list.RemoveAt(idx);
}
// IEnumerable interface
///
/// [To be supplied.]
///
public IEnumerator GetEnumerator() {
return new CookieCollectionEnumerator(this);
}
#if DEBUG
///
/// [To be supplied.]
///
internal void Dump() {
GlobalLog.Print("CookieCollection:");
foreach (Cookie cookie in this) {
cookie.Dump();
}
}
#endif
//Not used anymore delete ?
private class CookieCollectionEnumerator : IEnumerator {
CookieCollection m_cookies;
int m_count;
int m_index = -1;
int m_version;
internal CookieCollectionEnumerator(CookieCollection cookies) {
m_cookies = cookies;
m_count = cookies.Count;
m_version = cookies.m_version;
}
// IEnumerator interface
object IEnumerator.Current {
get {
if (m_index < 0 || m_index >= m_count) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumOpCantHappen));
}
if (m_version != m_cookies.m_version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
return m_cookies[m_index];
}
}
bool IEnumerator.MoveNext() {
if (m_version != m_cookies.m_version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
if (++m_index < m_count) {
return true;
}
m_index = m_count;
return false;
}
void IEnumerator.Reset() {
m_index = -1;
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//------------------------------------------------------------------------------
//
// Copyright (c) Microsoft Corporation. All rights reserved.
//
//-----------------------------------------------------------------------------
namespace System.Net {
using System.Collections;
using System.Globalization;
using System.Runtime.Serialization;
//
// CookieCollection
//
// A list of cookies maintained in Sorted order. Only one cookie with matching Name/Domain/Path
//
///
/// [To be supplied.]
///
[Serializable]
public class CookieCollection : ICollection {
// fields
internal enum Stamp {
Check = 0,
Set = 1,
SetToUnused = 2,
SetToMaxUsed = 3,
}
internal int m_version;
ArrayList m_list = new ArrayList();
DateTime m_TimeStamp = DateTime.MinValue;
bool m_has_other_versions;
[OptionalField]
bool m_IsReadOnly;
// constructors
///
/// [To be supplied.]
///
public CookieCollection() {
m_IsReadOnly = true;
}
internal CookieCollection(bool IsReadOnly) {
m_IsReadOnly = IsReadOnly;
}
// properties
///
/// [To be supplied.]
///
public bool IsReadOnly {
get {
return m_IsReadOnly;
}
}
///
/// [To be supplied.]
///
public Cookie this[int index] {
get {
if (index < 0 || index >= m_list.Count) {
throw new ArgumentOutOfRangeException("index");
}
return (Cookie)(m_list[index]);
}
}
///
/// [To be supplied.]
///
public Cookie this[string name] {
get {
foreach (Cookie c in m_list) {
if (string.Compare(c.Name, name, StringComparison.OrdinalIgnoreCase ) == 0) {
return c;
}
}
return null;
}
}
// methods
///
/// [To be supplied.]
///
public void Add(Cookie cookie) {
if (cookie == null) {
throw new ArgumentNullException("cookie");
}
++m_version;
int idx = IndexOf(cookie);
if (idx == -1) {
m_list.Add(cookie);
}
else {
m_list[idx] = cookie;
}
}
///
/// [To be supplied.]
///
public void Add(CookieCollection cookies) {
if (cookies == null) {
throw new ArgumentNullException("cookies");
}
//if (cookies == this) {
// cookies = new CookieCollection(cookies);
//}
foreach (Cookie cookie in cookies) {
Add(cookie);
}
}
// ICollection interface
///
/// [To be supplied.]
///
public int Count {
get {
return m_list.Count;
}
}
///
/// [To be supplied.]
///
public bool IsSynchronized {
get {
return false;
}
}
///
/// [To be supplied.]
///
public object SyncRoot {
get {
return this;
}
}
///
/// [To be supplied.]
///
public void CopyTo(Array array, int index) {
m_list.CopyTo(array, index);
}
///
/// [To be supplied.]
///
public void CopyTo(Cookie[] array, int index)
{
m_list.CopyTo(array, index);
}
internal DateTime TimeStamp(Stamp how) {
switch (how) {
case Stamp.Set:
m_TimeStamp = DateTime.Now;
break;
case Stamp.SetToMaxUsed:
m_TimeStamp = DateTime.MaxValue;
break;
case Stamp.SetToUnused:
m_TimeStamp = DateTime.MinValue;
break;
case Stamp.Check:
default:
break;
}
return m_TimeStamp;
}
// This is for internal cookie container usage
// For others not that m_has_other_versions gets changed ONLY in InternalAdd
internal bool IsOtherVersionSeen{
get {
return m_has_other_versions;
}
}
// If isStrict == false, assumes that incoming cookie is unique
// If isStrict == true, replace the cookie if found same with newest Variant
// returns 1 if added, 0 if replaced or rejected
internal int InternalAdd(Cookie cookie, bool isStrict) {
int ret = 1;
if (isStrict) {
IComparer comp = Cookie.GetComparer();
int idx = 0;
foreach (Cookie c in m_list) {
if (comp.Compare(cookie, c) == 0) {
ret = 0; //will replace or reject
//Cookie2 spec requires that new Variant cookie overwrite the old one
if (c.Variant <= cookie.Variant) {
m_list[idx] = cookie;
}
break;
}
++idx;
}
if (idx == m_list.Count) {
m_list.Add(cookie);
}
}
else {
m_list.Add(cookie);
}
if (cookie.Version != Cookie.MaxSupportedVersion) {
m_has_other_versions = true;
}
return ret;
}
internal int IndexOf(Cookie cookie) {
IComparer comp = Cookie.GetComparer();
int idx = 0;
foreach (Cookie c in m_list) {
if (comp.Compare(cookie, c) == 0) {
return idx;
}
++idx;
}
return -1;
}
internal void RemoveAt(int idx) {
m_list.RemoveAt(idx);
}
// IEnumerable interface
///
/// [To be supplied.]
///
public IEnumerator GetEnumerator() {
return new CookieCollectionEnumerator(this);
}
#if DEBUG
///
/// [To be supplied.]
///
internal void Dump() {
GlobalLog.Print("CookieCollection:");
foreach (Cookie cookie in this) {
cookie.Dump();
}
}
#endif
//Not used anymore delete ?
private class CookieCollectionEnumerator : IEnumerator {
CookieCollection m_cookies;
int m_count;
int m_index = -1;
int m_version;
internal CookieCollectionEnumerator(CookieCollection cookies) {
m_cookies = cookies;
m_count = cookies.Count;
m_version = cookies.m_version;
}
// IEnumerator interface
object IEnumerator.Current {
get {
if (m_index < 0 || m_index >= m_count) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumOpCantHappen));
}
if (m_version != m_cookies.m_version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
return m_cookies[m_index];
}
}
bool IEnumerator.MoveNext() {
if (m_version != m_cookies.m_version) {
throw new InvalidOperationException(SR.GetString(SR.InvalidOperation_EnumFailedVersion));
}
if (++m_index < m_count) {
return true;
}
m_index = m_count;
return false;
}
void IEnumerator.Reset() {
m_index = -1;
}
}
}
}
// 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
- IOThreadTimer.cs
- Site.cs
- HtmlTableCellCollection.cs
- CookieProtection.cs
- ParameterBinding.cs
- DocumentViewerBaseAutomationPeer.cs
- ISAPIWorkerRequest.cs
- CapabilitiesSection.cs
- PersonalizablePropertyEntry.cs
- DataGridViewRowCollection.cs
- Substitution.cs
- NativeMethods.cs
- RemotingServices.cs
- CallTemplateAction.cs
- AppSecurityManager.cs
- OutKeywords.cs
- EditorPartDesigner.cs
- SByteStorage.cs
- DataSourceHelper.cs
- NullRuntimeConfig.cs
- XsdBuildProvider.cs
- WindowPatternIdentifiers.cs
- DataSourceComponent.cs
- CreateUserWizardStep.cs
- Misc.cs
- CategoryGridEntry.cs
- MimeObjectFactory.cs
- ReferentialConstraint.cs
- followingsibling.cs
- ColumnCollection.cs
- DrawingGroupDrawingContext.cs
- ByeOperationAsyncResult.cs
- ChannelBuilder.cs
- RegexWorker.cs
- AnimationException.cs
- CodeSnippetCompileUnit.cs
- OleDbParameterCollection.cs
- RectAnimationUsingKeyFrames.cs
- Parsers.cs
- FixedTextView.cs
- Int32Storage.cs
- DelegateTypeInfo.cs
- SafeProcessHandle.cs
- dataobject.cs
- XmlNodeChangedEventArgs.cs
- AnnotationResource.cs
- SystemWebCachingSectionGroup.cs
- BitmapFrameEncode.cs
- HandleRef.cs
- XmlCollation.cs
- BitmapEffectGeneralTransform.cs
- QuaternionKeyFrameCollection.cs
- StatusBarItemAutomationPeer.cs
- HttpRequest.cs
- ToolboxComponentsCreatingEventArgs.cs
- DiscreteKeyFrames.cs
- CodeAssignStatement.cs
- PropertyGridEditorPart.cs
- AdornerLayer.cs
- KeyConstraint.cs
- SiteMapDataSource.cs
- BStrWrapper.cs
- EncryptionUtility.cs
- WindowsPen.cs
- AnonymousIdentificationModule.cs
- BinaryObjectInfo.cs
- ControlBuilderAttribute.cs
- TimeZoneNotFoundException.cs
- OutputScope.cs
- FontSource.cs
- XPathNodePointer.cs
- HtmlShim.cs
- SqlIdentifier.cs
- ServicePointManager.cs
- CompositionTarget.cs
- MissingFieldException.cs
- EventProviderWriter.cs
- TabControlCancelEvent.cs
- SmiContext.cs
- ContextMenuStrip.cs
- ThrowHelper.cs
- CodeNamespaceImport.cs
- TimeSpan.cs
- ISO2022Encoding.cs
- RegistrySecurity.cs
- CollaborationHelperFunctions.cs
- NetTcpSecurity.cs
- SafeSecurityHelper.cs
- TemplateEditingFrame.cs
- Application.cs
- PrinterResolution.cs
- DataGridViewColumnStateChangedEventArgs.cs
- ClientSession.cs
- InvalidOperationException.cs
- COAUTHIDENTITY.cs
- NameObjectCollectionBase.cs
- X509IssuerSerialKeyIdentifierClause.cs
- ConfigUtil.cs
- ImageButton.cs
- Label.cs