package net.java.sip.communicator.impl.netaddr; import java.net.*; /** * todo: add a type for the open internet * * * @author Emil Ivov */ public class FirewallDescriptor { /** * The amount of preference points that a firewall corresponding to this * descriptor should remove from the address preference. */ private AddressPreference preferenceSubtrahend = new AddressPreference(AddressPreference.MIN_PREF); /** * Means no firewall or nat. In the case of a privvate IPv4 address this * would meand no internet connectivity through this address. The same * applies to IPv6 link local addresses. In the case of a public (IPv4 or * IPv6) address this means that there is unlimited connectivity. */ public static final int TYPE_OPEN_INTERNET = 1; /** * Full cone NAT or firewall. */ public static final int TYPE_FULL_CONE = 2; /** * Restricted cone NAT or firewall. */ public static final int TYPE_RESTRICTED_CONE = 3; /** * Port restricted cone NAT or firewall. */ public static final int TYPE_PORT_RESTRICTED_CONE = 4; /** * Symmetric NAT or firewall. */ public static final int TYPE_SYMMETRIC = 5; /** * Determines firewall type. Could be one of symmetric, full cone, * restricted cone, port restricted cone. */ private int type = -1; /** * The time (in seconds) that address port bindings remain active on this * firewall without the node sendind any packets. Bindings may and most * probably will change during runtime. They are initially set to be equal * to net.java.sip.communicator.service.netaddr.INITIAL_BINDINGS_LIFETIME. */ private int bindingsLifetime = 30; /** * Indicates whether or not the firewall corresponding to this descriptor * is also acting as NAT (are we using a globally routable ip address or * not). */ private boolean isTranslatingAddresses = false; /** * The public IP address of the firewall. In the case of a NAT this is * the address that other would have to use to contact us. */ private InetAddress publicAddress = null; /** * Constructs an empty firewall descirptor */ FirewallDescriptor() { super(); } /** * Set the type of this firewall. * @param type the type of the firewall referenced by this descriptor. */ void setType(int type) { this.type = type; } /** * Returns the type of the firewall referenced by this desciptor * @return the type of the firewall referenced by this desciptor. One of the * TYPE_XXX fields of this class. */ public int getType() { return this.type; } /** * Sets the address preference subtrahend corresponding to the firewall * referenced by this descriptor. The subtrahend is a value that is * subtracted from AddressPreference-s of addresses behind this firewall. * * @param subtrahend the amount of address preference points that need to * be subtracted from address preferences of oaddresses behind this * firewall. */ void setPreferenceSubtrahend(AddressPreference subtrahend) { this.preferenceSubtrahend = subtrahend; } /** * Returns the address preference subtrahend corresponding to the firewall * referenced by this descriptor. The subtrahend is a value that is * subtracted from AddressPreference-s of addresses behind this firewall. * * @return the amount of address preference points that need to * be subtracted from address preferences of oaddresses behind this * firewall. */ public AddressPreference getAddressPreferenceSubtrahend() { return this.preferenceSubtrahend; } /** * Sets the public IP address of the firewall. In the case of a NAT this is * the address that others would have to use to contact us. * * @param address the ip address of the nat */ void setPublicAddress(InetAddress address) { this.publicAddress = address; } /** * Returns the public IP address of the firewall. In the case of a NAT this * is the address that others would have to use to contact us. * * @return the ip address of the nat */ public InetAddress getPublicAddress() { return this.publicAddress; } /** * Sets the time (in seconds) that address port bindings remain active on * this firewall without the node sendind any packets. Bindings may and most * probably will change during runtime. They are initially set to be equal * to net.java.sip.communicator.service.netaddr.INITIAL_BINDINGS_LIFETIME. * * @param lifetime the number of seconds that bindings on this firewall * remain active */ void setBindingsLifetime(int lifetime) { this.bindingsLifetime = lifetime; } /** * Returns the time (in seconds) that address port bindings remain active on * this firewall without the node sendind any packets. Bindings may and most * probably will change during runtime. They are initially set to be equal * to net.java.sip.communicator.service.netaddr.INITIAL_BINDINGS_LIFETIME. * * @return lifetime the number of seconds that bindings on this firewall * remain active */ public int getBindingsLifetime() { return this.bindingsLifetime; } /** * Specifies whether this is an address translating firewall (NAT) or not. * @param isNAT a boolean specifying whether the firewall referenced by this * descriptor is a NAT. */ void setTranslatingAddresses(boolean isNAT) { this.isTranslatingAddresses = isNAT; } /** * Determines whether this is an address translating firewall (NAT) or not. * @return true if the firewall referenced by this descriptor is a NAT and * false otherwise. */ public boolean isTranslatingAddresses() { return isTranslatingAddresses; } }