I2P Address: [http://git.idk.i2p]

Skip to content
Snippets Groups Projects
Commit 6487fb05 authored by zzz's avatar zzz
Browse files

Tunnels: FragmentHandler cleanup (ticket #2699)

parent 42fb3bb2
No related branches found
No related tags found
No related merge requests found
...@@ -2,6 +2,7 @@ package net.i2p.router.tunnel; ...@@ -2,6 +2,7 @@ package net.i2p.router.tunnel;
import java.util.HashMap; import java.util.HashMap;
import java.util.Map; import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
import net.i2p.data.Base64; import net.i2p.data.Base64;
import net.i2p.data.ByteArray; import net.i2p.data.ByteArray;
...@@ -95,8 +96,8 @@ class FragmentHandler { ...@@ -95,8 +96,8 @@ class FragmentHandler {
protected final Log _log; protected final Log _log;
private final Map<Long, FragmentedMessage> _fragmentedMessages; private final Map<Long, FragmentedMessage> _fragmentedMessages;
private final DefragmentedReceiver _receiver; private final DefragmentedReceiver _receiver;
private int _completed; private final AtomicInteger _completed = new AtomicInteger();
private int _failed; private final AtomicInteger _failed = new AtomicInteger();
/** don't wait more than 60s to defragment the partial message */ /** don't wait more than 60s to defragment the partial message */
static long MAX_DEFRAGMENT_TIME = 60*1000; static long MAX_DEFRAGMENT_TIME = 60*1000;
...@@ -187,8 +188,8 @@ class FragmentHandler { ...@@ -187,8 +188,8 @@ class FragmentHandler {
} }
} }
public int getCompleteCount() { return _completed; } public int getCompleteCount() { return _completed.get(); }
public int getFailedCount() { return _failed; } public int getFailedCount() { return _failed.get(); }
private static final ByteCache _validateCache = ByteCache.getInstance(512, TrivialPreprocessor.PREPROCESSED_SIZE); private static final ByteCache _validateCache = ByteCache.getInstance(512, TrivialPreprocessor.PREPROCESSED_SIZE);
...@@ -468,7 +469,7 @@ class FragmentHandler { ...@@ -468,7 +469,7 @@ class FragmentHandler {
private void receiveComplete(FragmentedMessage msg) { private void receiveComplete(FragmentedMessage msg) {
if (msg == null) if (msg == null)
return; return;
_completed++; _completed.incrementAndGet();
String stringified = null; String stringified = null;
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
stringified = msg.toString(); stringified = msg.toString();
...@@ -490,8 +491,9 @@ class FragmentHandler { ...@@ -490,8 +491,9 @@ class FragmentHandler {
// The unencrypted messages at the OBEP are (V)TBMs // The unencrypted messages at the OBEP are (V)TBMs
// and perhaps an occasional DatabaseLookupMessage // and perhaps an occasional DatabaseLookupMessage
I2NPMessage m = new I2NPMessageHandler(_context).readMessage(data); I2NPMessage m = new I2NPMessageHandler(_context).readMessage(data);
noteReception(m.getUniqueId(), fragmentCount-1, "complete: ");// + msg.toString()); long id = m.getUniqueId();
noteCompletion(m.getUniqueId()); noteReception(id, fragmentCount-1, "complete");
noteCompletion(id);
_receiver.receiveComplete(m, msg.getTargetRouter(), msg.getTargetTunnel()); _receiver.receiveComplete(m, msg.getTargetRouter(), msg.getTargetTunnel());
} catch (I2NPMessageException ime) { } catch (I2NPMessageException ime) {
if (stringified == null) stringified = msg.toString(); if (stringified == null) stringified = msg.toString();
...@@ -508,7 +510,7 @@ class FragmentHandler { ...@@ -508,7 +510,7 @@ class FragmentHandler {
* @since 0.9 * @since 0.9
*/ */
private void receiveComplete(byte[] data, int offset, int len, Hash router, TunnelId tunnelId) { private void receiveComplete(byte[] data, int offset, int len, Hash router, TunnelId tunnelId) {
_completed++; _completed.incrementAndGet();
try { try {
if (_log.shouldLog(Log.DEBUG)) if (_log.shouldLog(Log.DEBUG))
_log.debug("RECV unfrag(" + len + ')'); _log.debug("RECV unfrag(" + len + ')');
...@@ -522,8 +524,9 @@ class FragmentHandler { ...@@ -522,8 +524,9 @@ class FragmentHandler {
I2NPMessageHandler h = new I2NPMessageHandler(_context); I2NPMessageHandler h = new I2NPMessageHandler(_context);
h.readMessage(data, offset, len); h.readMessage(data, offset, len);
I2NPMessage m = h.lastRead(); I2NPMessage m = h.lastRead();
noteReception(m.getUniqueId(), 0, "complete: ");// + msg.toString()); long id = m.getUniqueId();
noteCompletion(m.getUniqueId()); noteReception(id, 0, "complete");
noteCompletion(id);
_receiver.receiveComplete(m, router, tunnelId); _receiver.receiveComplete(m, router, tunnelId);
} catch (I2NPMessageException ime) { } catch (I2NPMessageException ime) {
if (_log.shouldLog(Log.WARN)) { if (_log.shouldLog(Log.WARN)) {
...@@ -565,13 +568,13 @@ class FragmentHandler { ...@@ -565,13 +568,13 @@ class FragmentHandler {
} }
public void timeReached() { public void timeReached() {
boolean removed = false; boolean removed;
synchronized (_fragmentedMessages) { synchronized (_fragmentedMessages) {
removed = (null != _fragmentedMessages.remove(Long.valueOf(_msg.getMessageId()))); removed = (null != _fragmentedMessages.remove(Long.valueOf(_msg.getMessageId())));
} }
synchronized (_msg) { synchronized (_msg) {
if (removed && !_msg.getReleased()) { if (removed && !_msg.getReleased()) {
_failed++; _failed.incrementAndGet();
noteFailure(_msg.getMessageId(), _msg.toString()); noteFailure(_msg.getMessageId(), _msg.toString());
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("Dropped incomplete fragmented message: " + _msg); _log.warn("Dropped incomplete fragmented message: " + _msg);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment