/* * This file is part of JSTUN. * * Copyright (c) 2005 Thomas King <king@t-king.de> - All rights * reserved. * * This software is licensed under either the GNU Public License (GPL), * or the Apache 2.0 license. Copies of both license agreements are * included in this distribution. */ package de.javawi.jstun.test; import java.net.InetAddress; import java.net.NetworkInterface; import java.net.SocketException; public class DiscoveryInfo { private final InetAddress testIP; private boolean error = false; private int errorResponseCode = 0; private String errorReason; private boolean openAccess = false; private boolean blockedUDP = false; private boolean fullCone = false; private boolean restrictedCone = false; private boolean portRestrictedCone = false; private boolean symmetric = false; private boolean symmetricUDPFirewall = false; private InetAddress publicIP; public DiscoveryInfo(InetAddress testIP) { this.testIP = testIP; } public InetAddress getLocalIP() { return testIP; } public InetAddress getPublicIP() { return publicIP; } public boolean isBlockedUDP() { if (error) { return false; } return blockedUDP; } public boolean isError() { return error; } public boolean isFullCone() { if (error) { return false; } return fullCone; } public boolean isOpenAccess() { if (error) { return false; } return openAccess; } public boolean isPortRestrictedCone() { if (error) { return false; } return portRestrictedCone; } public boolean isRestrictedCone() { if (error) { return false; } return restrictedCone; } public boolean isSymmetric() { if (error) { return false; } return symmetric; } public boolean isSymmetricUDPFirewall() { if (error) { return false; } return symmetricUDPFirewall; } public void setBlockedUDP() { blockedUDP = true; } public void setError(int responseCode, String reason) { error = true; errorResponseCode = responseCode; errorReason = reason; } public void setFullCone() { fullCone = true; } public void setOpenAccess() { openAccess = true; } public void setPortRestrictedCone() { portRestrictedCone = true; } public void setPublicIP(InetAddress publicIP) { this.publicIP = publicIP; } public void setRestrictedCone() { restrictedCone = true; } public void setSymmetric() { symmetric = true; } public void setSymmetricUDPFirewall() { symmetricUDPFirewall = true; } @Override public String toString() { final StringBuffer sb = new StringBuffer(); sb.append("Network interface: "); try { sb.append(NetworkInterface.getByInetAddress(testIP).getName()); } catch (final SocketException se) { sb.append("unknown"); } sb.append("\n"); sb.append("Local IP address: "); sb.append(testIP.getHostAddress()); sb.append("\n"); if (error) { sb.append(errorReason + " - Responsecode: " + errorResponseCode); return sb.toString(); } sb.append("Result: "); if (openAccess) { sb.append("Open access to the Internet.\n"); } if (blockedUDP) { sb.append("Firewall blocks UDP.\n"); } if (fullCone) { sb.append("Full Cone NAT handles connections.\n"); } if (restrictedCone) { sb.append("Restricted Cone NAT handles connections.\n"); } if (portRestrictedCone) { sb.append("Port restricted Cone NAT handles connections.\n"); } if (symmetric) { sb.append("Symmetric Cone NAT handles connections.\n"); } if (symmetricUDPFirewall) { sb.append("Symmetric UDP Firewall handles connections.\n"); } if (!openAccess && !blockedUDP && !fullCone && !restrictedCone && !portRestrictedCone && !symmetric && !symmetricUDPFirewall) { sb.append("unkown\n"); } sb.append("Public IP address: "); if (publicIP != null) { sb.append(publicIP.getHostAddress()); } else { sb.append("unknown"); } sb.append("\n"); return sb.toString(); } }