OSDN Git Service

Initial contents of nt2chview
[nt2chview/stable.git] / NT2chView45 / NtNet / NTCookie.cs
1 using System;\r
2 using System.Collections.Generic;\r
3 using System.Text;\r
4 using System.Net;\r
5 using NT2chView.NtFile;\r
6 using System.Runtime.Serialization.Formatters.Binary;\r
7 using System.IO;\r
8 \r
9 namespace NT2chView.NtNet\r
10 {\r
11     public class NTCookie\r
12     {\r
13         class CookieValue\r
14         {\r
15             public CookieValue(string hostName)\r
16             {\r
17                 mHostName = hostName;\r
18             }\r
19             public string mHostName;\r
20             public List<KeyValuePair<string, string>> mKeyValueList = new List<KeyValuePair<string, string>>();\r
21         }\r
22 \r
23         CookieValue findCookieValue(string hostName)\r
24         {\r
25             foreach (CookieValue cv in mCookieValue)\r
26             {\r
27                 if(hostName.Equals(cv.mHostName))\r
28                     return cv;\r
29             }\r
30             return null;\r
31         }\r
32 \r
33         void addCookieValue(CookieValue cv)\r
34         {\r
35             mCookieValue.Add(cv);\r
36         }\r
37 \r
38 \r
39         List<CookieValue> mCookieValue = new List<CookieValue>();\r
40 \r
41         private Uri mHostUri;\r
42         private string mHostName;\r
43         private bool mDomain2ch;\r
44 \r
45 \r
46         private CookieContainer mContainer;\r
47 \r
48         public CookieContainer Container\r
49         {\r
50             get { return mContainer; }\r
51         }\r
52 \r
53         public string Host\r
54         {\r
55             set\r
56             {\r
57                 mHostName = value;\r
58                 mHostUri = new Uri("http://" + value);\r
59                 retrieveCookie();\r
60             }\r
61         }\r
62 \r
63         public NTCookie(string host) : this(host, true)\r
64         {\r
65 #if false\r
66             mHostName = host;\r
67             mHostUri = new Uri("http://"+host);\r
68             mContainer = new CookieContainer();\r
69 \r
70             retrieveCookie();\r
71 #endif\r
72         }\r
73 \r
74         public NTCookie(string host, bool domain2ch)\r
75         {\r
76             mDomain2ch = domain2ch;\r
77             mHostName = host;\r
78             mHostUri = new Uri("http://" + host);\r
79             mContainer = new CookieContainer();\r
80 \r
81             retrieveCookie();\r
82         }\r
83 \r
84         \r
85         public void saveCookie()\r
86         {\r
87             //string cookie1 = mContainer.GetCookieHeader(mHostUri);\r
88             //string cookie2 = mContainer.GetCookieHeader(new Uri("http://2ch.net"));\r
89             CookieCollection ccol = mContainer.GetCookies(mHostUri);\r
90 \r
91             foreach (Cookie cookie in ccol)\r
92             {\r
93                 CookieValue cv = null;\r
94                 string domain = cookie.Domain;\r
95                 if (domain == null)\r
96                     continue;\r
97                 cv = findCookieValue(domain);\r
98                 if (cv == null)\r
99                 {\r
100                     cv = new CookieValue(domain);\r
101                     addCookieValue(cv);\r
102                 }\r
103                 string key = cookie.Name;\r
104                 string value = cookie.Value;\r
105                 KeyValuePair<string, string> pair \r
106                     = new KeyValuePair<string, string>(key, value);\r
107                 cv.mKeyValueList.Add(pair);\r
108             }\r
109             \r
110             \r
111             foreach (CookieValue cv in mCookieValue)\r
112             {\r
113                 NTFileAccess.saveCookie(cv.mKeyValueList, cv.mHostName);\r
114             }\r
115 \r
116         }\r
117 \r
118         void retrieveCookie()\r
119         {\r
120             \r
121             List<KeyValuePair<string, string>> rootList = NTFileAccess.retrieveCookie(".2ch.net");\r
122             List<KeyValuePair<string, string>> list = NTFileAccess.retrieveCookie(mHostName);\r
123             \r
124             if(mDomain2ch)\r
125                 list.AddRange(rootList);\r
126 \r
127             if (list.Count > 0)\r
128             {\r
129                 string cookieHeader = constructCookieHeader(list);\r
130                 mContainer.SetCookies(mHostUri, cookieHeader);\r
131             }\r
132 \r
133         }\r
134 \r
135  \r
136         string constructCookieHeader(List<KeyValuePair<string, string>> list)\r
137         {\r
138             NTDebug.l(" *** Entering constructCookieHeader *** ");\r
139             StringBuilder result = new StringBuilder();\r
140             result.Append(" ");\r
141             int i = 0;\r
142             for(; i < list.Count; i++)\r
143             {\r
144                 if (0 < i)\r
145                 {\r
146                     //result.Append("; ");\r
147                     result.Append(",");\r
148                 }\r
149                 KeyValuePair<string, string> pair = list[i];\r
150                 NTDebug.l("\t "+pair.Key+" : "+pair.Value);\r
151                 result.Append(pair.Key).Append("=").Append(pair.Value);\r
152             }\r
153             return (i == 0) ? null : result.ToString();\r
154 \r
155         }\r
156 \r
157 \r
158 \r
159     }\r
160 }\r