diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java index a9c7b86372e348c9b0f94da1732616f03150cdcc..92ac358a5f3b334bc459564ff6d7b6a7c3e17f44 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java @@ -163,10 +163,22 @@ class PeerConnectionOut implements Runnable removeMessage(Message.PIECE); // XXX - Should also register overhead... - if (m.type == Message.PIECE) - state.uploaded(m.len); + // Don't let other clients requesting big chunks get an advantage + // when we are seeding; + // only count the rest of the upload after sendMessage(). + int remainder = 0; + if (m.type == Message.PIECE) { + if (m.len <= PeerState.PARTSIZE) { + state.uploaded(m.len); + } else { + state.uploaded(PeerState.PARTSIZE); + remainder = m.len - PeerState.PARTSIZE; + } + } m.sendMessage(dout); + if (remainder > 0) + state.uploaded(remainder); m = null; } }