home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / net / www / protocol / mailto / handler.java
Text File  |  1995-08-11  |  3KB  |  90 lines

  1. /*
  2.  * @(#)Handler.java    1.10 95/05/21 James Gosling, Jonathan Payne
  3.  * 
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  * 
  6.  * Permission to use, copy, modify, and distribute this software and its
  7.  * documentation for NON-COMMERCIAL purposes and without fee is hereby
  8.  * granted provided that this copyright notice appears in all copies. Please
  9.  * refer to the file "copyright.html" for further important copyright and
  10.  * licensing information.
  11.  * 
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF THE
  13.  * SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE
  14.  * IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE,
  15.  * OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR ANY DAMAGES SUFFERED BY
  16.  * LICENSEE AS A RESULT OF USING, MODIFYING OR DISTRIBUTING THIS SOFTWARE OR
  17.  * ITS DERIVATIVES.
  18.  */
  19.  
  20. /*-
  21.  *    mailto stream opener
  22.  */
  23.  
  24. package net.www.protocol.mailto;
  25.  
  26. import java.io.*;
  27. import net.www.html.*;
  28. import net.www.protocol.news.ArticlePoster;
  29. import net.smtp.SmtpClient;
  30.  
  31. /** open an nntp input stream given a URL */
  32. class Handler extends URLStreamHandler implements Runnable {
  33.     private String decodePercent(String s) {
  34.     if (s==null || s.indexOf('%') < 0)
  35.         return s;
  36.     int limit = s.length();
  37.     char d[] = new char[limit];
  38.     int dp = 0;
  39.     for (int sp = 0; sp < limit; sp++) {
  40.         int c = s.charAt(sp);
  41.         if (c == '%' && sp + 2 < limit) {
  42.         int s1 = s.charAt(sp + 1);
  43.         int s2 = s.charAt(sp + 2);
  44.         if ('0' <= s1 && s1 <= '9')
  45.             s1 = s1 - '0';
  46.         else if ('a' <= s1 && s1 <= 'f')
  47.             s1 = s1 - 'a' + 10;
  48.         else if ('A' <= s1 && s1 <= 'F')
  49.             s1 = s1 - 'A' + 10;
  50.         else
  51.             s1 = -1;
  52.         if ('0' <= s2 && s2 <= '9')
  53.             s2 = s2 - '0';
  54.         else if ('a' <= s2 && s2 <= 'f')
  55.             s2 = s2 - 'a' + 10;
  56.         else if ('A' <= s2 && s2 <= 'F')
  57.             s2 = s2 - 'A' + 10;
  58.         else
  59.             s2 = -1;
  60.         if (s1 >= 0 && s2 >= 0) {
  61.             c = (s1 << 4) | s2;
  62.             sp += 2;
  63.         }
  64.         }
  65.         d[dp++] = (char) c;
  66.     }
  67.     return new String(d, 0, dp);
  68.     }
  69.  
  70.     public InputStream openStream(URL u) {
  71.         String dest = u.file;
  72.         String subj = "";
  73.         int lastsl = dest.lastIndexOf('/');
  74.         if (lastsl >= 0) {
  75.         int st = dest.charAt(0) == '/' ? 1 : 0;
  76.         if (lastsl > st)
  77.             subj = dest.substring(st, lastsl);
  78.         dest = dest.substring(lastsl + 1);
  79.         }
  80.         if (u.postData != null) {
  81.         ArticlePoster.MailTo("Posted form",
  82.                      decodePercent(dest),                     
  83.                      u.postData);
  84.         }
  85.         else
  86.         ArticlePoster.MailTo(decodePercent(subj), decodePercent(dest));
  87.     return null;
  88.     }
  89. }
  90.