// Called when a peer we're trying to connect to sends us a message
  private void processNewPeer(SocketChannel c) throws IOException {
    ByteBuffer message = ChannelHelper.readBytes(c, 4);
    String recognize = utf8.decode(message).toString();
    if (!recognize.equals("bam!")) {
      // Connected to something that wasn't a BAMPong client...
      c.close();
      Peer p = new_peers.remove(c);
      log("Closing attempt to " + p.getName() + " got " + recognize);
      return;
    }

    // Assemble response
    ByteBuffer name = utf8.encode(nick);
    message = ByteBuffer.allocateDirect(name.limit() + 10); // id(4), port(4), name(2+limit)
    message.putInt(id);
    message.putInt(getPort());
    ChannelHelper.putString(message, name);
    message.flip();

    // Send message
    c.write(message);

    // Move socket to connected peers.
    Peer peer = new_peers.remove(c);
    peers.put(c, peer);
    sockets.put(peer, c);
  }
Exemple #2
0
  // Check that it starts downloading the block chain correctly on request.
  @Test
  public void startBlockChainDownload() throws Exception {
    Block b1 = createFakeBlock(blockStore).block;
    blockChain.add(b1);
    Block b2 = makeSolvedTestBlock(b1);
    blockChain.add(b2);

    connect();
    fail.set(true);
    peer.addEventListener(
        new AbstractPeerEventListener() {
          @Override
          public void onChainDownloadStarted(Peer p, int blocksLeft) {
            if (p == peer && blocksLeft == 108) fail.set(false);
          }
        },
        Threading.SAME_THREAD);
    peer.startBlockChainDownload();

    List<Sha256Hash> expectedLocator = new ArrayList<Sha256Hash>();
    expectedLocator.add(b2.getHash());
    expectedLocator.add(b1.getHash());
    expectedLocator.add(unitTestParams.getGenesisBlock().getHash());

    GetBlocksMessage message = (GetBlocksMessage) outbound(writeTarget);
    assertEquals(message.getLocator(), expectedLocator);
    assertEquals(Sha256Hash.ZERO_HASH, message.getStopHash());
  }
Exemple #3
0
  @Test
  public void invDownloadTxMultiPeer() throws Exception {
    // Check co-ordination of which peer to download via the memory pool.
    VersionMessage ver = new VersionMessage(unitTestParams, 100);
    InetSocketAddress address = new InetSocketAddress("127.0.0.1", 4242);
    Peer peer2 = new Peer(unitTestParams, ver, new PeerAddress(address), blockChain, memoryPool);
    peer2.addWallet(wallet);
    VersionMessage peerVersion = new VersionMessage(unitTestParams, OTHER_PEER_CHAIN_HEIGHT);
    peerVersion.clientVersion = 70001;
    peerVersion.localServices = VersionMessage.NODE_NETWORK;

    connect();
    InboundMessageQueuer writeTarget2 = connect(peer2, peerVersion);

    // Make a tx and advertise it to one of the peers.
    BigInteger value = Utils.toNanoCoins(1, 0);
    Transaction tx = createFakeTx(unitTestParams, value, this.address);
    InventoryMessage inv = new InventoryMessage(unitTestParams);
    InventoryItem item = new InventoryItem(InventoryItem.Type.Transaction, tx.getHash());
    inv.addItem(item);

    inbound(writeTarget, inv);

    // We got a getdata message.
    GetDataMessage message = (GetDataMessage) outbound(writeTarget);
    assertEquals(1, message.getItems().size());
    assertEquals(tx.getHash(), message.getItems().get(0).hash);
    assertTrue(memoryPool.maybeWasSeen(tx.getHash()));

    // Advertising to peer2 results in no getdata message.
    inbound(writeTarget2, inv);
    pingAndWait(writeTarget2);
    assertNull(outbound(writeTarget2));
  }
