You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by br...@apache.org on 2002/04/03 06:42:50 UTC
cvs commit: jakarta-commons-sandbox/net/src/java/org/apache/commons/net CharGenTCPClient.java CharGenUDPClient.java DatagramSocketClient.java DatagramSocketFactory.java DaytimeTCPClient.java DaytimeUDPClient.java DefaultDatagramSocketFactory.java DefaultSocketFactory.java DiscardTCPClient.java DiscardUDPClient.java EchoTCPClient.java EchoUDPClient.java FingerClient.java MalformedServerReplyException.java ProtocolCommandEvent.java ProtocolCommandListener.java ProtocolCommandSupport.java SocketClient.java SocketFactory.java TimeTCPClient.java TimeUDPClient.java WhoisClient.java
brekke 02/04/02 20:42:50
Added: net/src/java/org/apache/commons/net CharGenTCPClient.java
CharGenUDPClient.java DatagramSocketClient.java
DatagramSocketFactory.java DaytimeTCPClient.java
DaytimeUDPClient.java
DefaultDatagramSocketFactory.java
DefaultSocketFactory.java DiscardTCPClient.java
DiscardUDPClient.java EchoTCPClient.java
EchoUDPClient.java FingerClient.java
MalformedServerReplyException.java
ProtocolCommandEvent.java
ProtocolCommandListener.java
ProtocolCommandSupport.java SocketClient.java
SocketFactory.java TimeTCPClient.java
TimeUDPClient.java WhoisClient.java
Log:
Moving com.oroinc.net to org.apache.commons.net
Revision Changes Path
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/CharGenTCPClient.java
Index: CharGenTCPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The CharGenTCPClient class is a TCP implementation of a client for the
* character generator protocol described in RFC 864. It can also be
* used for Systat (RFC 866), Quote of the Day (RFC 865), and netstat
* (port 15). All of these protocols involve connecting to the appropriate
* port, and reading data from an input stream. The chargen protocol
* actually sends data until the receiving end closes the connection. All
* of the others send only a fixed amount of data and then close the
* connection.
* <p>
* To use the CharGenTCPClient class, just establish a
* connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* and call <a href="#getInputStream"> getInputStream() </a> to access
* the data. Don't close the input stream when you're done with it. Rather,
* call <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to clean up properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see CharGenUDPClient
***/
public final class CharGenTCPClient extends SocketClient {
/*** The systat port value of 11 according to RFC 866. ***/
public static final int SYSTAT_PORT = 11;
/*** The netstat port value of 19. ***/
public static final int NETSTAT_PORT = 15;
/*** The quote of the day port value of 17 according to RFC 865. ***/
public static final int QUOTE_OF_DAY_PORT = 17;
/*** The character generator port value of 19 according to RFC 864. ***/
public static final int CHARGEN_PORT = 19;
/*** The default chargen port. It is set to 19 according to RFC 864. ***/
public static final int DEFAULT_PORT = 19;
/***
* The default constructor for CharGenTCPClient. It merely sets the
* default port to <code> DEFAULT_PORT </code>.
***/
public CharGenTCPClient () {
setDefaultPort(DEFAULT_PORT);
}
/***
* Returns an InputStream from which the server generated data can be
* read. You should NOT close the InputStream when you're finished
* reading from it. Rather, you should call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to clean up properly.
* <p>
* @return An InputStream from which the server generated data can be read.
***/
public InputStream getInputStream() { return _input_; }
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/CharGenUDPClient.java
Index: CharGenUDPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The CharGenUDPClient class is a UDP implementation of a client for the
* character generator protocol described in RFC 864. It can also be
* used for Systat (RFC 866), Quote of the Day (RFC 865), and netstat
* (port 15). All of these protocols involve sending a datagram to the
* appropriate port, and reading data contained in one or more reply
* datagrams. The chargen and quote of the day protocols only send
* one reply datagram containing 512 bytes or less of data. The other
* protocols may reply with more than one datagram, in which case you
* must wait for a timeout to determine that all reply datagrams have
* been sent.
* <p>
* To use the CharGenUDPClient class, just open a local UDP port
* with <a href="org.apache.commons.net.DatagramSocketClient.html#open"> open </a>
* and call <a href="#send"> send </a> to send the datagram that will
* initiate the data reply. For chargen or quote of the day, just
* call <a href="#recieve"> receive </a>, and you're done. For netstat and
* systat, call receive in a while loop, and catch a SocketException and
* InterruptedIOException to detect a timeout (don't forget to set the
* timeout duration beforehand). Don't forget to call
* <a href="org.apache.commons.net.DatagramSocketClient.html#close"> close() </a>
* to clean up properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see CharGenTCPClient
***/
public final class CharGenUDPClient extends DatagramSocketClient {
/*** The systat port value of 11 according to RFC 866. ***/
public static final int SYSTAT_PORT = 11;
/*** The netstat port value of 19. ***/
public static final int NETSTAT_PORT = 15;
/*** The quote of the day port value of 17 according to RFC 865. ***/
public static final int QUOTE_OF_DAY_PORT = 17;
/*** The character generator port value of 19 according to RFC 864. ***/
public static final int CHARGEN_PORT = 19;
/*** The default chargen port. It is set to 19 according to RFC 864. ***/
public static final int DEFAULT_PORT = 19;
private byte[] __receiveData;
private DatagramPacket __receivePacket;
private DatagramPacket __sendPacket;
/***
* The default CharGenUDPClient constructor. It initializes some internal
* data structures for sending and receiving the necessary datagrams for
* the chargen and related protocols.
***/
public CharGenUDPClient() {
// CharGen return packets have a maximum length of 512
__receiveData = new byte[512];
__receivePacket = new DatagramPacket(__receiveData, 512);
__sendPacket = new DatagramPacket(new byte[0], 0);
}
/***
* Sends the data initiation datagram. This data in the packet is ignored
* by the server, and merely serves to signal that the server should send
* its reply.
* <p>
* @param host The address of the server.
* @param port The port of the service.
* @exception IOException If an error occurs while sending the datagram.
***/
public void send(InetAddress host, int port) throws IOException {
__sendPacket.setAddress(host);
__sendPacket.setPort(port);
_socket_.send(__sendPacket);
}
/*** Same as <code>send(host, CharGenUDPClient.DEFAULT_PORT);</code> ***/
public void send(InetAddress host) throws IOException {
send(host, DEFAULT_PORT);
}
/***
* Receive the reply data from the server. This will always be 512 bytes
* or less. Chargen and quote of the day only return one packet. Netstat
* and systat require multiple calls to receive() with timeout detection.
* <p>
* @return The reply data from the server.
* @exception IOException If an error occurs while receiving the datagram.
***/
public byte[] receive() throws IOException {
int length;
byte[] result;
_socket_.receive(__receivePacket);
result = new byte[length = __receivePacket.getLength()];
System.arraycopy(__receiveData, 0, result, 0, length);
return result;
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DatagramSocketClient.java
Index: DatagramSocketClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.net.*;
/***
* The DatagramSocketClient provides the basic operations that are required
* of client objects accessing datagram sockets. It is meant to be
* subclassed to avoid having to rewrite the same code over and over again
* to open a socket, close a socket, set timeouts, etc. Of special note
* is the <a href="#setDatagramSocketFactory"> setDatagramSocketFactory </a>
* method, which allows you to control the type of DatagramSocket the
* DatagramSocketClient creates for network communications. This is
* especially useful for adding things like proxy support as well as better
* support for applets. For
* example, you could create a
* <a href="org.apache.commons.net.DatagramSocketFactory.html">
* DatagramSocketFactory </a> that
* requests browser security capabilities before creating a socket.
* All classes derived from DatagramSocketClient should use the
* <a href="#_socketFactory_"> _socketFactory_ </a> member variable to
* create DatagramSocket instances rather than instantiating
* them by directly invoking a constructor. By honoring this contract
* you guarantee that a user will always be able to provide his own
* Socket implementations by substituting his own SocketFactory.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DatagramSocketFactory
***/
public abstract class DatagramSocketClient {
/***
* The default DatagramSocketFactory shared by all DatagramSocketClient
* instances.
***/
private static final DatagramSocketFactory __DEFAULT_SOCKET_FACTORY =
new DefaultDatagramSocketFactory();
/*** The timeout to use after opening a socket. ***/
protected int _timeout_;
/*** The datagram socket used for the connection. ***/
protected DatagramSocket _socket_;
/***
* A status variable indicating if the client's socket is currently open.
***/
protected boolean _isOpen_;
/*** The datagram socket's DatagramSocketFactory. ***/
protected DatagramSocketFactory _socketFactory_;
/***
* Default constructor for DatagramSocketClient. Initializes
* _socket_ to null, _timeout_ to 0, and _isOpen_ to false.
***/
public DatagramSocketClient() {
_socket_ = null;
_timeout_ = 0;
_isOpen_ = false;
_socketFactory_ = __DEFAULT_SOCKET_FACTORY;
}
/***
* Opens a DatagramSocket on the local host at the first available port.
* Also sets the timeout on the socket to the default timeout set
* by <a href="#setDefaultTimeout"> setDefaultTimeout() </a>.
* <p>
* _isOpen_ is set to true after calling this method and _socket_
* is set to the newly opened socket.
* <p>
* @exception SocketException If the socket could not be opened or the
* timeout could not be set.
***/
public void open() throws SocketException {
_socket_ = _socketFactory_.createDatagramSocket();
_socket_.setSoTimeout(_timeout_);
_isOpen_ = true;
}
/***
* Opens a DatagramSocket on the local host at a specified port.
* Also sets the timeout on the socket to the default timeout set
* by <a href="#setDefaultTimeout"> setDefaultTimeout() </a>.
* <p>
* _isOpen_ is set to true after calling this method and _socket_
* is set to the newly opened socket.
* <p>
* @param port The port to use for the socket.
* @exception SocketException If the socket could not be opened or the
* timeout could not be set.
***/
public void open(int port) throws SocketException {
_socket_ = _socketFactory_.createDatagramSocket(port);
_socket_.setSoTimeout(_timeout_);
_isOpen_ = true;
}
/***
* Opens a DatagramSocket at the specified address on the local host
* at a specified port.
* Also sets the timeout on the socket to the default timeout set
* by <a href="#setDefaultTimeout"> setDefaultTimeout() </a>.
* <p>
* _isOpen_ is set to true after calling this method and _socket_
* is set to the newly opened socket.
* <p>
* @param port The port to use for the socket.
* @param laddr The local address to use.
* @exception SocketException If the socket could not be opened or the
* timeout could not be set.
***/
public void open(int port, InetAddress laddr) throws SocketException {
_socket_ = _socketFactory_.createDatagramSocket(port, laddr);
_socket_.setSoTimeout(_timeout_);
_isOpen_ = true;
}
/***
* Closes the DatagramSocket used for the connection.
* You should call this method after you've finished using the class
* instance and also before you call <a href="#open">open() </a>
* again. _isOpen_ is set to false and _socket_ is set to null.
* If you call this method when the client socket is not open,
* a NullPointerException is thrown.
***/
public void close() {
_socket_.close();
_socket_ = null;
_isOpen_ = false;
}
/***
* Returns true if the client has a currently open socket.
* <p>
* @return True if the client has a curerntly open socket, false otherwise.
***/
public boolean isOpen() { return _isOpen_; }
/***
* Set the default timeout in milliseconds to use when opening a socket.
* After a call to open, the timeout for the socket is set using this value.
* This method should be used prior to a call to <a href="#open">open()</a>
* and should not be confused with <a href="#setSoTimeout">setSoTimeout()</a>
* which operates on the currently open socket. _timeout_ contains
* the new timeout value.
* <p>
* @param timeout The timeout in milliseconds to use for the datagram socket
* connection.
***/
public void setDefaultTimeout(int timeout) { _timeout_ = timeout; }
/***
* Returns the default timeout in milliseconds that is used when
* opening a socket.
* <p>
* @return The default timeout in milliseconds that is used when
* opening a socket.
***/
public int getDefaultTimeout() { return _timeout_; }
/***
* Set the timeout in milliseconds of a currently open connection.
* Only call this method after a connection has been opened
* by <a href="#open">open()</a>.
* <p>
* @param timeout The timeout in milliseconds to use for the currently
* open datagram socket connection.
***/
public void setSoTimeout(int timeout) throws SocketException {
_socket_.setSoTimeout(timeout);
}
/***
* Returns the timeout in milliseconds of the currently opened socket.
* If you call this method when the client socket is not open,
* a NullPointerException is thrown.
* <p>
* @return The timeout in milliseconds of the currently opened socket.
***/
public int getSoTimeout() throws SocketException {
return _socket_.getSoTimeout();
}
/***
* Returns the port number of the open socket on the local host used
* for the connection. If you call this method when the client socket
* is not open, a NullPointerException is thrown.
* <p>
* @return The port number of the open socket on the local host used
* for the connection.
***/
public int getLocalPort() { return _socket_.getLocalPort(); }
/***
* Returns the local address to which the client's socket is bound.
* If you call this method when the client socket is not open, a
* NullPointerException is thrown.
* <p>
* @return The local address to which the client's socket is bound.
***/
public InetAddress getLocalAddress() {
return _socket_.getLocalAddress();
}
/***
* Sets the DatagramSocketFactory used by the DatagramSocketClient
* to open DatagramSockets. If the factory value is null, then a default
* factory is used (only do this to reset the factory after having
* previously altered it).
* <p>
* @param factory The new DatagramSocketFactory the DatagramSocketClient
* should use.
***/
public void setDatagramSocketFactory(DatagramSocketFactory factory) {
if(factory == null)
_socketFactory_ = __DEFAULT_SOCKET_FACTORY;
else
_socketFactory_ = factory;
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DatagramSocketFactory.java
Index: DatagramSocketFactory.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.net.*;
/***
* The DatagramSocketFactory interface provides a means for the
* programmer to control the creation of datagram sockets and
* provide his own DatagramSocket implementations for use by all
* classes derived from
* <a href="org.apache.commons.net.DatagramSocketClient.html">
* DatagramSocketClient </a>.
* This allows you to provide your own DatagramSocket implementations and
* to perform security checks or browser capability requests before
* creating a DatagramSocket.
* <p>
* <p>
* @author Daniel F. Savarese
***/
public interface DatagramSocketFactory {
/***
* Creates a DatagramSocket on the local host at the first available port.
* <p>
* @exception SocketException If the socket could not be created.
***/
public DatagramSocket createDatagramSocket() throws SocketException;
/***
* Creates a DatagramSocket on the local host at a specified port.
* <p>
* @param port The port to use for the socket.
* @exception SocketException If the socket could not be created.
***/
public DatagramSocket createDatagramSocket(int port) throws SocketException;
/***
* Creates a DatagramSocket at the specified address on the local host
* at a specified port.
* <p>
* @param port The port to use for the socket.
* @param laddr The local address to use.
* @exception SocketException If the socket could not be created.
***/
public DatagramSocket createDatagramSocket(int port, InetAddress laddr)
throws SocketException;
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DaytimeTCPClient.java
Index: DaytimeTCPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The DaytimeTCPClient class is a TCP implementation of a client for the
* Daytime protocol described in RFC 867. To use the class, merely
* establish a connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* and call <a href="#getTime"> getTime() </a> to retrieve the daytime
* string, then
* call <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to close the connection properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DaytimeUDPClient
***/
public final class DaytimeTCPClient extends SocketClient {
/*** The default daytime port. It is set to 13 according to RFC 867. ***/
public static final int DEFAULT_PORT = 13;
// Received dates will likely be less than 64 characters.
// This is a temporary buffer used while receiving data.
private char[] __buffer = new char[64];
/***
* The default DaytimeTCPClient constructor. It merely sets the default
* port to <code> DEFAULT_PORT </code>.
***/
public DaytimeTCPClient () {
setDefaultPort(DEFAULT_PORT);
}
/***
* Retrieves the time string from the server and returns it. The
* server will have closed the connection at this point, so you should
* call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* after calling this method. To retrieve another time, you must
* initiate another connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* before calling <code> getTime() </code> again.
* <p>
* @return The time string retrieved from the server.
* @exception IOException If an error occurs while fetching the time string.
***/
public String getTime() throws IOException {
int read;
StringBuffer result = new StringBuffer(__buffer.length);
BufferedReader reader;
reader = new BufferedReader(new InputStreamReader(_input_));
while(true) {
read = reader.read(__buffer, 0, __buffer.length);
if(read <= 0)
break;
result.append(__buffer, 0, read);
}
return result.toString();
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DaytimeUDPClient.java
Index: DaytimeUDPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The DaytimeUDPClient class is a UDP implementation of a client for the
* Daytime protocol described in RFC 867. To use the class, merely
* open a local datagram socket with
* <a href="org.apache.commons.net.DatagramSocketClient.html#open"> open </a>
* and call <a href="#getTime"> getTime </a> to retrieve the daytime
* string, then
* call <a href="org.apache.commons.net.DatagramSocketClient.html#close"> close </a>
* to close the connection properly. Unlike
* <a href="org.apache.commons.net.DaytimeTCPClient.html"> DaytimeTCPClient </a>,
* successive calls to <a href="#getTime"> getTime </a> are permitted
* without re-establishing a connection. That is because UDP is a
* connectionless protocol and the Daytime protocol is stateless.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DaytimeTCPClient
***/
public final class DaytimeUDPClient extends DatagramSocketClient {
/*** The default daytime port. It is set to 13 according to RFC 867. ***/
public static final int DEFAULT_PORT = 13;
private byte[] __dummyData = new byte[1];
// Received dates should be less than 256 bytes
private byte[] __timeData = new byte[256];
/***
* Retrieves the time string from the specified server and port and
* returns it.
* <p>
* @param host The address of the server.
* @param port The port of the service.
* @return The time string.
* @exception IOException If an error occurs while retrieving the time.
***/
public String getTime(InetAddress host, int port) throws IOException {
DatagramPacket sendPacket, receivePacket;
sendPacket =
new DatagramPacket(__dummyData, __dummyData.length, host, port);
receivePacket = new DatagramPacket(__timeData, __timeData.length);
_socket_.send(sendPacket);
_socket_.receive(receivePacket);
return new String(receivePacket.getData(), 0, receivePacket.getLength());
}
/*** Same as <code>getTime(host, DaytimeUDPClient.DEFAULT_PORT);</code> ***/
public String getTime(InetAddress host) throws IOException {
return getTime(host, DEFAULT_PORT);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DefaultDatagramSocketFactory.java
Index: DefaultDatagramSocketFactory.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.net.*;
/***
* DefaultDatagramSocketFactory implements the DatagramSocketFactory
* interface by simply wrapping the java.net.DatagramSocket
* constructors. It is the default DatagramSocketFactory used by
* <a href="org.apache.commons.net.DatagramSocketClient.html">
* DatagramSocketClient </a> implementations.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DatagramSocketFactory
* @see DatagramSocketClient
* @see DatagramSocketClient#setDatagramSocketFactory
***/
public class DefaultDatagramSocketFactory implements DatagramSocketFactory {
/***
* Creates a DatagramSocket on the local host at the first available port.
* <p>
* @exception SocketException If the socket could not be created.
***/
public DatagramSocket createDatagramSocket() throws SocketException {
return new DatagramSocket();
}
/***
* Creates a DatagramSocket on the local host at a specified port.
* <p>
* @param port The port to use for the socket.
* @exception SocketException If the socket could not be created.
***/
public DatagramSocket createDatagramSocket(int port) throws SocketException {
return new DatagramSocket(port);
}
/***
* Creates a DatagramSocket at the specified address on the local host
* at a specified port.
* <p>
* @param port The port to use for the socket.
* @param laddr The local address to use.
* @exception SocketException If the socket could not be created.
***/
public DatagramSocket createDatagramSocket(int port, InetAddress laddr)
throws SocketException
{
return new DatagramSocket(port, laddr);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DefaultSocketFactory.java
Index: DefaultSocketFactory.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* DefaultSocketFactory implements the SocketFactory interface by
* simply wrapping the java.net.Socket and java.net.ServerSocket
* constructors. It is the default SocketFactory used by
* <a href="org.apache.commons.net.SocketClient.html"> SocketClient </a>
* implementations.
* <p>
* <p>
* @author Daniel F. Savarese
* @see SocketFactory
* @see SocketClient
* @see SocketClient#setSocketFactory
***/
public class DefaultSocketFactory implements SocketFactory {
/***
* Creates a Socket connected to the given host and port.
* <p>
* @param host The hostname to connect to.
* @param port The port to connect to.
* @return A Socket connected to the given host and port.
* @exception UnknownHostException If the hostname cannot be resolved.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(String host, int port)
throws UnknownHostException, IOException
{
return new Socket(host, port);
}
/***
* Creates a Socket connected to the given host and port.
* <p>
* @param address The address of the host to connect to.
* @param port The port to connect to.
* @return A Socket connected to the given host and port.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(InetAddress address, int port)
throws IOException
{
return new Socket(address, port);
}
/***
* Creates a Socket connected to the given host and port and
* originating from the specified local address and port.
* <p>
* @param host The hostname to connect to.
* @param port The port to connect to.
* @param localAddr The local address to use.
* @param localPort The local port to use.
* @return A Socket connected to the given host and port.
* @exception UnknownHostException If the hostname cannot be resolved.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(String host, int port,
InetAddress localAddr, int localPort)
throws UnknownHostException, IOException
{
return new Socket(host, port, localAddr, localPort);
}
/***
* Creates a Socket connected to the given host and port and
* originating from the specified local address and port.
* <p>
* @param address The address of the host to connect to.
* @param port The port to connect to.
* @param localAddr The local address to use.
* @param localPort The local port to use.
* @return A Socket connected to the given host and port.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(InetAddress address, int port,
InetAddress localAddr, int localPort)
throws IOException
{
return new Socket(address, port, localAddr, localPort);
}
/***
* Creates a ServerSocket bound to a specified port. A port
* of 0 will create the ServerSocket on a system-determined free port.
* <p>
* @param port The port on which to listen, or 0 to use any free port.
* @return A ServerSocket that will listen on a specified port.
* @exception IOException If an I/O error occurs while creating
* the ServerSocket.
***/
public ServerSocket createServerSocket(int port) throws IOException {
return new ServerSocket(port);
}
/***
* Creates a ServerSocket bound to a specified port with a given
* maximum queue length for incoming connections. A port of 0 will
* create the ServerSocket on a system-determined free port.
* <p>
* @param port The port on which to listen, or 0 to use any free port.
* @param backlog The maximum length of the queue for incoming connections.
* @return A ServerSocket that will listen on a specified port.
* @exception IOException If an I/O error occurs while creating
* the ServerSocket.
***/
public ServerSocket createServerSocket(int port, int backlog)
throws IOException
{
return new ServerSocket(port, backlog);
}
/***
* Creates a ServerSocket bound to a specified port on a given local
* address with a given maximum queue length for incoming connections.
* A port of 0 will
* create the ServerSocket on a system-determined free port.
* <p>
* @param port The port on which to listen, or 0 to use any free port.
* @param backlog The maximum length of the queue for incoming connections.
* @param bindAddr The local address to which the ServerSocket should bind.
* @return A ServerSocket that will listen on a specified port.
* @exception IOException If an I/O error occurs while creating
* the ServerSocket.
***/
public ServerSocket createServerSocket(int port, int backlog,
InetAddress bindAddr)
throws IOException
{
return new ServerSocket(port, backlog, bindAddr);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DiscardTCPClient.java
Index: DiscardTCPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The DiscardTCPClient class is a TCP implementation of a client for the
* Discard protocol described in RFC 863. To use the class, merely
* establish a connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* and call <a href="#getOutputStream"> getOutputStream() </a> to
* retrieve the discard output stream. Don't close the output stream
* when you're done writing to it. Rather, call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to clean up properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DiscardUDPClient
***/
public class DiscardTCPClient extends SocketClient {
/*** The default discard port. It is set to 9 according to RFC 863. ***/
public static final int DEFAULT_PORT = 9;
/***
* The default DiscardTCPClient constructor. It merely sets the default
* port to <code> DEFAULT_PORT </code>.
***/
public DiscardTCPClient () {
setDefaultPort(DEFAULT_PORT);
}
/***
* Returns an OutputStream through which you may write data to the server.
* You should NOT close the OutputStream when you're finished
* reading from it. Rather, you should call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to clean up properly.
* <p>
* @return An OutputStream through which you can write data to the server.
***/
public OutputStream getOutputStream() { return _output_; }
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/DiscardUDPClient.java
Index: DiscardUDPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The DiscardUDPClient class is a UDP implementation of a client for the
* Discard protocol described in RFC 863. To use the class,
* just open a local UDP port
* with <a href="org.apache.commons.net.DatagramSocketClient.html#open"> open </a>
* and call <a href="#send"> send </a> to send datagrams to the server
* After you're done sending discard data, call
* <a href="org.apache.commons.net.DatagramSocketClient.html#close"> close() </a>
* to clean up properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DiscardTCPClient
***/
public class DiscardUDPClient extends DatagramSocketClient {
/*** The default discard port. It is set to 9 according to RFC 863. ***/
public static final int DEFAULT_PORT = 9;
DatagramPacket _sendPacket;
public DiscardUDPClient() {
_sendPacket = new DatagramPacket(new byte[0], 0);
}
/***
* Sends the specified data to the specified server at the specified port.
* <p>
* @param data The discard data to send.
* @param length The length of the data to send. Should be less than
* or equal to the length of the data byte array.
* @param host The address of the server.
* @param port The service port.
* @exception IOException If an error occurs during the datagram send
* operation.
***/
public void send(byte[] data, int length, InetAddress host, int port)
throws IOException
{
_sendPacket.setData(data);
_sendPacket.setLength(length);
_sendPacket.setAddress(host);
_sendPacket.setPort(port);
_socket_.send(_sendPacket);
}
/***
* Same as
* <code>send(data, length, host. DiscardUDPClient.DEFAULT_PORT)</code>.
***/
public void send(byte[] data, int length, InetAddress host)
throws IOException
{
send(data, length, host, DEFAULT_PORT);
}
/***
* Same as
* <code>send(data, data.length, host. DiscardUDPClient.DEFAULT_PORT)</code>.
***/
public void send(byte[] data, InetAddress host) throws IOException {
send(data, data.length, host, DEFAULT_PORT);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/EchoTCPClient.java
Index: EchoTCPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The EchoTCPClient class is a TCP implementation of a client for the
* Echo protocol described in RFC 862. To use the class, merely
* establish a connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* and call <a href="#getOutputStream"> getOutputStream() </a> to
* retrieve the echo output stream and
* <a href="org.apache.commons.net.DiscardTCPClient.html#getInputStream">
* getInputStream() </a> to get the echo input stream.
* Don't close either stream when you're done using them. Rather, call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to clean up properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see EchoUDPClient
* @see DiscardTCPClient
***/
public final class EchoTCPClient extends DiscardTCPClient {
/*** The default echo port. It is set to 7 according to RFC 862. ***/
public static final int DEFAULT_PORT = 7;
/***
* The default EchoTCPClient constructor. It merely sets the default
* port to <code> DEFAULT_PORT </code>.
***/
public EchoTCPClient () {
setDefaultPort(DEFAULT_PORT);
}
/***
* Returns an InputStream from which you may read echoed data from
* the server. You should NOT close the InputStream when you're finished
* reading from it. Rather, you should call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to clean up properly.
* <p>
* @return An InputStream from which you can read echoed data from the
* server.
***/
public InputStream getInputStream() { return _input_; }
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/EchoUDPClient.java
Index: EchoUDPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The EchoUDPClient class is a UDP implementation of a client for the
* Echo protocol described in RFC 862. To use the class,
* just open a local UDP port
* with <a href="org.apache.commons.net.DatagramSocketClient.html#open"> open </a>
* and call <a href="#send"> send </a> to send datagrams to the server,
* then call <a href="#receive"> receive </a> to receive echoes.
* After you're done echoing data, call
* <a href="org.apache.commons.net.DatagramSocketClient.html#close"> close() </a>
* to clean up properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see EchoTCPClient
* @see DiscardUDPClient
***/
public final class EchoUDPClient extends DiscardUDPClient {
/*** The default echo port. It is set to 7 according to RFC 862. ***/
public static final int DEFAULT_PORT = 7;
private DatagramPacket __receivePacket = new DatagramPacket(new byte[0], 0);
/***
* Sends the specified data to the specified server at the default echo
* port.
* <p>
* @param data The echo data to send.
* @param length The length of the data to send. Should be less than
* or equal to the length of the data byte array.
* @param host The address of the server.
* @exception IOException If an error occurs during the datagram send
* operation.
***/
public void send(byte[] data, int length, InetAddress host)
throws IOException
{
send(data, length, host, DEFAULT_PORT);
}
/*** Same as <code> send(data, data.length, host) </code> ***/
public void send(byte[] data, InetAddress host) throws IOException {
send(data, data.length, host, DEFAULT_PORT);
}
/***
* Receives echoed data and returns its length. The data may be divided
* up among multiple datagrams, requiring multiple calls to receive.
* Also, the UDP packets will not necessarily arrive in the same order
* they were sent.
* <p>
* @return Length of actual data received.
* @exception IOException If an error occurs while receiving the data.
***/
public int receive(byte[] data, int length) throws IOException {
__receivePacket.setData(data);
__receivePacket.setLength(length);
_socket_.receive(__receivePacket);
return __receivePacket.getLength();
}
/*** Same as <code> receive(data, data.length)</code> ***/
public int receive(byte[] data) throws IOException {
return receive(data, data.length);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/FingerClient.java
Index: FingerClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The FingerClient class implements the client side of the Internet Finger
* Protocol defined in RFC 1288. To finger a host you create a
* FingerClient instance, connect to the host, query the host, and finally
* disconnect from the host. If the finger service you want to query is on
* a non-standard port, connect to the host at that port.
* Here's a sample use:
* <pre>
* FingerClient finger;
*
* finger = new FingerClient();
*
* try {
* finger.connect("foo.bar.com");
* System.out.println(finger.query("foobar", false));
* finger.disconnect();
* } catch(IOException e) {
* System.err.println("Error I/O exception: " + e.getMessage());
* return;
* }
* </pre>
* <p>
* <p>
* @author Daniel F. Savarese
***/
public class FingerClient extends SocketClient {
/***
* The default FINGER port. Set to 79 according to RFC 1288.
***/
public static final int DEFAULT_PORT = 79;
private static final String __LONG_FLAG = "/W ";
private transient StringBuffer __query = new StringBuffer(64);
private transient char[] __buffer = new char[1024];
/***
* The default FingerClient constructor. Initializes the
* default port to <code> DEFAULT_PORT </code>.
***/
public FingerClient() { setDefaultPort(DEFAULT_PORT); }
/***
* Fingers a user at the connected host and returns the output
* as a String. You must first connect to a finger server before
* calling this method, and you should disconnect afterward.
* <p>
* @param longOutput Set to true if long output is requested, false if not.
* @param username The name of the user to finger.
* @return The result of the finger query.
* @exception IOException If an I/O error occurs while reading the socket.
***/
public String query(boolean longOutput, String username) throws IOException {
int read;
StringBuffer result = new StringBuffer(__buffer.length);
BufferedReader input;
input =
new BufferedReader(new InputStreamReader(getInputStream(longOutput,
username)));
while(true) {
read = input.read(__buffer, 0, __buffer.length);
if(read <= 0)
break;
result.append(__buffer, 0, read);
}
input.close();
return result.toString();
}
/***
* Fingers the connected host and returns the output
* as a String. You must first connect to a finger server before
* calling this method, and you should disconnect afterward.
* This is equivalent to calling <code> query(longOutput, "") </code>.
* <p>
* @param longOutput Set to true if long output is requested, false if not.
* @return The result of the finger query.
* @exception IOException If an I/O error occurs while reading the socket.
***/
public String query(boolean longOutput) throws IOException {
return query(longOutput, "");
}
/***
* Fingers a user and returns the input stream from the network connection
* of the finger query. You must first connect to a finger server before
* calling this method, and you should disconnect after finishing reading
* the stream.
* <p>
* @param longOutput Set to true if long output is requested, false if not.
* @param username The name of the user to finger.
* @return The InputStream of the network connection of the finger query.
* Can be read to obtain finger results.
* @exception IOException If an I/O error during the operation.
***/
public InputStream getInputStream(boolean longOutput, String username)
throws IOException
{
Socket socket;
DataOutputStream output;
__query.setLength(0);
if(longOutput)
__query.append(__LONG_FLAG);
__query.append(username);
__query.append(SocketClient.NETASCII_EOL);
output = new DataOutputStream(_output_);
output.writeBytes(__query.toString());
output.flush();
return _input_;
}
/***
* Fingers the connected host and returns the input stream from
* the network connection of the finger query. This is equivalent to
* calling getInputStream(longOutput, ""). You must first connect to a
* finger server before calling this method, and you should disconnect
* after finishing reading the stream.
* <p>
* @param longOutput Set to true if long output is requested, false if not.
* @return The InputStream of the network connection of the finger query.
* Can be read to obtain finger results.
* @exception IOException If an I/O error during the operation.
***/
public InputStream getInputStream(boolean longOutput) throws IOException {
return getInputStream(longOutput, "");
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/MalformedServerReplyException.java
Index: MalformedServerReplyException.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
/***
* This exception is used to indicate that the reply from a server
* could not be interpreted. Most of the NetComponents classes attempt
* to be as lenient as possible when receiving server replies. Many
* server implementations deviate from IETF protocol specifications, making
* it necessary to be as flexible as possible. However, there will be
* certain situations where it is not possible to continue an operation
* because the server reply could not be interpreted in a meaningful manner.
* In these cases, a MalformedServerReplyException should be thrown.
* <p>
* <p>
* @author Daniel F. Savarese
***/
public class MalformedServerReplyException extends IOException {
/*** Constructs a MalformedServerReplyException with no message ***/
public MalformedServerReplyException() {
super();
}
/***
* Constructs a MalformedServerReplyException with a specified message.
* <p>
* @param message The message explaining the reason for the exception.
***/
public MalformedServerReplyException(String message) {
super(message);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/ProtocolCommandEvent.java
Index: ProtocolCommandEvent.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.util.*;
/***
* There exists a large class of IETF protocols that work by sending an
* ASCII text command and arguments to a server, and then receiving an
* ASCII text reply. For debugging and other purposes, it is extremely
* useful to log or keep track of the contents of the protocol messages.
* The ProtocolCommandEvent class coupled with the
* <a href="org.apache.commons.net.ProtocolCommandListener.html">
* ProtocolCommandListener </a> interface facilitate this process.
* <p>
* <p>
* @see ProtocolCommandListener
* @see ProtocolCommandSupport
* @author Daniel F. Savarese
***/
public class ProtocolCommandEvent extends EventObject {
private int __replyCode;
private boolean __isCommand;
private String __message, __command;
/***
* Creates a ProtocolCommandEvent signalling a command was sent to
* the server. ProtocolCommandEvents created with this constructor
* should only be sent after a command has been sent, but before the
* reply has been received.
* <p>
* @param source The source of the event.
* @param command The string representation of the command type sent, not
* including the arguments (e.g., "STAT" or "GET").
* @param message The entire command string verbatim as sent to the server,
* including all arguments.
***/
public ProtocolCommandEvent(Object source, String command, String message){
super(source);
__replyCode = 0;
__message = message;
__isCommand = true;
__command = command;
}
/***
* Creates a ProtocolCommandEvent signalling a reply to a command was
* received. ProtocolCommandEvents created with this constructor
* should only be sent after a complete command reply has been received
* fromt a server.
* <p>
* @param source The source of the event.
* @param replyCode The integer code indicating the natureof the reply.
* This will be the protocol integer value for protocols
* that use integer reply codes, or the reply class constant
* corresponding to the reply for protocols like POP3 that use
* strings like OK rather than integer codes (i.e., POP3Repy.OK).
* @param message The entire reply as received from the server.
***/
public ProtocolCommandEvent(Object source, int replyCode, String message){
super(source);
__replyCode = replyCode;
__message = message;
__isCommand = false;
__command = null;
}
/***
* Returns the string representation of the command type sent (e.g., "STAT"
* or "GET"). If the ProtocolCommandEvent is a reply event, then null
* is returned.
* <p>
* @return The string representation of the command type sent, or null
* if this is a reply event.
***/
public String getCommand() { return __command; }
/***
* Returns the reply code of the received server reply. Undefined if
* this is not a reply event.
* <p>
* @return The reply code of the received server reply. Undefined if
* not a reply event.
***/
public int getReplyCode() { return __replyCode; }
/***
* Returns true if the ProtocolCommandEvent was generated as a result
* of sending a command.
* <p>
* @return true If the ProtocolCommandEvent was generated as a result
* of sending a command. False otherwise.
***/
public boolean isCommand() { return __isCommand; }
/***
* Returns true if the ProtocolCommandEvent was generated as a result
* of receiving a reply.
* <p>
* @return true If the ProtocolCommandEvent was generated as a result
* of receiving a reply. False otherwise.
***/
public boolean isReply() { return !isCommand(); }
/***
* Returns the entire message sent to or received from the server.
* <p>
* @return The entire message sent to or received from the server.
***/
public String getMessage() { return __message; }
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/ProtocolCommandListener.java
Index: ProtocolCommandListener.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.util.*;
/***
* There exists a large class of IETF protocols that work by sending an
* ASCII text command and arguments to a server, and then receiving an
* ASCII text reply. For debugging and other purposes, it is extremely
* useful to log or keep track of the contents of the protocol messages.
* The ProtocolCommandListener interface coupled with the
* <a href="org.apache.commons.net.ProtocolCommandEvent.html"> ProtocolCommandEvent
* </a> class facilitate this process.
* <p>
* To receive ProtocolCommandEvents, you merely implement the
* ProtocolCommandListener interface and register the class as a listener
* with a ProtocolCommandEvent source such as
* <a href="org.apache.commons.net.ftp.FTPClient.html"> FTPClient </a>.
* <p>
* <p>
* @see ProtocolCommandEvent
* @see ProtocolCommandSupport
* @author Daniel F. Savarese
***/
public interface ProtocolCommandListener extends EventListener {
/***
* This method is invoked by a ProtocolCommandEvent source after
* sending a protocol command to a server.
* <p>
* @param event The ProtocolCommandEvent fired.
***/
public void protocolCommandSent(ProtocolCommandEvent event);
/***
* This method is invoked by a ProtocolCommandEvent source after
* receiving a reply from a server.
* <p>
* @param event The ProtocolCommandEvent fired.
***/
public void protocolReplyReceived(ProtocolCommandEvent event);
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/ProtocolCommandSupport.java
Index: ProtocolCommandSupport.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.util.*;
import org.apache.commons.util.ListenerList;
/***
* ProtocolCommandSupport is a convenience class for managing a list of
* ProtocolCommandListeners and firing ProtocolCommandEvents. You can
* simply delegate ProtocolCommandEvent firing and listener
* registering/unregistering tasks to this class.
* <p>
* <p>
* @see ProtocolCommandEvent
* @see ProtocolCommandListener
* @author Daniel F. Savarese
***/
public class ProtocolCommandSupport implements java.io.Serializable {
private Object __source;
private ListenerList __listeners;
/***
* Creates a ProtocolCommandSupport instant using the indicated source
* as the source of fired ProtocolCommandEvents.
* <p>
* @param source The source to use for all generated ProtocolCommandEvents.
***/
public ProtocolCommandSupport(Object source) {
__listeners = new ListenerList();
__source = source;
}
/***
* Fires a ProtocolCommandEvent signalling the sending of a command to all
* registered listeners, invoking their
* <a href="org.apache.commons.net.ProtocolCommandListener.html#protocolCommandSent">
* protocolCommandSent() </a> methods.
* <p>
* @param command The string representation of the command type sent, not
* including the arguments (e.g., "STAT" or "GET").
* @param message The entire command string verbatim as sent to the server,
* including all arguments.
***/
public void fireCommandSent(String command, String message){
Enumeration enum;
ProtocolCommandEvent event;
ProtocolCommandListener listener;
enum = __listeners.getListeners();
event = new ProtocolCommandEvent(__source, command, message);
while(enum.hasMoreElements()) {
listener = (ProtocolCommandListener)enum.nextElement();
listener.protocolCommandSent(event);
}
}
/***
* Fires a ProtocolCommandEvent signalling the reception of a command reply
* to all registered listeners, invoking their
* <a href="org.apache.commons.net.ProtocolCommandListener.html#protocolReplyReceived">
* protocolReplyReceived() </a> methods.
* <p>
* @param replyCode The integer code indicating the natureof the reply.
* This will be the protocol integer value for protocols
* that use integer reply codes, or the reply class constant
* corresponding to the reply for protocols like POP3 that use
* strings like OK rather than integer codes (i.e., POP3Repy.OK).
* @param message The entire reply as received from the server.
***/
public void fireReplyReceived(int replyCode, String message){
Enumeration enum;
ProtocolCommandEvent event;
ProtocolCommandListener listener;
enum = __listeners.getListeners();
event = new ProtocolCommandEvent(__source, replyCode, message);
while(enum.hasMoreElements()) {
listener = (ProtocolCommandListener)enum.nextElement();
listener.protocolReplyReceived(event);
}
}
/***
* Adds a ProtocolCommandListener.
* <p>
* @param listener The ProtocolCommandListener to add.
***/
public void addProtocolCommandListener(ProtocolCommandListener listener){
__listeners.addListener(listener);
}
/***
* Removes a ProtocolCommandListener.
* <p>
* @param listener The ProtocolCommandListener to remove.
***/
public void removeProtocolCommandListener(ProtocolCommandListener listener){
__listeners.removeListener(listener);
}
/***
* Returns the number of ProtocolCommandListeners currently registered.
* <p>
* @return The number of ProtocolCommandListeners currently registered.
***/
public int getListenerCount() { return __listeners.getListenerCount(); }
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/SocketClient.java
Index: SocketClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The SocketClient provides the basic operations that are required
* of client objects accessing sockets. It is meant to be
* subclassed to avoid having to rewrite the same code over and over again
* to open a socket, close a socket, set timeouts, etc. Of special note
* is the <a href="#setSocketFactory"> setSocketFactory </a>
* method, which
* allows you to control the type of Socket the SocketClient creates for
* initiating network connections. This is especially useful for adding
* SSL or proxy support as well as better support for applets. For
* example, you could create a
* <a href="org.apache.commons.net.SocketFactory.html"> SocketFactory </a> that
* requests browser security capabilities before creating a socket.
* All classes derived from SocketClient should use the
* <a href="#_socketFactory_"> _socketFactory_ </a> member variable to
* create Socket and ServerSocket instances rather than instanting
* them by directly invoking a constructor. By honoring this contract
* you guarantee that a user will always be able to provide his own
* Socket implementations by substituting his own SocketFactory.
* <p>
* <p>
* @author Daniel F. Savarese
* @see SocketFactory
***/
public abstract class SocketClient {
/***
* The end of line character sequence used by most IETF protocols. That
* is a carriage return followed by a newline: "\r\n"
***/
public static final String NETASCII_EOL = "\r\n";
/*** The default SocketFactory shared by all SocketClient instances. ***/
private static final SocketFactory __DEFAULT_SOCKET_FACTORY =
new DefaultSocketFactory();
/*** The timeout to use after opening a socket. ***/
protected int _timeout_;
/*** The socket used for the connection. ***/
protected Socket _socket_;
/***
* A status variable indicating if the client's socket is currently open.
***/
protected boolean _isConnected_;
/*** The default port the client should connect to. ***/
protected int _defaultPort_;
/*** The socket's InputStream. ***/
protected InputStream _input_;
/*** The socket's OutputStream. ***/
protected OutputStream _output_;
/*** The socket's SocketFactory. ***/
protected SocketFactory _socketFactory_;
/***
* Default constructor for SocketClient. Initializes
* _socket_ to null, _timeout_ to 0, _defaultPort to 0,
* _isConnected_ to false, and _socketFactory_ to a shared instance of
* <a href="org.apache.commons.net.DefaultSocketFactory.html">
* DefaultSocketFactory </a>.
***/
public SocketClient() {
_socket_ = null;
_input_ = null;
_output_ = null;
_timeout_ = 0;
_defaultPort_ = 0;
_isConnected_ = false;
_socketFactory_ = __DEFAULT_SOCKET_FACTORY;
}
/***
* Because there are so many connect() methods, the _connectAction_()
* method is provided as a means of performing some action immediately
* after establishing a connection, rather than reimplementing all
* of the connect() methods. The last action performed by every
* connect() method after opening a socket is to call this method.
* <p>
* This method sets the timeout on the just opened socket to the default
* timeout set by <a href="#setDefaultTimeout"> setDefaultTimeout() </a>,
* sets _input_ and _output_ to the socket's InputStream and OutputStream
* respectively, and sets _isConnected_ to true.
* <p>
* Subclasses overriding this method should start by calling
* <code> super._connectAction_() </code> first to ensure the
* initialization of the aforementioned protected variables.
***/
protected void _connectAction_() throws IOException {
_socket_.setSoTimeout(_timeout_);
_input_ = _socket_.getInputStream();
_output_ = _socket_.getOutputStream();
_isConnected_ = true;
}
/***
* Opens a Socket connected to a remote host at the specified port and
* originating from the current host at a system assigned port.
* Before returning, <a href="#_connectAction_"> _connectAction_() </a>
* is called to perform connection initialization actions.
* <p>
* @param host The remote host.
* @param port The port to connect to on the remote host.
* @exception SocketException If the socket timeout could not be set.
* @exception IOException If the socket could not be opened. In most
* cases you will only want to catch IOException since SocketException is
* derived from it.
***/
public void connect(InetAddress host, int port)
throws SocketException, IOException
{
_socket_ = _socketFactory_.createSocket(host, port);
_connectAction_();
}
/***
* Opens a Socket connected to a remote host at the specified port and
* originating from the current host at a system assigned port.
* Before returning, <a href="#_connectAction_"> _connectAction_() </a>
* is called to perform connection initialization actions.
* <p>
* @param hostname The name of the remote host.
* @param port The port to connect to on the remote host.
* @exception SocketException If the socket timeout could not be set.
* @exception IOException If the socket could not be opened. In most
* cases you will only want to catch IOException since SocketException is
* derived from it.
* @exception UnknownHostException If the hostname cannot be resolved.
***/
public void connect(String hostname, int port)
throws SocketException, IOException
{
_socket_ = _socketFactory_.createSocket(hostname, port);
_connectAction_();
}
/***
* Opens a Socket connected to a remote host at the specified port and
* originating from the specified local address and port.
* Before returning, <a href="#_connectAction_"> _connectAction_() </a>
* is called to perform connection initialization actions.
* <p>
* @param host The remote host.
* @param port The port to connect to on the remote host.
* @param localAddr The local address to use.
* @param localPort The local port to use.
* @exception SocketException If the socket timeout could not be set.
* @exception IOException If the socket could not be opened. In most
* cases you will only want to catch IOException since SocketException is
* derived from it.
***/
public void connect(InetAddress host, int port,
InetAddress localAddr, int localPort)
throws SocketException, IOException
{
_socket_ = _socketFactory_.createSocket(host, port, localAddr, localPort);
_connectAction_();
}
/***
* Opens a Socket connected to a remote host at the specified port and
* originating from the specified local address and port.
* Before returning, <a href="#_connectAction_"> _connectAction_() </a>
* is called to perform connection initialization actions.
* <p>
* @param hostname The name of the remote host.
* @param port The port to connect to on the remote host.
* @param localAddr The local address to use.
* @param localPort The local port to use.
* @exception SocketException If the socket timeout could not be set.
* @exception IOException If the socket could not be opened. In most
* cases you will only want to catch IOException since SocketException is
* derived from it.
* @exception UnknownHostException If the hostname cannot be resolved.
***/
public void connect(String hostname, int port,
InetAddress localAddr, int localPort)
throws SocketException, IOException
{
_socket_ =
_socketFactory_.createSocket(hostname, port, localAddr, localPort);
_connectAction_();
}
/***
* Opens a Socket connected to a remote host at the current default port
* and originating from the current host at a system assigned port.
* Before returning, <a href="#_connectAction_"> _connectAction_() </a>
* is called to perform connection initialization actions.
* <p>
* @param host The remote host.
* @exception SocketException If the socket timeout could not be set.
* @exception IOException If the socket could not be opened. In most
* cases you will only want to catch IOException since SocketException is
* derived from it.
***/
public void connect(InetAddress host) throws SocketException, IOException {
connect(host, _defaultPort_);
}
/***
* Opens a Socket connected to a remote host at the current default
* port and originating from the current host at a system assigned port.
* Before returning, <a href="#_connectAction_"> _connectAction_() </a>
* is called to perform connection initialization actions.
* <p>
* @param hostname The name of the remote host.
* @exception SocketException If the socket timeout could not be set.
* @exception IOException If the socket could not be opened. In most
* cases you will only want to catch IOException since SocketException is
* derived from it.
* @exception UnknownHostException If the hostname cannot be resolved.
***/
public void connect(String hostname) throws SocketException, IOException {
connect(hostname, _defaultPort_);
}
/***
* Disconnects the socket connection.
* You should call this method after you've finished using the class
* instance and also before you call
* <a href="#connect">connect() </a>
* again. _isConnected_ is set to false, _socket_ is set to null,
* _input_ is set to null, and _output_ is set to null.
* <p>
* @exception IOException If there is an error closing the socket.
***/
public void disconnect() throws IOException {
_socket_.close();
_input_.close();
_output_.close();
_socket_ = null;
_input_ = null;
_output_ = null;
_isConnected_ = false;
}
/***
* Returns true if the client is currently connected to a server.
* <p>
* @return True if the client is currently connected to a server,
* false otherwise.
***/
public boolean isConnected() {
return _isConnected_;
}
/***
* Sets the default port the SocketClient should connect to when a port
* is not specified. The <a href="#_defaultPort_"> _defaultPort_ </a>
* variable stores this value. If never set, the default port is equal
* to zero.
* <p>
* @param port The default port to set.
***/
public void setDefaultPort(int port) { _defaultPort_ = port; }
/***
* Returns the current value of the default port (stored in
* <a href="#_defaultPort_"> _defaultPort_ </a>).
* <p>
* @return The current value of the default port.
***/
public int getDefaultPort() { return _defaultPort_; }
/***
* Set the default timeout in milliseconds to use when opening a socket.
* This value is only used previous to a call to
* <a href="#connect">connect()</a>
* and should not be confused with <a href="#setSoTimeout">setSoTimeout()</a>
* which operates on an the currently opened socket. _timeout_ contains
* the new timeout value.
* <p>
* @param timeout The timeout in milliseconds to use for the socket
* connection.
***/
public void setDefaultTimeout(int timeout) { _timeout_ = timeout; }
/***
* Returns the default timeout in milliseconds that is used when
* opening a socket.
* <p>
* @return The default timeout in milliseconds that is used when
* opening a socket.
***/
public int getDefaultTimeout() { return _timeout_; }
/***
* Set the timeout in milliseconds of a currently open connection.
* Only call this method after a connection has been opened
* by <a href="#connect">connect()</a>.
* <p>
* @param timeout The timeout in milliseconds to use for the currently
* open socket connection.
* @exception SocketException If the operation fails.
***/
public void setSoTimeout(int timeout) throws SocketException {
_socket_.setSoTimeout(timeout);
}
/***
* Returns the timeout in milliseconds of the currently opened socket.
* <p>
* @return The timeout in milliseconds of the currently opened socket.
* @exception SocketException If the operation fails.
***/
public int getSoTimeout() throws SocketException {
return _socket_.getSoTimeout();
}
/***
* Enables or disables the Nagle's algorithm (TCP_NODELAY) on the
* currently opened socket.
* <p>
* @param on True if Nagle's algorithm is to be enabled, false if not.
* @exception SocketException If the operation fails.
***/
public void setTcpNoDelay(boolean on) throws SocketException {
_socket_.setTcpNoDelay(on);
}
/***
* Returns true if Nagle's algorithm is enabled on the currently opened
* socket.
* <p>
* @return True if Nagle's algorithm is enabled on the currently opened
* socket, false otherwise.
* @exception SocketException If the operation fails.
***/
public boolean getTcpNoDelay() throws SocketException {
return _socket_.getTcpNoDelay();
}
/***
* Sets the SO_LINGER timeout on the currently opened socket.
* <p>
* @param on True if linger is to be enabled, false if not.
* @param val The linger timeout (in hundredths of a second?)
* @exception SocketException If the operation fails.
***/
public void setSoLinger(boolean on, int val) throws SocketException {
_socket_.setSoLinger(on, val);
}
/***
* Returns the current SO_LINGER timeout of the currently opened socket.
* <p>
* @return The current SO_LINGER timeout. If SO_LINGER is disabled returns
* -1.
* @exception SocketException If the operation fails.
***/
public int getSoLinger() throws SocketException {
return _socket_.getSoLinger();
}
/***
* Returns the port number of the open socket on the local host used
* for the connection.
* <p>
* @return The port number of the open socket on the local host used
* for the connection.
***/
public int getLocalPort() { return _socket_.getLocalPort(); }
/***
* Returns the local address to which the client's socket is bound.
* <p>
* @return The local address to which the client's socket is bound.
***/
public InetAddress getLocalAddress() {
return _socket_.getLocalAddress();
}
/***
* Returns the port number of the remote host to which the client is
* connected.
* <p>
* @return The port number of the remote host to which the client is
* connected.
***/
public int getRemotePort() { return _socket_.getPort(); }
/***
* @return The remote address to which the client is connected.
***/
public InetAddress getRemoteAddress() {
return _socket_.getInetAddress();
}
/***
* Verifies that the remote end of the given socket is connected to the
* the same host that the SocketClient is currently connected to. This
* is useful for doing a quick security check when a client needs to
* accept a connection from a server, such as an FTP data connection or
* a BSD R command standard error stream.
* <p>
* @return True if the remote hosts are the same, false if not.
***/
public boolean verifyRemote(Socket socket) {
InetAddress host1, host2;
host1 = socket.getInetAddress();
host2 = getRemoteAddress();
return host1.equals(host2);
}
/***
* Sets the SocketFactory used by the SocketClient to open socket
* connections. If the factory value is null, then a default
* factory is used (only do this to reset the factory after having
* previously altered it).
* <p>
* @param factory The new SocketFactory the SocketClient should use.
***/
public void setSocketFactory(SocketFactory factory) {
if(factory == null)
_socketFactory_ = __DEFAULT_SOCKET_FACTORY;
else
_socketFactory_ = factory;
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/SocketFactory.java
Index: SocketFactory.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The SocketFactory interface provides a means for the programmer to
* control the creation of sockets and provide his own Socket
* implementations for use by all classes derived from
* <a href="org.apache.commons.net.SocketClient.html"> SocketClient </a>.
* This allows you to provide your own Socket implementations and
* to perform security checks or browser capability requests before
* creating a Socket.
* <p>
* <p>
* @author Daniel F. Savarese
* @see DefaultSocketFactory
***/
public interface SocketFactory {
/***
* Creates a Socket connected to the given host and port.
* <p>
* @param host The hostname to connect to.
* @param port The port to connect to.
* @return A Socket connected to the given host and port.
* @exception UnknownHostException If the hostname cannot be resolved.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(String host, int port)
throws UnknownHostException, IOException;
/***
* Creates a Socket connected to the given host and port.
* <p>
* @param address The address of the host to connect to.
* @param port The port to connect to.
* @return A Socket connected to the given host and port.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(InetAddress address, int port)
throws IOException;
/***
* Creates a Socket connected to the given host and port and
* originating from the specified local address and port.
* <p>
* @param host The hostname to connect to.
* @param port The port to connect to.
* @param localAddr The local address to use.
* @param localPort The local port to use.
* @return A Socket connected to the given host and port.
* @exception UnknownHostException If the hostname cannot be resolved.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(String host, int port, InetAddress localAddr,
int localPort)
throws UnknownHostException, IOException;
/***
* Creates a Socket connected to the given host and port and
* originating from the specified local address and port.
* <p>
* @param address The address of the host to connect to.
* @param port The port to connect to.
* @param localAddr The local address to use.
* @param localPort The local port to use.
* @return A Socket connected to the given host and port.
* @exception IOException If an I/O error occurs while creating the Socket.
***/
public Socket createSocket(InetAddress address, int port,
InetAddress localAddr, int localPort)
throws IOException;
/***
* Creates a ServerSocket bound to a specified port. A port
* of 0 will create the ServerSocket on a system-determined free port.
* <p>
* @param port The port on which to listen, or 0 to use any free port.
* @return A ServerSocket that will listen on a specified port.
* @exception IOException If an I/O error occurs while creating
* the ServerSocket.
***/
public ServerSocket createServerSocket(int port) throws IOException;
/***
* Creates a ServerSocket bound to a specified port with a given
* maximum queue length for incoming connections. A port of 0 will
* create the ServerSocket on a system-determined free port.
* <p>
* @param port The port on which to listen, or 0 to use any free port.
* @param backlog The maximum length of the queue for incoming connections.
* @return A ServerSocket that will listen on a specified port.
* @exception IOException If an I/O error occurs while creating
* the ServerSocket.
***/
public ServerSocket createServerSocket(int port, int backlog)
throws IOException;
/***
* Creates a ServerSocket bound to a specified port on a given local
* address with a given maximum queue length for incoming connections.
* A port of 0 will
* create the ServerSocket on a system-determined free port.
* <p>
* @param port The port on which to listen, or 0 to use any free port.
* @param backlog The maximum length of the queue for incoming connections.
* @param bindAddr The local address to which the ServerSocket should bind.
* @return A ServerSocket that will listen on a specified port.
* @exception IOException If an I/O error occurs while creating
* the ServerSocket.
***/
public ServerSocket createServerSocket(int port, int backlog,
InetAddress bindAddr)
throws IOException;
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/TimeTCPClient.java
Index: TimeTCPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
import java.util.*;
/***
* The TimeTCPClient class is a TCP implementation of a client for the
* Time protocol described in RFC 868. To use the class, merely
* establish a connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* and call either <a href="#getTime"> getTime() </a> or
* <a href="#getDate"> getDate() </a> to retrieve the time, then
* call <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* to close the connection properly.
* <p>
* <p>
* @author Daniel F. Savarese
* @see TimeUDPClient
***/
public final class TimeTCPClient extends SocketClient {
/*** The default time port. It is set to 37 according to RFC 868. ***/
public static final int DEFAULT_PORT = 37;
/***
* The number of seconds between 00:00 1 January 1900 and
* 00:00 1 January 1970. This value can be useful for converting
* time values to other formats.
***/
public static final long SECONDS_1900_TO_1970 = 2208988800L;
/***
* The default TimeTCPClient constructor. It merely sets the default
* port to <code> DEFAULT_PORT </code>.
***/
public TimeTCPClient () {
setDefaultPort(DEFAULT_PORT);
}
/***
* Retrieves the time from the server and returns it. The time
* is the number of seconds since 00:00 (midnight) 1 January 1900 GMT,
* as specified by RFC 868. This method reads the raw 32-bit big-endian
* unsigned integer from the server, converts it to a Java long, and
* returns the value.
* <p>
* The server will have closed the connection at this point, so you should
* call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* after calling this method. To retrieve another time, you must
* initiate another connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* before calling <code> getTime() </code> again.
* <p>
* @return The time value retrieved from the server.
* @exception IOException If an error occurs while fetching the time.
***/
public long getTime() throws IOException {
DataInputStream input;
input = new DataInputStream(_input_);
return (long)(input.readInt() & 0xffffffffL);
}
/***
* Retrieves the time from the server and returns a Java Date
* containing the time converted to the local timezone.
* <p>
* The server will have closed the connection at this point, so you should
* call
* <a href="org.apache.commons.net.SocketClient.html#disconnect"> disconnect </a>
* after calling this method. To retrieve another time, you must
* initiate another connection with
* <a href="org.apache.commons.net.SocketClient.html#connect"> connect </a>
* before calling <code> getDate() </code> again.
* <p>
* @return A Date value containing the time retrieved from the server
* converted to the local timezone.
* @exception IOException If an error occurs while fetching the time.
***/
public Date getDate() throws IOException {
return new Date((getTime() - SECONDS_1900_TO_1970)*1000L);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/TimeUDPClient.java
Index: TimeUDPClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
import java.util.*;
/***
* The TimeUDPClient class is a UDP implementation of a client for the
* Time protocol described in RFC 868. To use the class, merely
* open a local datagram socket with
* <a href="org.apache.commons.net.DatagramSocketClient.html#open"> open </a>
* and call <a href="#getTime"> getTime </a> or
* <a href="#getTime"> getDate </a> to retrieve the time. Then call
* <a href="org.apache.commons.net.DatagramSocketClient.html#close"> close </a>
* to close the connection properly. Unlike
* <a href="org.apache.commons.net.TimeTCPClient.html"> TimeTCPClient </a>,
* successive calls to <a href="#getTime"> getTime </a> or
* <a href="#getDate"> getDate </a> are permitted
* without re-establishing a connection. That is because UDP is a
* connectionless protocol and the Time protocol is stateless.
* <p>
* <p>
* @author Daniel F. Savarese
* @see TimeTCPClient
***/
public final class TimeUDPClient extends DatagramSocketClient {
/*** The default time port. It is set to 37 according to RFC 868. ***/
public static final int DEFAULT_PORT = 37;
/***
* The number of seconds between 00:00 1 January 1900 and
* 00:00 1 January 1970. This value can be useful for converting
* time values to other formats.
***/
public static final long SECONDS_1900_TO_1970 = 2208988800L;
private byte[] __dummyData = new byte[1];
private byte[] __timeData = new byte[4];
/***
* Retrieves the time from the specified server and port and
* returns it. The time is the number of seconds since
* 00:00 (midnight) 1 January 1900 GMT, as specified by RFC 868.
* This method reads the raw 32-bit big-endian
* unsigned integer from the server, converts it to a Java long, and
* returns the value.
* <p>
* @param host The address of the server.
* @param port The port of the service.
* @return The time value retrieved from the server.
* @exception IOException If an error occurs while retrieving the time.
***/
public long getTime(InetAddress host, int port) throws IOException {
long time;
DatagramPacket sendPacket, receivePacket;
sendPacket =
new DatagramPacket(__dummyData, __dummyData.length, host, port);
receivePacket = new DatagramPacket(__timeData, __timeData.length);
_socket_.send(sendPacket);
_socket_.receive(receivePacket);
time = 0L;
time |= (((__timeData[0] & 0xff) << 24) & 0xffffffffL);
time |= (((__timeData[1] & 0xff) << 16) & 0xffffffffL);
time |= (((__timeData[2] & 0xff) << 8) & 0xffffffffL);
time |= ((__timeData[3] & 0xff) & 0xffffffffL);
return time;
}
/*** Same as <code> getTime(host, DEFAULT_PORT); </code> ***/
public long getTime(InetAddress host) throws IOException {
return getTime(host, DEFAULT_PORT);
}
/***
* Retrieves the time from the server and returns a Java Date
* containing the time converted to the local timezone.
* <p>
* @param host The address of the server.
* @param port The port of the service.
* @return A Date value containing the time retrieved from the server
* converted to the local timezone.
* @exception IOException If an error occurs while fetching the time.
***/
public Date getDate(InetAddress host, int port) throws IOException {
return new Date((getTime(host, port) - SECONDS_1900_TO_1970)*1000L);
}
/*** Same as <code> getTime(host, DEFAULT_PORT); </code> ***/
public Date getDate(InetAddress host) throws IOException {
return new Date((getTime(host, DEFAULT_PORT) -
SECONDS_1900_TO_1970)*1000L);
}
}
1.1 jakarta-commons-sandbox/net/src/java/org/apache/commons/net/WhoisClient.java
Index: WhoisClient.java
===================================================================
package org.apache.commons.net;
/* ====================================================================
* The Apache Software License, Version 1.1
*
* Copyright (c) 2001 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution,
* if any, must include the following acknowledgment:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowledgment may appear in the software itself,
* if and wherever such third-party acknowledgments normally appear.
*
* 4. The names "Apache" and "Apache Software Foundation" and
* "Apache Commons" must not be used to endorse or promote products
* derived from this software without prior written permission. For
* written permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache",
* "Apache Turbine", nor may "Apache" appear in their name, without
* prior written permission of the Apache Software Foundation.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*/
import java.io.*;
import java.net.*;
/***
* The WhoisClient class implements the client side of the Internet Whois
* Protocol defined in RFC 954. To query a host you create a
* WhoisClient instance, connect to the host, query the host, and finally
* disconnect from the host. If the whois service you want to query is on
* a non-standard port, connect to the host at that port.
* Here's a sample use:
* <pre>
* WhoisClient whois;
*
* whois = new WhoisClient();
*
* try {
* whois.connect(WhoisClient.DEFAULT_HOST);
* System.out.println(whois.query("foobar"));
* whois.disconnect();
* } catch(IOException e) {
* System.err.println("Error I/O exception: " + e.getMessage());
* return;
* }
* </pre>
*
* <p>
* <p>
* @author Daniel F. Savarese
***/
public final class WhoisClient extends FingerClient {
/***
* The default whois host to query. It is set to whois.internic.net.
***/
public static final String DEFAULT_HOST = "whois.internic.net";
/***
* The default whois port. It is set to 43 according to RFC 954.
***/
public static final int DEFAULT_PORT = 43;
/***
* The default whois constructor. Initializes the
* default port to <code> DEFAULT_PORT </code>.
***/
public WhoisClient() { setDefaultPort(DEFAULT_PORT); }
/***
* Queries the connected whois server for information regarding
* the given handle. It is up to the programmer to be familiar with the
* handle syntax of the whois server. You must first connect to a whois
* server before calling this method, and you should disconnect afterward.
* <p>
* @param handle The handle to lookup.
* @return The result of the whois query.
* @exception IOException If an I/O error occurs during the operation.
***/
public String query(String handle) throws IOException {
return query(false, handle);
}
/***
* Queries the connected whois server for information regarding
* the given handle and returns the InputStream of the network connection.
* It is up to the programmer to be familiar with the handle syntax
* of the whois server. You must first connect to a finger server before
* calling this method, and you should disconnect after finishing reading
* the stream.
* <p>
* @param handle The handle to lookup.
* @return The InputStream of the network connection of the whois query.
* Can be read to obtain whois results.
* @exception IOException If an I/O error occurs during the operation.
***/
public InputStream getInputStream(String handle) throws IOException {
return getInputStream(false, handle);
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>