* Streaming: Cleanup, don't fail hard on no tunnels (ticket #788)

This commit is contained in:
zzz
2014-05-18 00:44:51 +00:00
parent d32b4e9f24
commit 2467856011

View File

@ -247,7 +247,8 @@ class PacketQueue implements SendMessageStatusListener {
public void messageStatus(I2PSession session, long msgId, int status) { public void messageStatus(I2PSession session, long msgId, int status) {
if (_dead) if (_dead)
return; return;
Connection con = _messageStatusMap.get(Long.valueOf(msgId)); Long id = Long.valueOf(msgId);
Connection con = _messageStatusMap.get(id);
if (con == null) { if (con == null) {
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("Rcvd status " + status + " for msg " + msgId + " on unknown connection"); _log.warn("Rcvd status " + status + " for msg " + msgId + " on unknown connection");
@ -256,10 +257,13 @@ class PacketQueue implements SendMessageStatusListener {
switch (status) { switch (status) {
case MessageStatusMessage.STATUS_SEND_BEST_EFFORT_FAILURE: case MessageStatusMessage.STATUS_SEND_BEST_EFFORT_FAILURE:
// not really guaranteed
case MessageStatusMessage.STATUS_SEND_GUARANTEED_FAILURE: case MessageStatusMessage.STATUS_SEND_GUARANTEED_FAILURE:
_messageStatusMap.remove(Long.valueOf(msgId)); // no tunnels may fix itself, allow retx
case MessageStatusMessage.STATUS_SEND_FAILURE_NO_TUNNELS:
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("Rcvd soft failure status " + status + " for msg " + msgId + " on " + con); _log.warn("Rcvd soft failure status " + status + " for msg " + msgId + " on " + con);
_messageStatusMap.remove(id);
break; break;
case MessageStatusMessage.STATUS_SEND_FAILURE_LOCAL: case MessageStatusMessage.STATUS_SEND_FAILURE_LOCAL:
@ -271,20 +275,19 @@ class PacketQueue implements SendMessageStatusListener {
case MessageStatusMessage.STATUS_SEND_FAILURE_OVERFLOW: case MessageStatusMessage.STATUS_SEND_FAILURE_OVERFLOW:
case MessageStatusMessage.STATUS_SEND_FAILURE_EXPIRED: case MessageStatusMessage.STATUS_SEND_FAILURE_EXPIRED:
case MessageStatusMessage.STATUS_SEND_FAILURE_LOCAL_LEASESET: case MessageStatusMessage.STATUS_SEND_FAILURE_LOCAL_LEASESET:
case MessageStatusMessage.STATUS_SEND_FAILURE_NO_TUNNELS:
case MessageStatusMessage.STATUS_SEND_FAILURE_UNSUPPORTED_ENCRYPTION: case MessageStatusMessage.STATUS_SEND_FAILURE_UNSUPPORTED_ENCRYPTION:
case MessageStatusMessage.STATUS_SEND_FAILURE_DESTINATION: case MessageStatusMessage.STATUS_SEND_FAILURE_DESTINATION:
case MessageStatusMessage.STATUS_SEND_FAILURE_BAD_LEASESET: case MessageStatusMessage.STATUS_SEND_FAILURE_BAD_LEASESET:
case MessageStatusMessage.STATUS_SEND_FAILURE_EXPIRED_LEASESET: case MessageStatusMessage.STATUS_SEND_FAILURE_EXPIRED_LEASESET:
case MessageStatusMessage.STATUS_SEND_FAILURE_NO_LEASESET: case MessageStatusMessage.STATUS_SEND_FAILURE_NO_LEASESET:
case SendMessageStatusListener.STATUS_CANCELLED: case SendMessageStatusListener.STATUS_CANCELLED:
IOException ioe = new I2PSocketException(status);
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("Rcvd hard failure status " + status + " for msg " + msgId + " on " + con); _log.warn("Rcvd hard failure status " + status + " for msg " + msgId + " on " + con);
_messageStatusMap.remove(Long.valueOf(msgId)); _messageStatusMap.remove(id);
IOException ioe = new I2PSocketException(status);
con.getOutputStream().streamErrorOccurred(ioe); con.getOutputStream().streamErrorOccurred(ioe);
con.getInputStream().streamErrorOccurred(ioe); con.getInputStream().streamErrorOccurred(ioe);
con.setConnectionError("barf boof bazzle code " + status); con.setConnectionError("failure code " + status);
con.disconnect(false); con.disconnect(false);
break; break;
@ -293,7 +296,7 @@ class PacketQueue implements SendMessageStatusListener {
case MessageStatusMessage.STATUS_SEND_SUCCESS_LOCAL: case MessageStatusMessage.STATUS_SEND_SUCCESS_LOCAL:
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("Rcvd success status " + status + " for msg " + msgId + " on " + con); _log.warn("Rcvd success status " + status + " for msg " + msgId + " on " + con);
_messageStatusMap.remove(Long.valueOf(msgId)); _messageStatusMap.remove(id);
break; break;
case MessageStatusMessage.STATUS_SEND_ACCEPTED: case MessageStatusMessage.STATUS_SEND_ACCEPTED:
@ -304,10 +307,9 @@ class PacketQueue implements SendMessageStatusListener {
default: default:
if (_log.shouldLog(Log.WARN)) if (_log.shouldLog(Log.WARN))
_log.warn("Rcvd unknown status " + status + " for msg " + msgId + " on " + con); _log.warn("Rcvd unknown status " + status + " for msg " + msgId + " on " + con);
_messageStatusMap.remove(Long.valueOf(msgId)); _messageStatusMap.remove(id);
break; break;
} }
} }
/** /**