Exemple #1
0
 /**
  * Adds the node reference in the resources as a friend to the node this plugin is loaded.
  *
  * @return the corresponding PeerAdditionReturnCode indicating whether the bridge was added
  *     successfully as a friend
  */
 private PeerAdditionReturnCodes addFriendBridge() {
   SimpleFieldSet bridgeNodeFS;
   try {
     bridgeNodeFS = nodeRefHelper.getBridgeNodeRefFS();
   } catch (IOException e) {
     Logger.error(this, "IO Exception while parsing bridge reference resource file");
     return PeerAdditionReturnCodes.INTERNAL_ERROR;
   }
   PeerNode pn;
   try {
     pn = node.createNewDarknetNode(bridgeNodeFS, FRIEND_TRUST.HIGH, FRIEND_VISIBILITY.NO);
     ((DarknetPeerNode) pn).setPrivateDarknetCommentNote("Master Bridge");
   } catch (FSParseException e) {
     return PeerAdditionReturnCodes.CANT_PARSE;
   } catch (PeerParseException e) {
     return PeerAdditionReturnCodes.CANT_PARSE;
   } catch (ReferenceSignatureVerificationException e) {
     return PeerAdditionReturnCodes.INVALID_SIGNATURE;
   } catch (Throwable t) {
     Logger.error(this, "Internal error adding reference :" + t.getMessage(), t);
     return PeerAdditionReturnCodes.INTERNAL_ERROR;
   }
   if (Arrays.equals(pn.getPubKeyHash(), node.getDarknetPubKeyHash())) {
     Logger.warning(this, "The bridge  node reference file belongs to this node.");
     return PeerAdditionReturnCodes.TRY_TO_ADD_SELF;
   }
   if (!node.addPeerConnection(pn)) {
     return PeerAdditionReturnCodes.ALREADY_IN_REFERENCE;
   }
   return PeerAdditionReturnCodes.OK;
 }
  public static void main(String[] args)
      throws FSParseException, PeerParseException, InvalidThresholdException, NodeInitException,
          ReferenceSignatureVerificationException {
    // Logger.setupStdoutLogging(LogLevel.NORMAL,
    // "freenet.node.CPUAdjustingSwapRequestInterval:minor"
    // /*"freenet.node.LocationManager:debug,freenet.node.FNPPacketManager:normal,freenet.io.comm.MessageCore:debug"*/);
    System.out.println("SecretPing (CRAM) test using real nodes:");
    System.out.println();
    String wd = "realNodeSecretPingTest";
    new File(wd).mkdir();
    // NOTE: globalTestInit returns in ignored random source
    NodeStarter.globalTestInit(
        wd,
        false,
        LogLevel.ERROR,
        "freenet.node.Location:normal,freenet.node.simulator.RealNodeSecretPingTest:normal,freenet.node.NetworkIDManager:normal",
        true);

    DummyRandomSource random = new DummyRandomSource();
    // DiffieHellman.init(random);
    Node[] nodes = new Node[NUMBER_OF_NODES];
    Logger.normal(RealNodeRoutingTest.class, "Creating nodes...");
    Executor executor = new PooledExecutor();

    // Allow secret pings, but don't automatically send them (this is the test for them!)
    freenet.node.NetworkIDManager.disableSecretPings = false;
    freenet.node.NetworkIDManager.disableSecretPinger = true;

    for (int i = 0; i < NUMBER_OF_NODES; i++) {
      nodes[i] =
          NodeStarter.createTestNode(
              DARKNET_PORT_BASE + i,
              0,
              wd,
              true,
              MAX_HTL,
              0 /* no dropped packets */,
              random,
              executor,
              500 * NUMBER_OF_NODES,
              storeSize,
              true,
              true,
              false,
              false,
              false,
              true,
              true,
              0,
              true,
              false,
              true,
              false,
              null);
      Logger.normal(RealNodeRoutingTest.class, "Created node " + i);
    }
    Logger.normal(RealNodeRoutingTest.class, "Created " + NUMBER_OF_NODES + " nodes");
    // Now link them up
    makeKleinbergNetwork(nodes);
    Logger.normal(RealNodeRoutingTest.class, "Added small-world links");

    for (int i = 0; i < NUMBER_OF_NODES; i++) nodes[i].start(false);

    // Now sit back and watch the fireworks!
    int cycleNumber = 0;
    RunningAverage avg2 = new BootstrappingDecayingRunningAverage(0.0, 0.0, 1.0, 100, null);
    while (true) {
      cycleNumber++;

      try {
        Thread.sleep(2000);
      } catch (InterruptedException e) {
        // Ignore
      }

      Node source = nodes[random.nextInt(NUMBER_OF_NODES)];
      PeerNode verify = source.peers.getRandomPeer();
      PeerNode pathway = source.peers.getRandomPeer(verify);

      Logger.error(
          source,
          "verify ("
              + getPortNumber(verify)
              + ") through: "
              + getPortNumber(pathway)
              + "; so far "
              + avg2.currentValue());

      long uid = random.nextLong();
      long secret = random.nextLong();

      if (verify == null) {
        Logger.error(source, "verify peernode is null");
        continue;
      }

      if (pathway == null) {
        Logger.error(source, "pathway peernode is null");
        continue;
      }

      try {
        // Send the FNPStoreSecret message to the 'verify' node
        verify.sendSync(DMT.createFNPStoreSecret(uid, secret), null, false);

        if (!getAck(source, verify, uid)) {
          Logger.error(source, "did not get storesecret ack for " + uid);
          avg2.report(0.0);
          continue;
        }

        // Send the request for the secret through the 'pathway' node.
        pathway.sendSync(
            DMT.createFNPSecretPing(
                uid, verify.getLocation(), PING_HTL, DAWN_HTL, 0, verify.getIdentity()),
            null,
            false);

        long result = getSecretPingResponse(source, pathway, uid);
        if (result != secret) {
          Logger.error(source, "not matched: " + secret + " != " + result);
          avg2.report(0.0);
        } else {
          Logger.error(source, "match: " + secret);
          avg2.report(1.0);
        }
      } catch (NotConnectedException e) {
        Logger.error(source, "what?", e);
        avg2.report(0.0);
      } catch (DisconnectedException e) {
        Logger.error(source, "huh?", e);
        avg2.report(0.0);
      } catch (SyncSendWaitedTooLongException e) {
        Logger.error(source, "eh?", e);
        avg2.report(0.0);
      }
    }
  }
 static String getPortNumber(PeerNode p) {
   if (p == null || p.getPeer() == null) return "null";
   return Integer.toString(p.getPeer().getPort());
 }