001 /*
002 * Licensed to the Apache Software Foundation (ASF) under one or more
003 * contributor license agreements. See the NOTICE file distributed with
004 * this work for additional information regarding copyright ownership.
005 * The ASF licenses this file to You under the Apache License, Version 2.0
006 * (the "License"); you may not use this file except in compliance with
007 * the License. You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 package examples;
019
020 import java.io.IOException;
021 import java.net.InetAddress;
022 import java.net.UnknownHostException;
023
024 import org.apache.commons.net.finger.FingerClient;
025
026 /***
027 * This is an example of how you would implement the finger command
028 * in Java using NetComponents. The Java version is much shorter.
029 * But keep in mind that the Unix finger command reads all sorts of
030 * local files to output local finger information. This program only
031 * queries the finger daemon.
032 * <p>
033 * The -l flag is used to request long output from the server.
034 * <p>
035 ***/
036 public final class finger
037 {
038
039 public static final void main(String[] args)
040 {
041 boolean longOutput = false;
042 int arg = 0, index;
043 String handle, host;
044 FingerClient finger;
045 InetAddress address = null;
046
047 // Get flags. If an invalid flag is present, exit with usage message.
048 while (arg < args.length && args[arg].startsWith("-"))
049 {
050 if (args[arg].equals("-l"))
051 longOutput = true;
052 else
053 {
054 System.err.println("usage: finger [-l] [[[handle][@<server>]] ...]");
055 System.exit(1);
056 }
057 ++arg;
058 }
059
060
061 finger = new FingerClient();
062 // We want to timeout if a response takes longer than 60 seconds
063 finger.setDefaultTimeout(60000);
064
065 if (arg >= args.length)
066 {
067 // Finger local host
068
069 try
070 {
071 address = InetAddress.getLocalHost();
072 }
073 catch (UnknownHostException e)
074 {
075 System.err.println("Error unknown host: " + e.getMessage());
076 System.exit(1);
077 }
078
079 try
080 {
081 finger.connect(address);
082 System.out.print(finger.query(longOutput));
083 finger.disconnect();
084 }
085 catch (IOException e)
086 {
087 System.err.println("Error I/O exception: " + e.getMessage());
088 System.exit(1);
089 }
090
091 return ;
092 }
093
094 // Finger each argument
095 while (arg < args.length)
096 {
097
098 index = args[arg].lastIndexOf("@");
099
100 if (index == -1)
101 {
102 handle = args[arg];
103 try
104 {
105 address = InetAddress.getLocalHost();
106 }
107 catch (UnknownHostException e)
108 {
109 System.err.println("Error unknown host: " + e.getMessage());
110 System.exit(1);
111 }
112 }
113 else
114 {
115 handle = args[arg].substring(0, index);
116 host = args[arg].substring(index + 1);
117
118 try
119 {
120 address = InetAddress.getByName(host);
121 }
122 catch (UnknownHostException e)
123 {
124 System.err.println("Error unknown host: " + e.getMessage());
125 System.exit(1);
126 }
127 }
128
129 System.out.println("[" + address.getHostName() + "]");
130
131 try
132 {
133 finger.connect(address);
134 System.out.print(finger.query(longOutput, handle));
135 finger.disconnect();
136 }
137 catch (IOException e)
138 {
139 System.err.println("Error I/O exception: " + e.getMessage());
140 System.exit(1);
141 }
142
143 ++arg;
144 if (arg != args.length)
145 System.out.print("\n");
146 }
147 }
148 }
149