📄 btpeeridbytedecoder.java
字号:
//Shareaza check
if( iFirstNonZeroPos == 0 ) {
boolean bShareaza = true;
for( int i=0; i < 16; i++ ) {
if( peerID[i] == (byte)0 ) {
bShareaza = false;
break;
}
}
if( bShareaza ) {
for( int i=16; i < 20; i++ ) {
if( peerID[i] != ( peerID[i % 16] ^ peerID[15 - (i % 16)] ) ) {
bShareaza = false;
break;
}
}
if( bShareaza ) return "Shareaza";
}
}
// if( iFirstNonZeroPos == 8 ) {
if( (decoded = decodeSimpleStyle( peerID, 16, "UDP0", "BitComet UDP" )) != null ) return decoded;
if( (decoded = decodeSimpleStyle( peerID, 14, "HTTPBT", "BitComet HTTP" )) != null ) return decoded;
// }
byte three = (byte)3;
if ((iFirstNonZeroPos == 9)
&& (peerID[9] == three)
&& (peerID[10] == three)
&& (peerID[11] == three)) {
return "Snark";
}
if ((iFirstNonZeroPos == 12) && (peerID[12] == (byte)97) && (peerID[13] == (byte)97)) {
return "Experimental 3.2.1b2";
}
if ((iFirstNonZeroPos == 12) && (peerID[12] == (byte)0) && (peerID[13] == (byte)0)) {
return "Experimental 3.1";
}
if (iFirstNonZeroPos == 12) return "Mainline";
}
catch (Exception e) {
e.printStackTrace();
Debug.out( "[" +new String( peerID )+ "]", e );
}
if (LOG_UNKNOWN) {
try {
log = new FileWriter( logFile, true );
String text = new String(peerID, 0, 20, Constants.BYTE_ENCODING);
text = text.replace((char)12, (char)32);
text = text.replace((char)10, (char)32);
log.write("[" + text + "] ");
for (int i=0; i < 20; i++) {
log.write(i+"=" + peerID[i] + " ");
}
log.write("\n");
}
catch (Exception e) {
Debug.out(e.toString());
}
finally {
try {
if (log != null) log.close();
}
catch (IOException ignore) {/*ignore*/}
}
}
String sPeerID = getPrintablePeerID( peerID, iFirstNonZeroPos );
return MessageText.getString("PeerSocket.unknown") + " " + iFirstNonZeroPos +"[" + sPeerID + "]";
}
private static String decodeAzStyle(byte[] id, String ident, String name) {
try {
if ((id[0] == (byte) 45) && (id[7] == (byte) 45)) {
String decoded = new String(id, 1, 2, Constants.BYTE_ENCODING);
if (decoded.equals(ident)) {
if (ident.equals("BC")) {
// 4.56
String v2 = parseOneByteVersionNumber(id, 4);
String v3 = parseOneByteVersionNumber(id, 5);
String v4 = parseOneByteVersionNumber(id, 6);
return name + " " + v2 + "." + v3 + v4;
}
if (ident.equals("KT")) {
// 3.4.5=[RD].6
String v2 = parseOneByteVersionNumber(id, 3);
String v3 = parseOneByteVersionNumber(id, 4);
String v4 = new String(id, 5, 1, Constants.BYTE_ENCODING);
String v5 = parseOneByteVersionNumber(id, 6);
return name
+ " "
+ v2
+ "."
+ v3
+ (v4.equals("R") ? (" RC" + v5) : (v4.equals("D") ? " Dev"
: ""));
}
if (ident.equals("UT")) {
// 3.4.5
String v2 = parseOneByteVersionNumber(id, 3);
String v3 = parseOneByteVersionNumber(id, 4);
String v4 = parseOneByteVersionNumber(id, 5);
return name + " " + v2 + "." + v3 + "." + v4;
}
if (ident.equals("TR") || ident.equals("CD")) {
// 34.56
String v2 = new String(id, 3, 2, Constants.BYTE_ENCODING);
String v3 = new String(id, 5, 2, Constants.BYTE_ENCODING);
return name + " " + Integer.parseInt(v2) + "."
+ Integer.parseInt(v3);
}
if (ident.equals("BR")) {
// 3.4(56)
String v2 = parseOneByteVersionNumber(id, 3);
String v3 = parseOneByteVersionNumber(id, 4);
String v4 = new String(id, 5, 2, Constants.BYTE_ENCODING);
return name + " " + v2 + "." + v3 + "(" + Integer.parseInt(v4)
+ ")";
}
String v1 = parseOneByteVersionNumber(id, 3);
String v2 = parseOneByteVersionNumber(id, 4);
String v3 = parseOneByteVersionNumber(id, 5);
String v4 = parseOneByteVersionNumber(id, 6);
return name + " " + v1 + "." + v2 + "." + v3 + "." + v4;
}
}
} catch (Exception e) {
return null;
}
return null;
}
private static String decodeTornadoStyle( byte[] id, String ident, String name ) {
try {
if( (id[4] == (byte)45) && (id[5] == (byte)45) ) {
if( (id[6] == (byte)45) && (id[7] == (byte)45) && (id[8] == (byte)45)) {
String decoded = new String( id, 0, 1, Constants.BYTE_ENCODING );
if( decoded.equals( ident ) ) {
String v1 = parseOneByteVersionNumber(id, 1);
String v2 = parseOneByteVersionNumber(id, 2);
String v3 = parseOneByteVersionNumber(id, 3);
return name + " " + v1 + "." + v2 + "." + v3;
}
}
if( (id[6] == (byte)48) ) {
String decoded = new String( id, 0, 1, Constants.BYTE_ENCODING );
if( decoded.equals( ident ) ) {
String v1 = parseOneByteVersionNumber(id, 1);
String v2 = parseOneByteVersionNumber(id, 2);
String v3 = parseOneByteVersionNumber(id, 3);
if(ident.equals("T")){
return name + " LM" + " " + v1 + "." + v2 + "." + v3;
} else {
return name + " " + v1 + "." + v2 + "." + v3;
}
}
}
}
if( (id[4] == (byte)48) && (id[5] == (byte)45) && (id[6] == (byte)45) ) {
String decoded = new String( id, 0, 1, Constants.BYTE_ENCODING );
if( decoded.equals( ident ) ) {
return "TorrentFlux";
}
}
}
catch( Exception e ) { return null; }
return null;
}
private static String decodeSimpleStyle( byte[] id, int start_pos, String ident, String name ) {
try {
String decoded = new String( id, start_pos, ident.length(), Constants.BYTE_ENCODING );
if( decoded.equals( ident ) ) return name;
}
catch( Exception e ) { return null; }
return null;
}
private static String decodeMainlineStyle( byte[] id, String ident, String name ) {
try {
// Mx-y-z--
// where version = x.y.z
if ( (id[2] == (byte)45) && (id[4] == (byte)45) && (id[6] == (byte)45) && (id[7] == (byte)45) ) {
String decoded = new String( id, 0, 1, Constants.BYTE_ENCODING );
if( decoded.equals( ident ) ) {
String v1 = new String( id, 1, 1, Constants.BYTE_ENCODING );
String v2 = new String( id, 3, 1, Constants.BYTE_ENCODING );
String v3 = new String( id, 5, 1, Constants.BYTE_ENCODING );
return name + " " + v1 + "." + v2 + "." + v3;
}
}
// Mx-yy-z-
// where version = x.yy.z
if ( (id[2] == (byte)45) && (id[5] == (byte)45) && (id[7] == (byte)45) ) {
String decoded = new String( id, 0, 1, Constants.BYTE_ENCODING );
if( decoded.equals( ident ) ) {
String v1 = new String( id, 1, 1, Constants.BYTE_ENCODING );
String v2 = new String( id, 3, 2, Constants.BYTE_ENCODING );
String v3 = new String( id, 6, 1, Constants.BYTE_ENCODING );
return name + " " + v1 + "." + v2 + "." + v3;
}
}
}
catch( Exception e ) { return null; }
return null;
}
protected static String
getPrintablePeerID(
byte[] peer_id,
int iStartAtPos )
{
String sPeerID = "";
byte[] peerID = new byte[ peer_id.length ];
System.arraycopy( peer_id, 0, peerID, 0, peer_id.length );
try {
for (int i = iStartAtPos; i < peerID.length; i++) {
int b = (0xFF & peerID[i]);
if (b < 32 || b > 127)
peerID[i] = '-';
}
sPeerID = new String(peerID, iStartAtPos, peerID.length - iStartAtPos,
Constants.BYTE_ENCODING);
}
catch (UnsupportedEncodingException ignore) {}
catch (Exception e) {}
return( sPeerID );
}
public static String parseOneByteVersionNumber(byte[] byteArray, int pos) {
try {
return ""
+ Integer.parseInt(new String(byteArray, pos, 1,
Constants.BYTE_ENCODING), 36);
} catch (Exception e) {
}
return "" + byteArray[pos];
}
public static void main(String[] args) {
for (int i = 0; i < 26; i++) {
System.out.println((char)('a' + i) + ":" + parseOneByteVersionNumber(new byte[] { (byte)('a' + i) }, 0));
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -