⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 btpeeridbytedecoder.java

📁 这是一个基于java编写的torrent的P2P源码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      
      
      //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 + -