Exemple #4
0
 boolean initiateConnection(Connection conn_, Peer peer) {
   TCPConnection conn = (TCPConnection) conn_;
   try {
     SocketChannel channel = SocketChannel.open();
     InetSocketAddress localAddress = new InetSocketAddress(conn.host_id, 0);
     channel.socket().bind(localAddress);
     channel.configureBlocking(false);
     try {
       InetSocketAddress remoteAddress = new InetSocketAddress(peer.host(), peer.port());
       if (channel.connect(remoteAddress)) {
         // This only happens on Solaris when connecting locally
         logger.log(Level.FINEST, "Connected!");
         conn.state = Connection.State.connected_out;
         conn.channel = channel;
         selector.wakeup();
         channel.register(selector, SelectionKey.OP_READ, conn);
         initiateCER(conn);
         return true;
       }
     } catch (java.nio.channels.UnresolvedAddressException ex) {
       channel.close();
       return false;
     }
     conn.state = Connection.State.connecting;
     conn.channel = channel;
     selector.wakeup();
     channel.register(selector, SelectionKey.OP_CONNECT, conn);
   } catch (java.io.IOException ex) {
     logger.log(
         Level.WARNING,
         "java.io.IOException caught while initiating connection to '" + peer.host() + "'.",
         ex);
   }
   return true;
 }
Exemple #5
0
 public static void deleteInactivePeers(int MAX_TIME_WITHOUT_UPDATES) {
   List toDelete = new ArrayList<Peer>();
   List<RealtimeRoom> roomsToSave = new ArrayList<RealtimeRoom>();
   // ++++++++= CLEAN ROOMs ++++++++++++++++++=
   Collection<RealtimeRoom> rooms = DbUtils.loadRooms();
   for (RealtimeRoom room : rooms) {
     List<Peer> roomPeers = room.getPeers();
     if (!roomPeers.isEmpty()) {
       for (Peer peer : roomPeers) {
         if (peer.getTimeSinceLastUpdate() >= RefreshCommand.MAX_TIME_WITHOUT_UPDATES) {
           toDelete.add(peer);
           roomsToSave.add(room);
           room.removePeer(peer.getId());
         }
       }
     } else {
       if (!room.isStatic() && !room.isWaitingRoom()) { // deletable room without peers
         toDelete.add(room);
       }
     }
   }
   ofy().delete().entities(toDelete);
   ofy().save().entities(roomsToSave);
   // LOGGER.info(inactivePeers.size() + " peers inativos deletados!");
 }
Exemple #6
0
 @Test
 public void pingPong() throws Exception {
   connect();
   Utils.rollMockClock(0);
   // No ping pong happened yet.
   assertEquals(Long.MAX_VALUE, peer.getLastPingTime());
   assertEquals(Long.MAX_VALUE, peer.getPingTime());
   ListenableFuture<Long> future = peer.ping();
   assertEquals(Long.MAX_VALUE, peer.getLastPingTime());
   assertEquals(Long.MAX_VALUE, peer.getPingTime());
   assertFalse(future.isDone());
   Ping pingMsg = (Ping) outbound(writeTarget);
   Utils.rollMockClock(5);
   // The pong is returned.
   inbound(writeTarget, new Pong(pingMsg.getNonce()));
   pingAndWait(writeTarget);
   assertTrue(future.isDone());
   long elapsed = future.get();
   assertTrue("" + elapsed, elapsed > 1000);
   assertEquals(elapsed, peer.getLastPingTime());
   assertEquals(elapsed, peer.getPingTime());
   // Do it again and make sure it affects the average.
   future = peer.ping();
   pingMsg = (Ping) outbound(writeTarget);
   Utils.rollMockClock(50);
   inbound(writeTarget, new Pong(pingMsg.getNonce()));
   elapsed = future.get();
   assertEquals(elapsed, peer.getLastPingTime());
   assertEquals(7250, peer.getPingTime());
 }
  public static void init() {
    EventHandler.setController(new PullBasedPeerController());
    Network.init();
    OverlayFactory.init();
    PeerFactory.init();
    Network.init();
    Message.init();

    Iterator<Video> itv = Repository.getVideoIterator();
    p2pOverlay = new ArrayList<Overlay>();
    Servers = new ArrayList<Server>();
    while (itv.hasNext()) {
      p2pOverlay.add(OverlayFactory.genOverlay(itv.next()));
    }

    Peer tmp = PeerFactory.genPeer(null);
    while (tmp != null) {
      Output.printP2PEvent(
          "Server"
              + tmp.getPeerID()
              + " created! Bandwidth:"
              + Utilities.displayDouble(tmp.getUploadBW()));
      Servers.add((Server) tmp);
      tmp = PeerFactory.genPeer(null);
    }
  }
