/*
 *
 * Usage: java API command ip port
 *
 * If any are missing or blank they use the defaults:
 *
 *	command = 'summary'
 *	ip	= '127.0.0.1'
 *	port	= '4028'
 *
 */
import java.net.*;
import java.io.*;
class API
{
	static private final int MAXRECEIVESIZE = 65535;
	static private Socket socket = null;
	private void closeAll() throws Exception
	{
		if (socket != null)
		{
			socket.close();
			socket = null;
		}
	}
	public void display(String result) throws Exception
	{
		String value;
		String name;
		String[] sections = result.split("\\|", 0);
		for (int i = 0; i < sections.length; i++)
		{
			if (sections[i].trim().length() > 0)
			{
				String[] data = sections[i].split(",", 0);
				for (int j = 0; j < data.length; j++)
				{
					String[] nameval = data[j].split("=", 2);
					if (j == 0)
					{
						if (nameval.length > 1
						&&  Character.isDigit(nameval[1].charAt(0)))
							name = nameval[0] + nameval[1];
						else
							name = nameval[0];
						System.out.println("[" + name + "] =>");
						System.out.println("(");
					}
					if (nameval.length > 1)
					{
						name = nameval[0];
						value = nameval[1];
					}
					else
					{
						name = "" + j;
						value = nameval[0];
					}
					System.out.println("   ["+name+"] => "+value);
				}
				System.out.println(")");
			}
		}
	}
	public void process(String cmd, InetAddress ip, int port) throws Exception
	{
		StringBuffer sb = new StringBuffer();
		char buf[] = new char[MAXRECEIVESIZE];
		int len = 0;
System.out.println("Attempting to send '"+cmd+"' to "+ip.getHostAddress()+":"+port);
		try
		{
			socket = new Socket(ip, port);
			PrintStream ps = new PrintStream(socket.getOutputStream());
			ps.print(cmd.toLowerCase().toCharArray());
			ps.flush();
			InputStreamReader isr = new InputStreamReader(socket.getInputStream());
			while (0x80085 > 0)
			{
				len = isr.read(buf, 0, MAXRECEIVESIZE);
				if (len < 1)
					break;
				sb.append(buf, 0, len);
				if (buf[len-1] == '\0')
					break;
			}
			closeAll();
		}
		catch (IOException ioe)
		{
			System.err.println(ioe.toString());
			closeAll();
			return;
		}
		String result = sb.toString();
		System.out.println("Answer='"+result+"'");
		display(result);
	}
	public API(String command, String _ip, String _port) throws Exception
	{
		InetAddress ip;
		int port;
		try
		{
			ip = InetAddress.getByName(_ip);
		}
		catch (UnknownHostException uhe)
		{
			System.err.println("Unknown host " + _ip + ": " + uhe);
			return;
		}
		try
		{
			port = Integer.parseInt(_port);
		}
		catch (NumberFormatException nfe)
		{
			System.err.println("Invalid port " + _port + ": " + nfe);
			return;
		}
		process(command, ip, port);
	}
	public static void main(String[] params) throws Exception
	{
		String command = "summary";
		String ip = "127.0.0.1";
		String port = "4028";
		if (params.length > 0 && params[0].trim().length() > 0)
			command = params[0].trim();
		if (params.length > 1 && params[1].trim().length() > 0)
			ip = params[1].trim();
		if (params.length > 2 && params[2].trim().length() > 0)
			port = params[2].trim();
		new API(command, ip, port);
	}
}