private void realRun(DatagramPacket packet) { // Single receiving thread boolean gotPacket = getPacket(packet); long now = System.currentTimeMillis(); if (gotPacket) { long startTime = System.currentTimeMillis(); Peer peer = new Peer(packet.getAddress(), packet.getPort()); tracker.receivedPacketFrom(peer); long endTime = System.currentTimeMillis(); if (endTime - startTime > 50) { if (endTime - startTime > 3000) { Logger.error(this, "packet creation took " + (endTime - startTime) + "ms"); } else { if (logMINOR) Logger.minor(this, "packet creation took " + (endTime - startTime) + "ms"); } } byte[] data = packet.getData(); int offset = packet.getOffset(); int length = packet.getLength(); try { if (logMINOR) Logger.minor(this, "Processing packet of length " + length + " from " + peer); startTime = System.currentTimeMillis(); lowLevelFilter.process(data, offset, length, peer, now); endTime = System.currentTimeMillis(); if (endTime - startTime > 50) { if (endTime - startTime > 3000) { Logger.error(this, "processing packet took " + (endTime - startTime) + "ms"); } else { if (logMINOR) Logger.minor(this, "processing packet took " + (endTime - startTime) + "ms"); } } if (logMINOR) Logger.minor(this, "Successfully handled packet length " + length); } catch (Throwable t) { Logger.error(this, "Caught " + t + " from " + lowLevelFilter, t); } } else { if (logDEBUG) Logger.debug(this, "No packet received"); } }