Exemple #8
0
 @Test
 public void testAddEventListener() throws Exception {
   connect();
   PeerEventListener listener = new AbstractPeerEventListener();
   peer.addEventListener(listener);
   assertTrue(peer.removeEventListener(listener));
   assertFalse(peer.removeEventListener(listener));
 }
Exemple #9
0
  // Override .toString method
  public String toString() {
    String s = "";

    for (Peer peer : listOfPeers) {
      s += peer.toString() + "\n";
    }
    return s;
  }
Exemple #10
0
  // Check that inventory message containing blocks we want is processed correctly.
  @Test
  public void newBlock() throws Exception {
    Block b1 = createFakeBlock(blockStore).block;
    blockChain.add(b1);
    final Block b2 = makeSolvedTestBlock(b1);
    // Receive notification of a new block.
    final InventoryMessage inv = new InventoryMessage(unitTestParams);
    InventoryItem item = new InventoryItem(InventoryItem.Type.Block, b2.getHash());
    inv.addItem(item);

    final AtomicInteger newBlockMessagesReceived = new AtomicInteger(0);

    connect();
    // Round-trip a ping so that we never see the response verack if we attach too quick
    pingAndWait(writeTarget);
    peer.addEventListener(
        new AbstractPeerEventListener() {
          @Override
          public synchronized Message onPreMessageReceived(Peer p, Message m) {
            if (p != peer) fail.set(true);
            if (m instanceof Pong) return m;
            int newValue = newBlockMessagesReceived.incrementAndGet();
            if (newValue == 1 && !inv.equals(m)) fail.set(true);
            else if (newValue == 2 && !b2.equals(m)) fail.set(true);
            else if (newValue > 3) fail.set(true);
            return m;
          }

          @Override
          public synchronized void onBlocksDownloaded(Peer p, Block block, int blocksLeft) {
            int newValue = newBlockMessagesReceived.incrementAndGet();
            if (newValue != 3
                || p != peer
                || !block.equals(b2)
                || blocksLeft != OTHER_PEER_CHAIN_HEIGHT - 2) fail.set(true);
          }
        },
        Threading.SAME_THREAD);
    long height = peer.getBestHeight();

    inbound(writeTarget, inv);
    pingAndWait(writeTarget);
    assertEquals(height + 1, peer.getBestHeight());
    // Response to the getdata message.
    inbound(writeTarget, b2);

    pingAndWait(writeTarget);
    Threading.waitForUserCode();
    pingAndWait(writeTarget);
    assertEquals(3, newBlockMessagesReceived.get());

    GetDataMessage getdata = (GetDataMessage) outbound(writeTarget);
    List<InventoryItem> items = getdata.getItems();
    assertEquals(1, items.size());
    assertEquals(b2.getHash(), items.get(0).hash);
    assertEquals(InventoryItem.Type.Block, items.get(0).type);
  }
Exemple #11
0
 @Override
 public boolean execute() {
   for (Integer nodeIndex = 0; nodeIndex < Network.size(); nodeIndex++) {
     Long peerId = Network.get(nodeIndex).getID();
     Peer peer = new Peer(peerId);
     peer.calcualteGlobalDiv();
   }
   return false;
 }
 private void waitForAllToLock() {
   for (Peer p : dec.getPeers()) {
     while (!p.isLocked() && p.isConnected()) {
       try {
         Thread.sleep(100);
       } catch (InterruptedException e) {
       }
     }
     p.setLocked(false);
   }
 }
Exemple #13
0
  // Find Peer matching description
  public Peer findPeer(String host, int port) {
    Peer newPeer = new Peer(host, port);

    for (Peer p : listOfPeers) {
      if (newPeer.equals(p)) {
        return p;
      }
    }

    return null;
  }
