coreupdatechecker.java
来自「这是一个基于java编写的torrent的P2P源码」· Java 代码 · 共 742 行 · 第 1/2 页
JAVA
742 行
first_check = false;
}
}
/**
* Log and display a user message if contained within reply.
* @param reply from server
*/
private void displayUserMessage( Map reply ) {
// pick up any user message in the reply
try{
byte[] message = (byte[])reply.get( "message" );
if ( message != null && message.length > 0 ){
String s_message = new String(message);
String last = COConfigurationManager.getStringParameter( "CoreUpdateChecker.lastmessage", "" );
if ( !s_message.equals( last )){
byte[] signature = (byte[])reply.get( "message_sig" );
if ( signature == null ){
Logger.log( new LogEvent( LogIDs.LOGGER, "Signature missing from message" ));
return;
}
try{
AEVerifier.verifyData( s_message, signature );
}catch( Throwable e ){
Logger.log( new LogEvent( LogIDs.LOGGER, "Message signature check failed", e ));
return;
}
int alert_type = LogAlert.AT_WARNING;
String alert_text = s_message;
if ( alert_text.startsWith("i:" )){
alert_type = LogAlert.AT_INFORMATION;
alert_text = alert_text.substring(2);
}
plugin_interface.getPluginProperties().setProperty( MESSAGE_PROPERTY, alert_text );
Logger.log(new LogAlert(LogAlert.UNREPEATABLE, alert_type, alert_text));
COConfigurationManager.setParameter( "CoreUpdateChecker.lastmessage", s_message );
COConfigurationManager.save();
}
}
}catch( Throwable e ){
Debug.printStackTrace( e );
}
}
protected ResourceDownloader[]
getPrimaryDownloaders(
String latest_file_name )
{
log.log( "Downloading primary mirrors" );
List res = new ArrayList();
try{
if ( latest_file_name == null ){
// very old method, non-mirror based
res.add( new URL( Constants.SF_WEB_SITE + "Azureus2.jar" ));
}else{
URL mirrors_url = new URL("http://prdownloads.sourceforge.net/azureus/" + latest_file_name + "?download");
ResourceDownloader rd = rdf.create( mirrors_url );
rd = rdf.getRetryDownloader( rd, RD_GET_MIRRORS_RETRIES );
rd.addListener( rd_logger );
String page = HTMLPageFactory.loadPage( rd.download()).getContent();
String pattern = "/azureus/" + latest_file_name + "?use_mirror=";
int position = page.indexOf(pattern);
while ( position > 0 ){
int end = page.indexOf(">", position);
if (end < 0) {
position = -1;
}else{
String mirror = page.substring(position, end);
if ( mirror.endsWith("\"")){
mirror = mirror.substring(0,mirror.length()-1);
}
try{
res.add( new URL( "http://prdownloads.sourceforge.net" + mirror ));
}catch( Throwable e ){
log.log( "Invalid URL read:" + mirror, e );
}
position = page.indexOf(pattern, position + 1);
}
}
}
}catch( Throwable e ){
log.log( "Failed to read primary mirror list", e );
}
ResourceDownloader[] dls = new ResourceDownloader[res.size()];
for (int i=0;i<res.size();i++){
URL url =(URL)res.get(i);
log.log( " Primary mirror:" +url.toString());
ResourceDownloader dl = rdf.create( url );
dl = rdf.getMetaRefreshDownloader( dl );
// add in a layer to do torrent based downloads if url ends with .torrent
dl = rdf.getSuffixBasedDownloader( dl );
dls[i] = dl;
}
return( dls );
}
protected ResourceDownloader[]
getBackupDownloaders(
String latest_file_name )
{
List res = new ArrayList();
try{
if ( latest_file_name != null ){
log.log( "Downloading backup mirrors" );
URL mirrors_url = new URL("http://azureus.sourceforge.net/mirrors.php");
ResourceDownloader rd = rdf.create( mirrors_url );
rd = rdf.getRetryDownloader( rd, RD_GET_MIRRORS_RETRIES );
rd.addListener( rd_logger );
BufferedInputStream data = new BufferedInputStream(rd.download());
Map decoded = BDecoder.decode(data);
data.close();
List mirrors = (List)decoded.get("mirrors");
for (int i=0;i<mirrors.size();i++){
String mirror = new String( (byte[])mirrors.get(i));
try{
res.add( new URL( mirror + latest_file_name ));
// res.add( new URL( "http://torrents.aelitis.com:88/torrents/Azureus2.4.0.2_signed.jar.torrent" ));
}catch(Throwable e){
log.log( "Invalid URL read:" + mirror, e );
}
}
}
}catch( Throwable e ){
log.log( "Failed to read backup mirror list", e );
}
ResourceDownloader[] dls = new ResourceDownloader[res.size()];
for (int i=0;i<res.size();i++){
URL url =(URL)res.get(i);
log.log( " Backup mirror:" +url.toString());
ResourceDownloader dl = rdf.create( url );
// add in .torrent decoder if appropriate
dl = rdf.getSuffixBasedDownloader( dl );
dls[i] = dl;
}
return( dls );
}
protected void
installUpdate(
UpdateChecker checker,
Update update,
ResourceDownloader rd,
String version,
InputStream data )
{
try{
data = update.verifyData( data, true );
rd.reportActivity( "Data verified successfully" );
String temp_jar_name = "Azureus2_" + version + ".jar";
String target_jar_name = "Azureus2.jar";
UpdateInstaller installer = checker.createInstaller();
installer.addResource( temp_jar_name, data );
if ( Constants.isOSX ){
installer.addMoveAction(
temp_jar_name,
installer.getInstallDir() + "/" + SystemProperties.getApplicationName() + ".app/Contents/Resources/Java/" + target_jar_name );
}else{
installer.addMoveAction(
temp_jar_name,
installer.getInstallDir() + File.separator + target_jar_name );
}
}catch( Throwable e ){
rd.reportActivity("Update install failed:" + e.getMessage());
}
}
protected static boolean
shouldUpdate(
String current_version,
String latest_version )
{
String current_base = Constants.getBaseVersion( current_version );
int current_inc = Constants.getIncrementalBuild( current_version );
String latest_base = Constants.getBaseVersion( latest_version );
int latest_inc = Constants.getIncrementalBuild( latest_version );
// currently we upgrade from, for example
// 1) 2.4.0.0 -> 2.4.0.2
// 2) 2.4.0.1_CVS -> 2.4.0.2
// 3) 2.4.0.1_B12 -> 2.4.0.2 and 2.4.0.1_B14
// but NOT
// 1) 2.4.0.0 -> 2.4.0.1_CVS or 2.4.0.1_B23
// 2) 2.4.0.1_CVS -> 2.4.0.1_B23
// for inc values: 0 = not CVS, -1 = _CVS, > 0 = Bnn
int major_comp = Constants.compareVersions( current_base, latest_base );
if ( major_comp < 0 && latest_inc == 0 ){
return( true ); // latest is higher version and not CVS
}
// same version, both are B versions and latest B is more recent
return( major_comp == 0 && current_inc > 0 && latest_inc > 0 && latest_inc > current_inc );
}
public static void
main(
String[] args )
{
String[][] tests = {
{ "2.4.0.0", "2.4.0.2", "true" },
{ "2.4.0.1_CVS", "2.4.0.2", "true" },
{ "2.4.0.1_B12", "2.4.0.2", "true" },
{ "2.4.0.1_B12", "2.4.0.1_B34", "true" },
{ "2.4.0.1_B12", "2.4.0.1_B6", "false" },
{ "2.4.0.0", "2.4.0.1_CVS", "false" },
{ "2.4.0.0", "2.4.0.1_B12", "false" },
{ "2.4.0.0", "2.4.0.0" , "false" },
{ "2.4.0.1_CVS", "2.4.0.1_CVS", "false" },
{ "2.4.0.1_B2", "2.4.0.1_B2", "false" },
{ "2.4.0.1_CVS", "2.4.0.1_B2", "false" },
{ "2.4.0.1_B2", "2.4.0.1_CVS", "false" },
};
for (int i=0;i<tests.length;i++){
System.out.println( shouldUpdate(tests[i][0],tests[i][1]) + " / " + tests[i][2] );
}
/*
AEDiagnostics.startup();
CoreUpdateChecker checker = new CoreUpdateChecker();
checker.log = new LoggerImpl(null).getTimeStampedChannel("");
checker.rdf = new ResourceDownloaderFactoryImpl();
checker.rd_logger =
new ResourceDownloaderAdapter()
{
public void
reportActivity(
ResourceDownloader downloader,
String activity )
{
System.out.println( activity );
}
public void
reportPercentComplete(
ResourceDownloader downloader,
int percentage )
{
System.out.println( " % = " + percentage );
}
};
ResourceDownloader[] primaries = checker.getPrimaryDownloaders( "Azureus-2.0.3.0.jar" );
for (int i=0;i<primaries.length;i++){
System.out.println( "primary: " + primaries[i].getName());
}
try{
ResourceDownloader rd = primaries[0];
rd.addListener( checker.rd_logger );
rd.download();
System.out.println( "done" );
}catch( Throwable e ){
e.printStackTrace();
}
*/
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?