📄 coreupdatechecker.java
字号:
// Decompiled by Jad v1.5.8e2. Copyright 2001 Pavel Kouznetsov.
// Jad home page: http://kpdus.tripod.com/jad.html
// Decompiler options: packimports(3) fieldsfirst ansi space
// Source File Name: CoreUpdateChecker.java
package org.gudy.azureus2.update;
import com.aelitis.azureus.core.versioncheck.VersionCheckClient;
import com.aelitis.azureus.ui.UIFunctions;
import com.aelitis.azureus.ui.UIFunctionsManager;
import java.io.BufferedInputStream;
import java.io.File;
import java.io.InputStream;
import java.io.PrintStream;
import java.net.URL;
import java.net.URLClassLoader;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Properties;
import java.util.Set;
import org.gudy.azureus2.core3.config.COConfigurationManager;
import org.gudy.azureus2.core3.html.HTMLPage;
import org.gudy.azureus2.core3.html.HTMLPageFactory;
import org.gudy.azureus2.core3.logging.LogAlert;
import org.gudy.azureus2.core3.logging.LogEvent;
import org.gudy.azureus2.core3.logging.LogIDs;
import org.gudy.azureus2.core3.logging.Logger;
import org.gudy.azureus2.core3.util.AETemporaryFileHandler;
import org.gudy.azureus2.core3.util.AEVerifier;
import org.gudy.azureus2.core3.util.BDecoder;
import org.gudy.azureus2.core3.util.Constants;
import org.gudy.azureus2.core3.util.Debug;
import org.gudy.azureus2.core3.util.FileUtil;
import org.gudy.azureus2.core3.util.SystemProperties;
import org.gudy.azureus2.plugins.Plugin;
import org.gudy.azureus2.plugins.PluginInterface;
import org.gudy.azureus2.plugins.logging.LoggerChannel;
import org.gudy.azureus2.plugins.update.UpdatableComponent;
import org.gudy.azureus2.plugins.update.Update;
import org.gudy.azureus2.plugins.update.UpdateChecker;
import org.gudy.azureus2.plugins.update.UpdateInstaller;
import org.gudy.azureus2.plugins.update.UpdateManager;
import org.gudy.azureus2.plugins.utils.Utilities;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloader;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderAdapter;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderDelayedFactory;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderFactory;
import org.gudy.azureus2.plugins.utils.resourcedownloader.ResourceDownloaderListener;
public class CoreUpdateChecker
implements Plugin, UpdatableComponent
{
public static final String LATEST_VERSION_PROPERTY = "latest_version";
public static final String MESSAGE_PROPERTY = "message";
public static final int RD_GET_DETAILS_RETRIES = 3;
public static final int RD_GET_MIRRORS_RETRIES = 3;
public static final int RD_SIZE_RETRIES = 3;
public static final int RD_SIZE_TIMEOUT = 10000;
protected static CoreUpdateChecker singleton;
protected PluginInterface plugin_interface;
protected ResourceDownloaderFactory rdf;
protected LoggerChannel log;
protected ResourceDownloaderListener rd_logger;
protected boolean first_check;
public static void doUsageStats()
{
singleton.doUsageStatsSupport();
}
public CoreUpdateChecker()
{
first_check = true;
singleton = this;
}
protected void doUsageStatsSupport()
{
Map decoded = VersionCheckClient.getSingleton().getVersionCheckInfo(first_check ? "us" : "up");
displayUserMessage(decoded);
first_check = false;
break MISSING_BLOCK_LABEL_42;
Exception exception;
exception;
first_check = false;
throw exception;
}
public void initialize(PluginInterface _plugin_interface)
{
plugin_interface = _plugin_interface;
plugin_interface.getPluginProperties().setProperty("plugin.name", "Core Updater");
log = plugin_interface.getLogger().getChannel("CoreUpdater");
rd_logger = new ResourceDownloaderAdapter() {
final CoreUpdateChecker this$0;
public void reportActivity(ResourceDownloader downloader, String activity)
{
log.log(activity);
}
{
this$0 = CoreUpdateChecker.this;
super();
}
};
Properties props = plugin_interface.getPluginProperties();
props.setProperty("plugin.version", plugin_interface.getAzureusVersion());
rdf = plugin_interface.getUtilities().getResourceDownloaderFactory();
plugin_interface.getUpdateManager().registerUpdatableComponent(this, true);
}
public String getName()
{
return "Azureus Core";
}
public int getMaximumCheckTime()
{
return 30;
}
public void checkForUpdate(final UpdateChecker checker)
{
String current_version;
Map decoded;
current_version = plugin_interface.getAzureusVersion();
log.log((new StringBuilder()).append("Update check starts: current = ").append(current_version).toString());
decoded = VersionCheckClient.getSingleton().getVersionCheckInfo(first_check ? "us" : "up");
displayUserMessage(decoded);
if (decoded.isEmpty())
{
checker.completed();
first_check = false;
return;
}
String latest_version;
String latest_file_name;
URL full_download_url;
byte b_version[] = (byte[])(byte[])decoded.get("version");
if (b_version != null)
{
latest_version = new String(b_version);
plugin_interface.getPluginProperties().setProperty("latest_version", latest_version);
} else
{
throw new Exception("No version found in reply");
}
byte b_filename[] = (byte[])(byte[])decoded.get("filename");
if (b_filename != null)
latest_file_name = new String(b_filename);
else
throw new Exception("No update file details in reply");
String msg = (new StringBuilder()).append("Core: latest_version = '").append(latest_version).append("', file = '").append(latest_file_name).append("'").toString();
if (latest_file_name.startsWith("http"))
{
try
{
full_download_url = new URL(latest_file_name);
}
catch (Throwable e)
{
full_download_url = null;
log.log(e);
}
int pos = latest_file_name.lastIndexOf('/');
latest_file_name = latest_file_name.substring(pos + 1);
} else
{
full_download_url = null;
}
checker.reportProgress(msg);
log.log(msg);
if (!shouldUpdate(current_version, latest_version))
{
checker.completed();
first_check = false;
return;
}
final String f_latest_version = latest_version;
final String f_latest_file_name = latest_file_name;
ResourceDownloader top_downloader;
if (full_download_url == null)
{
ResourceDownloader primary_mirrors[] = getPrimaryDownloaders(latest_file_name);
ResourceDownloader random_primary_mirrors = rdf.getRandomDownloader(primary_mirrors);
ResourceDownloader backup_downloader = rdf.create(new ResourceDownloaderDelayedFactory() {
final String val$f_latest_file_name;
final CoreUpdateChecker this$0;
public ResourceDownloader create()
{
ResourceDownloader backup_mirrors[] = getBackupDownloaders(f_latest_file_name);
return rdf.getRandomDownloader(backup_mirrors);
}
{
this$0 = CoreUpdateChecker.this;
f_latest_file_name = s;
super();
}
});
top_downloader = rdf.getAlternateDownloader(new ResourceDownloader[] {
random_primary_mirrors, backup_downloader
});
} else
{
ResourceDownloader full_rd = rdf.create(full_download_url);
full_rd = rdf.getSuffixBasedDownloader(full_rd);
ResourceDownloader primary_downloader = rdf.create(new ResourceDownloaderDelayedFactory() {
final String val$f_latest_file_name;
final CoreUpdateChecker this$0;
public ResourceDownloader create()
{
ResourceDownloader primary_mirrors[] = getPrimaryDownloaders(f_latest_file_name);
return rdf.getRandomDownloader(primary_mirrors);
}
{
this$0 = CoreUpdateChecker.this;
f_latest_file_name = s;
super();
}
});
ResourceDownloader backup_downloader = rdf.create(new ResourceDownloaderDelayedFactory() {
final String val$f_latest_file_name;
final CoreUpdateChecker this$0;
public ResourceDownloader create()
{
ResourceDownloader backup_mirrors[] = getBackupDownloaders(f_latest_file_name);
return rdf.getRandomDownloader(backup_mirrors);
}
{
this$0 = CoreUpdateChecker.this;
f_latest_file_name = s;
super();
}
});
top_downloader = rdf.getAlternateDownloader(new ResourceDownloader[] {
full_rd, primary_downloader, backup_downloader
});
}
top_downloader.addListener(rd_logger);
top_downloader.getSize();
byte info_b[] = (byte[])(byte[])decoded.get("info");
String info = null;
if (info_b != null)
try
{
info = new String(info_b, "UTF-8");
}
catch (Throwable e)
{
Debug.printStackTrace(e);
}
byte info_url_bytes[] = (byte[])(byte[])decoded.get("info_url");
String info_url = null;
if (info_url_bytes != null)
try
{
info_url = new String(info_url_bytes);
}
catch (Exception e)
{
Debug.out(e);
}
if (info != null || info_url != null)
{
String check;
if (info == null)
check = info_url;
else
if (info_url == null)
check = info;
else
check = (new StringBuilder()).append(info).append("|").append(info_url).toString();
byte sig[] = (byte[])(byte[])decoded.get("info_sig");
boolean ok = false;
if (sig == null)
Logger.log(new LogEvent(LogIDs.LOGGER, "info signature check failed - missing signature"));
else
try
{
AEVerifier.verifyData(check, sig);
ok = true;
}
catch (Throwable e)
{
Logger.log(new LogEvent(LogIDs.LOGGER, "info signature check failed", e));
}
if (!ok)
{
info = null;
info_url = null;
}
}
String desc[];
if (info == null)
desc = (new String[] {
"Core Azureus Version"
});
else
desc = (new String[] {
"Core Azureus Version", info
});
final Update update = checker.addUpdate("Core Azureus Version", desc, latest_version, top_downloader, 2);
if (info_url != null)
update.setDescriptionURL(info_url);
top_downloader.addListener(new ResourceDownloaderAdapter() {
final UpdateChecker val$checker;
final Update val$update;
final String val$f_latest_version;
final CoreUpdateChecker this$0;
public boolean completed(ResourceDownloader downloader, InputStream data)
{
installUpdate(checker, update, downloader, f_latest_version, data);
return true;
}
{
this$0 = CoreUpdateChecker.this;
checker = updatechecker;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -