Author: toad
Date: 2007-11-28 19:01:44 +0000 (Wed, 28 Nov 2007)
New Revision: 16032

Modified:
   trunk/freenet/src/freenet/io/comm/IncomingPacketFilter.java
   trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
   trunk/freenet/src/freenet/node/FNPPacketMangler.java
   trunk/freenet/src/freenet/node/PeerNode.java
Log:
Fix build, beginnings of code to record outgoing and incoming packets times and 
hashes.

Modified: trunk/freenet/src/freenet/io/comm/IncomingPacketFilter.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/IncomingPacketFilter.java 2007-11-28 
18:53:04 UTC (rev 16031)
+++ trunk/freenet/src/freenet/io/comm/IncomingPacketFilter.java 2007-11-28 
19:01:44 UTC (rev 16032)
@@ -20,8 +20,9 @@
      * @param peer The peer which sent us the packet. We only know
      * the Peer because it's incoming; we are supposed to create
      * or find PeerContext's for the Message's.
+     * @param now The exact time at which the packet was received.
      */
-    void process(byte[] buf, int offset, int length, Peer peer);
+    void process(byte[] buf, int offset, int length, Peer peer, long now);

     // Outgoing packets are handled elsewhere...


Modified: trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java
===================================================================
--- trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java     2007-11-28 
18:53:04 UTC (rev 16031)
+++ trunk/freenet/src/freenet/io/comm/UdpSocketHandler.java     2007-11-28 
19:01:44 UTC (rev 16032)
@@ -142,6 +142,7 @@
        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());
