package com.limegroup.gnutella.dht.db;
import java.io.IOException;
import java.io.OutputStream;
import com.limegroup.gnutella.ApplicationServices;
import com.limegroup.gnutella.NetworkManager;
import com.limegroup.gnutella.security.MerkleTree;
/**
* An {@LINK AltLocValue} for the localhost.
*/
class AltLocValueForSelf extends AbstractAltLocValue {
private static final long serialVersionUID = 8101291047246461600L;
private final long fileSize;
private final byte[] ttroot;
private final NetworkManager networkManager;
private final ApplicationServices applicationServices;
public AltLocValueForSelf(long fileSize, byte[] ttroot,
NetworkManager networkManager,
ApplicationServices applicationServices) {
super(AbstractAltLocValue.VERSION);
if (fileSize < 0L) {
throw new IllegalArgumentException("Illegal fileSize: " + fileSize);
}
if (ttroot != null && ttroot.length != MerkleTree.HASHSIZE) {
throw new IllegalArgumentException("Illegal ttroot length: " + ttroot.length);
}
this.fileSize = fileSize;
this.ttroot = ttroot;
this.networkManager = networkManager;
this.applicationServices = applicationServices;
}
/*
* (non-Javadoc)
* @see org.limewire.mojito.db.DHTValue#getValue()
*/
public byte[] getValue() {
return AbstractAltLocValue.serialize(this);
}
/*
* (non-Javadoc)
* @see org.limewire.mojito.db.DHTValue#write(java.io.OutputStream)
*/
public void write(OutputStream out) throws IOException {
out.write(getValue());
}
@Override
public int getPort() {
return networkManager.getPort();
}
@Override
public byte[] getGUID() {
return applicationServices.getMyGUID();
}
@Override
public boolean isFirewalled() {
return !networkManager.acceptedIncomingConnection();
}
@Override
public long getFileSize() {
return fileSize;
}
@Override
public byte[] getRootHash() {
return ttroot;
}
@Override
public boolean supportsTLS() {
return networkManager.isIncomingTLSEnabled();
}
}