Exemple #14
0
  public Peer getReadyPeer() {

    Peer p = getNextPeer();

    while (!p.ready) {
      p = getNextPeer();
    }

    p.ready = false;

    return p;
  }
  public static void main(String args[])
      throws IOException, InterruptedException, SharkProtocolNotSupportedException {
    L.setLogLevel(L.LOGLEVEL_ALL);
    Peer bob = new Peer("Bob", 7071);

    // wait for alice 2 connect
    Thread.sleep(10000);
    //        Thread.sleep(Integer.MAX_VALUE);

    System.out.println("Shutting down Bob");
    bob.stop();
  }
Exemple #16
0
 private void waitPeerOpened() {
   int i = 50;
   while (i != 0) {
     if (_peer.isOpen()) return;
     try {
       Thread.sleep(20);
     } catch (InterruptedException e) {
     }
     i++;
   }
   assertTrue(_peer.isOpen());
 }
  public float getULRate() {
    try {
      float rate = 0.00f;
      List<Peer> l = new LinkedList<Peer>(this.peerList.values());

      for (Iterator it = l.iterator(); it.hasNext(); ) {
        Peer p = (Peer) it.next();
        if (p.getULRate(false) > 0) rate = rate + p.getULRate(true);
      }
      return rate / (1024 * 10);
    } catch (Exception e) {
      return 0.00f;
    }
  }
Exemple #18
0
  /*
   * (non-Javadoc)
   *
   * @see net.jenet.protocol.Command#execute(org.Dizan
   *      Vasquez.jnet.Peer, net.jenet.protocol.Header)
   */
  @Override
  public Event execute(Host host, Peer peer, Header header) {
    Event result = new Event();
    Channel channel = peer.selectChannel(getHeader().getChannelID());
    Packet packet;
    if (channel == null || !peer.isConnected()) return result;

    packet = new Packet(getHeader().getCommandLength() - byteSize(), 0);

    packet.fromBuffer(host.getReceivedData());

    peer.queueIncomingCommand(this, packet, 0);
    return result;
  }
Exemple #19
0
  @Test
  public void fastCatchup() throws Exception {
    connect();

    // Check that blocks before the fast catchup point are retrieved using getheaders, and after
    // using getblocks.
    // This test is INCOMPLETE because it does not check we handle >2000 blocks correctly.
    Block b1 = createFakeBlock(blockStore).block;
    blockChain.add(b1);
    Utils.rollMockClock(60 * 10); // 10 minutes later.
    Block b2 = makeSolvedTestBlock(b1);
    Utils.rollMockClock(60 * 10); // 10 minutes later.
    Block b3 = makeSolvedTestBlock(b2);
    Utils.rollMockClock(60 * 10);
    Block b4 = makeSolvedTestBlock(b3);

    // Request headers until the last 2 blocks.
    peer.setDownloadParameters((Utils.now().getTime() / 1000) - (600 * 2) + 1, false);
    peer.startBlockChainDownload();
    GetHeadersMessage getheaders = (GetHeadersMessage) outbound(writeTarget);
    List<Sha256Hash> expectedLocator = new ArrayList<Sha256Hash>();
    expectedLocator.add(b1.getHash());
    expectedLocator.add(unitTestParams.getGenesisBlock().getHash());
    assertEquals(getheaders.getLocator(), expectedLocator);
    assertEquals(getheaders.getStopHash(), Sha256Hash.ZERO_HASH);
    // Now send all the headers.
    HeadersMessage headers =
        new HeadersMessage(
            unitTestParams, b2.cloneAsHeader(), b3.cloneAsHeader(), b4.cloneAsHeader());
    // We expect to be asked for b3 and b4 again, but this time, with a body.
    expectedLocator.clear();
    expectedLocator.add(b2.getHash());
    expectedLocator.add(b1.getHash());
    expectedLocator.add(unitTestParams.getGenesisBlock().getHash());
    inbound(writeTarget, headers);
    GetBlocksMessage getblocks = (GetBlocksMessage) outbound(writeTarget);
    assertEquals(expectedLocator, getblocks.getLocator());
    assertEquals(Sha256Hash.ZERO_HASH, getblocks.getStopHash());
    // We're supposed to get an inv here.
    InventoryMessage inv = new InventoryMessage(unitTestParams);
    inv.addItem(new InventoryItem(InventoryItem.Type.Block, b3.getHash()));
    inbound(writeTarget, inv);
    GetDataMessage getdata = (GetDataMessage) outbound(writeTarget);
    assertEquals(b3.getHash(), getdata.getItems().get(0).hash);
    // All done.
    inbound(writeTarget, b3);
    pingAndWait(writeTarget);
    closePeer(peer);
  }
 /**
  * Given the list in parameter, check if the peers are already present in the peer list. If not,
  * then add them and create a new task for them
  *
  * @param list LinkedHashMap
  */
 public synchronized void updatePeerList(LinkedHashMap list) {
   // this.lastUnchoking = System.currentTimeMillis();
   synchronized (this.task) {
     // this.peerList.putAll(list);
     Set keyset = list.keySet();
     for (Iterator i = keyset.iterator(); i.hasNext(); ) {
       String key = (String) i.next();
       if (!this.task.containsKey(key)) {
         Peer p = (Peer) list.get(key);
         this.peerList.put(p.toString(), p);
         this.connect(p);
       }
     }
   }
   System.out.println("Peer List updated from tracker with " + list.size() + " peers");
 }
