forked from I2P_Developers/i2p.i2p
- Fix state when storage dies during transition out of magnet mode - Fix NPE in magnet mode - Error logging improvements - Support add-torrent with infohash alone - CSS tweaks
This commit is contained in:
@ -1031,6 +1031,8 @@ public class Snark
|
||||
stopTorrent();
|
||||
if (t != null)
|
||||
s += ": " + t;
|
||||
if (completeListener != null)
|
||||
completeListener.fatal(this, s);
|
||||
throw new RuntimeException(s, t);
|
||||
}
|
||||
|
||||
@ -1058,10 +1060,12 @@ public class Snark
|
||||
* @since 0.8.4
|
||||
*/
|
||||
public void gotMetaInfo(PeerCoordinator coordinator, MetaInfo metainfo) {
|
||||
meta = metainfo;
|
||||
try {
|
||||
storage = new Storage(_util, meta, this);
|
||||
// The following two may throw IOE...
|
||||
storage = new Storage(_util, metainfo, this);
|
||||
storage.check(rootDataDir);
|
||||
// ... so don't set meta until here
|
||||
meta = metainfo;
|
||||
if (completeListener != null) {
|
||||
String newName = completeListener.gotMetaInfo(this);
|
||||
if (newName != null)
|
||||
@ -1169,6 +1173,11 @@ public class Snark
|
||||
*/
|
||||
public String gotMetaInfo(Snark snark);
|
||||
|
||||
/**
|
||||
* @since 0.9
|
||||
*/
|
||||
public void fatal(Snark snark, String error);
|
||||
|
||||
// not really listeners but the easiest way to get back to an optional SnarkManager
|
||||
public long getSavedTorrentTime(Snark snark);
|
||||
public BitField getSavedTorrentBitField(Snark snark);
|
||||
|
@ -1280,8 +1280,11 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
return null;
|
||||
}
|
||||
saveTorrentStatus(meta, storage.getBitField(), null); // no file priorities
|
||||
String name = (new File(getDataDir(), storage.getBaseName() + ".torrent")).getAbsolutePath();
|
||||
// temp for addMessage() in case canonical throws
|
||||
String name = storage.getBaseName();
|
||||
try {
|
||||
// _snarks must use canonical
|
||||
name = (new File(getDataDir(), storage.getBaseName() + ".torrent")).getCanonicalPath();
|
||||
// put the announce URL in the file
|
||||
String announce = snark.getTrackerURL();
|
||||
if (announce != null)
|
||||
@ -1305,6 +1308,14 @@ public class SnarkManager implements Snark.CompleteListener {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* A Snark.CompleteListener method.
|
||||
* @since 0.9
|
||||
*/
|
||||
public void fatal(Snark snark, String error) {
|
||||
addMessage(_("Error on torrent {0}", snark.getName()) + ": " + error);
|
||||
}
|
||||
|
||||
// End Snark.CompleteListeners
|
||||
|
||||
/**
|
||||
|
@ -348,7 +348,7 @@ public class TrackerClient extends I2PAppThread
|
||||
} // *** end of trackers loop here
|
||||
|
||||
// Get peers from PEX
|
||||
if (left > 0 && coordinator.needPeers() && (!meta.isPrivate()) && !stop) {
|
||||
if (left > 0 && coordinator.needPeers() && (meta == null || !meta.isPrivate()) && !stop) {
|
||||
Set<PeerID> pids = coordinator.getPEXPeers();
|
||||
if (!pids.isEmpty()) {
|
||||
_util.debug("Got " + pids.size() + " from PEX", Snark.INFO);
|
||||
@ -370,7 +370,7 @@ public class TrackerClient extends I2PAppThread
|
||||
|
||||
// Get peers from DHT
|
||||
// FIXME this needs to be in its own thread
|
||||
if (_util.getDHT() != null && (!meta.isPrivate()) && !stop) {
|
||||
if (_util.getDHT() != null && (meta == null || !meta.isPrivate()) && !stop) {
|
||||
int numwant;
|
||||
if (left == 0 || event.equals(STOPPED_EVENT) || !coordinator.needPeers())
|
||||
numwant = 1;
|
||||
|
@ -544,6 +544,8 @@ public class I2PSnarkServlet extends DefaultServlet {
|
||||
fetch.start();
|
||||
} else if (newURL.startsWith(MAGNET) || newURL.startsWith(MAGGOT)) {
|
||||
addMagnet(newURL);
|
||||
} else if (newURL.length() == 40 && newURL.replaceAll("[a-fA-F0-9]", "").length() == 0) {
|
||||
addMagnet(MAGNET_FULL + newURL);
|
||||
} else {
|
||||
_manager.addMessage(_("Invalid URL: Must start with \"http://\", \"{0}\", or \"{1}\"", MAGNET, MAGGOT));
|
||||
}
|
||||
@ -1316,7 +1318,7 @@ public class I2PSnarkServlet extends DefaultServlet {
|
||||
out.write(_("From URL"));
|
||||
out.write(":<td><input type=\"text\" name=\"newURL\" size=\"85\" value=\"" + newURL + "\"");
|
||||
out.write(" title=\"");
|
||||
out.write(_("Enter the torrent file download URL (I2P only), magnet link, or maggot link"));
|
||||
out.write(_("Enter the torrent file download URL (I2P only), magnet link, maggot link, or info hash"));
|
||||
out.write("\"> \n");
|
||||
// not supporting from file at the moment, since the file name passed isn't always absolute (so it may not resolve)
|
||||
//out.write("From file: <input type=\"file\" name=\"newFile\" size=\"50\" value=\"" + newFile + "\" /><br>");
|
||||
@ -1509,11 +1511,11 @@ public class I2PSnarkServlet extends DefaultServlet {
|
||||
"<tr><td>");
|
||||
out.write(_("Up bandwidth limit"));
|
||||
out.write(": <td><input type=\"text\" name=\"upBW\" class=\"r\" value=\""
|
||||
+ _manager.util().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" > KBps <i>(");
|
||||
+ _manager.util().getMaxUpBW() + "\" size=\"3\" maxlength=\"3\" > KBps <i>");
|
||||
out.write(_("Half available bandwidth recommended."));
|
||||
out.write(" <a href=\"/config.jsp\" target=\"blank\">");
|
||||
out.write("<br><a href=\"/config.jsp\" target=\"blank\">");
|
||||
out.write(_("View or change router bandwidth"));
|
||||
out.write("</a>)</i><br>\n" +
|
||||
out.write("</a></i><br>\n" +
|
||||
|
||||
"<tr><td>");
|
||||
out.write(_("Use open trackers also"));
|
||||
|
10
history.txt
10
history.txt
@ -1,3 +1,13 @@
|
||||
2012-03-24 zzz
|
||||
* GarlicConfig: Remove more unused methods
|
||||
* i2psnark:
|
||||
- Fix dup torrent msg with magnets (tickets #433 and #504)
|
||||
- Fix state when storage dies during transition out of magnet mode
|
||||
- Fix NPE in magnet mode
|
||||
- Error logging improvements
|
||||
- Support add-torrent with infohash alone
|
||||
- CSS tweaks
|
||||
|
||||
2012-03-22 zzz
|
||||
* Home page: CSS tweaks
|
||||
* Reseeder: Get rid of static instance, root in netDB,
|
||||
|
@ -93,7 +93,7 @@ body {
|
||||
border: 1px solid #000;
|
||||
overflow: auto;
|
||||
color: #26f;
|
||||
max-height: 76px;
|
||||
max-height: 82px;
|
||||
min-height: 45px;
|
||||
width: auto;
|
||||
background: #2a192a url('/themes/snark/ubergine/images/hat.png') no-repeat scroll right center;
|
||||
|
@ -92,7 +92,7 @@ body {
|
||||
border: 1px solid #000;
|
||||
overflow: auto;
|
||||
color: #26f;
|
||||
max-height: 76px;
|
||||
max-height: 82px;
|
||||
min-height: 45px;
|
||||
width: auto;
|
||||
background: #eda url('/themes/snark/ubergine/images/hat.png') no-repeat scroll right center;
|
||||
|
@ -18,7 +18,7 @@ public class RouterVersion {
|
||||
/** deprecated */
|
||||
public final static String ID = "Monotone";
|
||||
public final static String VERSION = CoreVersion.VERSION;
|
||||
public final static long BUILD = 20;
|
||||
public final static long BUILD = 21;
|
||||
|
||||
/** for example "-test" */
|
||||
public final static String EXTRA = "";
|
||||
|
Reference in New Issue
Block a user