2002-04-11 Patrik Torstensson <patrik.torstensson@labs2.com>
[mono.git] / mcs / class / System.Web / System.Web / HttpCookie.cs
index efbb958bb6b3a7784d3ee143b9c0d13e091236ec..f53cdc7ce94c5ae42ae55d2443b160396f2fefc8 100644 (file)
-//\r
-// System.Web.HttpCookie.cs\r
+// \r
+// System.Web.HttpCookie\r
 //\r
 // Author:\r
-//   Bob Smith <bob@thestuff.net>\r
-//\r
-// (C) Bob Smith\r
+//   Patrik Torstensson (Patrik.Torstensson@labs2.com)\r
 //\r
-\r
 using System;\r
+using System.Text;\r
+using System.Web;\r
 using System.Collections.Specialized;\r
 \r
 namespace System.Web {\r
    public sealed class HttpCookie {\r
-      private string _name;\r
-      private string _value = null;\r
-      private string _domain; //TODO: default to some pref.\r
-      private DateTime _expires;\r
-      private string _path;  //TODO: default is the current request path.\r
-      private bool _secure = false;\r
+      private string _Name;\r
+      private string _Value;\r
+      private string _Domain;\r
+      private DateTime _Expires;\r
+      private bool _ExpiresSet;\r
+      private string _Path;  \r
+      private bool _Secure = false;\r
+      \r
+      private HttpValueCollection _Values;\r
+\r
+      internal HttpCookie() {\r
+         _Path = "/";\r
+      }\r
+\r
       public HttpCookie(string name) {\r
-         _name = name;\r
+         _Path = "/";\r
+         _Name = name;\r
       }\r
+\r
       public HttpCookie(string name, string value) {\r
-         _name = name;\r
-         _value = value;\r
+         _Name = name;\r
+         _Value = value;\r
       }\r
+\r
+      HttpResponseHeader GetCookieHeader() {\r
+         StringBuilder oSetCookie = new StringBuilder();\r
+\r
+         if (null != _Name && _Name.Length > 0) {\r
+            oSetCookie.Append(_Name);\r
+            oSetCookie.Append("=");\r
+         }\r
+\r
+         if (null != _Values) {\r
+            oSetCookie.Append(_Values.ToString(false));\r
+         } else if (null != _Value) {\r
+            oSetCookie.Append(_Value);\r
+         }\r
+\r
+         if (null != _Domain && _Domain.Length > 0) {\r
+            oSetCookie.Append("; domain=");\r
+            oSetCookie.Append(_Domain);\r
+         }\r
+\r
+         if (null != _Path && Path.Length > 0) {\r
+            oSetCookie.Append("; path=");\r
+            oSetCookie.Append(_Path);\r
+         }\r
+\r
+         if (_Secure) {\r
+            oSetCookie.Append("; secure");\r
+         }\r
+\r
+         return new HttpResponseHeader(HttpWorkerRequest.HeaderSetCookie, oSetCookie.ToString());\r
+      }\r
+\r
       public string Domain {\r
          get {\r
-            return _domain;\r
+            return _Domain;\r
          }\r
          set {\r
-            _domain = value;\r
+            _Domain = value;\r
          }\r
       }\r
+\r
       public DateTime Expires {\r
          get {\r
-            return _expires;\r
+            if (!_ExpiresSet) {\r
+               return DateTime.MinValue;\r
+            }\r
+\r
+            return _Expires;\r
          }\r
+\r
          set {\r
-            _expires = value;\r
+            _ExpiresSet = true;\r
+            _Expires = value;\r
          }\r
       }\r
+\r
       public bool HasKeys {\r
          get {\r
-            return false; //TODO\r
+            return Values.HasKeys();\r
          }\r
       }\r
+\r
       public string this[string key] {\r
-         //TODO: get/set subcookie.\r
-         get {return "";}\r
-         set {}\r
+         get {\r
+            return Values[key];\r
+         }\r
+         \r
+         set {\r
+            Values[key] = value;\r
+         }\r
       }\r
+\r
       public string Name {\r
          get {\r
-            return _name;\r
+            return _Name;\r
          }\r
+\r
          set {\r
-            _name = value;\r
+            _Name = value;\r
          }\r
       }\r
+\r
       public string Path {\r
          get {\r
-            return _path;\r
+            return _Path;\r
          }\r
+\r
          set {\r
-            _path = value;\r
+            _Path = value;\r
          }\r
       }\r
+\r
       public bool Secure {\r
          get {\r
-            return _secure;\r
+            return _Secure;\r
          }\r
          set {\r
-            _secure = value;\r
+            _Secure = value;\r
          }\r
       }\r
+\r
       public string Value {\r
          get {\r
-            return _value;\r
+            if (null != _Values) {\r
+               return _Values.ToString(false);\r
+            }\r
+            \r
+            return _Value;\r
          }\r
          set {\r
-            _value = value;\r
+            if (null != _Values) {\r
+               _Values.Reset();\r
+               _Values.Add(null, value);\r
+               return;\r
+            }\r
+\r
+            _Value = value;\r
          }\r
       }\r
+\r
       public NameValueCollection Values {\r
-         //TODO\r
-         get {return null;}\r
+         get {\r
+            if (null == _Values) {\r
+               _Values = new HttpValueCollection();\r
+               if (null != _Value) {\r
+                  // Do we have multiple keys\r
+                  if (_Value.IndexOf("&") >= 0 || _Value.IndexOf("=") >= 0) {\r
+                     _Values.FillFromCookieString(_Value);\r
+                  } else {\r
+                     _Values.Add(null, _Value);\r
+                  }\r
+\r
+                  _Value = null;\r
+               }\r
+            }\r
+\r
+            return _Values;\r
+         }\r
       }\r
    }\r
 }\r