In corlib/System.Runtime.InteropServices:
[mono.git] / mcs / class / System / System.Net.Mail / AttachmentBase.cs
1 //
2 // System.Net.Mail.AttachmentBase.cs
3 //
4 // Author:
5 //      John Luke (john.luke@gmail.com)
6 //
7 // Copyright (C) John Luke, 2005
8 //
9
10 //
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
18 // 
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 // 
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
29 //
30
31 #if NET_2_0
32
33 using System.IO;
34 using System.Net.Mime;
35 using System.Text;
36 using System.Collections;
37
38 namespace System.Net.Mail {
39         public abstract class AttachmentBase : IDisposable
40         {
41                 #region Fields
42
43                 string id;
44                 ContentType contentType = new ContentType ();
45                 Stream contentStream;
46                 TransferEncoding transferEncoding;
47
48                 #endregion // Fields
49
50                 #region Constructors
51
52                 protected AttachmentBase (Stream contentStream)
53                 {
54                         if (contentStream == null)
55                                 throw new ArgumentNullException ();
56                         this.contentStream = contentStream;
57                         contentType.MediaType = MediaTypeNames.Application.Octet;
58                         contentType.CharSet = null;
59                         transferEncoding = TransferEncoding.Base64;
60                 }
61
62                 protected AttachmentBase (Stream contentStream, ContentType contentType)
63                 {
64                         if (contentStream == null || contentType == null)
65                                 throw new ArgumentNullException ();
66                         this.contentStream = contentStream;
67                         this.contentType = contentType;
68                         transferEncoding = TransferEncoding.Base64;
69                 }
70
71                 protected AttachmentBase (Stream contentStream, string mediaType)
72                 {
73                         if (contentStream == null)
74                                 throw new ArgumentNullException ();
75                         this.contentStream = contentStream;
76                         contentType.MediaType = mediaType;
77                         transferEncoding = TransferEncoding.Base64;
78                 }
79
80                 protected AttachmentBase (string fileName)
81                 {
82                         if (fileName == null)
83                                 throw new ArgumentNullException ();
84                         contentStream = File.OpenRead (fileName);
85                         contentType = new ContentType (MimeTypes.GetMimeType (fileName));
86                         transferEncoding = TransferEncoding.Base64;
87                 }
88
89                 protected AttachmentBase (string fileName, ContentType contentType) {
90                         if (fileName == null)
91                                 throw new ArgumentNullException ();
92                         contentStream = File.OpenRead (fileName);
93                         this.contentType = contentType;
94                         transferEncoding = TransferEncoding.Base64;
95                 }
96
97                 protected AttachmentBase (string fileName, string mediaType)
98                 {
99                         if (fileName == null)
100                                 throw new ArgumentNullException ();
101                         contentStream = File.OpenRead (fileName);
102                         contentType.MediaType = mediaType;
103                         transferEncoding = TransferEncoding.Base64;
104                 }
105
106                 #endregion // Constructors
107
108                 #region Properties
109
110                 public string ContentId {
111                         get { return id; }
112                         set {
113                                 if (value == null)
114                                         throw new ArgumentNullException ();
115                                 id = value;
116                         }
117                 }
118
119                 public Stream ContentStream {
120                         get { return contentStream; }
121                 }
122
123                 public ContentType ContentType {
124                         get { return contentType; }
125                         set { contentType = value; }
126                 }
127
128                 public TransferEncoding TransferEncoding {
129                         get { return transferEncoding; }
130                         set { transferEncoding = value; }
131                 }
132
133                 #endregion // Properties
134
135                 #region Methods
136
137                 public void Dispose ()
138                 {
139                         Dispose (true);
140                         //GC.SuppressFinalize (this);
141                 }
142
143                 [MonoTODO]
144                 protected virtual void Dispose (bool disposing)
145                 {
146                 }
147
148                 #endregion // Methods
149                 private class MimeTypes
150                 {
151                         static Hashtable mimeTypes;
152
153                         static MimeTypes () {
154 #if NET_2_0
155                                 mimeTypes = new Hashtable (StringComparer.InvariantCultureIgnoreCase);
156 #else
157                             mimeTypes = new Hashtable (CaseInsensitiveHashCodeProvider.DefaultInvariant,
158                                                    CaseInsensitiveComparer.DefaultInvariant);
159 #endif
160
161                                 mimeTypes.Add ("3dm", "x-world/x-3dmf");
162                                 mimeTypes.Add ("3dmf", "x-world/x-3dmf");
163                                 mimeTypes.Add ("aab", "application/x-authorware-bin");
164                                 mimeTypes.Add ("aam", "application/x-authorware-map");
165                                 mimeTypes.Add ("aas", "application/x-authorware-seg");
166                                 mimeTypes.Add ("abc", "text/vnd.abc");
167                                 mimeTypes.Add ("acgi", "text/html");
168                                 mimeTypes.Add ("afl", "video/animaflex");
169                                 mimeTypes.Add ("ai", "application/postscript");
170                                 mimeTypes.Add ("aif", "audio/aiff");
171                                 mimeTypes.Add ("aifc", "audio/aiff");
172                                 mimeTypes.Add ("aiff", "audio/aiff");
173                                 mimeTypes.Add ("aim", "application/x-aim");
174                                 mimeTypes.Add ("aip", "text/x-audiosoft-intra");
175                                 mimeTypes.Add ("ani", "application/x-navi-animation");
176                                 mimeTypes.Add ("aos", "application/x-nokia-9000-communicator-add-on-software");
177                                 mimeTypes.Add ("aps", "application/mime");
178                                 mimeTypes.Add ("art", "image/x-jg");
179                                 mimeTypes.Add ("asf", "video/x-ms-asf");
180                                 mimeTypes.Add ("asm", "text/x-asm");
181                                 mimeTypes.Add ("asp", "text/asp");
182                                 mimeTypes.Add ("asx", "application/x-mplayer2");
183                                 mimeTypes.Add ("au", "audio/x-au");
184                                 mimeTypes.Add ("avi", "video/avi");
185                                 mimeTypes.Add ("avs", "video/avs-video");
186                                 mimeTypes.Add ("bcpio", "application/x-bcpio");
187                                 mimeTypes.Add ("bm", "image/bmp");
188                                 mimeTypes.Add ("bmp", "image/bmp");
189                                 mimeTypes.Add ("boo", "application/book");
190                                 mimeTypes.Add ("book", "application/book");
191                                 mimeTypes.Add ("boz", "application/x-bzip2");
192                                 mimeTypes.Add ("bsh", "application/x-bsh");
193                                 mimeTypes.Add ("bz", "application/x-bzip");
194                                 mimeTypes.Add ("bz2", "application/x-bzip2");
195                                 mimeTypes.Add ("c", "text/plain");
196                                 mimeTypes.Add ("c++", "text/plain");
197                                 mimeTypes.Add ("cat", "application/vnd.ms-pki.seccat");
198                                 mimeTypes.Add ("cc", "text/plain");
199                                 mimeTypes.Add ("ccad", "application/clariscad");
200                                 mimeTypes.Add ("cco", "application/x-cocoa");
201                                 mimeTypes.Add ("cdf", "application/cdf");
202                                 mimeTypes.Add ("cer", "application/pkix-cert");
203                                 mimeTypes.Add ("cha", "application/x-chat");
204                                 mimeTypes.Add ("chat", "application/x-chat");
205                                 mimeTypes.Add ("class", "application/java");
206                                 mimeTypes.Add ("conf", "text/plain");
207                                 mimeTypes.Add ("cpio", "application/x-cpio");
208                                 mimeTypes.Add ("cpp", "text/plain");
209                                 mimeTypes.Add ("cpt", "application/x-cpt");
210                                 mimeTypes.Add ("crl", "application/pkix-crl");
211                                 mimeTypes.Add ("crt", "application/pkix-cert");
212                                 mimeTypes.Add ("csh", "application/x-csh");
213                                 mimeTypes.Add ("css", "text/css");
214                                 mimeTypes.Add ("cxx", "text/plain");
215                                 mimeTypes.Add ("dcr", "application/x-director");
216                                 mimeTypes.Add ("deepv", "application/x-deepv");
217                                 mimeTypes.Add ("def", "text/plain");
218                                 mimeTypes.Add ("der", "application/x-x509-ca-cert");
219                                 mimeTypes.Add ("dif", "video/x-dv");
220                                 mimeTypes.Add ("dir", "application/x-director");
221                                 mimeTypes.Add ("dl", "video/dl");
222                                 mimeTypes.Add ("doc", "application/msword");
223                                 mimeTypes.Add ("dot", "application/msword");
224                                 mimeTypes.Add ("dp", "application/commonground");
225                                 mimeTypes.Add ("drw", "application/drafting");
226                                 mimeTypes.Add ("dv", "video/x-dv");
227                                 mimeTypes.Add ("dvi", "application/x-dvi");
228                                 mimeTypes.Add ("dwf", "drawing/x-dwf (old)");
229                                 mimeTypes.Add ("dwg", "application/acad");
230                                 mimeTypes.Add ("dxf", "application/dxf");
231                                 mimeTypes.Add ("dxr", "application/x-director");
232                                 mimeTypes.Add ("el", "text/x-script.elisp");
233                                 mimeTypes.Add ("elc", "application/x-elc");
234                                 mimeTypes.Add ("eps", "application/postscript");
235                                 mimeTypes.Add ("es", "application/x-esrehber");
236                                 mimeTypes.Add ("etx", "text/x-setext");
237                                 mimeTypes.Add ("evy", "application/envoy");
238                                 mimeTypes.Add ("f", "text/plain");
239                                 mimeTypes.Add ("f77", "text/plain");
240                                 mimeTypes.Add ("f90", "text/plain");
241                                 mimeTypes.Add ("fdf", "application/vnd.fdf");
242                                 mimeTypes.Add ("fif", "image/fif");
243                                 mimeTypes.Add ("fli", "video/fli");
244                                 mimeTypes.Add ("flo", "image/florian");
245                                 mimeTypes.Add ("flx", "text/vnd.fmi.flexstor");
246                                 mimeTypes.Add ("fmf", "video/x-atomic3d-feature");
247                                 mimeTypes.Add ("for", "text/plain");
248                                 mimeTypes.Add ("fpx", "image/vnd.fpx");
249                                 mimeTypes.Add ("frl", "application/freeloader");
250                                 mimeTypes.Add ("funk", "audio/make");
251                                 mimeTypes.Add ("g", "text/plain");
252                                 mimeTypes.Add ("g3", "image/g3fax");
253                                 mimeTypes.Add ("gif", "image/gif");
254                                 mimeTypes.Add ("gl", "video/gl");
255                                 mimeTypes.Add ("gsd", "audio/x-gsm");
256                                 mimeTypes.Add ("gsm", "audio/x-gsm");
257                                 mimeTypes.Add ("gsp", "application/x-gsp");
258                                 mimeTypes.Add ("gss", "application/x-gss");
259                                 mimeTypes.Add ("gtar", "application/x-gtar");
260                                 mimeTypes.Add ("gz", "application/x-gzip");
261                                 mimeTypes.Add ("gzip", "application/x-gzip");
262                                 mimeTypes.Add ("h", "text/plain");
263                                 mimeTypes.Add ("hdf", "application/x-hdf");
264                                 mimeTypes.Add ("help", "application/x-helpfile");
265                                 mimeTypes.Add ("hgl", "application/vnd.hp-HPGL");
266                                 mimeTypes.Add ("hh", "text/plain");
267                                 mimeTypes.Add ("hlb", "text/x-script");
268                                 mimeTypes.Add ("hlp", "application/x-helpfile");
269                                 mimeTypes.Add ("hpg", "application/vnd.hp-HPGL");
270                                 mimeTypes.Add ("hpgl", "application/vnd.hp-HPGL");
271                                 mimeTypes.Add ("hqx", "application/binhex");
272                                 mimeTypes.Add ("hta", "application/hta");
273                                 mimeTypes.Add ("htc", "text/x-component");
274                                 mimeTypes.Add ("htm", "text/html");
275                                 mimeTypes.Add ("html", "text/html");
276                                 mimeTypes.Add ("htmls", "text/html");
277                                 mimeTypes.Add ("htt", "text/webviewhtml");
278                                 mimeTypes.Add ("htx", "text/html");
279                                 mimeTypes.Add ("ice", "x-conference/x-cooltalk");
280                                 mimeTypes.Add ("ico", "image/x-icon");
281                                 mimeTypes.Add ("idc", "text/plain");
282                                 mimeTypes.Add ("ief", "image/ief");
283                                 mimeTypes.Add ("iefs", "image/ief");
284                                 mimeTypes.Add ("iges", "application/iges");
285                                 mimeTypes.Add ("igs", "application/iges");
286                                 mimeTypes.Add ("ima", "application/x-ima");
287                                 mimeTypes.Add ("imap", "application/x-httpd-imap");
288                                 mimeTypes.Add ("inf", "application/inf");
289                                 mimeTypes.Add ("ins", "application/x-internett-signup");
290                                 mimeTypes.Add ("ip", "application/x-ip2");
291                                 mimeTypes.Add ("isu", "video/x-isvideo");
292                                 mimeTypes.Add ("it", "audio/it");
293                                 mimeTypes.Add ("iv", "application/x-inventor");
294                                 mimeTypes.Add ("ivr", "i-world/i-vrml");
295                                 mimeTypes.Add ("ivy", "application/x-livescreen");
296                                 mimeTypes.Add ("jam", "audio/x-jam");
297                                 mimeTypes.Add ("jav", "text/plain");
298                                 mimeTypes.Add ("java", "text/plain");
299                                 mimeTypes.Add ("jcm", "application/x-java-commerce");
300                                 mimeTypes.Add ("jfif", "image/jpeg");
301                                 mimeTypes.Add ("jfif-tbnl", "image/jpeg");
302                                 mimeTypes.Add ("jpe", "image/jpeg");
303                                 mimeTypes.Add ("jpeg", "image/jpeg");
304                                 mimeTypes.Add ("jpg", "image/jpeg");
305                                 mimeTypes.Add ("jps", "image/x-jps");
306                                 mimeTypes.Add ("js", "application/x-javascript");
307                                 mimeTypes.Add ("jut", "image/jutvision");
308                                 mimeTypes.Add ("kar", "audio/midi");
309                                 mimeTypes.Add ("ksh", "text/x-script.ksh");
310                                 mimeTypes.Add ("la", "audio/nspaudio");
311                                 mimeTypes.Add ("lam", "audio/x-liveaudio");
312                                 mimeTypes.Add ("latex", "application/x-latex");
313                                 mimeTypes.Add ("list", "text/plain");
314                                 mimeTypes.Add ("lma", "audio/nspaudio");
315                                 mimeTypes.Add ("log", "text/plain");
316                                 mimeTypes.Add ("lsp", "application/x-lisp");
317                                 mimeTypes.Add ("lst", "text/plain");
318                                 mimeTypes.Add ("lsx", "text/x-la-asf");
319                                 mimeTypes.Add ("ltx", "application/x-latex");
320                                 mimeTypes.Add ("m", "text/plain");
321                                 mimeTypes.Add ("m1v", "video/mpeg");
322                                 mimeTypes.Add ("m2a", "audio/mpeg");
323                                 mimeTypes.Add ("m2v", "video/mpeg");
324                                 mimeTypes.Add ("m3u", "audio/x-mpequrl");
325                                 mimeTypes.Add ("man", "application/x-troff-man");
326                                 mimeTypes.Add ("map", "application/x-navimap");
327                                 mimeTypes.Add ("mar", "text/plain");
328                                 mimeTypes.Add ("mbd", "application/mbedlet");
329                                 mimeTypes.Add ("mc$", "application/x-magic-cap-package-1.0");
330                                 mimeTypes.Add ("mcd", "application/mcad");
331                                 mimeTypes.Add ("mcf", "image/vasa");
332                                 mimeTypes.Add ("mcp", "application/netmc");
333                                 mimeTypes.Add ("me", "application/x-troff-me");
334                                 mimeTypes.Add ("mht", "message/rfc822");
335                                 mimeTypes.Add ("mhtml", "message/rfc822");
336                                 mimeTypes.Add ("mid", "audio/midi");
337                                 mimeTypes.Add ("midi", "audio/midi");
338                                 mimeTypes.Add ("mif", "application/x-mif");
339                                 mimeTypes.Add ("mime", "message/rfc822");
340                                 mimeTypes.Add ("mjf", "audio/x-vnd.AudioExplosion.MjuiceMediaFile");
341                                 mimeTypes.Add ("mjpg", "video/x-motion-jpeg");
342                                 mimeTypes.Add ("mm", "application/base64");
343                                 mimeTypes.Add ("mme", "application/base64");
344                                 mimeTypes.Add ("mod", "audio/mod");
345                                 mimeTypes.Add ("moov", "video/quicktime");
346                                 mimeTypes.Add ("mov", "video/quicktime");
347                                 mimeTypes.Add ("movie", "video/x-sgi-movie");
348                                 mimeTypes.Add ("mp2", "video/mpeg");
349                                 mimeTypes.Add ("mp3", "audio/mpeg3");
350                                 mimeTypes.Add ("mpa", "audio/mpeg");
351                                 mimeTypes.Add ("mpc", "application/x-project");
352                                 mimeTypes.Add ("mpe", "video/mpeg");
353                                 mimeTypes.Add ("mpeg", "video/mpeg");
354                                 mimeTypes.Add ("mpg", "video/mpeg");
355                                 mimeTypes.Add ("mpga", "audio/mpeg");
356                                 mimeTypes.Add ("mpp", "application/vnd.ms-project");
357                                 mimeTypes.Add ("mpt", "application/x-project");
358                                 mimeTypes.Add ("mpv", "application/x-project");
359                                 mimeTypes.Add ("mpx", "application/x-project");
360                                 mimeTypes.Add ("mrc", "application/marc");
361                                 mimeTypes.Add ("ms", "application/x-troff-ms");
362                                 mimeTypes.Add ("mv", "video/x-sgi-movie");
363                                 mimeTypes.Add ("my", "audio/make");
364                                 mimeTypes.Add ("mzz", "application/x-vnd.AudioExplosion.mzz");
365                                 mimeTypes.Add ("nap", "image/naplps");
366                                 mimeTypes.Add ("naplps", "image/naplps");
367                                 mimeTypes.Add ("nc", "application/x-netcdf");
368                                 mimeTypes.Add ("ncm", "application/vnd.nokia.configuration-message");
369                                 mimeTypes.Add ("nif", "image/x-niff");
370                                 mimeTypes.Add ("niff", "image/x-niff");
371                                 mimeTypes.Add ("nix", "application/x-mix-transfer");
372                                 mimeTypes.Add ("nsc", "application/x-conference");
373                                 mimeTypes.Add ("nvd", "application/x-navidoc");
374                                 mimeTypes.Add ("oda", "application/oda");
375                                 mimeTypes.Add ("omc", "application/x-omc");
376                                 mimeTypes.Add ("omcd", "application/x-omcdatamaker");
377                                 mimeTypes.Add ("omcr", "application/x-omcregerator");
378                                 mimeTypes.Add ("p", "text/x-pascal");
379                                 mimeTypes.Add ("p10", "application/pkcs10");
380                                 mimeTypes.Add ("p12", "application/pkcs-12");
381                                 mimeTypes.Add ("p7a", "application/x-pkcs7-signature");
382                                 mimeTypes.Add ("p7c", "application/pkcs7-mime");
383                                 mimeTypes.Add ("p7m", "application/pkcs7-mime");
384                                 mimeTypes.Add ("p7r", "application/x-pkcs7-certreqresp");
385                                 mimeTypes.Add ("p7s", "application/pkcs7-signature");
386                                 mimeTypes.Add ("part", "application/pro_eng");
387                                 mimeTypes.Add ("pas", "text/pascal");
388                                 mimeTypes.Add ("pbm", "image/x-portable-bitmap");
389                                 mimeTypes.Add ("pcl", "application/x-pcl");
390                                 mimeTypes.Add ("pct", "image/x-pict");
391                                 mimeTypes.Add ("pcx", "image/x-pcx");
392                                 mimeTypes.Add ("pdb", "chemical/x-pdb");
393                                 mimeTypes.Add ("pdf", "application/pdf");
394                                 mimeTypes.Add ("pfunk", "audio/make");
395                                 mimeTypes.Add ("pgm", "image/x-portable-graymap");
396                                 mimeTypes.Add ("pic", "image/pict");
397                                 mimeTypes.Add ("pict", "image/pict");
398                                 mimeTypes.Add ("pkg", "application/x-newton-compatible-pkg");
399                                 mimeTypes.Add ("pko", "application/vnd.ms-pki.pko");
400                                 mimeTypes.Add ("pl", "text/plain");
401                                 mimeTypes.Add ("plx", "application/x-PiXCLscript");
402                                 mimeTypes.Add ("pm", "image/x-xpixmap");
403                                 mimeTypes.Add ("pm4", "application/x-pagemaker");
404                                 mimeTypes.Add ("pm5", "application/x-pagemaker");
405                                 mimeTypes.Add ("png", "image/png");
406                                 mimeTypes.Add ("pnm", "application/x-portable-anymap");
407                                 mimeTypes.Add ("pot", "application/mspowerpoint");
408                                 mimeTypes.Add ("pov", "model/x-pov");
409                                 mimeTypes.Add ("ppa", "application/vnd.ms-powerpoint");
410                                 mimeTypes.Add ("ppm", "image/x-portable-pixmap");
411                                 mimeTypes.Add ("pps", "application/mspowerpoint");
412                                 mimeTypes.Add ("ppt", "application/mspowerpoint");
413                                 mimeTypes.Add ("ppz", "application/mspowerpoint");
414                                 mimeTypes.Add ("pre", "application/x-freelance");
415                                 mimeTypes.Add ("prt", "application/pro_eng");
416                                 mimeTypes.Add ("ps", "application/postscript");
417                                 mimeTypes.Add ("pvu", "paleovu/x-pv");
418                                 mimeTypes.Add ("pwz", "application/vnd.ms-powerpoint");
419                                 mimeTypes.Add ("py", "text/x-script.phyton");
420                                 mimeTypes.Add ("pyc", "applicaiton/x-bytecode.python");
421                                 mimeTypes.Add ("qcp", "audio/vnd.qcelp");
422                                 mimeTypes.Add ("qd3", "x-world/x-3dmf");
423                                 mimeTypes.Add ("qd3d", "x-world/x-3dmf");
424                                 mimeTypes.Add ("qif", "image/x-quicktime");
425                                 mimeTypes.Add ("qt", "video/quicktime");
426                                 mimeTypes.Add ("qtc", "video/x-qtc");
427                                 mimeTypes.Add ("qti", "image/x-quicktime");
428                                 mimeTypes.Add ("qtif", "image/x-quicktime");
429                                 mimeTypes.Add ("ra", "audio/x-pn-realaudio");
430                                 mimeTypes.Add ("ram", "audio/x-pn-realaudio");
431                                 mimeTypes.Add ("ras", "application/x-cmu-raster");
432                                 mimeTypes.Add ("rast", "image/cmu-raster");
433                                 mimeTypes.Add ("rexx", "text/x-script.rexx");
434                                 mimeTypes.Add ("rf", "image/vnd.rn-realflash");
435                                 mimeTypes.Add ("rgb", "image/x-rgb");
436                                 mimeTypes.Add ("rm", "application/vnd.rn-realmedia");
437                                 mimeTypes.Add ("rmi", "audio/mid");
438                                 mimeTypes.Add ("rmm", "audio/x-pn-realaudio");
439                                 mimeTypes.Add ("rmp", "audio/x-pn-realaudio");
440                                 mimeTypes.Add ("rng", "application/ringing-tones");
441                                 mimeTypes.Add ("rnx", "application/vnd.rn-realplayer");
442                                 mimeTypes.Add ("roff", "application/x-troff");
443                                 mimeTypes.Add ("rp", "image/vnd.rn-realpix");
444                                 mimeTypes.Add ("rpm", "audio/x-pn-realaudio-plugin");
445                                 mimeTypes.Add ("rss", "text/xml");
446                                 mimeTypes.Add ("rt", "text/richtext");
447                                 mimeTypes.Add ("rtf", "text/richtext");
448                                 mimeTypes.Add ("rtx", "text/richtext");
449                                 mimeTypes.Add ("rv", "video/vnd.rn-realvideo");
450                                 mimeTypes.Add ("s", "text/x-asm");
451                                 mimeTypes.Add ("s3m", "audio/s3m");
452                                 mimeTypes.Add ("sbk", "application/x-tbook");
453                                 mimeTypes.Add ("scm", "application/x-lotusscreencam");
454                                 mimeTypes.Add ("sdml", "text/plain");
455                                 mimeTypes.Add ("sdp", "application/sdp");
456                                 mimeTypes.Add ("sdr", "application/sounder");
457                                 mimeTypes.Add ("sea", "application/sea");
458                                 mimeTypes.Add ("set", "application/set");
459                                 mimeTypes.Add ("sgm", "text/sgml");
460                                 mimeTypes.Add ("sgml", "text/sgml");
461                                 mimeTypes.Add ("sh", "text/x-script.sh");
462                                 mimeTypes.Add ("shar", "application/x-bsh");
463                                 mimeTypes.Add ("shtml", "text/html");
464                                 mimeTypes.Add ("sid", "audio/x-psid");
465                                 mimeTypes.Add ("sit", "application/x-sit");
466                                 mimeTypes.Add ("skd", "application/x-koan");
467                                 mimeTypes.Add ("skm", "application/x-koan");
468                                 mimeTypes.Add ("skp", "application/x-koan");
469                                 mimeTypes.Add ("skt", "application/x-koan");
470                                 mimeTypes.Add ("sl", "application/x-seelogo");
471                                 mimeTypes.Add ("smi", "application/smil");
472                                 mimeTypes.Add ("smil", "application/smil");
473                                 mimeTypes.Add ("snd", "audio/basic");
474                                 mimeTypes.Add ("sol", "application/solids");
475                                 mimeTypes.Add ("spc", "application/x-pkcs7-certificates");
476                                 mimeTypes.Add ("spl", "application/futuresplash");
477                                 mimeTypes.Add ("spr", "application/x-sprite");
478                                 mimeTypes.Add ("sprite", "application/x-sprite");
479                                 mimeTypes.Add ("src", "application/x-wais-source");
480                                 mimeTypes.Add ("ssi", "text/x-server-parsed-html");
481                                 mimeTypes.Add ("ssm", "application/streamingmedia");
482                                 mimeTypes.Add ("sst", "application/vnd.ms-pki.certstore");
483                                 mimeTypes.Add ("step", "application/step");
484                                 mimeTypes.Add ("stl", "application/sla");
485                                 mimeTypes.Add ("stp", "application/step");
486                                 mimeTypes.Add ("sv4cpio", "application/x-sv4cpio");
487                                 mimeTypes.Add ("sv4crc", "application/x-sv4crc");
488                                 mimeTypes.Add ("svf", "image/x-dwg");
489                                 mimeTypes.Add ("svr", "application/x-world");
490                                 mimeTypes.Add ("swf", "application/x-shockwave-flash");
491                                 mimeTypes.Add ("t", "application/x-troff");
492                                 mimeTypes.Add ("talk", "text/x-speech");
493                                 mimeTypes.Add ("tar", "application/x-tar");
494                                 mimeTypes.Add ("tbk", "application/toolbook");
495                                 mimeTypes.Add ("tcl", "text/x-script.tcl");
496                                 mimeTypes.Add ("tcsh", "text/x-script.tcsh");
497                                 mimeTypes.Add ("tex", "application/x-tex");
498                                 mimeTypes.Add ("texi", "application/x-texinfo");
499                                 mimeTypes.Add ("texinfo", "application/x-texinfo");
500                                 mimeTypes.Add ("text", "text/plain");
501                                 mimeTypes.Add ("tgz", "application/x-compressed");
502                                 mimeTypes.Add ("tif", "image/tiff");
503                                 mimeTypes.Add ("tiff", "image/tiff");
504                                 mimeTypes.Add ("tr", "application/x-troff");
505                                 mimeTypes.Add ("tsi", "audio/tsp-audio");
506                                 mimeTypes.Add ("tsp", "audio/tsplayer");
507                                 mimeTypes.Add ("tsv", "text/tab-separated-values");
508                                 mimeTypes.Add ("turbot", "image/florian");
509                                 mimeTypes.Add ("txt", "text/plain");
510                                 mimeTypes.Add ("uil", "text/x-uil");
511                                 mimeTypes.Add ("uni", "text/uri-list");
512                                 mimeTypes.Add ("unis", "text/uri-list");
513                                 mimeTypes.Add ("unv", "application/i-deas");
514                                 mimeTypes.Add ("uri", "text/uri-list");
515                                 mimeTypes.Add ("uris", "text/uri-list");
516                                 mimeTypes.Add ("ustar", "multipart/x-ustar");
517                                 mimeTypes.Add ("uu", "text/x-uuencode");
518                                 mimeTypes.Add ("uue", "text/x-uuencode");
519                                 mimeTypes.Add ("vcd", "application/x-cdlink");
520                                 mimeTypes.Add ("vcs", "text/x-vCalendar");
521                                 mimeTypes.Add ("vda", "application/vda");
522                                 mimeTypes.Add ("vdo", "video/vdo");
523                                 mimeTypes.Add ("vew", "application/groupwise");
524                                 mimeTypes.Add ("viv", "video/vivo");
525                                 mimeTypes.Add ("vivo", "video/vivo");
526                                 mimeTypes.Add ("vmd", "application/vocaltec-media-desc");
527                                 mimeTypes.Add ("vmf", "application/vocaltec-media-file");
528                                 mimeTypes.Add ("voc", "audio/voc");
529                                 mimeTypes.Add ("vos", "video/vosaic");
530                                 mimeTypes.Add ("vox", "audio/voxware");
531                                 mimeTypes.Add ("vqe", "audio/x-twinvq-plugin");
532                                 mimeTypes.Add ("vqf", "audio/x-twinvq");
533                                 mimeTypes.Add ("vql", "audio/x-twinvq-plugin");
534                                 mimeTypes.Add ("vrml", "application/x-vrml");
535                                 mimeTypes.Add ("vrt", "x-world/x-vrt");
536                                 mimeTypes.Add ("vsd", "application/x-visio");
537                                 mimeTypes.Add ("vst", "application/x-visio");
538                                 mimeTypes.Add ("vsw", "application/x-visio");
539                                 mimeTypes.Add ("w60", "application/wordperfect6.0");
540                                 mimeTypes.Add ("w61", "application/wordperfect6.1");
541                                 mimeTypes.Add ("w6w", "application/msword");
542                                 mimeTypes.Add ("wav", "audio/wav");
543                                 mimeTypes.Add ("wb1", "application/x-qpro");
544                                 mimeTypes.Add ("wbmp", "image/vnd.wap.wbmp");
545                                 mimeTypes.Add ("web", "application/vnd.xara");
546                                 mimeTypes.Add ("wiz", "application/msword");
547                                 mimeTypes.Add ("wk1", "application/x-123");
548                                 mimeTypes.Add ("wmf", "windows/metafile");
549                                 mimeTypes.Add ("wml", "text/vnd.wap.wml");
550                                 mimeTypes.Add ("wmlc", "application/vnd.wap.wmlc");
551                                 mimeTypes.Add ("wmls", "text/vnd.wap.wmlscript");
552                                 mimeTypes.Add ("wmlsc", "application/vnd.wap.wmlscriptc");
553                                 mimeTypes.Add ("word", "application/msword");
554                                 mimeTypes.Add ("wp", "application/wordperfect");
555                                 mimeTypes.Add ("wp5", "application/wordperfect");
556                                 mimeTypes.Add ("wp6", "application/wordperfect");
557                                 mimeTypes.Add ("wpd", "application/wordperfect");
558                                 mimeTypes.Add ("wq1", "application/x-lotus");
559                                 mimeTypes.Add ("wri", "application/mswrite");
560                                 mimeTypes.Add ("wrl", "application/x-world");
561                                 mimeTypes.Add ("wrz", "model/vrml");
562                                 mimeTypes.Add ("wsc", "text/scriplet");
563                                 mimeTypes.Add ("wsrc", "application/x-wais-source");
564                                 mimeTypes.Add ("wtk", "application/x-wintalk");
565                                 mimeTypes.Add ("xbm", "image/x-xbitmap");
566                                 mimeTypes.Add ("xdr", "video/x-amt-demorun");
567                                 mimeTypes.Add ("xgz", "xgl/drawing");
568                                 mimeTypes.Add ("xif", "image/vnd.xiff");
569                                 mimeTypes.Add ("xl", "application/excel");
570                                 mimeTypes.Add ("xla", "application/excel");
571                                 mimeTypes.Add ("xlb", "application/excel");
572                                 mimeTypes.Add ("xlc", "application/excel");
573                                 mimeTypes.Add ("xld", "application/excel");
574                                 mimeTypes.Add ("xlk", "application/excel");
575                                 mimeTypes.Add ("xll", "application/excel");
576                                 mimeTypes.Add ("xlm", "application/excel");
577                                 mimeTypes.Add ("xls", "application/excel");
578                                 mimeTypes.Add ("xlt", "application/excel");
579                                 mimeTypes.Add ("xlv", "application/excel");
580                                 mimeTypes.Add ("xlw", "application/excel");
581                                 mimeTypes.Add ("xm", "audio/xm");
582                                 mimeTypes.Add ("xml", "text/xml");
583                                 mimeTypes.Add ("xmz", "xgl/movie");
584                                 mimeTypes.Add ("xpix", "application/x-vnd.ls-xpix");
585                                 mimeTypes.Add ("xpm", "image/xpm");
586                                 mimeTypes.Add ("x-png", "image/png");
587                                 mimeTypes.Add ("xsr", "video/x-amt-showrun");
588                                 mimeTypes.Add ("xwd", "image/x-xwd");
589                                 mimeTypes.Add ("xyz", "chemical/x-pdb");
590                                 mimeTypes.Add ("z", "application/x-compressed");
591                                 mimeTypes.Add ("zip", "application/zip");
592                                 mimeTypes.Add ("zsh", "text/x-script.zsh");
593                         }
594
595                         public static string GetMimeType (string fileName) {
596                                 string result = null;
597                                 int dot = fileName.LastIndexOf ('.');
598
599                                 if (dot != -1 && fileName.Length > dot + 1)
600                                         result = mimeTypes [fileName.Substring (dot + 1)] as string;
601
602                                 if (result == null)
603                                         result = "application/octet-stream";
604
605                                 return result;
606                         }
607                 }
608         }
609 }
610
611 #endif // NET_2_0