Changeset 4c72c08
- Timestamp:
- Nov 18, 2015 1:43:14 PM (5 years ago)
- Branches:
- master
- Children:
- 1e89fac
- Parents:
- 679fe9b
- Location:
- apps/i2psnark/java/src/org/klomp/snark
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
apps/i2psnark/java/src/org/klomp/snark/Peer.java
r679fe9b r4c72c08 63 63 // Keeps state for in/out connections. Non-null when the handshake 64 64 // was successful, the connection setup and runs 65 PeerState state;65 volatile PeerState state; 66 66 67 67 /** shared across all peers on this torrent */ -
apps/i2psnark/java/src/org/klomp/snark/PeerConnectionIn.java
r679fe9b r4c72c08 40 40 MagnetState.CHUNK_SIZE + 100); // 100 for the ext msg dictionary 41 41 42 private Thread thread;42 private volatile Thread thread; 43 43 private volatile boolean quit; 44 44 … … 76 76 try 77 77 { 78 PeerState ps = peer.state; 79 while (!quit && ps != null) 78 while (!quit) 80 79 { 80 final PeerState ps = peer.state; 81 if (ps == null) 82 break; 83 81 84 // Common variables used for some messages. 82 85 int piece; … … 92 95 if (i == 0) 93 96 { 97 if (_log.shouldLog(Log.DEBUG)) 98 _log.debug("Received keepalive from " + peer); 94 99 ps.keepAliveMessage(); 95 if (_log.shouldLog(Log.DEBUG))96 _log.debug("Received keepalive from " + peer);97 100 continue; 98 101 } … … 102 105 { 103 106 case Message.CHOKE: 107 if (_log.shouldLog(Log.DEBUG)) 108 _log.debug("Received choke from " + peer); 104 109 ps.chokeMessage(true); 105 if (_log.shouldLog(Log.DEBUG))106 _log.debug("Received choke from " + peer);107 110 break; 108 111 109 112 case Message.UNCHOKE: 113 if (_log.shouldLog(Log.DEBUG)) 114 _log.debug("Received unchoke from " + peer); 110 115 ps.chokeMessage(false); 111 if (_log.shouldLog(Log.DEBUG))112 _log.debug("Received unchoke from " + peer);113 116 break; 114 117 115 118 case Message.INTERESTED: 119 if (_log.shouldLog(Log.DEBUG)) 120 _log.debug("Received interested from " + peer); 116 121 ps.interestedMessage(true); 117 if (_log.shouldLog(Log.DEBUG))118 _log.debug("Received interested from " + peer);119 122 break; 120 123 121 124 case Message.UNINTERESTED: 125 if (_log.shouldLog(Log.DEBUG)) 126 _log.debug("Received not interested from " + peer); 122 127 ps.interestedMessage(false); 123 if (_log.shouldLog(Log.DEBUG))124 _log.debug("Received not interested from " + peer);125 128 break; 126 129 127 130 case Message.HAVE: 128 131 piece = din.readInt(); 132 if (_log.shouldLog(Log.DEBUG)) 133 _log.debug("Received havePiece(" + piece + ") from " + peer); 129 134 ps.haveMessage(piece); 130 if (_log.shouldLog(Log.DEBUG))131 _log.debug("Received havePiece(" + piece + ") from " + peer);132 135 break; 133 136 … … 135 138 byte[] bitmap = new byte[i-1]; 136 139 din.readFully(bitmap); 140 if (_log.shouldLog(Log.DEBUG)) 141 _log.debug("Received bitmap from " + peer + ": size=" + (i-1) /* + ": " + ps.bitfield */ ); 137 142 ps.bitfieldMessage(bitmap); 138 if (_log.shouldLog(Log.DEBUG))139 _log.debug("Received bitmap from " + peer + ": size=" + (i-1) /* + ": " + ps.bitfield */ );140 143 break; 141 144 … … 144 147 begin = din.readInt(); 145 148 len = din.readInt(); 149 if (_log.shouldLog(Log.DEBUG)) 150 _log.debug("Received request(" + piece + "," + begin + ") from " + peer); 146 151 ps.requestMessage(piece, begin, len); 147 if (_log.shouldLog(Log.DEBUG))148 _log.debug("Received request(" + piece + "," + begin + ") from " + peer);149 152 break; 150 153 … … 157 160 { 158 161 req.read(din); 159 ps.pieceMessage(req);160 162 if (_log.shouldLog(Log.DEBUG)) 161 163 _log.debug("Received data(" + piece + "," + begin + ") from " + peer); 164 ps.pieceMessage(req); 162 165 } 163 166 else … … 176 179 begin = din.readInt(); 177 180 len = din.readInt(); 181 if (_log.shouldLog(Log.DEBUG)) 182 _log.debug("Received cancel(" + piece + "," + begin + ") from " + peer); 178 183 ps.cancelMessage(piece, begin, len); 179 if (_log.shouldLog(Log.DEBUG))180 _log.debug("Received cancel(" + piece + "," + begin + ") from " + peer);181 184 break; 182 185 183 186 case Message.PORT: 184 187 int port = din.readUnsignedShort(); 188 if (_log.shouldLog(Log.DEBUG)) 189 _log.debug("Received port message from " + peer); 185 190 ps.portMessage(port); 186 if (_log.shouldLog(Log.DEBUG))187 _log.debug("Received port message from " + peer);188 191 break; 189 192 … … 248 251 _log.info("IOError talking with " + peer, ioe); 249 252 } 250 catch ( Throwablet)253 catch (RuntimeException t) 251 254 { 252 255 _log.error("Error talking with " + peer, t); 253 if (t instanceof OutOfMemoryError)254 throw (OutOfMemoryError)t;255 256 } 256 257 finally -
apps/i2psnark/java/src/org/klomp/snark/Snark.java
r679fe9b r4c72c08 913 913 914 914 /** 915 * Bytes not received and set to skipped. 916 * This is not the same as the total of all skipped files, 917 * since pieces may span multiple files. 918 * 919 * @return exact value. or 0 if no storage yet. 920 * @since 0.9.24 921 */ 922 public long getSkippedLength() { 923 PeerCoordinator coord = coordinator; 924 if (coord != null) { 925 // fast way 926 long r = getRemainingLength(); 927 if (r <= 0) 928 return 0; 929 long n = coord.getNeededLength(); 930 return r - n; 931 } else if (storage != null) { 932 // slow way 933 return storage.getSkippedLength(); 934 } 935 return 0; 936 } 937 938 /** 915 939 * Does not account (i.e. includes) for skipped files. 916 940 * @return number of pieces still needed (magnet mode or not), or -1 if unknown -
apps/i2psnark/java/src/org/klomp/snark/Storage.java
r679fe9b r4c72c08 515 515 } 516 516 rv[i] = pri; 517 } 518 return rv; 519 } 520 521 /** 522 * Call setPriority() for all changed files first, 523 * then call this. 524 * The length of all the pieces that are not yet downloaded, 525 * and are set to skipped. 526 * This is not the same as the total of all skipped files, 527 * since pieces may span multiple files. 528 * 529 * @return 0 on error, if complete, or if only one file 530 * @since 0.9.24 531 */ 532 public long getSkippedLength() { 533 int[] pri = getPiecePriorities(); 534 if (pri == null) 535 return 0; 536 long rv = 0; 537 final int end = pri.length - 1; 538 for (int i = 0; i <= end; i++) { 539 if (pri[i] <= -9 && !bitfield.get(i)) { 540 rv += (i != end) ? piece_size : metainfo.getPieceLength(i); 541 } 517 542 } 518 543 return rv; -
apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java
r679fe9b r4c72c08 2917 2917 .append(formatSize(needed)); 2918 2918 } 2919 long skipped = snark.getSkippedLength(); 2920 if (skipped > 0) { 2921 buf.append(" "); 2922 toThemeImg(buf, "head_rx"); 2923 buf.append(" <b>") 2924 .append(_t("Skipped")) 2925 .append(":</b> ") 2926 .append(formatSize(skipped)); 2927 } 2919 2928 if (meta != null) { 2920 2929 List<List<String>> files = meta.getFiles();
Note: See TracChangeset
for help on using the changeset viewer.