aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar/BasePipelineFactory.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar/BasePipelineFactory.java')
-rw-r--r--src/org/traccar/BasePipelineFactory.java16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java
index d511af214..401c42d8b 100644
--- a/src/org/traccar/BasePipelineFactory.java
+++ b/src/org/traccar/BasePipelineFactory.java
@@ -44,6 +44,7 @@ import org.traccar.processing.ComputedAttributesHandler;
import org.traccar.processing.CopyAttributesHandler;
import java.net.InetSocketAddress;
+import java.util.Map;
public abstract class BasePipelineFactory extends ChannelInitializer<Channel> {
@@ -241,6 +242,21 @@ public abstract class BasePipelineFactory extends ChannelInitializer<Channel> {
}
}
+ public static <T extends ChannelHandler> T getHandler(ChannelPipeline pipeline, Class<T> clazz) {
+ for (Map.Entry<String, ChannelHandler> handlerEntry : pipeline) {
+ ChannelHandler handler = handlerEntry.getValue();
+ if (handler instanceof WrapperInboundHandler) {
+ handler = ((WrapperInboundHandler) handler).getWrappedHandler();
+ } else if (handler instanceof WrapperOutboundHandler) {
+ handler = ((WrapperOutboundHandler) handler).getWrappedHandler();
+ }
+ if (clazz.isAssignableFrom(handler.getClass())) {
+ return (T) handler;
+ }
+ }
+ return null;
+ }
+
@Override
protected void initChannel(Channel channel) throws Exception {
final ChannelPipeline pipeline = channel.pipeline();