@@ -159,7 +160,7 @@
                        try {
                                if(logMINOR) Logger.minor(this, "Processing 
packet of length "+length+" from "+peer);
                                startTime = System.currentTimeMillis();
-                               lowLevelFilter.process(data, offset, length, 
peer);
+                               lowLevelFilter.process(data, offset, length, 
peer, now);
                                endTime = System.currentTimeMillis();
                                if(endTime - startTime > 50) {
                                        if(endTime-startTime > 3000)

Modified: trunk/freenet/src/freenet/node/FNPPacketMangler.java
===================================================================
--- trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-11-28 
18:53:04 UTC (rev 16031)
+++ trunk/freenet/src/freenet/node/FNPPacketMangler.java        2007-11-28 
19:01:44 UTC (rev 16032)
@@ -206,15 +206,15 @@
                if(opn != null) {
                        if(logMINOR) Logger.minor(this, "Trying exact match");
                        if(length > HEADERS_LENGTH_MINIMUM) {
-                               if(tryProcess(buf, offset, length, 
opn.getCurrentKeyTracker())) return;
+                               if(tryProcess(buf, offset, length, 
opn.getCurrentKeyTracker(), now)) return;
                                // Try with old key
-                               if(tryProcess(buf, offset, length, 
opn.getPreviousKeyTracker())) return;
+                               if(tryProcess(buf, offset, length, 
opn.getPreviousKeyTracker(), now)) return;
                                // Try with unverified key
-                               if(tryProcess(buf, offset, length, 
opn.getUnverifiedKeyTracker())) return;
+                               if(tryProcess(buf, offset, length, 
opn.getUnverifiedKeyTracker(), now)) return;
                        }
                        if(length > Node.SYMMETRIC_KEY_LENGTH /* iv */ + 
HASH_LENGTH + 2 && !node.isStopping()) {
                                // Might be an auth packet
-                               if(tryProcessAuth(buf, offset, length, opn, 
peer, false)) return;
+                               if(tryProcessAuth(buf, offset, length, opn, 
peer, false, now)) return;
                        }
                }
                PeerNode[] peers = crypto.getPeerNodes();
@@ -223,17 +223,17 @@
                        for(int i=0;i<peers.length;i++) {
                                pn = peers[i];
                                if(pn == opn) continue;
-                               if(tryProcess(buf, offset, length, 
pn.getCurrentKeyTracker())) {
+                               if(tryProcess(buf, offset, length, 
pn.getCurrentKeyTracker(), now)) {
                                        // IP address change
                                        pn.changedIP(peer);
                                        return;
                                }
-                               if(tryProcess(buf, offset, length, 
pn.getPreviousKeyTracker())) {
+                               if(tryProcess(buf, offset, length, 
pn.getPreviousKeyTracker(), now)) {
                                        // IP address change
                                        pn.changedIP(peer);
                                        return;
                                }
-                               if(tryProcess(buf, offset, length, 
pn.getUnverifiedKeyTracker())) {
+                               if(tryProcess(buf, offset, length, 
pn.getUnverifiedKeyTracker(), now)) {
                                        // IP address change
                                        pn.changedIP(peer);
                                        return;
@@ -246,7 +246,7 @@
                        for(int i=0;i<peers.length;i++) {
                                pn = peers[i];
                                if(pn == opn) continue;
-                               if(tryProcessAuth(buf, offset, length, pn, 
peer,false)) return;
+                               if(tryProcessAuth(buf, offset, length, pn, 
peer,false, now)) return;
                        }
                }
                OpennetManager opennet = node.getOpennet();
@@ -257,7 +257,7 @@
                                // Try old connections.
                                PeerNode[] oldPeers = opennet.getOldPeers();
                                for(int i=0;i<oldPeers.length;i++) {
-                                       if(tryProcessAuth(buf, offset, length, 
oldPeers[i], peer, true)) return;
+                                       if(tryProcessAuth(buf, offset, length, 
oldPeers[i], peer, true, now)) return;
                                }
                        }
                }
@@ -271,9 +271,10 @@
         * @param length The number of bytes to read
         * @param pn The PeerNode we think is responsible
         * @param peer The Peer to send a reply to
+        * @param now The time at which the packet was received
         * @return True if we handled a negotiation packet, false otherwise.
         */
-       private boolean tryProcessAuth(byte[] buf, int offset, int length, 
PeerNode pn, Peer peer, boolean oldOpennetPeer) {
+       private boolean tryProcessAuth(byte[] buf, int offset, int length, 
PeerNode pn, Peer peer, boolean oldOpennetPeer, long now) {
                BlockCipher authKey = pn.incomingSetupCipher;
                if(logMINOR) Logger.minor(this, "Decrypt key: 
"+HexUtil.bytesToHex(pn.incomingSetupKey)+" for "+peer+" : "+pn+" in 
tryProcessAuth");
                // Does the packet match IV E( H(data) data ) ?
@@ -318,7 +319,7 @@
                if(Arrays.equals(realHash, hash)) {
                        // Got one
                        processDecryptedAuth(payload, pn, peer, oldOpennetPeer);
-                       pn.reportIncomingBytes(length);
+                       pn.reportIncomingPacket(buf, offset, length, now);
                        return true;
                } else {
                        if(logMINOR) Logger.minor(this, "Incorrect hash in 
tryProcessAuth for "+peer+" (length="+dataLength+"): \nreal 
hash="+HexUtil.bytesToHex(realHash)+"\n bad hash="+HexUtil.bytesToHex(hash));
@@ -1356,7 +1357,7 @@
                        if(p != null) replyTo = p;
                }
                sock.sendPacket(data, replyTo, pn.allowLocalAddresses());
-               pn.reportOutgoingBytes(data.length);
+               pn.reportOutgoingPacket(data, 0, data.length, 
System.currentTimeMillis());
                node.outputThrottle.forceGrab(data.length - 
alreadyReportedBytes);
        }

@@ -1540,7 +1541,7 @@
         * We need to know where the packet has come from in order to
         * decrypt and authenticate it.
         */
-       private boolean tryProcess(byte[] buf, int offset, int length, 
KeyTracker tracker) {
+       private boolean tryProcess(byte[] buf, int offset, int length, 
KeyTracker tracker, long now) {
                // Need to be able to call with tracker == null to simplify 
code above
                if(tracker == null) {
                        if(Logger.shouldLog(Logger.DEBUG, this)) 
Logger.debug(this, "Tracker == null");
@@ -1644,7 +1645,7 @@

                // Lots more to do yet!
                processDecryptedData(plaintext, seqNumber, tracker, length - 
plaintext.length);
-               tracker.pn.reportIncomingBytes(length);
+               tracker.pn.reportIncomingPacket(buf, offset, length, now);
                return true;
        }


Modified: trunk/freenet/src/freenet/node/PeerNode.java
===================================================================
--- trunk/freenet/src/freenet/node/PeerNode.java        2007-11-28 18:53:04 UTC 
(rev 16031)
+++ trunk/freenet/src/freenet/node/PeerNode.java        2007-11-28 19:01:44 UTC 
(rev 16032)
@@ -2654,12 +2654,12 @@
                return handshakeIPs == null || handshakeIPs.length == 0;
        }

-       public synchronized void reportIncomingBytes(int length) {
+       private synchronized void reportIncomingBytes(int length) {
                totalBytesIn += length;
                 totalBytesExchangedWithCurrentTracker += length;
        }

-       public synchronized void reportOutgoingBytes(int length) {
+       private synchronized void reportOutgoingBytes(int length) {
                totalBytesOut += length;
                 totalBytesExchangedWithCurrentTracker += length;
        }
@@ -2862,4 +2862,14 @@
                int byteLen = bitLen / 8 + (bitLen % 8 != 0 ? 1 : 0);
                return byteLen;
        }
+
+       public void reportIncomingPacket(byte[] buf, int offset, int length, 
long now) {
+               reportIncomingBytes(length);
+               // FIXME
+       }
+
+       public void reportOutgoingPacket(byte[] data, int i, int length, long 
l) {
+               reportOutgoingBytes(length);
+               // FIXME
+       }
 }


Reply via email to