home *** CD-ROM | disk | FTP | other *** search
/ Symantec Visual Cafe for Java 2.5 / symantec-visual-cafe-2.5-database-dev-edition.iso / VPage / Java.bin / CLASSES.ZIP / sun / rmi / transport / proxy / CGIForwardCommand.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-07-08  |  3.5 KB  |  120 lines

  1. package sun.rmi.transport.proxy;
  2.  
  3. import java.io.DataInputStream;
  4. import java.io.DataOutputStream;
  5. import java.io.EOFException;
  6. import java.io.FilterOutputStream;
  7. import java.io.IOException;
  8. import java.net.InetAddress;
  9. import java.net.Socket;
  10.  
  11. final class CGIForwardCommand implements CGICommandHandler {
  12.    public String getName() {
  13.       return "forward";
  14.    }
  15.  
  16.    public void execute(String var1) throws CGIClientException, CGIServerException {
  17.       if (!CGIHandler.RequestMethod.equals("POST")) {
  18.          throw new CGIClientException("can only forward POST requests");
  19.       } else {
  20.          int var2;
  21.          try {
  22.             var2 = Integer.parseInt(var1);
  23.          } catch (NumberFormatException var20) {
  24.             throw new CGIClientException("invalid port number: " + var1);
  25.          }
  26.  
  27.          if (var2 > 0 && var2 <= 65535) {
  28.             if (var2 < 1024) {
  29.                throw new CGIClientException("permission denied for port: " + var2);
  30.             } else {
  31.                Socket var4;
  32.                try {
  33.                   var4 = new Socket(InetAddress.getLocalHost(), var2);
  34.                } catch (IOException var19) {
  35.                   throw new CGIServerException("could not connect to local port");
  36.                }
  37.  
  38.                DataInputStream var5 = new DataInputStream(System.in);
  39.                byte[] var3 = new byte[CGIHandler.ContentLength];
  40.  
  41.                try {
  42.                   var5.readFully(var3);
  43.                } catch (EOFException var17) {
  44.                   throw new CGIClientException("unexpected EOF reading request body");
  45.                } catch (IOException var18) {
  46.                   throw new CGIClientException("error reading request body");
  47.                }
  48.  
  49.                try {
  50.                   DataOutputStream var6 = new DataOutputStream(var4.getOutputStream());
  51.                   var6.writeBytes("POST / HTTP/1.0\r\n");
  52.                   var6.writeBytes("Content-length: " + CGIHandler.ContentLength + "\r\n\r\n");
  53.                   ((FilterOutputStream)var6).write(var3);
  54.                   var6.flush();
  55.                } catch (IOException var16) {
  56.                   throw new CGIServerException("error writing to server");
  57.                }
  58.  
  59.                DataInputStream var22;
  60.                try {
  61.                   var22 = new DataInputStream(var4.getInputStream());
  62.                } catch (IOException var15) {
  63.                   throw new CGIServerException("error reading from server");
  64.                }
  65.  
  66.                String var7 = "Content-length:".toLowerCase();
  67.                boolean var8 = false;
  68.                int var10 = -1;
  69.  
  70.                String var9;
  71.                do {
  72.                   try {
  73.                      var9 = var22.readLine();
  74.                   } catch (IOException var14) {
  75.                      throw new CGIServerException("error reading from server");
  76.                   }
  77.  
  78.                   if (var9 == null) {
  79.                      throw new CGIServerException("unexpected EOF reading server response");
  80.                   }
  81.  
  82.                   if (var9.toLowerCase().startsWith(var7)) {
  83.                      var10 = Integer.parseInt(var9.substring(var7.length()).trim());
  84.                      var8 = true;
  85.                   }
  86.                } while(var9.length() != 0 && var9.charAt(0) != '\r' && var9.charAt(0) != '\n');
  87.  
  88.                if (var8 && var10 >= 0) {
  89.                   var3 = new byte[var10];
  90.  
  91.                   try {
  92.                      var22.readFully(var3);
  93.                   } catch (EOFException var12) {
  94.                      throw new CGIServerException("unexpected EOF reading server response");
  95.                   } catch (IOException var13) {
  96.                      throw new CGIServerException("error reading from server");
  97.                   }
  98.  
  99.                   System.out.println("Status: 200 OK");
  100.                   System.out.println("Content-type: application/octet-stream");
  101.                   System.out.println("");
  102.  
  103.                   try {
  104.                      System.out.write(var3);
  105.                   } catch (IOException var11) {
  106.                      throw new CGIServerException("error writing response");
  107.                   }
  108.  
  109.                   System.out.flush();
  110.                } else {
  111.                   throw new CGIServerException("missing or invalid content length in server response");
  112.                }
  113.             }
  114.          } else {
  115.             throw new CGIClientException("invalid port: " + var2);
  116.          }
  117.       }
  118.    }
  119. }
  120.