/*
* $Id: AnyInetAddress.java,v 1.22 2002/09/16 08:05:03 jkl Exp $
*
* Copyright (c) 2002 Njet Communications Ltd. All Rights Reserved.
*
* Use is subject to license terms, as defined in
* Anvil Sofware License, Version 1.1. See LICENSE
* file, or http://njet.org/license-1.1.txt
*/
package anvil.core.net;
import anvil.core.Any;
import anvil.core.AnyAbstractClass;
import anvil.core.Serialization;
import anvil.core.Serializer;
import anvil.core.Unserializer;
import anvil.core.UnserializationException;
import anvil.script.Context;
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
import java.net.InetAddress;
import java.net.UnknownHostException;
///
/// @class InetAddress
/// This class represents an Internet Protocol (IP) address.
///
/**
* class AnyInetAddress
*
* @author: Jani Lehtim�ki
*/
public class AnyInetAddress extends AnyAbstractClass
{
public static final anvil.script.compiler.NativeClass __class__ =
new anvil.script.compiler.NativeClass("InetAddress", AnyInetAddress.class,
//DOC{{
""+
"\n" +
" @class InetAddress\n" +
" This class represents an Internet Protocol (IP) address. \n" +
"\n" +
" @method getAddress\n" +
" Returns the IP address. \n" +
" @synopsis string getAddress()\n" +
" @return the ip address string \"a.b.c.d\"\n" +
" @method getHost\n" +
" Returns the hostname of this address.\n" +
" @synopsis string getHost()\n" +
" @return host name\n" +
" @method isMulticast\n" +
" Utility to check if this address is multicast address.\n" +
" @synopsis boolean isMulticast()\n" +
" @return true if is multicast address\n"
//}}DOC
);
static {
NetModule.class.getName();
}
private InetAddress _address;
public static final Any create(String host)
{
try {
return new AnyInetAddress(InetAddress.getByName(host));
} catch (UnknownHostException e) {
return UNDEFINED;
}
}
public AnyInetAddress(InetAddress url)
{
_address = url;
}
public final anvil.script.ClassType classOf() {
return __class__;
}
public Object toObject()
{
return _address;
}
public String toString()
{
return _address.getHostName();
}
public Writer toAnvil(Writer writer) throws IOException
{
writer.write("anvil.net.getByName(\"");
writer.write(anvil.util.Conversions.escape(_address.getHostName(), true));
writer.write('"');
writer.write(')');
return writer;
}
public Writer toJava(Writer writer) throws IOException
{
writer.write("anvil.core.net.AnyInetAddress.create(\"");
writer.write(anvil.util.Conversions.escape(_address.getHostName(), true));
writer.write('"');
writer.write(')');
return writer;
}
public anvil.codec.Code toCode(anvil.codec.Code code)
{
anvil.codec.ConstantPool pool = code.getPool();
code.astring(_address.getHostName());
code.invokestatic(code.getPool().addMethodRef("anvil/core/io/AnyInetAddress",
"create", "(Ljava/lang/String;)Lanvil/core/Any;"));
return code;
}
public boolean equals(Object obj)
{
if (obj == this) {
return true;
}
if (obj instanceof AnyInetAddress) {
return _address.equals(((AnyInetAddress)obj)._address);
}
return false;
}
public void serialize(Serializer serializer) throws IOException
{
if (serializer.register(this)) {
return;
}
String s = _address.getHostAddress();
serializer.write('I');
serializer.write(s.length());
serializer.write(':');
serializer.writeBinary(s);
}
public static final Any unserialize(Unserializer unserializer)
throws UnserializationException
{
try {
AnyInetAddress addr = new AnyInetAddress(
InetAddress.getByName(unserializer.getBinaryString()));
unserializer.register(addr);
return addr;
} catch (UnknownHostException e) {
throw new UnserializationException(e.toString());
}
}
/// @method getAddress
/// Returns the IP address.
/// @synopsis string getAddress()
/// @return the ip address string "a.b.c.d"
public Any m_getAddress()
{
return Any.create(_address.getHostAddress());
}
/// @method getHost
/// Returns the hostname of this address.
/// @synopsis string getHost()
/// @return host name
public Any m_getHost()
{
return Any.create(_address.getHostName());
}
/// @method isMulticast
/// Utility to check if this address is multicast address.
/// @synopsis boolean isMulticast()
/// @return true if is multicast address
public Any m_isMulticast()
{
return Any.create(_address.isMulticastAddress());
}
}