Changeset c1c4e50


Ignore:
Timestamp:
Jan 13, 2011 7:54:56 PM (9 years ago)
Author:
zzz <zzz@…>
Branches:
master
Children:
f046eb7
Parents:
461e3b6
Message:
  • Finish PEX send/rcv
  • Disable KRPC
  • Shorten tracker string
Location:
apps/i2psnark/java/src/org/klomp/snark
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • apps/i2psnark/java/src/org/klomp/snark/ExtensionHandler.java

    r461e3b6 rc1c4e50  
    8686            }
    8787
     88            MagnetState state = peer.getMagnetState();
     89
    8890            if (msgmap.get(TYPE_METADATA) == null) {
    8991                if (_log.shouldLog(Log.WARN))
    9092                    _log.debug("Peer does not support metadata extension: " + peer);
    91                 // drop if we need metainfo ?
     93                // drop if we need metainfo and we haven't found anybody yet
     94                synchronized(state) {
     95                    if (!state.isInitialized()) {
     96                        _log.debug("Dropping peer, we need metadata! " + peer);
     97                        peer.disconnect();
     98                    }
     99                }
    92100                return;
    93101            }
     
    97105                if (_log.shouldLog(Log.WARN))
    98106                    _log.debug("Peer does not have the metainfo size yet: " + peer);
    99                 // drop if we need metainfo ?
     107                // drop if we need metainfo and we haven't found anybody yet
     108                synchronized(state) {
     109                    if (!state.isInitialized()) {
     110                        _log.debug("Dropping peer, we need metadata! " + peer);
     111                        peer.disconnect();
     112                    }
     113                }
    100114                return;
    101115            }
     
    104118                _log.debug("Got the metainfo size: " + metaSize);
    105119
    106             MagnetState state = peer.getMagnetState();
    107120            int remaining;
    108121            synchronized(state) {
  • apps/i2psnark/java/src/org/klomp/snark/I2PSnarkUtil.java

    r461e3b6 rc1c4e50  
    3636
    3737import org.klomp.snark.dht.DHT;
    38 import org.klomp.snark.dht.KRPC;
     38//import org.klomp.snark.dht.KRPC;
    3939
    4040/**
     
    214214        }
    215215        // FIXME this only instantiates krpc once, left stuck with old manager
    216         if (ENABLE_DHT && _manager != null && _dht == null)
    217             _dht = new KRPC(_context, _manager.getSession());
     216        //if (ENABLE_DHT && _manager != null && _dht == null)
     217        //    _dht = new KRPC(_context, _manager.getSession());
    218218        return (_manager != null);
    219219    }
  • apps/i2psnark/java/src/org/klomp/snark/Peer.java

    r461e3b6 rc1c4e50  
    3030import java.util.Map;
    3131
     32import net.i2p.I2PAppContext;
    3233import net.i2p.client.streaming.I2PSocket;
    3334import net.i2p.data.DataHelper;
     
    3940public class Peer implements Comparable
    4041{
    41   private Log _log = new Log(Peer.class);
     42  private final Log _log = I2PAppContext.getGlobalContext().logManager().getLog(Peer.class);
    4243  // Identifying property, the peer id of the other side.
    4344  private final PeerID peerID;
  • apps/i2psnark/java/src/org/klomp/snark/PeerCheckerTask.java

    r461e3b6 rc1c4e50  
    206206              }
    207207            peer.retransmitRequests();
     208            // send PEX
     209            if ((_runCount % 17) == 0 && !peer.isCompleted())
     210                coordinator.sendPeers(peer);
    208211            peer.keepAlive();
    209212            // announce them to local tracker (TrackerClient does this too)
     
    211214                _util.getDHT().announce(coordinator.getInfoHash(), peer.getPeerID().getDestHash());
    212215            }
    213             // send PEX
    214216          }
    215217
  • apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java

    r461e3b6 rc1c4e50  
    2828import java.util.LinkedList;
    2929import java.util.List;
     30import java.util.Map;
    3031import java.util.Queue;
    3132import java.util.Random;
     33import java.util.Set;
    3234import java.util.concurrent.LinkedBlockingQueue;
    3335
    3436import net.i2p.I2PAppContext;
     37import net.i2p.data.DataHelper;
     38import net.i2p.data.Destination;
     39import net.i2p.util.ConcurrentHashSet;
    3540import net.i2p.util.I2PAppThread;
    3641import net.i2p.util.Log;
    3742import net.i2p.util.SimpleTimer2;
    3843
     44import org.klomp.snark.bencode.BEValue;
     45import org.klomp.snark.bencode.InvalidBEncodingException;
    3946import org.klomp.snark.dht.DHT;
    4047
     
    9097   */
    9198  final Queue<Peer> peers;
     99
     100  /**
     101   * Peers we heard about via PEX
     102   */
     103  private final Set<PeerID> pexPeers;
    92104
    93105  /** estimate of the peers, without requiring any synchronization */
     
    135147    peers = new LinkedBlockingQueue();
    136148    magnetState = new MagnetState(infohash, metainfo);
     149    pexPeers = new ConcurrentHashSet();
    137150
    138151    // Install a timer to check the uploaders.
     
    11441157          }
    11451158      } else if (id == ExtensionHandler.ID_HANDSHAKE) {
    1146           try {
    1147               if (peer.getHandshakeMap().get("m").getMap().get(ExtensionHandler.TYPE_PEX) != null) {
    1148                   List<Peer> pList = peerList();
    1149                   pList.remove(peer);
     1159          sendPeers(peer);
     1160      }
     1161  }
     1162
     1163  /**
     1164   *  Send a PEX message to the peer, if he supports PEX.
     1165   *  This just sends everybody we are connected to, we don't
     1166   *  track new vs. old peers yet.
     1167   *  @since 0.8.4
     1168   */
     1169  void sendPeers(Peer peer) {
     1170      Map<String, BEValue> handshake = peer.getHandshakeMap();
     1171      if (handshake == null)
     1172          return;
     1173      BEValue bev = handshake.get("m");
     1174      if (bev == null)
     1175          return;
     1176      try {
     1177          if (bev.getMap().get(ExtensionHandler.TYPE_PEX) != null) {
     1178              List<Peer> pList = peerList();
     1179              pList.remove(peer);
     1180              if (!pList.isEmpty())
    11501181                  ExtensionHandler.sendPEX(peer, pList);
    1151               }
    1152           } catch (Exception e) {
    1153               // NPE, no map
    1154           }
    1155       }
     1182          }
     1183      } catch (InvalidBEncodingException ibee) {}
    11561184  }
    11571185
     
    11861214   */
    11871215  public void gotPeers(Peer peer, List<PeerID> peers) {
    1188       // spin off thread or timer task to do a new Peer() and an addPeer() for each one
     1216      if (completed() || !needPeers())
     1217          return;
     1218      Destination myDest = _util.getMyDestination();
     1219      if (myDest == null)
     1220          return;
     1221      byte[] myHash = myDest.calculateHash().getData();
     1222      List<Peer> pList = peerList();
     1223      for (PeerID id : peers) {
     1224           if (peerIDInList(id, pList) != null)
     1225               continue;
     1226           if (DataHelper.eq(myHash, id.getDestHash()))
     1227               continue;
     1228           pexPeers.add(id);
     1229      }
     1230      // TrackerClient will poll for pexPeers and do the add in its thread,
     1231      // rather than running another thread here.
     1232  }
     1233
     1234  /**
     1235   *  Called by TrackerClient
     1236   *  @since 0.8.4
     1237   */
     1238  Set<PeerID> getPEXPeers() {
     1239      return pexPeers;
    11891240  }
    11901241
  • apps/i2psnark/java/src/org/klomp/snark/TrackerClient.java

    r461e3b6 rc1c4e50  
    301301                          // FIXME if id == us || dest == us continue;
    302302                          // only delay if we actually make an attempt to add peer
    303                           if(coordinator.addPeer(cur)) {
    304                             int delay = DELAY_MUL;
    305                             delay *= r.nextInt(10);
    306                             delay += DELAY_MIN;
     303                          if(coordinator.addPeer(cur) && it.hasNext()) {
     304                            int delay = (DELAY_MUL * r.nextInt(10)) + DELAY_MIN;
    307305                            sleptTime += delay;
    308306                            try { Thread.sleep(delay); } catch (InterruptedException ie) {}
     
    342340            }  // *** end of trackers loop here
    343341
     342            // Get peers from PEX
     343            if (left > 0 && coordinator.needPeers() && !stop) {
     344                Set<PeerID> pids = coordinator.getPEXPeers();
     345                if (!pids.isEmpty()) {
     346                    _util.debug("Got " + pids.size() + " from PEX", Snark.INFO);
     347                    List<Peer> peers = new ArrayList(pids.size());
     348                    for (PeerID pID : pids) {
     349                        peers.add(new Peer(pID, snark.getID(), snark.getInfoHash(), snark.getMetaInfo()));
     350                    }
     351                    Collections.shuffle(peers, r);
     352                    Iterator<Peer> it = peers.iterator();
     353                    while ((!stop) && it.hasNext()) {
     354                        Peer cur = it.next();
     355                        if (coordinator.addPeer(cur) && it.hasNext()) {
     356                            int delay = (DELAY_MUL * r.nextInt(10)) + DELAY_MIN;
     357                            try { Thread.sleep(delay); } catch (InterruptedException ie) {}
     358                         }
     359                    }
     360                }
     361            }
     362
    344363            // Get peers from DHT
    345364            // FIXME this needs to be in its own thread
     
    370389                    while ((!stop) && it.hasNext()) {
    371390                        Peer cur = it.next();
    372                         if (coordinator.addPeer(cur)) {
    373                             int delay = DELAY_MUL;
    374                             delay *= r.nextInt(10);
    375                             delay += DELAY_MIN;
     391                        if (coordinator.addPeer(cur) && it.hasNext()) {
     392                            int delay = (DELAY_MUL * r.nextInt(10)) + DELAY_MIN;
    376393                            try { Thread.sleep(delay); } catch (InterruptedException ie) {}
    377394                         }
  • apps/i2psnark/java/src/org/klomp/snark/web/I2PSnarkServlet.java

    r461e3b6 rc1c4e50  
    911911        else if (remaining == 0)
    912912            out.write(formatSize(total)); // 3GB
    913         else
    914             out.write("??");  // no meta size yet
     913        //else
     914        //    out.write("??");  // no meta size yet
    915915        out.write("</td>\n\t");
    916916        out.write("<td align=\"right\" class=\"snarkTorrentUploaded " + rowClass + "\">");
     
    10591059                        out.write(formatSize(peer.getDownloadRate()) + "ps</a></span>");
    10601060                    }
     1061                } else if (!isValid) {
     1062                    //if (peer supports metadata extension) {
     1063                        out.write("<span class=\"unchoked\">");
     1064                        out.write(formatSize(peer.getDownloadRate()) + "ps</span>");
     1065                    //} else {
     1066                    //}
    10611067                }
    10621068                out.write("</td>\n\t");
     
    16301636                    if (slsh > 0)
    16311637                        announce = announce.substring(0, slsh);
     1638                    if (announce.length() > 67)
     1639                        announce = announce.substring(0, 40) + "&hellip;" + announce.substring(announce.length() - 8);
    16321640                    buf.append(announce);
    16331641                }
Note: See TracChangeset for help on using the changeset viewer.