From a129cfd3159c02b4f3996dbdfb5299ac95a6720c Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 23 Feb 2019 15:40:41 -0800 Subject: Refactor remote address handler --- src/org/traccar/BasePipelineFactory.java | 10 ++---- src/org/traccar/MainModule.java | 10 ++++++ src/org/traccar/RemoteAddressHandler.java | 42 ---------------------- src/org/traccar/config/Keys.java | 4 +++ .../traccar/handler/ComputedAttributesHandler.java | 2 +- src/org/traccar/handler/CopyAttributesHandler.java | 2 +- src/org/traccar/handler/RemoteAddressHandler.java | 42 ++++++++++++++++++++++ 7 files changed, 61 insertions(+), 51 deletions(-) delete mode 100644 src/org/traccar/RemoteAddressHandler.java create mode 100644 src/org/traccar/handler/RemoteAddressHandler.java (limited to 'src') diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java index d32e1fc6c..d5a90390e 100644 --- a/src/org/traccar/BasePipelineFactory.java +++ b/src/org/traccar/BasePipelineFactory.java @@ -40,6 +40,7 @@ import org.traccar.handler.DistanceHandler; import org.traccar.handler.FilterHandler; import org.traccar.handler.NetworkMessageHandler; import org.traccar.handler.OpenChannelHandler; +import org.traccar.handler.RemoteAddressHandler; import org.traccar.handler.StandardLoggingHandler; import java.util.Map; @@ -52,7 +53,6 @@ public abstract class BasePipelineFactory extends ChannelInitializer { private int timeout; private EngineHoursHandler engineHoursHandler; - private RemoteAddressHandler remoteAddressHandler; private MotionHandler motionHandler; private GeocoderHandler geocoderHandler; private GeolocationHandler geolocationHandler; @@ -78,10 +78,6 @@ public abstract class BasePipelineFactory extends ChannelInitializer { timeout = Context.getConfig().getInteger(Keys.SERVER_TIMEOUT); } - if (Context.getConfig().getBoolean("handler.remoteAddress.enable")) { - remoteAddressHandler = new RemoteAddressHandler(); - } - if (Context.getGeocoder() != null && !Context.getConfig().getBoolean("geocoder.ignorePositions")) { geocoderHandler = new GeocoderHandler( Context.getGeocoder(), @@ -105,7 +101,7 @@ public abstract class BasePipelineFactory extends ChannelInitializer { hemisphereHandler = new HemisphereHandler(); } - if (Context.getConfig().getBoolean("handler.copyAttributes.enable")) { + if (Context.getConfig().getBoolean("processing.copyAttributes.enable")) { copyAttributesHandler = new CopyAttributesHandler(); } @@ -178,7 +174,7 @@ public abstract class BasePipelineFactory extends ChannelInitializer { geolocationHandler, hemisphereHandler, Main.getInjector().getInstance(DistanceHandler.class), - remoteAddressHandler); + Main.getInjector().getInstance(RemoteAddressHandler.class)); addDynamicHandlers(pipeline); diff --git a/src/org/traccar/MainModule.java b/src/org/traccar/MainModule.java index 9b16185df..d9ff93b21 100644 --- a/src/org/traccar/MainModule.java +++ b/src/org/traccar/MainModule.java @@ -24,6 +24,7 @@ import org.traccar.config.Keys; import org.traccar.database.IdentityManager; import org.traccar.handler.DistanceHandler; import org.traccar.handler.FilterHandler; +import org.traccar.handler.RemoteAddressHandler; import javax.ws.rs.client.Client; @@ -64,6 +65,15 @@ public class MainModule extends AbstractModule { return null; } + @Singleton + @Provides + public static RemoteAddressHandler provideRemoteAddressHandler(Config config) { + if (config.getBoolean(Keys.PROCESSING_REMOTE_ADDRESS_ENABLE)) { + return new RemoteAddressHandler(); + } + return null; + } + @Singleton @Provides public static WebDataHandler provideWebDataHandler( diff --git a/src/org/traccar/RemoteAddressHandler.java b/src/org/traccar/RemoteAddressHandler.java deleted file mode 100644 index aabc5715e..000000000 --- a/src/org/traccar/RemoteAddressHandler.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * Copyright 2015 - 2018 Anton Tananaev (anton@traccar.org) - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.traccar; - -import io.netty.channel.ChannelHandler; -import io.netty.channel.ChannelHandlerContext; -import io.netty.channel.ChannelInboundHandlerAdapter; -import org.traccar.model.Position; - -import java.net.InetSocketAddress; - -@ChannelHandler.Sharable -public class RemoteAddressHandler extends ChannelInboundHandlerAdapter { - - @Override - public void channelRead(ChannelHandlerContext ctx, Object msg) { - - InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress(); - String hostAddress = remoteAddress != null ? remoteAddress.getAddress().getHostAddress() : null; - - if (msg instanceof Position) { - Position position = (Position) msg; - position.set(Position.KEY_IP, hostAddress); - } - - ctx.fireChannelRead(msg); - } - -} diff --git a/src/org/traccar/config/Keys.java b/src/org/traccar/config/Keys.java index 6d4653a94..655a61c1d 100644 --- a/src/org/traccar/config/Keys.java +++ b/src/org/traccar/config/Keys.java @@ -143,6 +143,10 @@ public final class Keys { "Distance in meters. Distances above this value gets handled like explained in 'coordinates.filter', but " + "only if Position is also marked as 'invalid'."); + public static final ConfigKey PROCESSING_REMOTE_ADDRESS_ENABLE = new ConfigKey( + "processing.remoteAddress.enable", + Boolean.class, + "Enable to save device IP addresses information. Disabled by default."); private Keys() { } diff --git a/src/org/traccar/handler/ComputedAttributesHandler.java b/src/org/traccar/handler/ComputedAttributesHandler.java index 4b5b8c20d..5ceadafdd 100644 --- a/src/org/traccar/handler/ComputedAttributesHandler.java +++ b/src/org/traccar/handler/ComputedAttributesHandler.java @@ -51,7 +51,7 @@ public class ComputedAttributesHandler extends BaseDataHandler { engine.setStrict(true); engine.setFunctions(Collections.singletonMap("math", (Object) Math.class)); if (Context.getConfig() != null) { - mapDeviceAttributes = Context.getConfig().getBoolean("handler.computedAttributes.deviceAttributes"); + mapDeviceAttributes = Context.getConfig().getBoolean("processing.computedAttributes.deviceAttributes"); } } diff --git a/src/org/traccar/handler/CopyAttributesHandler.java b/src/org/traccar/handler/CopyAttributesHandler.java index ce37e09cc..73642d81b 100644 --- a/src/org/traccar/handler/CopyAttributesHandler.java +++ b/src/org/traccar/handler/CopyAttributesHandler.java @@ -34,7 +34,7 @@ public class CopyAttributesHandler extends BaseDataHandler { @Override protected Position handlePosition(Position position) { String attributesString = Context.getDeviceManager().lookupAttributeString( - position.getDeviceId(), "handler.copyAttributes", "", true); + position.getDeviceId(), "processing.copyAttributes", "", true); Position last = getLastPosition(position.getDeviceId()); if (attributesString.isEmpty()) { attributesString = Position.KEY_DRIVER_UNIQUE_ID; diff --git a/src/org/traccar/handler/RemoteAddressHandler.java b/src/org/traccar/handler/RemoteAddressHandler.java new file mode 100644 index 000000000..c09b8c39a --- /dev/null +++ b/src/org/traccar/handler/RemoteAddressHandler.java @@ -0,0 +1,42 @@ +/* + * Copyright 2015 - 2018 Anton Tananaev (anton@traccar.org) + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.traccar.handler; + +import io.netty.channel.ChannelHandler; +import io.netty.channel.ChannelHandlerContext; +import io.netty.channel.ChannelInboundHandlerAdapter; +import org.traccar.model.Position; + +import java.net.InetSocketAddress; + +@ChannelHandler.Sharable +public class RemoteAddressHandler extends ChannelInboundHandlerAdapter { + + @Override + public void channelRead(ChannelHandlerContext ctx, Object msg) { + + InetSocketAddress remoteAddress = (InetSocketAddress) ctx.channel().remoteAddress(); + String hostAddress = remoteAddress != null ? remoteAddress.getAddress().getHostAddress() : null; + + if (msg instanceof Position) { + Position position = (Position) msg; + position.set(Position.KEY_IP, hostAddress); + } + + ctx.fireChannelRead(msg); + } + +} -- cgit v1.2.3