📄 dhtudputils.java
字号:
public String
getString()
{
return( new String(getValue()));
}
};
return( value );
}
public static final int DHTTRANSPORTVALUE_SIZE_WITHOUT_VALUE = 15 + DHTTRANSPORTCONTACT_SIZE;
protected static void
serialiseTransportValue(
DHTUDPPacket packet,
DataOutputStream os,
DHTTransportValue value,
long skew )
throws IOException, DHTTransportException
{
if ( packet.getProtocolVersion() >= DHTTransportUDP.PROTOCOL_VERSION_REMOVE_DIST_ADD_VER ){
int version = value.getVersion();
//System.out.println( "write: version = " + version );
os.writeInt( version );
}else{
//System.out.println( "write: 0" );
os.writeInt( 0 );
}
// Don't forget to change the CONSTANT above if you change the size of this!
os.writeLong( value.getCreationTime() + skew ); // 12
serialiseByteArray( os, value.getValue(), DHT.MAX_VALUE_SIZE ); // 12+2+X
serialiseContact( os, value.getOriginator()); // 12 + 2+X + contact
os.writeByte( value.getFlags()); // 13 + 2+ X + contact
}
protected static void
serialiseContacts(
DataOutputStream os,
DHTTransportContact[] contacts )
throws IOException
{
serialiseLength( os, contacts.length, 65535 );
for (int i=0;i<contacts.length;i++){
try{
serialiseContact( os, contacts[i] );
}catch( DHTTransportException e ){
Debug.printStackTrace(e);
// not much we can do here to recover - shouldn't fail anyways
throw( new IOException(e.getMessage()));
}
}
}
protected static DHTTransportContact[]
deserialiseContacts(
DHTTransportUDPImpl transport,
DataInputStream is )
throws IOException
{
int len = deserialiseLength( is, 65535 );
List l = new ArrayList( len );
for (int i=0;i<len;i++){
try{
l.add( deserialiseContact( transport, is ));
}catch( DHTTransportException e ){
Debug.printStackTrace(e);
}
}
DHTTransportContact[] res = new DHTTransportContact[l.size()];
l.toArray( res );
return( res );
}
protected static void
serialiseVivaldi(
DHTUDPPacketReply reply,
DataOutputStream os )
throws IOException
{
DHTNetworkPosition[] nps = reply.getNetworkPositions();
if ( reply.getProtocolVersion() >= DHTTransportUDP.PROTOCOL_VERSION_GENERIC_NETPOS ){
os.writeByte((byte)nps.length);
boolean v1_found = false;
for (int i=0;i<nps.length;i++){
DHTNetworkPosition np = nps[i];
if ( np.getPositionType() == DHTNetworkPosition.POSITION_TYPE_VIVALDI_V1 ){
v1_found = true;
}
os.writeByte( np.getPositionType());
os.writeByte( np.getSerialisedSize());
np.serialise( os );
}
if ( !v1_found ){
Debug.out( "Vivaldi V1 missing" );
throw( new IOException( "Vivaldi V1 missing" ));
}
}else{
for (int i=0;i<nps.length;i++){
if ( nps[i].getPositionType() == DHTNetworkPosition.POSITION_TYPE_VIVALDI_V1 ){
nps[i].serialise( os );
return;
}
}
Debug.out( "Vivaldi V1 missing" );
throw( new IOException( "Vivaldi V1 missing" ));
}
}
protected static void
deserialiseVivaldi(
DHTUDPPacketReply reply,
DataInputStream is )
throws IOException
{
DHTNetworkPosition[] nps;
if ( reply.getProtocolVersion() >= DHTTransportUDP.PROTOCOL_VERSION_GENERIC_NETPOS ){
int entries = is.readByte()&0xff;
nps = new DHTNetworkPosition[ entries ];
int skipped = 0;
for (int i=0;i<entries;i++){
byte type = is.readByte();
byte size = is.readByte();
DHTNetworkPosition np = DHTNetworkPositionManager.deserialise( type, is );
if ( np == null ){
skipped++;
for (int j=0;j<size;j++){
is.readByte();
}
}else{
nps[i] = np;
}
}
if ( skipped > 0 ){
DHTNetworkPosition[] x = new DHTNetworkPosition[ entries - skipped ];
int pos = 0;
for (int i=0;i<nps.length;i++){
if ( nps[i] != null ){
x[pos++] = nps[i];
}
}
nps = x;
}
}else{
nps = new DHTNetworkPosition[]{ DHTNetworkPositionManager.deserialise( DHTNetworkPosition.POSITION_TYPE_VIVALDI_V1, is )};
}
boolean v1_found = false;
for (int i=0;i<nps.length;i++){
if ( nps[i].getPositionType() == DHTNetworkPosition.POSITION_TYPE_VIVALDI_V1 ){
v1_found = true;
}
}
if ( !v1_found ){
Debug.out( "Vivaldi V1 missing" );
throw( new IOException( "Vivaldi V1 missing" ));
}
reply.setNetworkPositions( nps );
}
protected static void
serialiseStats(
int version,
DataOutputStream os,
DHTTransportFullStats stats )
throws IOException
{
os.writeLong( stats.getDBValuesStored());
os.writeLong( stats.getRouterNodes());
os.writeLong( stats.getRouterLeaves());
os.writeLong( stats.getRouterContacts());
os.writeLong( stats.getTotalBytesReceived());
os.writeLong( stats.getTotalBytesSent());
os.writeLong( stats.getTotalPacketsReceived());
os.writeLong( stats.getTotalPacketsSent());
os.writeLong( stats.getTotalPingsReceived());
os.writeLong( stats.getTotalFindNodesReceived());
os.writeLong( stats.getTotalFindValuesReceived());
os.writeLong( stats.getTotalStoresReceived());
os.writeLong( stats.getAverageBytesReceived());
os.writeLong( stats.getAverageBytesSent());
os.writeLong( stats.getAveragePacketsReceived());
os.writeLong( stats.getAveragePacketsSent());
os.writeLong( stats.getIncomingRequests());
String azversion = stats.getVersion() + "["+version+"]";
serialiseByteArray( os, azversion.getBytes(), 64);
os.writeLong( stats.getRouterUptime());
os.writeInt( stats.getRouterCount());
if ( version >= DHTTransportUDP.PROTOCOL_VERSION_BLOCK_KEYS ){
os.writeLong( stats.getDBKeysBlocked());
os.writeLong( stats.getTotalKeyBlocksReceived());
}
}
protected static DHTTransportFullStats
deserialiseStats(
int version,
DataInputStream is )
throws IOException
{
final long db_values_stored = is.readLong();
final long router_nodes = is.readLong();
final long router_leaves = is.readLong();
final long router_contacts = is.readLong();
final long total_bytes_received = is.readLong();
final long total_bytes_sent = is.readLong();
final long total_packets_received = is.readLong();
final long total_packets_sent = is.readLong();
final long total_pings_received = is.readLong();
final long total_find_nodes_received = is.readLong();
final long total_find_values_received = is.readLong();
final long total_stores_received = is.readLong();
final long average_bytes_received = is.readLong();
final long average_bytes_sent = is.readLong();
final long average_packets_received = is.readLong();
final long average_packets_sent = is.readLong();
final long incoming_requests = is.readLong();
final String az_version = new String( deserialiseByteArray( is, 64 ));
final long router_uptime = is.readLong();
final int router_count = is.readInt();
final long db_keys_blocked;
final long total_key_blocks_received;
if ( version >= DHTTransportUDP.PROTOCOL_VERSION_BLOCK_KEYS ){
db_keys_blocked = is.readLong();
total_key_blocks_received = is.readLong();
}else{
db_keys_blocked = 0;
total_key_blocks_received = 0;
}
DHTTransportFullStats res =
new DHTTransportFullStats()
{
public long
getDBValuesStored()
{
return( db_values_stored );
}
public long
getDBKeysBlocked()
{
return( db_keys_blocked );
}
// Router
public long
getRouterNodes()
{
return( router_nodes );
}
public long
getRouterLeaves()
{
return( router_leaves );
}
public long
getRouterContacts()
{
return( router_contacts );
}
public long
getRouterUptime()
{
return( router_uptime );
}
public int
getRouterCount()
{
return( router_count );
}
public long
getTotalBytesReceived()
{
return( total_bytes_received );
}
public long
getTotalBytesSent()
{
return( total_bytes_sent );
}
public long
getTotalPacketsReceived()
{
return( total_packets_received );
}
public long
getTotalPacketsSent()
{
return( total_packets_sent );
}
public long
getTotalPingsReceived()
{
return( total_pings_received );
}
public long
getTotalFindNodesReceived()
{
return( total_find_nodes_received );
}
public long
getTotalFindValuesReceived()
{
return( total_find_values_received );
}
public long
getTotalStoresReceived()
{
return( total_stores_received );
}
public long
getTotalKeyBlocksReceived()
{
return( total_key_blocks_received );
}
// averages
public long
getAverageBytesReceived()
{
return( average_bytes_received );
}
public long
getAverageBytesSent()
{
return( average_bytes_sent );
}
public long
getAveragePacketsReceived()
{
return( average_packets_received );
}
public long
getAveragePacketsSent()
{
return( average_packets_sent );
}
public long
getIncomingRequests()
{
return( incoming_requests );
}
public String
getVersion()
{
return( az_version );
}
public String
getString()
{
return( "transport:" +
getTotalBytesReceived() + "," +
getTotalBytesSent() + "," +
getTotalPacketsReceived() + "," +
getTotalPacketsSent() + "," +
getTotalPingsReceived() + "," +
getTotalFindNodesReceived() + "," +
getTotalFindValuesReceived() + "," +
getTotalStoresReceived() + "," +
getTotalKeyBlocksReceived() + "," +
getAverageBytesReceived() + "," +
getAverageBytesSent() + "," +
getAveragePacketsReceived() + "," +
getAveragePacketsSent() + "," +
getIncomingRequests() +
",router:" +
getRouterNodes() + "," +
getRouterLeaves() + "," +
getRouterContacts() +
",database:" +
getDBValuesStored()+ "," +
getDBKeysBlocked()+
",version:" + getVersion()+","+
getRouterUptime() + ","+
getRouterCount());
}
};
return( res );
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -