示例#1
0
  private RouteReply sendRREP(RouteRequest rreq)
      throws NoSuchRouteException, InvalidRouteException {
    if (iAmTheDestination(rreq)) {
      if (node.getCurrentSequenceNumber() + 1 == rreq.getDestinationSequenceNumber()) {
        node.getNextSequenceNumber();
      }
      return new RouteReply(
          rreq.getDestinationAddress(),
          node.getCurrentSequenceNumber(),
          rreq.getSourceAddress(),
          rreq.getSourceSequenceNumber());

    } else {
      ForwardRouteEntry entry = routingTable.getForwardEntry(rreq.getDestinationAddress());
      int destinationSequenceNumber = entry.getDestinationSequenceNumber();
      sendGratuitousReply(rreq, destinationSequenceNumber);
      int hops = entry.getNumberHops();
      long lifetime = entry.getAlivetimeLeft();

      return new RouteReply(
          rreq.getDestinationAddress(),
          destinationSequenceNumber,
          rreq.getSourceAddress(),
          rreq.getSourceSequenceNumber(),
          hops,
          lifetime);
    }
  }
示例#2
0
  private boolean sendRREQ(String destinationAddress, int lastDestinationSequenceNumber) {
    node.getNextSequenceNumber();
    node.getNextBroadcastID();
    RouteRequest routeRequest =
        new RouteRequest(
            node.getCurrentSequenceNumber(),
            node.getCurrentBroadcastID(),
            destinationAddress,
            lastDestinationSequenceNumber);

    if (routingTable.addRouteRequest(routeRequest, true)) {
      getSender().queueRoutingMessage(routeRequest);
      return true;
    }
    return false;
  }