You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

406 lines
8.6 KiB
Java

/*
* Copyright (C) 2009-2017 Alistair Neil <info@dazzleships.net>
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
*/
package client;
import java.text.DecimalFormat;
/**
*
* @author Alistair Neil <info@dazzleships.net>
*/
public class NodeItem extends Object implements Cloneable {
public static final int TYPE_EXIT = 1;
public static final int TYPE_GUARD = 2;
public static final int TESTSTATUS_UNKNOWN = 0;
public static final int TESTSTATUS_PASSED = 1;
public static final int TESTSTATUS_FAILED = 2;
private int type;
private boolean exitFavourite;
private boolean guardEnabled;
private boolean httpSupported;
private String stable;
private String countrycode;
private String countryname;
private String nickname;
private String finger;
private String ipaddress;
private String testingmess;
private String circuithops;
private int teststatus;
private float bandwidth;
private int streams;
private long latency;
private long testlatency;
public NodeItem() {
this.type = 0;
this.exitFavourite = false;
this.guardEnabled = false;
this.httpSupported = false;
this.countrycode = null;
this.latency = 9999;
this.testlatency = this.latency;
this.bandwidth = 0;
this.streams = 0;
this.countrycode = "";
this.countryname = "";
this.stable = "";
this.testingmess = "";
this.ipaddress = "";
this.finger = "";
this.nickname = "";
this.teststatus = TESTSTATUS_UNKNOWN;
}
/**
* Set Node type
*
* @param mask
*/
public final void setType(int mask) {
this.type |= mask;
}
/**
* Clear node type
*/
public final void clearType() {
this.type = 0;
}
public boolean isNonUnique() {
return (nickname.contains("Default")
|| nickname.contains("default")
|| nickname.contains("Unnamed"));
}
/**
* Is exit node
*
* @return true if an exit node
*/
public final boolean isExit() {
return (type & TYPE_EXIT) != 0;
}
public boolean isHttpSupported() {
return httpSupported;
}
public void setHttpSupported(boolean supported) {
httpSupported = supported;
}
/**
* Is Guard node
*
* @return true if guard node
*/
public final boolean isGuard() {
return (type & TYPE_GUARD) != 0;
}
/**
* Set circuit hops
*
* @param hops
*/
public final void setCircuitHops(String hops) {
circuithops = hops;
}
/**
* Get circuit hops
*
* @return Circuit hops as String
*/
public final String getCircuitHops() {
return circuithops;
}
/**
* Set Nodeitem testing status message
*
* @param text
*/
public final void setTestingMessage(String text) {
this.testingmess = text;
}
/**
* Set testing status flag
*
* @param status
*/
public final void setTestStatus(int status) {
teststatus = status;
}
/**
* Get testing status flag
*
* @return test status
*/
public final int getTestStatus() {
return teststatus;
}
/**
* Get Node item status
*
* @return Nodeitem testing status message as string
*/
public final String getTestingMessage() {
return testingmess;
}
/**
* Set Nodeitem latency value in ms
*
* @param latency
*/
public final void setLatency(long latency) {
this.latency = latency;
}
/**
* Get Nodeitem latency in ms
*
* @return Latency value in ms
*/
public final long getLatency() {
return latency;
}
/**
* Set Nodeitem test latency value in ms
*
* @param latency
*/
public final void setTestLatency(long latency) {
this.testlatency = latency;
}
/**
* Get Nodeitem test latency in ms
*
* @return Latency value in ms
*/
public final long getTestLatency() {
return testlatency;
}
/**
* Set exit enabled status of Nodeitem
*
* @param enabled
*/
public final void setFavouriteEnabled(boolean enabled) {
this.exitFavourite = enabled;
}
/**
* Get exit enabled status of Nodeitem
*
* @return true if enabled
*/
public final boolean isFavourite() {
return exitFavourite;
}
/**
* Set guard enabled status of Nodeitem
*
* @param enabled
*/
public final void setGuardEnabled(boolean enabled) {
this.guardEnabled = enabled;
}
/**
* Get guard enabled status of Nodeitem
*
* @return true if enabled
*/
public final boolean isGuardEnabled() {
return guardEnabled;
}
/**
* Set Nodeitem stability yes/no/unknown
*
* @param stability
*/
public final void setStable(String stability) {
this.stable = stability;
}
/**
* Get Nodeitem stability
*
* @return Stability
*/
public final String getStability() {
return stable;
}
/**
* Set Nodeitem with its two letter country code abbreviation
*
* @param abrv
*/
public final void setCountryCode(String abrv) {
countrycode = abrv;
}
/**
* Get nodeitem two letter country code abbreviation
*
* @return Country code as string
*/
public final String getCountryCode() {
return countrycode;
}
/**
* Set Nodeitem with its full country name
*
* @param name
*/
public final void setCountryName(String name) {
countryname = name;
}
/**
* Get nodeitem full country name
*
* @return Country name as string
*/
public final String getCountryName() {
return countryname;
}
/**
* Set nodeitem name
*
* @param name
*/
public final void setNickName(String name) {
nickname = name;
}
/**
* Get nodeitem unique name
*
* @return Node name as string
*/
public final String getNickName() {
return nickname;
}
/**
* Set node item bandwidth
*
* @param bw
*/
public final void setBandwidth(float bw) {
bandwidth = bw;
}
/**
* Get nodeitem bandwith
*
* @return Bandwidth as long, in kb/s
*/
public final float getBandwidth() {
Float result;
try {
DecimalFormat df = new DecimalFormat("#0.##");
result = Float.parseFloat(df.format(bandwidth).replace(",", "."));
} catch (Exception ex) {
result = (float) 0;
}
return result;
}
/**
* Set nodeitem number of streams
*
* @param streams
*/
public final void setStreams(int streams) {
this.streams = streams;
}
/**
* Get nodeitems active streams
*
* @return Number of active streams as int
*/
public final int getStreams() {
return streams;
}
/**
* Set nodeitem fingerprint
*
* @param fp
*/
public final void setFingerprint(String fp) {
finger = fp;
}
/**
* Get nodeitems fingerprint
*
* @return Tor node fingerprint as string
*/
public final String getFingerprint() {
return finger;
}
/**
* Set nodeitem ip address
*
* @param ip
*/
public final void setIPAddress(String ip) {
ipaddress = ip;
}
/**
* Get nodeitem ip address
*
* @return IP address as a string
*/
public final String getIPAddress() {
return ipaddress;
}
@Override
public NodeItem clone() {
try {
return (NodeItem) super.clone();
} catch (CloneNotSupportedException ex) {
return null;
}
}
}