Exemple #21
0
  @Test
  public void getLargeBlock() throws Exception {
    connect();

    Block b1 = createFakeBlock(blockStore).block;
    blockChain.add(b1);
    Block b2 = makeSolvedTestBlock(b1);
    Transaction t = new Transaction(unitTestParams);
    t.addInput(b1.getTransactions().get(0).getOutput(0));
    t.addOutput(
        new TransactionOutput(
            unitTestParams, t, BigInteger.ZERO, new byte[Block.MAX_BLOCK_SIZE - 1000]));
    b2.addTransaction(t);

    // Request the block.
    Future<Block> resultFuture = peer.getBlock(b2.getHash());
    assertFalse(resultFuture.isDone());
    // Peer asks for it.
    GetDataMessage message = (GetDataMessage) outbound(writeTarget);
    assertEquals(message.getItems().get(0).hash, b2.getHash());
    assertFalse(resultFuture.isDone());
    // Peer receives it.
    inbound(writeTarget, b2);
    Block b = resultFuture.get();
    assertEquals(b, b2);
  }
 @Override
 public Session<Address, X> openSession(Send<X> send) throws InterruptedException, IOException {
   if (send == null) return null;
   Session<Address, Bytestring> s = p.openSession(new UnmarshallSend(send));
   if (s == null) return null;
   return new MarshallSession(s);
 }
  private void verifyGemFireSetup(final Peer manager) {
    manager.run(
        new SerializableRunnable(
            "Verifies the GemFire Cluster was properly configured and initialized!") {
          @Override
          public void run() {
            final ManagementService managementService =
                ManagementService.getExistingManagementService(getCache());

            WaitCriterion waitOnManagerCriterion =
                new WaitCriterion() {
                  @Override
                  public boolean done() {
                    ManagerMXBean managerBean = managementService.getManagerMXBean();
                    DistributedRegionMXBean usersRegionBean =
                        managementService.getDistributedRegionMXBean(
                            getRegionPath(USERS_REGION_NAME));

                    return !(managerBean == null || usersRegionBean == null);
                  }

                  @Override
                  public String description() {
                    return String.format(
                        "Probing for the GemFire Manager '%1$s' and '%2$s' Region MXBeans...",
                        manager.getName(), USERS_REGION_NAME);
                  }
                };

            DistributedTestCase.waitForCriterion(waitOnManagerCriterion, 30000, 2000, true);
          }
        });
  }
