All Downloads are FREE. Search and download functionalities are using the official Maven repository.

panda.net.finger.FingerClient Maven / Gradle / Ivy

package panda.net.finger;

import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;

import panda.lang.Charsets;
import panda.net.SocketClient;

/***
 * 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:
 * 
 * 
 * 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;
 * }
 * 
***/ 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 char[] __buffer = new char[1024]; /*** * The default FingerClient constructor. Initializes the default port to * DEFAULT_PORT . ***/ 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. * * @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; StringBuilder result = new StringBuilder(__buffer.length); BufferedReader input; input = new BufferedReader(new InputStreamReader(getInputStream(longOutput, username), getCharsetName())); // Java // 1.6 // can // use // getCharset() try { while (true) { read = input.read(__buffer, 0, __buffer.length); if (read <= 0) { break; } result.append(__buffer, 0, read); } } finally { 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 query(longOutput, "") . * * @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. * * @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 { return getInputStream(longOutput, username, null); } /*** * 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. * * @param longOutput Set to true if long output is requested, false if not. * @param username The name of the user to finger. * @param encoding the character encoding that should be used for the query, null for the * platform's default encoding * @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, String encoding) throws IOException { DataOutputStream output; StringBuilder buffer = new StringBuilder(64); if (longOutput) { buffer.append(__LONG_FLAG); } buffer.append(username); buffer.append(SocketClient.NETASCII_EOL); // Note: Charsets.toCharset() returns the platform default for null input byte[] encodedQuery = buffer.toString().getBytes(Charsets.toCharset(encoding).name()); // Java // 1.6 // can // use // charset // directly output = new DataOutputStream(new BufferedOutputStream(_output_, 1024)); output.write(encodedQuery, 0, encodedQuery.length); 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. * * @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, ""); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy