public void handleDataPacket(Packet p) {
    // this packet is for this device
    if (p.getDestination().equals(localDevice.getBluetoothAddress())) {
      offer(p);
    } else {
      String nextHop = routingTable.nextHop(localDevice.getBluetoothAddress(), p.getDestination());

      if (nextHop != null) {
        Log("SynCore", "Packet from: " + p.getSource() + " routed to: " + nextHop);
        for (String n : connections.keySet()) {
          if (n.equals(nextHop)) {
            connections.get(n).offer(p);
          }
        }
      }
    }
  }
 public void handlePacket(byte[] p, String from) {
   Packet s = Packet.createPacket(p);
   s.decreaseHopCount();
   if (s.getHopCount() > 0) {
     Log("SynCore", s.getSource() + " " + s.getDestination());
     if (s.getType() == Packet.DATA_PACKET) {
       handleDataPacket(s);
     } else {
       handleUpdatePacket(s, from);
     }
   }
 }