📄 hack.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: Hack.java
package org.gudy.azureus2.ui.console.commands;
import java.io.File;
import java.io.PrintStream;
import java.net.URI;
import java.net.URL;
import java.util.Iterator;
import java.util.List;
import org.gudy.azureus2.core3.disk.DiskManager;
import org.gudy.azureus2.core3.disk.DiskManagerFileInfo;
import org.gudy.azureus2.core3.download.DownloadManager;
import org.gudy.azureus2.core3.download.DownloadManagerStats;
import org.gudy.azureus2.core3.tracker.client.TRTrackerAnnouncer;
import org.gudy.azureus2.ui.console.ConsoleInput;
// Referenced classes of package org.gudy.azureus2.ui.console.commands:
// TorrentCommand, CommandCollection, IConsoleCommand, TorrentSubCommand
public class Hack extends TorrentCommand
{
private static class HackDownloadSpeed extends TorrentSubCommand
{
public String getCommandDescriptions()
{
return "downloadspeed\td\tSet max download speed [in kbps]of a torrent (0 for unlimited).";
}
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Not enough parameters for subcommand '").append(getCommandName()).append("'").toString());
return false;
} else
{
int newSpeed = Math.max(-1, Integer.parseInt((String)args.get(0)));
dm.getStats().setDownloadRateLimitBytesPerSecond(newSpeed * 1024);
return true;
}
}
public HackDownloadSpeed()
{
super("downloadspeed", "d");
}
}
private static class HackFile extends TorrentSubCommand
{
public void printHelpExtra(PrintStream out, List args)
{
out.println("hack <torrent id> file <#> <priority>");
out.println();
out.println("<#> Number of the file.");
out.println();
out.println("<priority> can be one of the following:");
out.println("normal\t\tn\tNormal Priority");
out.println("high\t\th|+\tHigh Priority");
out.println("nodownload\t!|-\tDon't download this file.");
out.println("> -----");
}
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.size() < 2)
{
ci.out.println("> Command 'hack': Not enough parameters for subcommand 'file'.");
return false;
}
DiskManager disk = dm.getDiskManager();
DiskManagerFileInfo files[] = disk.getFiles();
int file = Integer.parseInt((String)args.get(0));
String c = (String)args.get(1);
if (c.equalsIgnoreCase("normal") || c.equalsIgnoreCase("n"))
{
files[file - 1].setSkipped(false);
files[file - 1].setPriority(false);
ci.out.println((new StringBuilder()).append("> Set file '").append(files[file - 1].getFile(true).getName()).append("' to normal priority.").toString());
break MISSING_BLOCK_LABEL_404;
}
if (c.equalsIgnoreCase("high") || c.equalsIgnoreCase("h") || c.equalsIgnoreCase("+"))
{
files[file - 1].setSkipped(false);
files[file - 1].setPriority(true);
ci.out.println((new StringBuilder()).append("> Set file '").append(files[file - 1].getFile(true).getName()).append("' to high priority.").toString());
break MISSING_BLOCK_LABEL_404;
}
if (c.equalsIgnoreCase("nodownload") || c.equalsIgnoreCase("!") || c.equalsIgnoreCase("-"))
{
files[file - 1].setSkipped(true);
files[file - 1].setPriority(false);
ci.out.println((new StringBuilder()).append("> Stopped to download file '").append(files[file - 1].getFile(true).getName()).append("'.").toString());
break MISSING_BLOCK_LABEL_404;
}
ci.out.println((new StringBuilder()).append("> Command 'hack': Unknown priority '").append(c).append("' for command parameter 'file'.").toString());
return false;
return true;
Exception e;
e;
ci.out.println((new StringBuilder()).append("> Command 'hack': Exception while executing subcommand 'file': ").append(e.getMessage()).toString());
return false;
}
public String getCommandDescriptions()
{
return "file\t\tf\tModify priority of a single file of a batch torrent.";
}
public HackFile()
{
super("file", "f");
}
}
private static class HackHost extends TorrentSubCommand
{
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println("> Command 'hack': Not enough parameters for subcommand parameter 'host'.");
return false;
}
TRTrackerAnnouncer client = dm.getTrackerClient();
try
{
URI uold = new URI(client.getTrackerUrl().toString());
URI unew = new URI(uold.getScheme(), uold.getUserInfo(), (String)args.get(0), uold.getPort(), uold.getPath(), uold.getQuery(), uold.getFragment());
client.setTrackerUrl(new URL(unew.toString()));
ci.out.println((new StringBuilder()).append("> Set Tracker URL for '").append(dm.getSaveLocation()).append("' to '").append(unew.toString()).append("'").toString());
}
catch (Exception e)
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Assembling new tracker url failed: ").append(e.getMessage()).toString());
return false;
}
return true;
}
public String getCommandDescriptions()
{
return "host\t\th\tChange the host.";
}
public HackHost()
{
super("host", "h");
}
}
private static class HackPort extends TorrentSubCommand
{
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println("> Command 'hack': Not enough parameters for subcommand parameter 'port'.");
return false;
}
TRTrackerAnnouncer client = dm.getTrackerClient();
try
{
URI uold = new URI(client.getTrackerUrl().toString());
String portStr = (String)args.get(0);
URI unew = new URI(uold.getScheme(), uold.getUserInfo(), uold.getHost(), Integer.parseInt(portStr), uold.getPath(), uold.getQuery(), uold.getFragment());
client.setTrackerUrl(new URL(unew.toString()));
ci.out.println((new StringBuilder()).append("> Set Tracker URL for '").append(dm.getSaveLocation()).append("' to '").append(unew.toString()).append("'").toString());
}
catch (Exception e)
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Assembling new tracker url failed: ").append(e.getMessage()).toString());
return false;
}
return true;
}
public String getCommandDescriptions()
{
return "port\t\tp\tChange the port.";
}
public HackPort()
{
super("port", "p");
}
}
private static class HackTracker extends TorrentSubCommand
{
private final CommandCollection subCommands = new CommandCollection();
public void printHelpExtra(PrintStream out, List args)
{
out.println("hack <torrent id> tracker [command] <new value>");
out.println();
out.println("[command] can be one of the following:");
TorrentSubCommand cmd;
for (Iterator iter = subCommands.iterator(); iter.hasNext(); out.println(cmd.getCommandDescriptions()))
cmd = (TorrentSubCommand)iter.next();
out.println();
out.println("You can also omit [command] and only give a new full URL (just like the [command] 'url').");
out.println("> -----");
}
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Not enough parameters for subcommand '").append(getCommandName()).append("'").toString());
return false;
}
String trackercommand = (String)args.remove(0);
TRTrackerAnnouncer client = dm.getTrackerClient();
if (client == null)
{
ci.out.println("> Command 'hack': Tracker interface not available.");
return false;
}
TorrentSubCommand cmd = (TorrentSubCommand)subCommands.get(trackercommand);
if (cmd == null)
{
args.add(trackercommand);
cmd = (TorrentSubCommand)subCommands.get("url");
}
return cmd.performCommand(ci, dm, args);
}
public String getCommandDescriptions()
{
return "tracker\t\tt\tModify Tracker URL of a torrent.";
}
public HackTracker()
{
super("tracker", "t");
subCommands.add(new HackHost());
subCommands.add(new HackPort());
subCommands.add(new HackURL());
}
}
private static class HackURL extends TorrentSubCommand
{
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println("> Command 'hack': Not enough parameters for subcommand parameter 'url'.");
return false;
}
TRTrackerAnnouncer client = dm.getTrackerClient();
try
{
String uriStr = (String)args.get(0);
URI uri = new URI(uriStr);
client.setTrackerUrl(new URL(uri.toString()));
ci.out.println((new StringBuilder()).append("> Set Tracker URL for '").append(dm.getSaveLocation()).append("' to '").append(uri).append("'").toString());
}
catch (Exception e)
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Parsing tracker url failed: ").append(e.getMessage()).toString());
return false;
}
return true;
}
public String getCommandDescriptions()
{
return "url\t\tu\tChange the full URL (Note: you have to include the '/announce' part).";
}
public HackURL()
{
super("url", "u");
}
}
private static class HackUploadSpeed extends TorrentSubCommand
{
public String getCommandDescriptions()
{
return "uploadspeed\tu\tSet max upload speed [in kbps] of a torrent (0 for unlimited).";
}
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Not enough parameters for subcommand '").append(getCommandName()).append("'").toString());
return false;
} else
{
int newSpeed = Math.max(-1, Integer.parseInt((String)args.get(0)));
dm.getStats().setUploadRateLimitBytesPerSecond(newSpeed * 1024);
return true;
}
}
public HackUploadSpeed()
{
super("uploadspeed", "u");
}
}
private static class HackUploads extends TorrentSubCommand
{
public String getCommandDescriptions()
{
return "uploads\tv\tSet max upload slots of a torrent.";
}
public boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Not enough parameters for subcommand '").append(getCommandName()).append("'").toString());
return false;
} else
{
int newSlots = Math.max(-1, Integer.parseInt((String)args.get(0)));
dm.setMaxUploads(newSlots);
return true;
}
}
public HackUploads()
{
super("uploads", "v");
}
}
private final CommandCollection subCommands = new CommandCollection();
public Hack()
{
super("hack", "#", "Hacking");
subCommands.add(new HackFile());
subCommands.add(new HackTracker());
subCommands.add(new HackDownloadSpeed());
subCommands.add(new HackUploadSpeed());
subCommands.add(new HackUploads());
}
public String getCommandDescriptions()
{
return "hack [<various options>]\t#\tModify torrent settings. Use without parameters for further help.";
}
public void printHelpExtra(PrintStream out, List args)
{
out.println("> -----");
out.println("'hack' syntax:");
if (args.size() > 0)
{
String command = (String)args.remove(0);
IConsoleCommand cmd = subCommands.get(command);
if (cmd != null)
cmd.printHelp(out, args);
return;
}
out.println("hack <torrent id> <command> <command options>");
out.println();
out.println("<torrent id> can be one of the following:");
out.println("<#>\t\tNumber of a torrent. You have to use 'show torrents' first as the number is taken from there.");
out.println("hash <hash>\tApplied to torrent with the hash <hash> as given in the xml output or extended torrent info ('show <#>').");
out.println("help\t\tDetailed help for <command>");
out.println();
out.println("Available <command>s:");
TorrentSubCommand cmd;
for (Iterator iter = subCommands.iterator(); iter.hasNext(); out.println(cmd.getCommandDescriptions()))
cmd = (TorrentSubCommand)iter.next();
out.println("> -----");
}
protected boolean performCommand(ConsoleInput ci, DownloadManager dm, List args)
{
if (args.isEmpty())
{
ci.out.println((new StringBuilder()).append("> Not enough parameters for command '").append(getCommandName()).append("'.").toString());
return false;
}
String subCommandName = (String)args.remove(0);
TorrentSubCommand cmd = (TorrentSubCommand)subCommands.get(subCommandName);
if (cmd != null)
{
return cmd.performCommand(ci, dm, args);
} else
{
ci.out.println((new StringBuilder()).append("> Command 'hack': Command parameter '").append(subCommandName).append("' unknown.").toString());
return false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -