📄 dhtpluginimpl.java
字号:
if ( peers_imported > 0 ){
integrateDHT( false, root_to_remove );
}else{
log.log( "No valid peers found to reseed from" );
}
}
}catch( Throwable e ){
log.log(e);
}
}
protected DHTTransportContact
importRootSeed()
{
try{
long now = SystemTime.getCurrentTime();
if ( now - last_root_seed_import_time > MIN_ROOT_SEED_IMPORT_PERIOD ){
last_root_seed_import_time = now;
return( importSeed( getSeedAddress(), SEED_PORT ));
}else{
log.log( " root seed imported too recently, ignoring" );
}
}catch( Throwable e ){
log.log(e);
}
return( null );
}
public DHTTransportContact
importSeed(
String ip,
int port )
{
try{
return( importSeed( InetAddress.getByName( ip ), port ));
}catch( Throwable e ){
log.log(e);
return( null );
}
}
protected DHTTransportContact
importSeed(
InetAddress ia,
int port )
{
try{
return(
transport.importContact( new InetSocketAddress(ia, port ), protocol_version ));
}catch( Throwable e ){
log.log(e);
return( null );
}
}
protected InetAddress
getSeedAddress()
{
try{
return( InetAddress.getByName( SEED_ADDRESS ));
}catch( Throwable e ){
try{
return( InetAddress.getByName( SEED_IP ));
}catch( Throwable f ){
log.log(f);
return( null );
}
}
}
public boolean
isDiversified(
byte[] key )
{
return( dht.isDiversified( key ));
}
public void
put(
final byte[] key,
final String description,
final byte[] value,
final byte flags,
final DHTPluginOperationListener listener)
{
dht.put( key,
description,
value,
flags,
new DHTOperationListener()
{
public void
searching(
DHTTransportContact contact,
int level,
int active_searches )
{
String indent = "";
for (int i=0;i<level;i++){
indent += " ";
}
// log.log( indent + "Put: level = " + level + ", active = " + active_searches + ", contact = " + contact.getString());
}
public void
diversified()
{
}
public void
found(
DHTTransportContact contact )
{
}
public void
read(
DHTTransportContact _contact,
DHTTransportValue _value )
{
Debug.out( "read operation not supported for puts" );
}
public void
wrote(
DHTTransportContact _contact,
DHTTransportValue _value )
{
// log.log( "Put: wrote " + _value.getString() + " to " + _contact.getString());
if ( listener != null ){
listener.valueWritten( new DHTPluginContactImpl(DHTPluginImpl.this, _contact ), mapValue( _value ));
}
}
public void
complete(
boolean timeout )
{
// log.log( "Put: complete, timeout = " + timeout );
if ( listener != null ){
listener.complete( timeout );
}
}
});
}
public DHTPluginValue
getLocalValue(
byte[] key )
{
final DHTTransportValue val = dht.getLocalValue( key );
if ( val == null ){
return( null );
}
return( mapValue( val ));
}
public void
get(
final byte[] key,
final String description,
final byte flags,
final int max_values,
final long timeout,
final boolean exhaustive,
final boolean high_priority,
final DHTPluginOperationListener listener )
{
dht.get( key, description, flags, max_values, timeout, exhaustive, high_priority,
new DHTOperationListener()
{
public void
searching(
DHTTransportContact contact,
int level,
int active_searches )
{
/*
String indent = "";
for (int i=0;i<level;i++){
indent += " ";
}
log.log( indent + "Get: level = " + level + ", active = " + active_searches + ", contact = " + contact.getString());
*/
}
public void
diversified()
{
if ( listener != null ){
listener.diversified();
}
}
public void
found(
DHTTransportContact contact )
{
}
public void
read(
final DHTTransportContact contact,
final DHTTransportValue value )
{
// log.log( "Get: read " + value.getString() + " from " + contact.getString() + ", originator = " + value.getOriginator().getString());
if ( listener != null ){
listener.valueRead( new DHTPluginContactImpl( DHTPluginImpl.this, value.getOriginator()), mapValue( value ));
}
}
public void
wrote(
final DHTTransportContact contact,
final DHTTransportValue value )
{
// log.log( "Get: wrote " + value.getString() + " to " + contact.getString());
}
public void
complete(
boolean _timeout )
{
// log.log( "Get: complete, timeout = " + _timeout );
if ( listener != null ){
listener.complete( _timeout );
}
}
});
}
public void
remove(
final byte[] key,
final String description,
final DHTPluginOperationListener listener )
{
dht.remove( key,
description,
new DHTOperationListener()
{
public void
searching(
DHTTransportContact contact,
int level,
int active_searches )
{
String indent = "";
for (int i=0;i<level;i++){
indent += " ";
}
// log.log( indent + "Remove: level = " + level + ", active = " + active_searches + ", contact = " + contact.getString());
}
public void
found(
DHTTransportContact contact )
{
}
public void
diversified()
{
}
public void
read(
DHTTransportContact contact,
DHTTransportValue value )
{
// log.log( "Remove: read " + value.getString() + " from " + contact.getString());
}
public void
wrote(
DHTTransportContact contact,
DHTTransportValue value )
{
// log.log( "Remove: wrote " + value.getString() + " to " + contact.getString());
if ( listener != null ){
listener.valueWritten( new DHTPluginContactImpl( DHTPluginImpl.this, contact ), mapValue( value ));
}
}
public void
complete(
boolean timeout )
{
// log.log( "Remove: complete, timeout = " + timeout );
if ( listener != null ){
listener.complete( timeout );
}
}
});
}
public DHTPluginContact
getLocalAddress()
{
return( new DHTPluginContactImpl( this, transport.getLocalContact()));
}
public DHTPluginContact
importContact(
InetSocketAddress address )
{
try{
return( new DHTPluginContactImpl( this, transport.importContact( address, protocol_version )));
}catch( DHTTransportException e ){
Debug.printStackTrace(e);
return( null );
}
}
// direct read/write support
public void
registerHandler(
byte[] handler_key,
final DHTPluginTransferHandler handler )
{
dht.getTransport().registerTransferHandler(
handler_key,
new DHTTransportTransferHandler()
{
public String
getName()
{
return( handler.getName());
}
public byte[]
handleRead(
DHTTransportContact originator,
byte[] key )
{
return( handler.handleRead( new DHTPluginContactImpl( DHTPluginImpl.this, originator ), key ));
}
public byte[]
handleWrite(
DHTTransportContact originator,
byte[] key,
byte[] value )
{
handler.handleWrite( new DHTPluginContactImpl( DHTPluginImpl.this, originator ), key, value );
return( null );
}
});
}
public byte[]
read(
final DHTPluginProgressListener listener,
DHTPluginContact target,
byte[] handler_key,
byte[] key,
long timeout )
{
try{
return( dht.getTransport().readTransfer(
new DHTTransportProgressListener()
{
public void
reportSize(
long size )
{
listener.reportSize( size );
}
public void
reportActivity(
String str )
{
listener.reportActivity( str );
}
public void
reportCompleteness(
int percent )
{
listener.reportCompleteness( percent );
}
},
((DHTPluginContactImpl)target).getContact(),
handler_key,
key,
timeout ));
}catch( DHTTransportException e ){
throw( new RuntimeException( e ));
}
}
public DHT
getDHT()
{
return( dht );
}
public void
closedownInitiated()
{
storage_manager.exportContacts( dht );
dht.destroy();
}
public boolean
isRecentAddress(
String address )
{
return( storage_manager.isRecentAddress( address ));
}
protected DHTPluginValue
mapValue(
final DHTTransportValue value )
{
if ( value == null ){
return( null );
}
return( new DHTPluginValueImpl(value));
}
public DHTPluginKeyStats
decodeStats(
DHTPluginValue value )
{
if (( value.getFlags() & DHTPlugin.FLAG_STATS) == 0 ){
return( null );
}
try{
DataInputStream dis = new DataInputStream( new ByteArrayInputStream( value.getValue()));
final DHTStorageKeyStats stats = storage_manager.deserialiseStats( dis );
return(
new DHTPluginKeyStats()
{
public int
getEntryCount()
{
return( stats.getEntryCount());
}
public int
getSize()
{
return( stats.getSize());
}
public int
getReadsPerMinute()
{
return( stats.getReadsPerMinute());
}
public byte
getDiversification()
{
return( stats.getDiversification());
}
});
}catch( Throwable e ){
Debug.printStackTrace(e);
return( null );
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -