2003-05-21 Ben Maurer <bmaurer@users.sourceforge.net>
[mono.git] / mcs / class / System / System.Net / WebClient.cs
1 //\r
2 // System.Net.WebClient\r
3 //\r
4 // Author:\r
5 //   Lawrence Pit (loz@cable.a2000.nl)\r
6 //\r
7 \r
8 using System;\r
9 using System.Collections;\r
10 using System.Collections.Specialized;\r
11 using System.ComponentModel;\r
12 using System.IO;\r
13 using System.Runtime.InteropServices;\r
14 using System.Runtime.Serialization;\r
15 \r
16 namespace System.Net \r
17 {\r
18         [ComVisible(true)]\r
19         public sealed class WebClient : Component\r
20         {\r
21 \r
22                 ICredentials credentials;\r
23         \r
24                 // Constructors\r
25                 \r
26                 public WebClient ()\r
27                 {\r
28                 }\r
29                 \r
30                 // Properties\r
31                 \r
32                 [MonoTODO]\r
33                 public string BaseAddress {\r
34                         get { throw new NotImplementedException (); }\r
35                         set { throw new NotImplementedException (); }\r
36                 }\r
37                 \r
38                 public ICredentials Credentials {\r
39                         get { return credentials; }\r
40                         set { credentials = value; }\r
41                 }\r
42                 \r
43                 [MonoTODO]\r
44                 public WebHeaderCollection Headers {\r
45                         get { throw new NotImplementedException (); }\r
46                         set { throw new NotImplementedException (); }\r
47                 }\r
48                 \r
49                 [MonoTODO]\r
50                 public NameValueCollection QueryString {\r
51                         get { throw new NotImplementedException (); }\r
52                         set { throw new NotImplementedException (); }\r
53                 }\r
54                 \r
55                 [MonoTODO]\r
56                 public WebHeaderCollection ResponseHeaders {\r
57                         get { throw new NotImplementedException (); }\r
58                 }\r
59 \r
60                 // Methods\r
61                 \r
62                 public byte [] DownloadData (string address)\r
63                 {\r
64                         const int readSize = 8192;\r
65                         Stream networkStream = OpenRead (address);\r
66                         ArrayList chunks = new ArrayList ();\r
67                         byte[] buf = new byte [readSize];\r
68                         int size = 0;\r
69                         int total_size = 0;\r
70 \r
71                         try {\r
72                                 do {\r
73                                         size = networkStream.Read (buf, 0, readSize);\r
74                                         byte [] copy = new byte [size];\r
75                                         Array.Copy (buf, 0, copy,0, size);\r
76                                         chunks.Add (copy);\r
77                                         total_size += size;\r
78                                 } while (size != 0);\r
79                         } finally {\r
80                                 networkStream.Close ();\r
81                         }\r
82                         \r
83                         byte [] result = new byte [total_size];\r
84                         int target = 0;\r
85                         foreach (byte [] block in chunks){\r
86                                 int len = block.Length;\r
87                                 Array.Copy (block, 0, result, target, len);\r
88                                 target += len;\r
89                         }\r
90                         return result;\r
91                 }\r
92                 \r
93                 public void DownloadFile (string address, string fileName)\r
94                 {\r
95                         byte[] buf = DownloadData (address);\r
96                         using (FileStream f = new FileStream (fileName, FileMode.CreateNew)){\r
97                                 f.Write (buf, 0, buf.Length);\r
98                         }\r
99                 }\r
100                 \r
101                 public Stream OpenRead (string address)\r
102                 {\r
103                         Uri uri = new Uri (address);\r
104                         WebRequest request = null;\r
105 \r
106                         if (uri.Scheme == Uri.UriSchemeHttp || uri.Scheme == Uri.UriSchemeHttps)\r
107                                 request = new HttpWebRequest (uri);\r
108                         else if(uri.Scheme == Uri.UriSchemeFile)\r
109                                 request = new FileWebRequest (uri);\r
110                         else\r
111                                 throw new NotImplementedException ();\r
112 \r
113                         return request.GetResponse ().GetResponseStream ();\r
114                 }\r
115                 \r
116                 public Stream OpenWrite (string address)\r
117                 {\r
118                         return OpenWrite (address, "POST");\r
119                 }\r
120                 \r
121                 [MonoTODO]\r
122                 public Stream OpenWrite (string address, string method)\r
123                 {\r
124                         throw new NotImplementedException ();\r
125                 }\r
126                                 \r
127                 public byte [] UploadData (string address, byte [] data)\r
128                 {\r
129                         return UploadData (address, "POST", data);\r
130                 }\r
131                 \r
132                 [MonoTODO]\r
133                 public byte [] UploadData (string address, string method, byte [] data)\r
134                 {\r
135                         throw new NotImplementedException ();\r
136                 }\r
137                 \r
138                 public byte [] UploadFile (string address, string fileName)\r
139                 {\r
140                         return UploadFile (address, "POST", fileName);\r
141                 }\r
142                 \r
143                 [MonoTODO]\r
144                 public byte[] UploadFile (string address, string method, string fileName)\r
145                 {\r
146                         throw new NotImplementedException ();\r
147                 }\r
148                 \r
149                 public byte[] UploadValues (string address, NameValueCollection data)\r
150                 {\r
151                         return UploadValues (address, "POST", data);\r
152                 }\r
153                 \r
154                 [MonoTODO]\r
155                 public byte[] UploadValues (string address, string method, NameValueCollection data)\r
156                 {\r
157                         throw new NotImplementedException ();\r
158                 }\r
159         }\r
160 }\r