Exemple #24
0
  @Test
  public void disconnectOldVersions1() throws Exception {
    // Set up the connection with an old version.
    final SettableFuture<Void> connectedFuture = SettableFuture.create();
    final SettableFuture<Void> disconnectedFuture = SettableFuture.create();
    peer.addEventListener(
        new AbstractPeerEventListener() {
          @Override
          public void onPeerConnected(Peer peer, int peerCount) {
            connectedFuture.set(null);
          }

          @Override
          public void onPeerDisconnected(Peer peer, int peerCount) {
            disconnectedFuture.set(null);
          }
        });
    connectWithVersion(500);
    // We must wait uninterruptibly here because connect[WithVersion] generates a peer that
    // interrupts the current
    // thread when it disconnects.
    Uninterruptibles.getUninterruptibly(connectedFuture);
    Uninterruptibles.getUninterruptibly(disconnectedFuture);
    try {
      peer.writeTarget.writeBytes(new byte[1]);
      fail();
    } catch (IOException e) {
      assertTrue(
          (e.getCause() != null && e.getCause() instanceof CancelledKeyException)
              || (e instanceof SocketException && e.getMessage().equals("Socket is closed")));
    }
  }
Exemple #25
0
  @Test
  public void testTimeout() throws Throwable {
    // Log.getLog().setDebugEnabled(true);

    TestDiameterHandler serverHandler =
        new TestDiameterHandler() {

          @Override
          public void doHandle(DiameterMessage message) throws Throwable {
            Thread.sleep(300);
            ((DiameterServletRequest) message).createAnswer(Common.DIAMETER_SUCCESS).send();
          }
        };
    _server.setHandler(serverHandler);
    _server.start();

    TestDiameterHandler clientHandler =
        new TestDiameterHandler() {
          @Override
          public void doHandle(DiameterMessage message) throws Throwable {}
        };
    _client.setHandler(clientHandler);
    _client.setRequestTimeout(200);
    _client.start();

    waitPeerOpened();

    newUdr().send();
    assertEquals(1, clientHandler.waitNoAnswer());
    serverHandler.assertDone();
    Thread.sleep(150);
    clientHandler.assertDone(0);
    assertTrue(_peer.isOpen());
  }
 public synchronized void disconnect(Peer p) {
   DownloadTask dt = task.remove(p.toString());
   if (dt != null) {
     dt.end();
     dt = null;
   }
 }
Exemple #27
0
  @Before
  public void setUp() throws Exception {
    // Log.getLog().setDebugEnabled(true);
    _client = new Node(38681);
    _client.getConnectors()[0].setHost("127.0.0.1");
    _client.setIdentity("client");

    _peer = new Peer("server");
    _peer.setAddress(InetAddress.getByName("127.0.0.1"));
    _peer.setPort(38680);
    _client.addPeer(_peer);

    _server = new Node(38680);
    _server.getConnectors()[0].setHost("127.0.0.1");
    _server.setIdentity("server");
  }
Exemple #28
0
 // Remove peer
 public void removePeer(Peer p) {
   for (int i = 0; i < listOfPeers.size(); i++) {
     if (p.equals(listOfPeers.get(i))) {
       listOfPeers.remove(i);
     }
   }
 }
  public void buildData() {
    Peer peer;
    int size = peerList.size();
    data = null;
    data = new Object[size][6];
    for (int i = 0; i < size; i++) {
      peer = peerList.get(i);
      data[i][0] = peer.getName();
      data[i][1] = String.valueOf(peer.getPonderations().getPonderation(PeerActionKill.class));
      data[i][2] = String.valueOf(peer.getPonderations().getPonderation(PeerActionAvg.class));
      data[i][3] = String.valueOf(peer.getPonderations().getPonderation(PeerActionTalk.class));
      data[i][4] = String.valueOf(peer.getPonderations().getPonderation(PeerActionQuery.class));
      data[i][5] = String.valueOf(peer.getPonderations().getPonderation(PeerActionMove.class));
    }

    fireTableChanged(new TableModelEvent(this));
  }
  public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
    data[rowIndex][columnIndex] = aValue;

    Peer p = peerList.get(rowIndex);

    Class c;
    if (columnIndex == 1) c = PeerActionKill.class;
    else if (columnIndex == 2) c = PeerActionAvg.class;
    else if (columnIndex == 3) c = PeerActionTalk.class;
    else if (columnIndex == 4) c = PeerActionQuery.class;
    else if (columnIndex == 5) c = PeerActionMove.class;
    else c = PeerActionQuery.class;

    p.getPonderations().setPonderation(c, Integer.parseInt(aValue.toString()));

    fireTableCellUpdated(rowIndex, columnIndex);
  }