Don't attempt to inject closed channels. Fixes issue #23
Dieser Commit ist enthalten in:
Ursprung
20524c1c3c
Commit
1aaf272878
@ -182,12 +182,17 @@ class ChannelInjector extends ByteToMessageDecoder {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Inject the current channel.
|
* Inject the current channel.
|
||||||
|
* <p>
|
||||||
|
* Note that only active channels can be injected.
|
||||||
|
* @return TRUE if we injected the channel, false if we could not inject or it was already injected.
|
||||||
*/
|
*/
|
||||||
@SuppressWarnings("unchecked")
|
@SuppressWarnings("unchecked")
|
||||||
public boolean inject() {
|
public boolean inject() {
|
||||||
synchronized (networkManager) {
|
synchronized (networkManager) {
|
||||||
if (originalChannel instanceof Factory)
|
if (originalChannel instanceof Factory)
|
||||||
return false;
|
return false;
|
||||||
|
if (!originalChannel.isActive())
|
||||||
|
return false;
|
||||||
|
|
||||||
// Don't inject the same channel twice
|
// Don't inject the same channel twice
|
||||||
if (findChannelHandler(originalChannel, ChannelInjector.class) != null) {
|
if (findChannelHandler(originalChannel, ChannelInjector.class) != null) {
|
||||||
@ -202,9 +207,9 @@ class ChannelInjector extends ByteToMessageDecoder {
|
|||||||
vanillaEncoder = (MessageToByteEncoder<Object>) originalChannel.pipeline().get("encoder");
|
vanillaEncoder = (MessageToByteEncoder<Object>) originalChannel.pipeline().get("encoder");
|
||||||
|
|
||||||
if (vanillaDecoder == null)
|
if (vanillaDecoder == null)
|
||||||
throw new IllegalArgumentException("Unable to find vanilla decoder.in " + originalChannel.pipeline() + ". " + getChannelState());
|
throw new IllegalArgumentException("Unable to find vanilla decoder.in " + originalChannel.pipeline() );
|
||||||
if (vanillaEncoder == null)
|
if (vanillaEncoder == null)
|
||||||
throw new IllegalArgumentException("Unable to find vanilla encoder in " + originalChannel.pipeline() + ". " + getChannelState());
|
throw new IllegalArgumentException("Unable to find vanilla encoder in " + originalChannel.pipeline() );
|
||||||
patchEncoder(vanillaEncoder);
|
patchEncoder(vanillaEncoder);
|
||||||
|
|
||||||
if (DECODE_BUFFER == null)
|
if (DECODE_BUFFER == null)
|
||||||
@ -245,10 +250,6 @@ class ChannelInjector extends ByteToMessageDecoder {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getChannelState() {
|
|
||||||
return "Registered channel: " + originalChannel.isRegistered() + ", Active channel: " + originalChannel.isActive() + ", Open channel: " + originalChannel.isOpen();
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Process a given message on the packet listeners.
|
* Process a given message on the packet listeners.
|
||||||
* @param message - the message/packet.
|
* @param message - the message/packet.
|
||||||
|
In neuem Issue referenzieren
Einen Benutzer sperren