home *** CD-ROM | disk | FTP | other *** search
/ PC World Komputer 1995 November / PCWK1195.iso / inne / win95 / sieciowe / hotja32.lzh / hotjava / classsrc / net / transferprotocolclient.java < prev    next >
Text File  |  1995-08-11  |  4KB  |  133 lines

  1. /*
  2.  * @(#)TransferProtocolClient.java    1.17 95/02/10 Jonathan Payne
  3.  *
  4.  * Copyright (c) 1994 Sun Microsystems, Inc. All Rights Reserved.
  5.  *
  6.  * Permission to use, copy, modify, and distribute this software
  7.  * and its documentation for NON-COMMERCIAL purposes and without
  8.  * fee is hereby granted provided that this copyright notice
  9.  * appears in all copies. Please refer to the file "copyright.html"
  10.  * for further important copyright and licensing information.
  11.  *
  12.  * SUN MAKES NO REPRESENTATIONS OR WARRANTIES ABOUT THE SUITABILITY OF
  13.  * THE SOFTWARE, EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED
  14.  * TO THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
  15.  * PARTICULAR PURPOSE, OR NON-INFRINGEMENT. SUN SHALL NOT BE LIABLE FOR
  16.  * ANY DAMAGES SUFFERED BY LICENSEE AS A RESULT OF USING, MODIFYING OR
  17.  * DISTRIBUTING THIS SOFTWARE OR ITS DERIVATIVES.
  18.  */
  19.  
  20. package net;
  21.  
  22. import java.lang.StringIndexOutOfRangeException;
  23. import java.io.*;
  24. import net.*;
  25. import java.util.Vector;
  26.  
  27.  
  28. /**
  29.  * This class implements that basic intefaces of transfer protocols.
  30.  * It is used by subclasses implementing specific protocols.
  31.  *
  32.  * @version     1.17, 10 Feb 1995
  33.  * @author     Jonathan Payne
  34.  * @see     FtpClient
  35.  * @see        NntpClient
  36.  */
  37.  
  38. public class TransferProtocolClient extends NetworkClient {
  39.     static final boolean debug = false;
  40.  
  41.     /** Array of strings (usually 1 entry) for the last reply
  42.     from the server. */
  43.     protected Vector    serverResponse = new Vector(1);
  44.  
  45.     /** code for last reply */
  46.     protected int    lastReplyCode;
  47.  
  48.  
  49.     /**
  50.      * Pulls the response from the server and returns the code as a
  51.      * number. Returns -1 on failure.
  52.      */
  53.     public int readServerResponse() {
  54.     StringBuffer    replyBuf = new StringBuffer(32);
  55.     int        c;
  56.     int        continuingCode = -1;
  57.     int        code;
  58.     String        response;
  59.  
  60.     serverResponse.setSize(0);
  61.     while (true) {
  62.         while ((c = serverInput.read()) != -1) {
  63.         if (c == '\r') {
  64.             if ((c = serverInput.read()) != '\n')
  65.             replyBuf.appendChar('\r');
  66.         }
  67.         replyBuf.appendChar(c);
  68.         if (c == '\n')
  69.             break;
  70.         }
  71.         response = replyBuf.toString();
  72.         replyBuf.setLength(0);
  73.         if (debug) {
  74.         System.out.print(response);
  75.         }
  76.         try {
  77.         code = Integer.parseInt(response.substring(0, 3));
  78.         } catch (NumberFormatException e) {
  79.         code = -1;
  80.         } catch (StringIndexOutOfRangeException e) {
  81.         /* this line doesn't contain a response code, so
  82.            we just completely ignore it */
  83.         continue;
  84.         }
  85.         serverResponse.addElement(response);
  86.         if (continuingCode != -1) {
  87.         /* we've seen a XXX- sequence */
  88.         if (code != continuingCode ||
  89.             (response.length() >= 4 && response.charAt(3) == '-')) {
  90.             continue;
  91.         } else {
  92.             /* seen the end of code sequence */
  93.             continuingCode = -1;
  94.             break;
  95.         }
  96.         } else if (response.length() >= 4 && response.charAt(3) == '-') {
  97.         continuingCode = code;
  98.         continue;
  99.         } else {
  100.         break;
  101.         }
  102.     }
  103.  
  104.     return lastReplyCode = code;
  105.     }
  106.  
  107.     /** Sends command <i>cmd</i> to the server. */
  108.     public void sendServer(String cmd) {
  109.     serverOutput.print(cmd);
  110.     if (debug) {
  111.         System.out.print("Sending: " + cmd);
  112.     }
  113.     }
  114.  
  115.     /** converts the server response into a string. */
  116.     public String getResponseString() {
  117.     return (String) serverResponse.elementAt(0);
  118.     }
  119.  
  120.     /** Returns all server response strings. */
  121.     public Vector getResponseStrings() {
  122.     return serverResponse;
  123.     }
  124.  
  125.     /** standard constructor to host <i>host</i>, port <i>port</i>. */
  126.     public TransferProtocolClient(String host, int port) {
  127.     super(host, port);
  128.     }
  129.  
  130.     /** creates an uninitialized instance of this class. */
  131.     public TransferProtocolClient() {}
  132. }
  133.