From ad070aa889b0f8727f0b8389f19d3ed4bfb09806 Mon Sep 17 00:00:00 2001 From: Daniel Bastos Date: Wed, 21 Sep 2016 08:59:28 -0300 Subject: Adds unknown devices automatically. --- src/org/traccar/BaseProtocolDecoder.java | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/BaseProtocolDecoder.java b/src/org/traccar/BaseProtocolDecoder.java index 46832a4ca..00f45727f 100644 --- a/src/org/traccar/BaseProtocolDecoder.java +++ b/src/org/traccar/BaseProtocolDecoder.java @@ -26,11 +26,27 @@ import java.net.SocketAddress; import java.util.Date; import java.util.HashMap; import java.util.Map; +import java.sql.SQLException; public abstract class BaseProtocolDecoder extends ExtendedObjectDecoder { private final Protocol protocol; + public long addUnknownDevice(String uniqueId) { + Device device = new Device(); + device.setName(uniqueId); + device.setUniqueId(uniqueId); + + try { + Context.getDeviceManager().addDevice(device); + Log.info("Automatically registered device " + uniqueId); + return device.getId(); + } catch (SQLException e) { + Log.warning(e); + return 0; + } + } + public String getProtocolName() { return protocol.getName(); } @@ -55,6 +71,10 @@ public abstract class BaseProtocolDecoder extends ExtendedObjectDecoder { Log.warning(e); } if (deviceId == 0) { + if (Context.getConfig().getBoolean("database.registerUnknown")) { + return addUnknownDevice(uniqueIds[0]); + } + StringBuilder message = new StringBuilder("Unknown device -"); for (String uniqueId : uniqueIds) { message.append(" ").append(uniqueId); -- cgit v1.2.3 From 53bcb5c788e6b24bf8f6f631445b61a87c5f715f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 25 Sep 2016 14:51:16 +1300 Subject: Implement server statistics collection --- debug.xml | 9 +++ schema/changelog-3.8.xml | 27 +++++++ src/org/traccar/BaseProtocolDecoder.java | 3 + src/org/traccar/Context.java | 9 +++ src/org/traccar/DeviceSession.java | 3 + src/org/traccar/MainEventHandler.java | 1 + src/org/traccar/api/SecurityRequestFilter.java | 1 + src/org/traccar/api/resource/SessionResource.java | 2 + src/org/traccar/database/DataManager.java | 13 ++++ src/org/traccar/database/StatisticsManager.java | 92 +++++++++++++++++++++++ src/org/traccar/model/Statistics.java | 90 ++++++++++++++++++++++ 11 files changed, 250 insertions(+) create mode 100644 src/org/traccar/database/StatisticsManager.java create mode 100644 src/org/traccar/model/Statistics.java (limited to 'src/org') diff --git a/debug.xml b/debug.xml index 6f2ccc738..2314735ca 100644 --- a/debug.xml +++ b/debug.xml @@ -353,6 +353,15 @@ DELETE FROM attribute_aliases WHERE id = :id; + + SELECT * FROM statistics; + + + + INSERT INTO statistics (captureTime, activeUsers, activeDevices, requests, messagesReceived, messagesStored, attributes) + VALUES (:captureTime, :activeUsers, :activeDevices, :requests, :messagesReceived, :messagesStored, :attributes); + + 5001 diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 304ac21d4..deab6603c 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -39,5 +39,32 @@ speedunit = 'kmh' + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/org/traccar/BaseProtocolDecoder.java b/src/org/traccar/BaseProtocolDecoder.java index 46832a4ca..72b9a7a74 100644 --- a/src/org/traccar/BaseProtocolDecoder.java +++ b/src/org/traccar/BaseProtocolDecoder.java @@ -129,6 +129,9 @@ public abstract class BaseProtocolDecoder extends ExtendedObjectDecoder { @Override protected void onMessageEvent(Channel channel, SocketAddress remoteAddress, Object msg) { + if (Context.getStatisticsManager() != null) { + Context.getStatisticsManager().registerMessageReceived(); + } DeviceSession deviceSession = getDeviceSession(channel, remoteAddress); if (deviceSession != null) { Context.getConnectionManager().updateDevice(deviceSession.getDeviceId(), Device.STATUS_ONLINE, new Date()); diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java index 5a3dca878..827761cc5 100644 --- a/src/org/traccar/Context.java +++ b/src/org/traccar/Context.java @@ -25,6 +25,7 @@ import org.traccar.database.IdentityManager; import org.traccar.database.NotificationManager; import org.traccar.database.PermissionsManager; import org.traccar.database.GeofenceManager; +import org.traccar.database.StatisticsManager; import org.traccar.geocode.BingMapsReverseGeocoder; import org.traccar.geocode.FactualReverseGeocoder; import org.traccar.geocode.GeocodeFarmReverseGeocoder; @@ -142,6 +143,12 @@ public final class Context { return aliasesManager; } + private static StatisticsManager statisticsManager; + + public static StatisticsManager getStatisticsManager() { + return statisticsManager; + } + public static void init(String[] arguments) throws Exception { config = new Config(); @@ -245,6 +252,8 @@ public final class Context { aliasesManager = new AliasesManager(dataManager); + statisticsManager = new StatisticsManager(); + } public static void init(IdentityManager testIdentityManager) { diff --git a/src/org/traccar/DeviceSession.java b/src/org/traccar/DeviceSession.java index 5e2686f23..45bc5dcde 100644 --- a/src/org/traccar/DeviceSession.java +++ b/src/org/traccar/DeviceSession.java @@ -21,6 +21,9 @@ public class DeviceSession { public DeviceSession(long deviceId) { this.deviceId = deviceId; + if (Context.getStatisticsManager() != null) { + Context.getStatisticsManager().registerDevice(deviceId); + } } public long getDeviceId() { diff --git a/src/org/traccar/MainEventHandler.java b/src/org/traccar/MainEventHandler.java index 3f7e68b2a..24aa50117 100644 --- a/src/org/traccar/MainEventHandler.java +++ b/src/org/traccar/MainEventHandler.java @@ -62,6 +62,7 @@ public class MainEventHandler extends IdleStateAwareChannelHandler { } Log.info(s.toString()); + Context.getStatisticsManager().registerMessageStored(); } } diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index f0dd363db..ff4241b97 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -55,6 +55,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { + Context.getStatisticsManager().registerRequest(); if (requestContext.getMethod().equals("OPTIONS")) { return; diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index deed70b37..4ab1960c9 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -73,6 +73,7 @@ public class SessionResource extends BaseResource { } if (userId != null) { + Context.getStatisticsManager().registerUser(userId); return Context.getPermissionsManager().getUser(userId); } else { throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build()); @@ -85,6 +86,7 @@ public class SessionResource extends BaseResource { @FormParam("email") String email, @FormParam("password") String password) throws SQLException { User user = Context.getPermissionsManager().login(email, password); if (user != null) { + Context.getStatisticsManager().registerUser(user.getId()); request.getSession().setAttribute(USER_ID_KEY, user.getId()); return user; } else { diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index 02adb0455..c58fe40a5 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -48,6 +48,7 @@ import org.traccar.model.GroupPermission; import org.traccar.model.Notification; import org.traccar.model.Position; import org.traccar.model.Server; +import org.traccar.model.Statistics; import org.traccar.model.User; import org.traccar.model.DeviceGeofence; import org.traccar.model.GeofencePermission; @@ -484,4 +485,16 @@ public class DataManager { .setLong("id", attributeAliasId) .executeUpdate(); } + + public Collection getStatistics() throws SQLException { + return QueryBuilder.create(dataSource, getQuery("database.selectStatistics")) + .executeQuery(Statistics.class); + } + + public void addStatistics(Statistics statistics) throws SQLException { + statistics.setId(QueryBuilder.create(dataSource, getQuery("database.insertStatistics"), true) + .setObject(statistics) + .executeUpdate()); + } + } diff --git a/src/org/traccar/database/StatisticsManager.java b/src/org/traccar/database/StatisticsManager.java new file mode 100644 index 000000000..b21380332 --- /dev/null +++ b/src/org/traccar/database/StatisticsManager.java @@ -0,0 +1,92 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.database; + +import org.traccar.Context; +import org.traccar.helper.Log; +import org.traccar.model.Statistics; + +import java.sql.SQLException; +import java.util.Calendar; +import java.util.Date; +import java.util.HashSet; +import java.util.Set; + +public class StatisticsManager { + + private static final int SPLIT_MODE = Calendar.MINUTE; + + private int lastUpdate = Calendar.getInstance().get(SPLIT_MODE); + + private Set users = new HashSet<>(); + private Set devices = new HashSet<>(); + + private int requests; + private int messagesReceived; + private int messagesStored; + + private void checkSplit() { + int currentUpdate = Calendar.getInstance().get(SPLIT_MODE); + if (lastUpdate != currentUpdate) { + Statistics statistics = new Statistics(); + statistics.setCaptureTime(new Date()); + statistics.setActiveUsers(users.size()); + statistics.setActiveDevices(devices.size()); + statistics.setRequests(requests); + statistics.setMessagesReceived(messagesReceived); + statistics.setMessagesStored(messagesStored); + + try { + Context.getDataManager().addStatistics(statistics); + } catch (SQLException e) { + Log.warning(e); + } + + users.clear(); + devices.clear(); + requests = 0; + messagesReceived = 0; + messagesStored = 0; + lastUpdate = currentUpdate; + } + } + + public synchronized void registerUser(long userId) { + checkSplit(); + users.add(userId); + } + + public synchronized void registerDevice(long deviceId) { + checkSplit(); + devices.add(deviceId); + } + + public synchronized void registerRequest() { + checkSplit(); + requests += 1; + } + + public synchronized void registerMessageReceived() { + checkSplit(); + messagesReceived += 1; + } + + public synchronized void registerMessageStored() { + checkSplit(); + messagesStored += 1; + } + +} diff --git a/src/org/traccar/model/Statistics.java b/src/org/traccar/model/Statistics.java new file mode 100644 index 000000000..0461ebd7e --- /dev/null +++ b/src/org/traccar/model/Statistics.java @@ -0,0 +1,90 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.model; + +import java.util.Date; + +public class Statistics extends Extensible { + + private Date captureTime; + + public Date getCaptureTime() { + if (captureTime != null) { + return new Date(captureTime.getTime()); + } else { + return null; + } + } + + public void setCaptureTime(Date captureTime) { + if (captureTime != null) { + this.captureTime = new Date(captureTime.getTime()); + } else { + this.captureTime = null; + } + } + + private int activeUsers; + + public int getActiveUsers() { + return activeUsers; + } + + public void setActiveUsers(int activeUsers) { + this.activeUsers = activeUsers; + } + + private int activeDevices; + + public int getActiveDevices() { + return activeDevices; + } + + public void setActiveDevices(int activeDevices) { + this.activeDevices = activeDevices; + } + + private int requests; + + public int getRequests() { + return requests; + } + + public void setRequests(int requests) { + this.requests = requests; + } + + private int messagesReceived; + + public int getMessagesReceived() { + return messagesReceived; + } + + public void setMessagesReceived(int messagesReceived) { + this.messagesReceived = messagesReceived; + } + + private int messagesStored; + + public int getMessagesStored() { + return messagesStored; + } + + public void setMessagesStored(int messagesStored) { + this.messagesStored = messagesStored; + } + +} -- cgit v1.2.3 From ccd4a65a4954bcd7d2c38b806440bb766c51b0e2 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 26 Sep 2016 22:27:15 +1300 Subject: Change statistics calculation logic --- src/org/traccar/DeviceSession.java | 3 --- src/org/traccar/MainEventHandler.java | 2 +- src/org/traccar/api/SecurityRequestFilter.java | 3 ++- src/org/traccar/api/resource/SessionResource.java | 2 -- src/org/traccar/database/StatisticsManager.java | 22 +++++++++------------- 5 files changed, 12 insertions(+), 20 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/DeviceSession.java b/src/org/traccar/DeviceSession.java index 45bc5dcde..5e2686f23 100644 --- a/src/org/traccar/DeviceSession.java +++ b/src/org/traccar/DeviceSession.java @@ -21,9 +21,6 @@ public class DeviceSession { public DeviceSession(long deviceId) { this.deviceId = deviceId; - if (Context.getStatisticsManager() != null) { - Context.getStatisticsManager().registerDevice(deviceId); - } } public long getDeviceId() { diff --git a/src/org/traccar/MainEventHandler.java b/src/org/traccar/MainEventHandler.java index 24aa50117..9f172c584 100644 --- a/src/org/traccar/MainEventHandler.java +++ b/src/org/traccar/MainEventHandler.java @@ -62,7 +62,7 @@ public class MainEventHandler extends IdleStateAwareChannelHandler { } Log.info(s.toString()); - Context.getStatisticsManager().registerMessageStored(); + Context.getStatisticsManager().registerMessageStored(position.getDeviceId()); } } diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index ff4241b97..9e0f03de7 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -55,7 +55,6 @@ public class SecurityRequestFilter implements ContainerRequestFilter { @Override public void filter(ContainerRequestContext requestContext) { - Context.getStatisticsManager().registerRequest(); if (requestContext.getMethod().equals("OPTIONS")) { return; @@ -70,6 +69,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { String[] auth = decodeBasicAuth(authHeader); User user = Context.getDataManager().login(auth[0], auth[1]); if (user != null) { + Context.getStatisticsManager().registerRequest(user.getId()); securityContext = new UserSecurityContext(new UserPrincipal(user.getId())); } } catch (SQLException e) { @@ -80,6 +80,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { Long userId = (Long) request.getSession().getAttribute(SessionResource.USER_ID_KEY); if (userId != null) { + Context.getStatisticsManager().registerRequest(userId); securityContext = new UserSecurityContext(new UserPrincipal(userId)); } diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index 4ab1960c9..deed70b37 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -73,7 +73,6 @@ public class SessionResource extends BaseResource { } if (userId != null) { - Context.getStatisticsManager().registerUser(userId); return Context.getPermissionsManager().getUser(userId); } else { throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build()); @@ -86,7 +85,6 @@ public class SessionResource extends BaseResource { @FormParam("email") String email, @FormParam("password") String password) throws SQLException { User user = Context.getPermissionsManager().login(email, password); if (user != null) { - Context.getStatisticsManager().registerUser(user.getId()); request.getSession().setAttribute(USER_ID_KEY, user.getId()); return user; } else { diff --git a/src/org/traccar/database/StatisticsManager.java b/src/org/traccar/database/StatisticsManager.java index b21380332..b9af4d9b7 100644 --- a/src/org/traccar/database/StatisticsManager.java +++ b/src/org/traccar/database/StatisticsManager.java @@ -27,7 +27,7 @@ import java.util.Set; public class StatisticsManager { - private static final int SPLIT_MODE = Calendar.MINUTE; + private static final int SPLIT_MODE = Calendar.DAY_OF_MONTH; private int lastUpdate = Calendar.getInstance().get(SPLIT_MODE); @@ -64,19 +64,12 @@ public class StatisticsManager { } } - public synchronized void registerUser(long userId) { - checkSplit(); - users.add(userId); - } - - public synchronized void registerDevice(long deviceId) { - checkSplit(); - devices.add(deviceId); - } - - public synchronized void registerRequest() { + public synchronized void registerRequest(long userId) { checkSplit(); requests += 1; + if (userId != 0) { + users.add(userId); + } } public synchronized void registerMessageReceived() { @@ -84,9 +77,12 @@ public class StatisticsManager { messagesReceived += 1; } - public synchronized void registerMessageStored() { + public synchronized void registerMessageStored(long deviceId) { checkSplit(); messagesStored += 1; + if (deviceId != 0) { + devices.add(deviceId); + } } } -- cgit v1.2.3 From 7b17e8d1fe1dc85b5a324776cbe87d1525230104 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 27 Sep 2016 16:14:30 +1300 Subject: Implement eeLink protocol commands --- src/org/traccar/protocol/EelinkProtocol.java | 9 ++- .../traccar/protocol/EelinkProtocolDecoder.java | 2 +- .../traccar/protocol/EelinkProtocolEncoder.java | 68 ++++++++++++++++++++++ .../protocol/EelinkProtocolEncoderTest.java | 22 +++++++ 4 files changed, 99 insertions(+), 2 deletions(-) create mode 100644 src/org/traccar/protocol/EelinkProtocolEncoder.java create mode 100644 test/org/traccar/protocol/EelinkProtocolEncoderTest.java (limited to 'src/org') diff --git a/src/org/traccar/protocol/EelinkProtocol.java b/src/org/traccar/protocol/EelinkProtocol.java index 4da051159..e91fc5efd 100644 --- a/src/org/traccar/protocol/EelinkProtocol.java +++ b/src/org/traccar/protocol/EelinkProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,6 +20,7 @@ import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder; import org.traccar.BaseProtocol; import org.traccar.TrackerServer; +import org.traccar.model.Command; import java.util.List; @@ -27,6 +28,11 @@ public class EelinkProtocol extends BaseProtocol { public EelinkProtocol() { super("eelink"); + setSupportedCommands( + Command.TYPE_CUSTOM, + Command.TYPE_ENGINE_STOP, + Command.TYPE_ENGINE_RESUME, + Command.TYPE_REBOOT_DEVICE); } @Override @@ -35,6 +41,7 @@ public class EelinkProtocol extends BaseProtocol { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1024, 3, 2)); + pipeline.addLast("objectEncoder", new EelinkProtocolEncoder()); pipeline.addLast("objectDecoder", new EelinkProtocolDecoder(EelinkProtocol.this)); } }); diff --git a/src/org/traccar/protocol/EelinkProtocolDecoder.java b/src/org/traccar/protocol/EelinkProtocolDecoder.java index 87d706aff..10a8304c9 100644 --- a/src/org/traccar/protocol/EelinkProtocolDecoder.java +++ b/src/org/traccar/protocol/EelinkProtocolDecoder.java @@ -40,7 +40,7 @@ public class EelinkProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_STATE = 0x05; public static final int MSG_SMS = 0x06; public static final int MSG_OBD = 0x07; - public static final int MSG_INTERACTIVE = 0x80; + public static final int MSG_DOWNLINK = 0x80; public static final int MSG_DATA = 0x81; public static final int MSG_NORMAL = 0x12; diff --git a/src/org/traccar/protocol/EelinkProtocolEncoder.java b/src/org/traccar/protocol/EelinkProtocolEncoder.java new file mode 100644 index 000000000..a7e96aa97 --- /dev/null +++ b/src/org/traccar/protocol/EelinkProtocolEncoder.java @@ -0,0 +1,68 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.protocol; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.traccar.BaseProtocolEncoder; +import org.traccar.Context; +import org.traccar.helper.Checksum; +import org.traccar.helper.Log; +import org.traccar.model.Command; +import org.traccar.model.Device; + +import java.nio.charset.StandardCharsets; + +public class EelinkProtocolEncoder extends BaseProtocolEncoder { + + private ChannelBuffer encodeContent(String content) { + + ChannelBuffer buf = ChannelBuffers.dynamicBuffer(); + + buf.writeByte(0x67); + buf.writeByte(0x67); + buf.writeByte(EelinkProtocolDecoder.MSG_DOWNLINK); + buf.writeShort(2 + 1 + 4 + content.length()); // length + buf.writeShort(0); // index + + buf.writeByte(0x01); // command + buf.writeInt(0); // server id + buf.writeBytes(content.getBytes(StandardCharsets.UTF_8)); + + return buf; + } + + @Override + protected Object encodeCommand(Command command) { + + switch (command.getType()) { + case Command.TYPE_CUSTOM: + return encodeContent((String) command.getAttributes().get(Command.KEY_DATA)); + case Command.TYPE_ENGINE_STOP: + return encodeContent("RELAY,1#"); + case Command.TYPE_ENGINE_RESUME: + return encodeContent("RELAY,0#"); + case Command.TYPE_REBOOT_DEVICE: + return encodeContent("RESET#"); + default: + Log.warning(new UnsupportedOperationException(command.getType())); + break; + } + + return null; + } + +} diff --git a/test/org/traccar/protocol/EelinkProtocolEncoderTest.java b/test/org/traccar/protocol/EelinkProtocolEncoderTest.java new file mode 100644 index 000000000..8a8cd5f6b --- /dev/null +++ b/test/org/traccar/protocol/EelinkProtocolEncoderTest.java @@ -0,0 +1,22 @@ +package org.traccar.protocol; + +import org.junit.Test; +import org.traccar.ProtocolTest; +import org.traccar.model.Command; + +public class EelinkProtocolEncoderTest extends ProtocolTest { + + @Test + public void testEncode() throws Exception { + + EelinkProtocolEncoder encoder = new EelinkProtocolEncoder(); + + Command command = new Command(); + command.setDeviceId(1); + command.setType(Command.TYPE_ENGINE_STOP); + + verifyCommand(encoder, command, binary("676780000f0000010000000052454c41592c3123")); + + } + +} -- cgit v1.2.3 From b24067b9faa17020d5018c1780d6bff236e5a91a Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 27 Sep 2016 16:15:28 +1300 Subject: Remove unused class imports --- src/org/traccar/protocol/EelinkProtocolEncoder.java | 3 --- 1 file changed, 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/EelinkProtocolEncoder.java b/src/org/traccar/protocol/EelinkProtocolEncoder.java index a7e96aa97..1b9d6303f 100644 --- a/src/org/traccar/protocol/EelinkProtocolEncoder.java +++ b/src/org/traccar/protocol/EelinkProtocolEncoder.java @@ -18,11 +18,8 @@ package org.traccar.protocol; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.traccar.BaseProtocolEncoder; -import org.traccar.Context; -import org.traccar.helper.Checksum; import org.traccar.helper.Log; import org.traccar.model.Command; -import org.traccar.model.Device; import java.nio.charset.StandardCharsets; -- cgit v1.2.3 From f6fc3fb5431e0904bde0d3afe35d622b7bdbe935 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 27 Sep 2016 23:51:37 +1300 Subject: Modify CalAmp decoder and add test cases --- src/org/traccar/protocol/CalAmpProtocolDecoder.java | 2 +- test/org/traccar/protocol/CalAmpProtocolDecoderTest.java | 6 ++++++ 2 files changed, 7 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/CalAmpProtocolDecoder.java b/src/org/traccar/protocol/CalAmpProtocolDecoder.java index 47d7bf483..2a4af2f03 100644 --- a/src/org/traccar/protocol/CalAmpProtocolDecoder.java +++ b/src/org/traccar/protocol/CalAmpProtocolDecoder.java @@ -121,7 +121,7 @@ public class CalAmpProtocolDecoder extends BaseProtocolDecoder { int accCount = BitUtil.to(buf.readUnsignedByte(), 6); if (type != MSG_MINI_EVENT_REPORT) { - buf.readUnsignedByte(); // reserved + position.set("append", buf.readUnsignedByte()); } if (accType == 1) { diff --git a/test/org/traccar/protocol/CalAmpProtocolDecoderTest.java b/test/org/traccar/protocol/CalAmpProtocolDecoderTest.java index 9ed4c4a43..8d7d5f9fe 100644 --- a/test/org/traccar/protocol/CalAmpProtocolDecoderTest.java +++ b/test/org/traccar/protocol/CalAmpProtocolDecoderTest.java @@ -10,6 +10,12 @@ public class CalAmpProtocolDecoderTest extends ProtocolTest { CalAmpProtocolDecoder decoder = new CalAmpProtocolDecoder(new CalAmpProtocol()); + verifyPosition(decoder, binary( + "8305133303910501010102004557E5AB2457E3B3E01FD828DBFE9E3465000028C90000004201310704001EFFA12F0B22081BCA05000000000000000F87000E8E2F00EA029E0000082D")); + + verifyPosition(decoder, binary( + "8305313301481601010102045557ea2eba57ea2eba1ebf06db005f2e5e0000220c00000000000006200000ff8f000a00000bca06000000000000000f1b000f35ef00ea02900000087000000060")); + verifyPosition(decoder, binary( "8305454205067001010102008157a9bddc57a96aaa17cdb98fccc1a457000056ac00000000000007250000ff8f000e00082711570000000000ffff101b00003148000010680000000000000000000000050000000000000000000005b0000000000000289600000000000000000000069b00000000000008e400000000000000000000000000000003000000010000070f")); -- cgit v1.2.3 From 64a9af3090914eede02a2cc6d33960b9324c5d49 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 28 Sep 2016 01:34:29 +1300 Subject: Decode Tramigo direction (fix #2377) --- src/org/traccar/protocol/TramigoProtocolDecoder.java | 9 ++++++++- test/org/traccar/protocol/TramigoProtocolDecoderTest.java | 9 +++------ 2 files changed, 11 insertions(+), 7 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/TramigoProtocolDecoder.java b/src/org/traccar/protocol/TramigoProtocolDecoder.java index af81616d8..74c6df9e3 100644 --- a/src/org/traccar/protocol/TramigoProtocolDecoder.java +++ b/src/org/traccar/protocol/TramigoProtocolDecoder.java @@ -43,6 +43,8 @@ public class TramigoProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_COMPACT = 0x0100; public static final int MSG_FULL = 0x00FE; + private static final String[] DIRECTIONS = new String[] { "N", "NE", "E", "SE", "S", "SW", "W", "NW" }; + @Override protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { @@ -119,8 +121,13 @@ public class TramigoProtocolDecoder extends BaseProtocolDecoder { pattern = Pattern.compile("([NSWE]{1,2}) with speed (\\d+) km/h"); matcher = pattern.matcher(sentence); if (matcher.find()) { + for (int i = 0; i < DIRECTIONS.length; i++) { + if (matcher.group(1).equals(DIRECTIONS[i])) { + position.setCourse(i * 45.0); + break; + } + } position.setSpeed(UnitsConverter.knotsFromKph(Double.parseDouble(matcher.group(2)))); - position.setCourse(0); // matcher.group(1) for course } pattern = Pattern.compile("(\\d{1,2}:\\d{2} \\w{3} \\d{1,2})"); diff --git a/test/org/traccar/protocol/TramigoProtocolDecoderTest.java b/test/org/traccar/protocol/TramigoProtocolDecoderTest.java index 9cf7b9006..6da14ba64 100644 --- a/test/org/traccar/protocol/TramigoProtocolDecoderTest.java +++ b/test/org/traccar/protocol/TramigoProtocolDecoderTest.java @@ -12,6 +12,9 @@ public class TramigoProtocolDecoderTest extends ProtocolTest { TramigoProtocolDecoder decoder = new TramigoProtocolDecoder(new TramigoProtocol()); + verifyAttributes(decoder, binary(ByteOrder.LITTLE_ENDIAN, + "80009e08b00086000101bc1803778a59c58dea57546573742054323320547261636b65723a204d6f76696e672c20312e3639206b6d204e57206f66205574656b6f6e2c2045646f2c204e472c20362e34363137302c20352e36313938322c20452077697468207370656564203333206b6d2f682c2031363a3138205365702032372020454f46")); + verifyAttributes(decoder, binary(ByteOrder.LITTLE_ENDIAN, "8000853eb000b8000101fcff032f14665a89e2564176656e7369732053797353657276653a2049676e6974696f6e206f6e2064657465637465642c206d6f76696e672c20302e3135206b6d205357206f66204261626120416e696d61736861756e205374726565742d426f64652054686f6d61732053742e2c20537572756c6572652c204c61676f7320436974792c204e472c20362e34383736352c20332e33343735352c2031303a3031204d6172203131202020454f46")); @@ -39,12 +42,6 @@ public class TramigoProtocolDecoderTest extends ProtocolTest { verifyAttributes(decoder, binary(ByteOrder.LITTLE_ENDIAN, "8000011bb0009e0001015b93032ef6f35994a9545472616d69676f3a204d6f76696e672c20302e3930206b6d205345206f66204372616e6562726f6f6b20466972652053746174696f6e2c2050656e726974682c205379646e65792c2041552c202d33332e37303732322c203135302e37313735392c2053452077697468207370656564203337206b6d2f682c2031393a3438204a616e20342020454f46")); - // Tramigo: Parked, 0.12 km E of McDonald's H.V. dela Costa, Makati, 11:07 Mar 27 - // Tramigo: Moving, 0.90 km SE of Cranebrook Fire Station, Penrith, Sydney, AU, -33.70722, 150.71759, SE with speed 37 km/h, 19:48 Jan 4 EOF - - //verifyPosition(decoder, text( ChannelBuffers.wrappedBuffer(BcdUtil.convertArray( - // new int[] {0x68,0x68,0x25,0x00,0x00,0x01,0x23,0x45,0x67,0x89,0x01,0x23,0x45,0x00,0x01,0x10,0x01,0x01,0x01,0x01,0x01,0x01,0x02,0x6B,0x3F,0x3E,0x02,0x6B,0x3F,0x3E,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,0x0D,0x0A})))); - } } -- cgit v1.2.3 From 2484aa3465994e7281cd98427cdc338f5cbdbce1 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 28 Sep 2016 01:39:41 +1300 Subject: Fix code style issue --- src/org/traccar/protocol/TramigoProtocolDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/TramigoProtocolDecoder.java b/src/org/traccar/protocol/TramigoProtocolDecoder.java index 74c6df9e3..0aab1de34 100644 --- a/src/org/traccar/protocol/TramigoProtocolDecoder.java +++ b/src/org/traccar/protocol/TramigoProtocolDecoder.java @@ -43,7 +43,7 @@ public class TramigoProtocolDecoder extends BaseProtocolDecoder { public static final int MSG_COMPACT = 0x0100; public static final int MSG_FULL = 0x00FE; - private static final String[] DIRECTIONS = new String[] { "N", "NE", "E", "SE", "S", "SW", "W", "NW" }; + private static final String[] DIRECTIONS = new String[] {"N", "NE", "E", "SE", "S", "SW", "W", "NW"}; @Override protected Object decode( -- cgit v1.2.3 From 7d8f4290bbd4400152660923f4e8024d016b27ec Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 30 Sep 2016 02:58:57 +1300 Subject: Implement JT701 device support --- src/org/traccar/protocol/Jt600FrameDecoder.java | 5 ++-- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 34 +++++++++++++++++++--- .../traccar/protocol/Jt600FrameDecoderTest.java | 4 +++ .../traccar/protocol/Jt600ProtocolDecoderTest.java | 6 ++++ 4 files changed, 43 insertions(+), 6 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600FrameDecoder.java b/src/org/traccar/protocol/Jt600FrameDecoder.java index cb7fce0c0..bc6ad1b53 100644 --- a/src/org/traccar/protocol/Jt600FrameDecoder.java +++ b/src/org/traccar/protocol/Jt600FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -35,7 +35,8 @@ public class Jt600FrameDecoder extends FrameDecoder { char type = (char) buf.getByte(buf.readerIndex()); if (type == '$') { - int length = buf.getUnsignedShort(buf.readerIndex() + 7) + 10; + boolean longFormat = buf.getUnsignedByte(buf.readerIndex() + 1) == 0x75; + int length = buf.getUnsignedShort(buf.readerIndex() + (longFormat ? 8 : 7)) + 10; if (length >= buf.readableBytes()) { return buf.readBytes(length); } diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index b30bd7b85..fd2448c0d 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -50,6 +50,8 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { buf.readByte(); // header + boolean longFormat = buf.getUnsignedByte(buf.readerIndex()) == 0x75; + String id = String.valueOf(Long.parseLong(ChannelBuffers.hexDump(buf.readBytes(5)))); DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, id); if (deviceSession == null) { @@ -57,9 +59,12 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { } position.setDeviceId(deviceSession.getDeviceId()); - int version = BcdUtil.readInteger(buf, 1); - buf.readUnsignedByte(); // type - buf.readBytes(2); // length + if (longFormat) { + buf.readUnsignedByte(); // protocol + } + + int version = buf.readUnsignedByte() >> 4; + buf.readUnsignedShort(); // length DateBuilder dateBuilder = new DateBuilder() .setDay(BcdUtil.readInteger(buf, 2)) @@ -87,7 +92,28 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { position.setSpeed(BcdUtil.readInteger(buf, 2)); position.setCourse(buf.readUnsignedByte() * 2.0); - if (version == 1) { + if (longFormat) { + + position.set(Position.KEY_ODOMETER, buf.readUnsignedInt() * 1000); + position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); + + buf.readUnsignedInt(); // vehicle id combined + + position.set(Position.KEY_STATUS, buf.readUnsignedShort()); + + int battery = buf.readUnsignedByte(); + if (battery == 0xff) { + position.set(Position.KEY_CHARGE, true); + } else { + position.set(Position.KEY_BATTERY, battery + "%"); + } + + position.set(Position.KEY_CID, buf.readUnsignedShort()); + position.set(Position.KEY_LAC, buf.readUnsignedShort()); + position.set(Position.KEY_GSM, buf.readUnsignedByte()); + position.set(Position.KEY_INDEX, buf.readUnsignedByte()); + + } else if (version == 1) { position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); position.set(Position.KEY_POWER, buf.readUnsignedByte()); diff --git a/test/org/traccar/protocol/Jt600FrameDecoderTest.java b/test/org/traccar/protocol/Jt600FrameDecoderTest.java index ccfbcf0d0..43f7461d0 100644 --- a/test/org/traccar/protocol/Jt600FrameDecoderTest.java +++ b/test/org/traccar/protocol/Jt600FrameDecoderTest.java @@ -11,6 +11,10 @@ public class Jt600FrameDecoderTest extends ProtocolTest { Jt600FrameDecoder decoder = new Jt600FrameDecoder(); + Assert.assertEquals( + binary("2475605035891613002328091601152806086750106533350c00000000000a000000000000e1ff4f97007f1607"), + decoder.decode(null, null, binary("2475605035891613002328091601152806086750106533350c00000000000a000000000000e1ff4f97007f1607"))); + Assert.assertEquals( binary("28333132303832303032392C5730312C30323535332E333535352C452C323433382E303939372C532C412C3137313031322C3035333333392C302C382C32302C362C33312C352C32302C323029"), decoder.decode(null, null, binary("28333132303832303032392C5730312C30323535332E333535352C452C323433382E303939372C532C412C3137313031322C3035333333392C302C382C32302C362C33312C352C32302C323029"))); diff --git a/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java b/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java index 706987164..64db2a124 100644 --- a/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java @@ -11,6 +11,12 @@ public class Jt600ProtocolDecoderTest extends ProtocolTest { Jt600ProtocolDecoder decoder = new Jt600ProtocolDecoder(new Jt600Protocol()); + verifyPosition(decoder, binary( + "2475201509260111002313101503464722331560113555309F00000000002D0500CB206800F064109326381A03")); + + verifyPosition(decoder, binary( + "2475605035891613002328091601152806086750106533350c00000000000a000000000000e1ff4f97007f1607")); + verifyPosition(decoder, buffer( "(3301210003,U01,040812,185302,T,22.564025,N,113.242329,E,5.21,152,9,32%,00000000000011,10133,5173,22,100,1)")); -- cgit v1.2.3 From f07681fd79bd44a034cb424cb70861d84521968b Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 30 Sep 2016 06:42:42 +1300 Subject: Implement Fifotrack protocol --- debug.xml | 1 + src/org/traccar/protocol/FifotrackProtocol.java | 45 ++++++++ .../traccar/protocol/FifotrackProtocolDecoder.java | 123 +++++++++++++++++++++ .../protocol/FifotrackProtocolDecoderTest.java | 18 +++ 4 files changed, 187 insertions(+) create mode 100644 src/org/traccar/protocol/FifotrackProtocol.java create mode 100644 src/org/traccar/protocol/FifotrackProtocolDecoder.java create mode 100644 test/org/traccar/protocol/FifotrackProtocolDecoderTest.java (limited to 'src/org') diff --git a/debug.xml b/debug.xml index 39a52fe96..94e30c6b8 100644 --- a/debug.xml +++ b/debug.xml @@ -491,5 +491,6 @@ 5121 5122 5123 + 5124 diff --git a/src/org/traccar/protocol/FifotrackProtocol.java b/src/org/traccar/protocol/FifotrackProtocol.java new file mode 100644 index 000000000..6e441beb1 --- /dev/null +++ b/src/org/traccar/protocol/FifotrackProtocol.java @@ -0,0 +1,45 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.protocol; + +import org.jboss.netty.bootstrap.ServerBootstrap; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.handler.codec.frame.LineBasedFrameDecoder; +import org.jboss.netty.handler.codec.string.StringDecoder; +import org.traccar.BaseProtocol; +import org.traccar.TrackerServer; + +import java.util.List; + +public class FifotrackProtocol extends BaseProtocol { + + public FifotrackProtocol() { + super("fifotrack"); + } + + @Override + public void initTrackerServers(List serverList) { + serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { + @Override + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("frameDecoder", new LineBasedFrameDecoder(1024)); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectDecoder", new FifotrackProtocolDecoder(FifotrackProtocol.this)); + } + }); + } + +} diff --git a/src/org/traccar/protocol/FifotrackProtocolDecoder.java b/src/org/traccar/protocol/FifotrackProtocolDecoder.java new file mode 100644 index 000000000..9e8d01117 --- /dev/null +++ b/src/org/traccar/protocol/FifotrackProtocolDecoder.java @@ -0,0 +1,123 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.protocol; + +import org.jboss.netty.channel.Channel; +import org.traccar.BaseProtocolDecoder; +import org.traccar.DeviceSession; +import org.traccar.helper.DateBuilder; +import org.traccar.helper.Parser; +import org.traccar.helper.PatternBuilder; +import org.traccar.helper.UnitsConverter; +import org.traccar.model.Position; + +import java.net.SocketAddress; +import java.util.regex.Pattern; + +public class FifotrackProtocolDecoder extends BaseProtocolDecoder { + + public FifotrackProtocolDecoder(FifotrackProtocol protocol) { + super(protocol); + } + + private static final Pattern PATTERN = new PatternBuilder() + .text("$$") + .number("d+,") // length + .number("(d+),") // imei + .number("d+,") // index + .expression("[^,]+,") // type + .number("(d+)?,") // alarm + .number("(dd)(dd)(dd)") // date + .number("(dd)(dd)(dd),") // time + .number("([AV]),") // validity + .number("(-?d+.d+),") // latitude + .number("(-?d+.d+),") // longitude + .number("(d+),") // speed + .number("(d+),") // course + .number("(-?d+),") // altitude + .number("(d+),") // odometer + .number("d+,") // runtime + .number("(xxxx),") // status + .number("(x+),") // input + .number("(x+),") // output + .number("(d+)|") // mcc + .number("(d+)|") // mnc + .number("(x+)|") // lac + .number("(x+),") // cid + .number("([x|]+),") // adc + .expression("([^,]+),") // rfid + .expression("([^*]+)") // sensors + .any() + .compile(); + + @Override + protected Object decode( + Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + + Parser parser = new Parser(PATTERN, (String) msg); + if (!parser.matches()) { + return null; + } + + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next()); + if (deviceSession == null) { + return null; + } + + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + parser.next(); // alarm + + DateBuilder dateBuilder = new DateBuilder() + .setDate(parser.nextInt(), parser.nextInt(), parser.nextInt()) + .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); + position.setTime(dateBuilder.getDate()); + + position.setValid(parser.next().equals("A")); + position.setLatitude(parser.nextDouble()); + position.setLongitude(parser.nextDouble()); + position.setSpeed(UnitsConverter.knotsFromKph(parser.nextInt())); + position.setCourse(parser.nextInt()); + position.setAltitude(parser.nextInt()); + + position.set(Position.KEY_ODOMETER, parser.nextLong()); + position.set(Position.KEY_STATUS, parser.nextInt(16)); + position.set(Position.KEY_INPUT, parser.nextInt(16)); + position.set(Position.KEY_OUTPUT, parser.nextInt(16)); + + position.set(Position.KEY_MCC, parser.nextInt()); + position.set(Position.KEY_MNC, parser.nextInt()); + position.set(Position.KEY_LAC, parser.nextInt(16)); + position.set(Position.KEY_CID, parser.nextInt(16)); + + String[] adc = parser.next().split("\\|"); + for (int i = 0; i < adc.length; i++) { + position.set(Position.PREFIX_ADC + (i + 1), Integer.parseInt(adc[i], 16)); + } + + position.set(Position.KEY_RFID, parser.next()); + + String[] sensors = parser.next().split("\\|"); + for (int i = 0; i < sensors.length; i++) { + position.set(Position.PREFIX_IO + (i + 1), sensors[i]); + } + + return position; + } + +} diff --git a/test/org/traccar/protocol/FifotrackProtocolDecoderTest.java b/test/org/traccar/protocol/FifotrackProtocolDecoderTest.java new file mode 100644 index 000000000..60f22a91a --- /dev/null +++ b/test/org/traccar/protocol/FifotrackProtocolDecoderTest.java @@ -0,0 +1,18 @@ +package org.traccar.protocol; + +import org.junit.Test; +import org.traccar.ProtocolTest; + +public class FifotrackProtocolDecoderTest extends ProtocolTest { + + @Test + public void testDecode() throws Exception { + + FifotrackProtocolDecoder decoder = new FifotrackProtocolDecoder(new FifotrackProtocol()); + + verifyPosition(decoder, text( + "$$135,866104023192332,29,A01,,160606093046,A,22.546430,114.079730,0,186,181,0,415322,0000,02,2,460|0|27B3|EA7,A2F|3B9|3|0,940C7E,31.76|30.98*46")); + + } + +} -- cgit v1.2.3 From 82909a81eb01cfd76f38fec7cccff5a5c87b5232 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 1 Oct 2016 15:50:09 +1300 Subject: Remove unused data manager methods (fix #2386) --- debug.xml | 10 ---------- setup/traccar.xml | 10 ---------- src/org/traccar/database/DataManager.java | 12 ------------ 3 files changed, 32 deletions(-) (limited to 'src/org') diff --git a/debug.xml b/debug.xml index 94e30c6b8..d01a25248 100644 --- a/debug.xml +++ b/debug.xml @@ -119,11 +119,6 @@ WHERE email = :email; - - SELECT * FROM users - WHERE id = :id; - - SELECT * FROM users; @@ -247,11 +242,6 @@ SELECT * FROM events WHERE deviceId = :deviceId AND type LIKE :type AND serverTime BETWEEN :from AND :to ORDER BY serverTime DESC; - - SELECT * FROM geofences - WHERE id = :id; - - SELECT * FROM geofences; diff --git a/setup/traccar.xml b/setup/traccar.xml index ccdc5b745..c13abb3e2 100644 --- a/setup/traccar.xml +++ b/setup/traccar.xml @@ -62,11 +62,6 @@ WHERE email = :email; - - SELECT * FROM users - WHERE id = :id; - - SELECT * FROM users; @@ -190,11 +185,6 @@ SELECT * FROM events WHERE deviceId = :deviceId AND type LIKE :type AND serverTime BETWEEN :from AND :to ORDER BY serverTime DESC; - - SELECT * FROM geofences - WHERE id = :id; - - SELECT * FROM geofences; diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index c58fe40a5..6718bda83 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -160,12 +160,6 @@ public class DataManager { .executeQuery(User.class); } - public User getUser(long userId) throws SQLException { - return QueryBuilder.create(dataSource, getQuery("database.selectUser")) - .setLong("id", userId) - .executeQuerySingle(User.class); - } - public void addUser(User user) throws SQLException { user.setId(QueryBuilder.create(dataSource, getQuery("database.insertUser"), true) .setObject(user) @@ -359,12 +353,6 @@ public class DataManager { .executeQuery(Geofence.class); } - public Geofence getGeofence(long geofenceId) throws SQLException { - return QueryBuilder.create(dataSource, getQuery("database.selectGeofences")) - .setLong("id", geofenceId) - .executeQuerySingle(Geofence.class); - } - public void addGeofence(Geofence geofence) throws SQLException { geofence.setId(QueryBuilder.create(dataSource, getQuery("database.insertGeofence"), true) .setObject(geofence) -- cgit v1.2.3 From 69d0cc47d63d9052218a8d87cf436e46165e716c Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sat, 1 Oct 2016 09:14:33 +0300 Subject: For JT600c - added checksum verification and replying for alarms/positions messages --- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 75 ++++++++++++++++------ .../traccar/protocol/Jt600ProtocolDecoderTest.java | 14 ++-- 2 files changed, 65 insertions(+), 24 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index fd2448c0d..0c235a4b5 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -201,24 +201,25 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_U01 = new PatternBuilder() .text("(") - .number("(d+),") // id - .number("Udd,") // type - .number("d+,").optional() // alarm - .number("(dd)(dd)(dd),") // date (ddmmyy) - .number("(dd)(dd)(dd),") // time - .expression("([TF]),") // validity - .number("(d+.d+),([NS]),") // latitude - .number("(d+.d+),([EW]),") // longitude - .number("(d+.?d*),") // speed - .number("(d+),") // course - .number("(d+),") // satellites - .number("(d+%),") // battery - .expression("([01]+),") // status - .number("(d+),") // cid - .number("(d+),") // lac - .number("(d+),") // gsm signal - .number("(d+),") // odometer - .number("(d+)") // index + .number("(d+),") // id + .number("(Udd),") // type + .number("d+,").optional() // alarm + .number("(dd)(dd)(dd),") // date (ddmmyy) + .number("(dd)(dd)(dd),") // time + .expression("([TF]),") // validity + .number("(d+.d+),([NS]),") // latitude + .number("(d+.d+),([EW]),") // longitude + .number("(d+.?d*),") // speed + .number("(d+),") // course + .number("(d+),") // satellites + .number("(d+%),") // battery + .expression("([01]+),") // status + .number("(d+),") // cid + .number("(d+),") // lac + .number("(d+),") // gsm signal + .number("(d+),") // odometer + .number("(d+),") // serial number + .expression("([0-9A-F][0-9A-F])").optional() // checksum .any() .compile(); @@ -234,6 +235,8 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } + String messageType = parser.next(); + Position position = new Position(); position.setProtocol(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); @@ -256,11 +259,29 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_CID, parser.nextInt()); position.set(Position.KEY_LAC, parser.nextInt()); position.set(Position.KEY_GSM, parser.nextInt()); - position.set(Position.KEY_ODOMETER, parser.nextLong() * 1000); + position.set(Position.KEY_ODOMETER, parser.nextLong() * 100); position.set(Position.KEY_INDEX, parser.nextInt()); - return position; + switch (messageType) { + case "U01": + case "U02": + case "U03": + String checkSum = parser.next(); + int calculatedCheckSum = checkSum(sentence.substring(1, sentence.length() - checkSum.length() - 1)); + if (Integer.parseInt(checkSum, 16) == calculatedCheckSum) { + sendResponse(channel, "(S39)"); + return position; + } else { + return null; + } + case "U06": + sendResponse(channel, "(S20)"); + return position; + default: + return null; + } } + @Override protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { @@ -282,4 +303,18 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } + private byte checkSum(String sentence) { + byte[] bytes = sentence.getBytes(StandardCharsets.US_ASCII); + byte sum = 0; + for (byte b : bytes) { + sum ^= b; + } + return sum; + } + + private void sendResponse(Channel channel, String response) { + if (channel != null) { + channel.write(ChannelBuffers.copiedBuffer(response, StandardCharsets.US_ASCII)); + } + } } diff --git a/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java b/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java index 64db2a124..6899418d9 100644 --- a/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java @@ -18,13 +18,13 @@ public class Jt600ProtocolDecoderTest extends ProtocolTest { "2475605035891613002328091601152806086750106533350c00000000000a000000000000e1ff4f97007f1607")); verifyPosition(decoder, buffer( - "(3301210003,U01,040812,185302,T,22.564025,N,113.242329,E,5.21,152,9,32%,00000000000011,10133,5173,22,100,1)")); + "(3301210003,U01,040812,185302,T,22.564025,N,113.242329,E,5.21,152,9,32%,00000000000011,10133,5173,22,100,1,18)")); verifyPosition(decoder, buffer( - "(3301210003,U02,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1)")); + "(3301210003,U02,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1,36)")); verifyPosition(decoder, buffer( - "(3301210003,U03,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1)")); + "(3301210003,U03,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1,37)")); verifyNothing(decoder, buffer( "(3301210003,U04)")); @@ -68,11 +68,17 @@ public class Jt600ProtocolDecoderTest extends ProtocolTest { "(3120820029,W01,02553.3555,E,2438.0997,S,A,171012,053339,0,8,20,6,31,5,20,20)")); verifyPosition(decoder, buffer( - "(3330104377,U01,010100,010228,F,00.000000,N,000.000000,E,0,0,0,0%,00001000000000,741,14,22,0,206)")); + "(3330104377,U01,010100,010228,F,00.000000,N,000.000000,E,0,0,0,0%,00001000000000,741,14,22,0,206,1E)")); verifyNothing(decoder, buffer( "(6221107674,2,U09,129,2,A,280513113036,E,02711.0500,S,1721.0876,A,030613171243,E,02756.7618,S,2300.0325,3491,538200,14400,1)")); + verifyPosition(decoder, buffer( + "(3301210003,U02,040812,185302,T,00.000000,N,000.000000,E,0,0,0,0%,00000000000011,741,51,22,0,1,05)")); + + verifyPosition(decoder, buffer( + "(3301210003,U06,4,250916,133207,T,7.011013,N,25.060708,W,27.61,102,10,0%,00101011000000,0,1,0,448,0,126,1,30)")); + verifyPosition(decoder, buffer( "(3551001012,U01,010100,000032,F,0.000000,N,0.000000,E,0.00,0,0,10%,00000000010000,15748,7923,23,0,0,3E)")); -- cgit v1.2.3 From 2c9c5540cb9c8edace64daba4b60957436d12e76 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sat, 1 Oct 2016 09:58:59 +0300 Subject: For JT600c - added engine start/stop, set timezone and reboot commands implementation with tests --- src/org/traccar/protocol/Jt600Protocol.java | 6 +++ src/org/traccar/protocol/Jt600ProtocolEncoder.java | 43 ++++++++++++++++++++++ .../traccar/protocol/Jt600ProtocolEncoderTest.java | 37 +++++++++++++++++++ 3 files changed, 86 insertions(+) create mode 100644 src/org/traccar/protocol/Jt600ProtocolEncoder.java create mode 100644 test/org/traccar/protocol/Jt600ProtocolEncoderTest.java (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600Protocol.java b/src/org/traccar/protocol/Jt600Protocol.java index 2df792b47..78be088c1 100644 --- a/src/org/traccar/protocol/Jt600Protocol.java +++ b/src/org/traccar/protocol/Jt600Protocol.java @@ -19,6 +19,7 @@ import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelPipeline; import org.traccar.BaseProtocol; import org.traccar.TrackerServer; +import org.traccar.model.Command; import java.util.List; @@ -26,6 +27,10 @@ public class Jt600Protocol extends BaseProtocol { public Jt600Protocol() { super("jt600"); + setSupportedCommands(Command.TYPE_ENGINE_RESUME, + Command.TYPE_ENGINE_STOP, + Command.TYPE_SET_TIMEZONE, + Command.TYPE_REBOOT_DEVICE); } @Override @@ -34,6 +39,7 @@ public class Jt600Protocol extends BaseProtocol { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new Jt600FrameDecoder()); + pipeline.addLast("objectEncoder", new Jt600ProtocolEncoder()); pipeline.addLast("objectDecoder", new Jt600ProtocolDecoder(Jt600Protocol.this)); } }); diff --git a/src/org/traccar/protocol/Jt600ProtocolEncoder.java b/src/org/traccar/protocol/Jt600ProtocolEncoder.java new file mode 100644 index 000000000..d25ec637f --- /dev/null +++ b/src/org/traccar/protocol/Jt600ProtocolEncoder.java @@ -0,0 +1,43 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.protocol; + +import org.traccar.StringProtocolEncoder; +import org.traccar.helper.Log; +import org.traccar.model.Command; + +public class Jt600ProtocolEncoder extends StringProtocolEncoder { + @Override + protected Object encodeCommand(Command command) { + + switch (command.getType()) { + case Command.TYPE_ENGINE_STOP: + return "(S07,0)"; + case Command.TYPE_ENGINE_RESUME: + return "(S07,1)"; + case Command.TYPE_SET_TIMEZONE: + int offset = ((Number) command.getAttributes().get(Command.KEY_TIMEZONE)).intValue() / 60; + return "(S09,1," + offset + ")"; + case Command.TYPE_REBOOT_DEVICE: + return "(S17)"; + default: + Log.warning(new UnsupportedOperationException(command.getType())); + break; + } + + return null; + } +} diff --git a/test/org/traccar/protocol/Jt600ProtocolEncoderTest.java b/test/org/traccar/protocol/Jt600ProtocolEncoderTest.java new file mode 100644 index 000000000..80802dc35 --- /dev/null +++ b/test/org/traccar/protocol/Jt600ProtocolEncoderTest.java @@ -0,0 +1,37 @@ +package org.traccar.protocol; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.traccar.ProtocolTest; +import org.traccar.model.Command; + +public class Jt600ProtocolEncoderTest extends ProtocolTest { + Jt600ProtocolEncoder encoder = new Jt600ProtocolEncoder(); + Command command = new Command(); + + @Test + public void testEngineStop() throws Exception { + command.setType(Command.TYPE_ENGINE_STOP); + assertEquals("(S07,0)", encoder.encodeCommand(command)); + } + + @Test + public void testEngineResume() throws Exception { + command.setType(Command.TYPE_ENGINE_RESUME); + assertEquals("(S07,1)", encoder.encodeCommand(command)); + } + + @Test + public void testSetTimezone() throws Exception { + command.setType(Command.TYPE_SET_TIMEZONE); + command.set(Command.KEY_TIMEZONE, 240 * 60); + assertEquals("(S09,1,240)", encoder.encodeCommand(command)); + } + + @Test + public void testReboot() throws Exception { + command.setType(Command.TYPE_REBOOT_DEVICE); + assertEquals("(S17)", encoder.encodeCommand(command)); + } +} -- cgit v1.2.3 From 510e8008788cb6b90634c6ba3120410d4c0964e5 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sat, 1 Oct 2016 10:13:53 +0300 Subject: Added 'StringEncoder' to fix conversion of strings to the netty's buffers --- src/org/traccar/protocol/Jt600Protocol.java | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600Protocol.java b/src/org/traccar/protocol/Jt600Protocol.java index 78be088c1..c98d37956 100644 --- a/src/org/traccar/protocol/Jt600Protocol.java +++ b/src/org/traccar/protocol/Jt600Protocol.java @@ -17,6 +17,7 @@ package org.traccar.protocol; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.handler.codec.string.StringEncoder; import org.traccar.BaseProtocol; import org.traccar.TrackerServer; import org.traccar.model.Command; @@ -39,6 +40,7 @@ public class Jt600Protocol extends BaseProtocol { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new Jt600FrameDecoder()); + pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("objectEncoder", new Jt600ProtocolEncoder()); pipeline.addLast("objectDecoder", new Jt600ProtocolDecoder(Jt600Protocol.this)); } -- cgit v1.2.3 From 1acd62bd100ec6a759f49e449b4f31476a4288c1 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sat, 1 Oct 2016 16:45:09 +0300 Subject: Updated formatting --- src/org/traccar/protocol/Jt600Protocol.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600Protocol.java b/src/org/traccar/protocol/Jt600Protocol.java index c98d37956..8a73cbbe9 100644 --- a/src/org/traccar/protocol/Jt600Protocol.java +++ b/src/org/traccar/protocol/Jt600Protocol.java @@ -28,10 +28,11 @@ public class Jt600Protocol extends BaseProtocol { public Jt600Protocol() { super("jt600"); - setSupportedCommands(Command.TYPE_ENGINE_RESUME, - Command.TYPE_ENGINE_STOP, - Command.TYPE_SET_TIMEZONE, - Command.TYPE_REBOOT_DEVICE); + setSupportedCommands( + Command.TYPE_ENGINE_RESUME, + Command.TYPE_ENGINE_STOP, + Command.TYPE_SET_TIMEZONE, + Command.TYPE_REBOOT_DEVICE); } @Override -- cgit v1.2.3 From 42f870437ca784c63d8018de9848c2ed445fb453 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sat, 1 Oct 2016 17:03:52 +0300 Subject: Updated formatting, removed indentation, changed regular expression parameters --- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 44 +++++++++++----------- 1 file changed, 22 insertions(+), 22 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index 0c235a4b5..117f2cc33 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -201,25 +201,25 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_U01 = new PatternBuilder() .text("(") - .number("(d+),") // id - .number("(Udd),") // type - .number("d+,").optional() // alarm - .number("(dd)(dd)(dd),") // date (ddmmyy) - .number("(dd)(dd)(dd),") // time - .expression("([TF]),") // validity - .number("(d+.d+),([NS]),") // latitude - .number("(d+.d+),([EW]),") // longitude - .number("(d+.?d*),") // speed - .number("(d+),") // course - .number("(d+),") // satellites - .number("(d+%),") // battery - .expression("([01]+),") // status - .number("(d+),") // cid - .number("(d+),") // lac - .number("(d+),") // gsm signal - .number("(d+),") // odometer - .number("(d+),") // serial number - .expression("([0-9A-F][0-9A-F])").optional() // checksum + .number("(d+),") // id + .number("(Udd),") // type + .number("d+,").optional() // alarm + .number("(dd)(dd)(dd),") // date (ddmmyy) + .number("(dd)(dd)(dd),") // time + .expression("([TF]),") // validity + .number("(d+.d+),([NS]),") // latitude + .number("(d+.d+),([EW]),") // longitude + .number("(d+.?d*),") // speed + .number("(d+),") // course + .number("(d+),") // satellites + .number("(d+%),") // battery + .expression("([01]+),") // status + .number("(d+),") // cid + .number("(d+),") // lac + .number("(d+),") // gsm signal + .number("(d+),") // odometer + .number("(d+),") // serial number + .number("(xx)").optional() // checksum .any() .compile(); @@ -266,9 +266,9 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { case "U01": case "U02": case "U03": - String checkSum = parser.next(); - int calculatedCheckSum = checkSum(sentence.substring(1, sentence.length() - checkSum.length() - 1)); - if (Integer.parseInt(checkSum, 16) == calculatedCheckSum) { + int checkSum = parser.nextInt(16); + int calculatedCheckSum = checkSum(sentence.substring(1, sentence.length() - 3)); + if (checkSum == calculatedCheckSum) { sendResponse(channel, "(S39)"); return position; } else { -- cgit v1.2.3 From b5a09475b90b044cf0b5b0f64d8709dd7e92c460 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sun, 2 Oct 2016 08:15:28 +0300 Subject: Updated formatting --- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 38 +++++++++++----------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index 117f2cc33..827d6fbb5 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -201,25 +201,25 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_U01 = new PatternBuilder() .text("(") - .number("(d+),") // id - .number("(Udd),") // type - .number("d+,").optional() // alarm - .number("(dd)(dd)(dd),") // date (ddmmyy) - .number("(dd)(dd)(dd),") // time - .expression("([TF]),") // validity - .number("(d+.d+),([NS]),") // latitude - .number("(d+.d+),([EW]),") // longitude - .number("(d+.?d*),") // speed - .number("(d+),") // course - .number("(d+),") // satellites - .number("(d+%),") // battery - .expression("([01]+),") // status - .number("(d+),") // cid - .number("(d+),") // lac - .number("(d+),") // gsm signal - .number("(d+),") // odometer - .number("(d+),") // serial number - .number("(xx)").optional() // checksum + .number("(d+),") // id + .number("(Udd),") // type + .number("d+,").optional() // alarm + .number("(dd)(dd)(dd),") // date (ddmmyy) + .number("(dd)(dd)(dd),") // time + .expression("([TF]),") // validity + .number("(d+.d+),([NS]),") // latitude + .number("(d+.d+),([EW]),") // longitude + .number("(d+.?d*),") // speed + .number("(d+),") // course + .number("(d+),") // satellites + .number("(d+%),") // battery + .expression("([01]+),") // status + .number("(d+),") // cid + .number("(d+),") // lac + .number("(d+),") // gsm signal + .number("(d+),") // odometer + .number("(d+),") // serial number + .number("(xx)").optional() // checksum .any() .compile(); -- cgit v1.2.3 From 9cc1cbd2b21afcd40091069d2f0a58565db18c15 Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sun, 2 Oct 2016 08:17:43 +0300 Subject: Moved 'xor' checksum method to the utility class. --- src/org/traccar/helper/Checksum.java | 9 +++++++++ src/org/traccar/protocol/Jt600ProtocolDecoder.java | 12 ++---------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/helper/Checksum.java b/src/org/traccar/helper/Checksum.java index 2a4b1191d..dde174545 100644 --- a/src/org/traccar/helper/Checksum.java +++ b/src/org/traccar/helper/Checksum.java @@ -194,6 +194,15 @@ public final class Checksum { return checksum; } + public static int xor(String string) { + byte[] bytes = string.getBytes(StandardCharsets.US_ASCII); + byte sum = 0; + for (byte b : bytes) { + sum ^= b; + } + return sum; + } + public static String nmea(String msg) { int checksum = 0; for (byte b : msg.getBytes(StandardCharsets.US_ASCII)) { diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index 827d6fbb5..de4510d17 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -21,6 +21,7 @@ import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; import org.traccar.helper.BcdUtil; +import org.traccar.helper.Checksum; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; @@ -267,7 +268,7 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { case "U02": case "U03": int checkSum = parser.nextInt(16); - int calculatedCheckSum = checkSum(sentence.substring(1, sentence.length() - 3)); + int calculatedCheckSum = Checksum.xor(sentence.substring(1, sentence.length() - 3)); if (checkSum == calculatedCheckSum) { sendResponse(channel, "(S39)"); return position; @@ -303,15 +304,6 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } - private byte checkSum(String sentence) { - byte[] bytes = sentence.getBytes(StandardCharsets.US_ASCII); - byte sum = 0; - for (byte b : bytes) { - sum ^= b; - } - return sum; - } - private void sendResponse(Channel channel, String response) { if (channel != null) { channel.write(ChannelBuffers.copiedBuffer(response, StandardCharsets.US_ASCII)); -- cgit v1.2.3 From 2d145a029bf45d309366b5b6367befd00efb5efc Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sun, 2 Oct 2016 08:20:42 +0300 Subject: Reverted back odometer to count as thousands of meters. --- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index de4510d17..287235fb1 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -260,7 +260,7 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_CID, parser.nextInt()); position.set(Position.KEY_LAC, parser.nextInt()); position.set(Position.KEY_GSM, parser.nextInt()); - position.set(Position.KEY_ODOMETER, parser.nextLong() * 100); + position.set(Position.KEY_ODOMETER, parser.nextLong() * 1000); position.set(Position.KEY_INDEX, parser.nextInt()); switch (messageType) { -- cgit v1.2.3 From bb211eea5f62014c0700138e922cb1adcdc9d9dd Mon Sep 17 00:00:00 2001 From: Vitaly Litvak Date: Sun, 2 Oct 2016 08:28:27 +0300 Subject: Support old protocol versions without checksum --- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 20 +++++++++++++------- .../traccar/protocol/Jt600ProtocolDecoderTest.java | 8 ++++---- 2 files changed, 17 insertions(+), 11 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index 287235fb1..6d066299a 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -219,7 +219,7 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { .number("(d+),") // lac .number("(d+),") // gsm signal .number("(d+),") // odometer - .number("(d+),") // serial number + .number("(d+),?") // serial number .number("(xx)").optional() // checksum .any() .compile(); @@ -267,13 +267,19 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { case "U01": case "U02": case "U03": - int checkSum = parser.nextInt(16); - int calculatedCheckSum = Checksum.xor(sentence.substring(1, sentence.length() - 3)); - if (checkSum == calculatedCheckSum) { - sendResponse(channel, "(S39)"); - return position; + // support protocol with check sum + if (parser.hasNext(2)) { + int checkSum = parser.nextInt(16); + int calculatedCheckSum = Checksum.xor(sentence.substring(1, sentence.length() - 3)); + if (checkSum == calculatedCheckSum) { + sendResponse(channel, "(S39)"); + return position; + } else { + return null; + } + // support protocol without check sum } else { - return null; + return position; } case "U06": sendResponse(channel, "(S20)"); diff --git a/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java b/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java index 6899418d9..3fc74081f 100644 --- a/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Jt600ProtocolDecoderTest.java @@ -18,13 +18,13 @@ public class Jt600ProtocolDecoderTest extends ProtocolTest { "2475605035891613002328091601152806086750106533350c00000000000a000000000000e1ff4f97007f1607")); verifyPosition(decoder, buffer( - "(3301210003,U01,040812,185302,T,22.564025,N,113.242329,E,5.21,152,9,32%,00000000000011,10133,5173,22,100,1,18)")); + "(3301210003,U01,040812,185302,T,22.564025,N,113.242329,E,5.21,152,9,32%,00000000000011,10133,5173,22,100,1)")); verifyPosition(decoder, buffer( - "(3301210003,U02,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1,36)")); + "(3301210003,U02,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1)")); verifyPosition(decoder, buffer( - "(3301210003,U03,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1,37)")); + "(3301210003,U03,040812,185302,T,22.564025,N,113.242329,E,5,152,9,32%,00000000000011,10133,5173,22,100,1)")); verifyNothing(decoder, buffer( "(3301210003,U04)")); @@ -68,7 +68,7 @@ public class Jt600ProtocolDecoderTest extends ProtocolTest { "(3120820029,W01,02553.3555,E,2438.0997,S,A,171012,053339,0,8,20,6,31,5,20,20)")); verifyPosition(decoder, buffer( - "(3330104377,U01,010100,010228,F,00.000000,N,000.000000,E,0,0,0,0%,00001000000000,741,14,22,0,206,1E)")); + "(3330104377,U01,010100,010228,F,00.000000,N,000.000000,E,0,0,0,0%,00001000000000,741,14,22,0,206)")); verifyNothing(decoder, buffer( "(6221107674,2,U09,129,2,A,280513113036,E,02711.0500,S,1721.0876,A,030613171243,E,02756.7618,S,2300.0325,3491,538200,14400,1)")); -- cgit v1.2.3 From c74cded271c4e16c6fe122692de6b253b244d211 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 2 Oct 2016 20:48:20 +1300 Subject: Fix some issues in JT600 decoder --- src/org/traccar/helper/Checksum.java | 9 ++--- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 43 ++++++---------------- 2 files changed, 15 insertions(+), 37 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/helper/Checksum.java b/src/org/traccar/helper/Checksum.java index dde174545..815962be0 100644 --- a/src/org/traccar/helper/Checksum.java +++ b/src/org/traccar/helper/Checksum.java @@ -195,12 +195,11 @@ public final class Checksum { } public static int xor(String string) { - byte[] bytes = string.getBytes(StandardCharsets.US_ASCII); - byte sum = 0; - for (byte b : bytes) { - sum ^= b; + byte checksum = 0; + for (byte b : string.getBytes(StandardCharsets.US_ASCII)) { + checksum ^= b; } - return sum; + return checksum; } public static String nmea(String msg) { diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index 6d066299a..e42ae5e09 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -21,7 +21,6 @@ import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; import org.traccar.helper.BcdUtil; -import org.traccar.helper.Checksum; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; @@ -219,8 +218,8 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { .number("(d+),") // lac .number("(d+),") // gsm signal .number("(d+),") // odometer - .number("(d+),?") // serial number - .number("(xx)").optional() // checksum + .number("(d+)") // serial number + .number(",(xx)").optional() // checksum .any() .compile(); @@ -236,7 +235,7 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } - String messageType = parser.next(); + String type = parser.next(); Position position = new Position(); position.setProtocol(getProtocolName()); @@ -263,30 +262,15 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_ODOMETER, parser.nextLong() * 1000); position.set(Position.KEY_INDEX, parser.nextInt()); - switch (messageType) { - case "U01": - case "U02": - case "U03": - // support protocol with check sum - if (parser.hasNext(2)) { - int checkSum = parser.nextInt(16); - int calculatedCheckSum = Checksum.xor(sentence.substring(1, sentence.length() - 3)); - if (checkSum == calculatedCheckSum) { - sendResponse(channel, "(S39)"); - return position; - } else { - return null; - } - // support protocol without check sum - } else { - return position; - } - case "U06": - sendResponse(channel, "(S20)"); - return position; - default: - return null; + if (channel != null) { + if (type.equals("U01") || type.equals("U02") || type.equals("U03")) { + channel.write("(S39)"); + } else if (type.equals("U06")) { + channel.write("(S20)"); + } } + + return position; } @Override @@ -310,9 +294,4 @@ public class Jt600ProtocolDecoder extends BaseProtocolDecoder { return null; } - private void sendResponse(Channel channel, String response) { - if (channel != null) { - channel.write(ChannelBuffers.copiedBuffer(response, StandardCharsets.US_ASCII)); - } - } } -- cgit v1.2.3 From 5fa04496f7f752e6c7fe339b712875ae6b860d3d Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 3 Oct 2016 04:57:44 +1300 Subject: Add cell info class --- src/org/traccar/location/CellInfo.java | 136 ++++++++++++++++++++++++++++ test/org/traccar/location/CellInfoTest.java | 36 ++++++++ 2 files changed, 172 insertions(+) create mode 100644 src/org/traccar/location/CellInfo.java create mode 100644 test/org/traccar/location/CellInfoTest.java (limited to 'src/org') diff --git a/src/org/traccar/location/CellInfo.java b/src/org/traccar/location/CellInfo.java new file mode 100644 index 000000000..fe61f3bec --- /dev/null +++ b/src/org/traccar/location/CellInfo.java @@ -0,0 +1,136 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.location; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import org.traccar.Config; +import org.traccar.Context; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.Collection; +import java.util.List; + +public class CellInfo { + + @JsonInclude(JsonInclude.Include.NON_DEFAULT) + public static class Cell { + + private int mcc; + private int mnc; + private int lac; + private int cid; + private int signal; + + public Cell() { + } + + public Cell(int mcc, int mnc, int lac, int cid, int signal) { + this.mcc = mcc; + this.mnc = mnc; + this.lac = lac; + this.cid = cid; + this.signal = signal; + } + + public int getMcc() { + return mcc; + } + + public void setMcc(int mcc) { + this.mcc = mcc; + } + + public int getMnc() { + return mnc; + } + + public void setMnc(int mnc) { + this.mnc = mnc; + } + + public int getLac() { + return lac; + } + + public void setLac(int lac) { + this.lac = lac; + } + + public int getCid() { + return cid; + } + + public void setCid(int cid) { + this.cid = cid; + } + + public int getSignal() { + return signal; + } + + public void setSignal(int signal) { + this.signal = signal; + } + } + + public CellInfo() { + } + + public CellInfo(Collection cells) { + this.cells.addAll(cells); + } + + private List cells = new ArrayList<>(); + + public List getCells() { + return cells; + } + + public void addCell(int lac, int cid) { + Config config = Context.getConfig(); + if (config.hasKey("location.mcc") && config.hasKey("location.mnc")) { + int mcc = config.getInteger("location.mcc"); + int mnc = config.getInteger("location.mnc"); + cells.add(new Cell(mcc, mnc, lac, cid, 0)); + } + } + + public void addCell(int mcc, int mnc, int lac, int cid) { + cells.add(new Cell(mcc, mnc, lac, cid, 0)); + } + + @Override + public String toString() { + try { + return new ObjectMapper().writeValueAsString(cells); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + } + + public static CellInfo fromString(String json) { + try { + return new CellInfo(Arrays.asList(new ObjectMapper().readValue(json, Cell[].class))); + } catch (IOException e) { + throw new RuntimeException(e); + } + } + +} diff --git a/test/org/traccar/location/CellInfoTest.java b/test/org/traccar/location/CellInfoTest.java new file mode 100644 index 000000000..e78ce51fb --- /dev/null +++ b/test/org/traccar/location/CellInfoTest.java @@ -0,0 +1,36 @@ +package org.traccar.location; + +import org.junit.Assert; +import org.junit.Test; + +public class CellInfoTest { + + @Test + public void testToString() { + + CellInfo info = new CellInfo(); + info.addCell(0, 0, 1000, 2000); + info.addCell(400, 1, 3000, 4000); + + Assert.assertEquals("[{\"lac\":1000,\"cid\":2000},{\"mcc\":400,\"mnc\":1,\"lac\":3000,\"cid\":4000}]", info.toString()); + + } + + @Test + public void testFromString() { + + CellInfo info = CellInfo.fromString("[{\"lac\":1000,\"cid\":2000}]"); + + Assert.assertEquals(1, info.getCells().size()); + + CellInfo.Cell cell = info.getCells().get(0); + + Assert.assertEquals(0, cell.getMcc()); + Assert.assertEquals(0, cell.getMnc()); + Assert.assertEquals(1000, cell.getLac()); + Assert.assertEquals(2000, cell.getCid()); + Assert.assertEquals(0, cell.getSignal()); + + } + +} -- cgit v1.2.3 From 118c650bd2fd55e8e61349f9173ce12900dcf4ee Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 3 Oct 2016 08:09:22 +1300 Subject: Start Smokey protocol implementation --- debug.xml | 1 + src/org/traccar/helper/DateBuilder.java | 5 ++ src/org/traccar/model/Position.java | 1 + src/org/traccar/protocol/SmokeyProtocol.java | 41 +++++++++++ .../traccar/protocol/SmokeyProtocolDecoder.java | 83 ++++++++++++++++++++++ .../protocol/SmokeyProtocolDecoderTest.java | 27 +++++++ 6 files changed, 158 insertions(+) create mode 100644 src/org/traccar/protocol/SmokeyProtocol.java create mode 100644 src/org/traccar/protocol/SmokeyProtocolDecoder.java create mode 100644 test/org/traccar/protocol/SmokeyProtocolDecoderTest.java (limited to 'src/org') diff --git a/debug.xml b/debug.xml index d01a25248..a529af327 100644 --- a/debug.xml +++ b/debug.xml @@ -482,5 +482,6 @@ 5122 5123 5124 + 5125 diff --git a/src/org/traccar/helper/DateBuilder.java b/src/org/traccar/helper/DateBuilder.java index c52210326..bf4432efc 100644 --- a/src/org/traccar/helper/DateBuilder.java +++ b/src/org/traccar/helper/DateBuilder.java @@ -92,6 +92,11 @@ public class DateBuilder { return this; } + public DateBuilder addSeconds(long seconds) { + calendar.setTimeInMillis(calendar.getTimeInMillis() + seconds * 1000); + return this; + } + public DateBuilder setMillis(int millis) { calendar.set(Calendar.MILLISECOND, millis); return this; diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index c1058aef9..a1423993b 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -35,6 +35,7 @@ public class Position extends Message { public static final String KEY_OUTPUT = "output"; public static final String KEY_POWER = "power"; public static final String KEY_BATTERY = "battery"; + public static final String KEY_CELL_TOWERS = "cellTowers"; public static final String KEY_MCC = "mcc"; public static final String KEY_MNC = "mnc"; public static final String KEY_LAC = "lac"; diff --git a/src/org/traccar/protocol/SmokeyProtocol.java b/src/org/traccar/protocol/SmokeyProtocol.java new file mode 100644 index 000000000..bb7b91fad --- /dev/null +++ b/src/org/traccar/protocol/SmokeyProtocol.java @@ -0,0 +1,41 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.protocol; + +import org.jboss.netty.bootstrap.ConnectionlessBootstrap; +import org.jboss.netty.channel.ChannelPipeline; +import org.traccar.BaseProtocol; +import org.traccar.TrackerServer; + +import java.util.List; + +public class SmokeyProtocol extends BaseProtocol { + + public SmokeyProtocol() { + super("smokey"); + } + + @Override + public void initTrackerServers(List serverList) { + serverList.add(new TrackerServer(new ConnectionlessBootstrap(), getName()) { + @Override + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("objectDecoder", new SmokeyProtocolDecoder(SmokeyProtocol.this)); + } + }); + } + +} diff --git a/src/org/traccar/protocol/SmokeyProtocolDecoder.java b/src/org/traccar/protocol/SmokeyProtocolDecoder.java new file mode 100644 index 000000000..c4b2b4c67 --- /dev/null +++ b/src/org/traccar/protocol/SmokeyProtocolDecoder.java @@ -0,0 +1,83 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * + * 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.protocol; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.traccar.BaseProtocolDecoder; +import org.traccar.DeviceSession; +import org.traccar.helper.DateBuilder; +import org.traccar.model.Position; + +import java.net.SocketAddress; + +public class SmokeyProtocolDecoder extends BaseProtocolDecoder { + + public SmokeyProtocolDecoder(SmokeyProtocol protocol) { + super(protocol); + } + + @Override + protected Object decode( + Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + + ChannelBuffer buf = (ChannelBuffer) msg; + + buf.skipBytes(2); // header + buf.readUnsignedByte(); // protocol version + + String id = ChannelBuffers.hexDump(buf.readBytes(8)); + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, id); + if (deviceSession == null) { + return null; + } + + int type = buf.readUnsignedByte(); + + if (type == 0) { + + if (channel != null) { + // TODO send ack + } + + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + position.set(Position.KEY_STATUS, buf.readUnsignedByte()); + + DateBuilder dateBuilder = new DateBuilder() + .setDate(2000, 1, 1).addSeconds(buf.readUnsignedInt()); + + getLastLocation(position, dateBuilder.getDate()); + + position.set(Position.KEY_INDEX, buf.readUnsignedByte()); + + buf.readUnsignedShort(); // task / parameter number + + buf.readUnsignedShort(); // length + + // data + + return position; + + } + + return null; + } + +} diff --git a/test/org/traccar/protocol/SmokeyProtocolDecoderTest.java b/test/org/traccar/protocol/SmokeyProtocolDecoderTest.java new file mode 100644 index 000000000..01950fdb5 --- /dev/null +++ b/test/org/traccar/protocol/SmokeyProtocolDecoderTest.java @@ -0,0 +1,27 @@ +package org.traccar.protocol; + +import org.junit.Test; +import org.traccar.ProtocolTest; + +public class SmokeyProtocolDecoderTest extends ProtocolTest { + + @Test + public void testDecode() throws Exception { + + SmokeyProtocolDecoder decoder = new SmokeyProtocolDecoder(new SmokeyProtocol()); + + verifyNothing(decoder, binary( + "534d0300865628025163272f031400000000001c000200000c0168028f000102c9f93a011f538d")); + + verifyNothing(decoder, binary( + "534d0300865628025163272f031400000000001f000200000c0167028f000102c9f93a011f5082")); + + verifyNothing(decoder, binary( + "534d0300865628025163272f031400000000001d000200000c0167028f000102c9f93a011f5282")); + + verifyNothing(decoder, binary( + "534d0300865628025163272f031400000000001e000200000c0167028f000102c9f93a011f5182")); + + } + +} -- cgit v1.2.3 From 4a550477eb3411894f8e12e0b2bded8051b34d07 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 3 Oct 2016 08:12:20 +1300 Subject: Fix code style issue --- src/org/traccar/protocol/SmokeyProtocolDecoder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/SmokeyProtocolDecoder.java b/src/org/traccar/protocol/SmokeyProtocolDecoder.java index c4b2b4c67..b57e05871 100644 --- a/src/org/traccar/protocol/SmokeyProtocolDecoder.java +++ b/src/org/traccar/protocol/SmokeyProtocolDecoder.java @@ -50,9 +50,9 @@ public class SmokeyProtocolDecoder extends BaseProtocolDecoder { if (type == 0) { - if (channel != null) { + /*if (channel != null) { // TODO send ack - } + }*/ Position position = new Position(); position.setProtocol(getProtocolName()); -- cgit v1.2.3 From bae6692356872fcc093ce92ed37cba7d2e2f6d7f Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Mon, 3 Oct 2016 12:16:15 +0500 Subject: Make status events switchable --- debug.xml | 1 + src/org/traccar/database/ConnectionManager.java | 4 +++- 2 files changed, 4 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/debug.xml b/debug.xml index a529af327..a2d6bc3ba 100644 --- a/debug.xml +++ b/debug.xml @@ -50,6 +50,7 @@ true true true + true true - 8082 - - traccar-web/web + ./traccar-web/web true true - 30000 - true + + + false nominatim http://nominatim.openstreetmap.org/reverse @@ -25,8 +28,6 @@ 260 2 - true - - false + - false - power ignition battery - - true - true - true - true - true - true - true - true + + Authorization: Basic QWxhZGRpbjpPcGVuU2VzYW1l--> + + + + + + + org.h2.Driver jdbc:h2:./target/database sa true - - - false - - false - true ./schema/changelog-master.xml - 7 - - - SELECT * FROM server - - - - UPDATE server SET - registration = :registration, - readonly = :readonly, - map = :map, - bingKey = :bingKey, - mapUrl = :mapUrl, - distanceUnit = :distanceUnit, - speedUnit = :speedUnit, - latitude = :latitude, - longitude = :longitude, - zoom = :zoom, - twelveHourFormat = :twelveHourFormat, - attributes = :attributes - WHERE id = :id - - - - SELECT * FROM users - WHERE email = :email - - - - SELECT * FROM users - - - - INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, attributes) - VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :attributes) - - - - UPDATE users SET - name = :name, - email = :email, - admin = :admin, - map = :map, - distanceUnit = :distanceUnit, - speedUnit = :speedUnit, - latitude = :latitude, - longitude = :longitude, - zoom = :zoom, - twelveHourFormat = :twelveHourFormat, - attributes = :attributes - WHERE id = :id - - - - UPDATE users SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id - - - - DELETE FROM users WHERE id = :id - - - - SELECT userId, deviceId FROM user_device - - - - SELECT userId, groupId FROM user_group - - - - SELECT * FROM devices - - - - INSERT INTO devices (name, uniqueId, groupId, attributes, phone, model, contact, category) - VALUES (:name, :uniqueId, :groupId, :attributes, :phone, :model, :contact, :category) - - - - UPDATE devices SET - name = :name, - uniqueId = :uniqueId, - groupId = :groupId, - attributes = :attributes, - phone = :phone, - model = :model, - contact = :contact, - category = :category - WHERE id = :id - - - - UPDATE devices SET lastUpdate = :lastUpdate WHERE id = :id - - - - DELETE FROM devices WHERE id = :id - - - - INSERT INTO user_device (userId, deviceId) VALUES (:userId, :deviceId) - - - - DELETE FROM user_device WHERE userId = :userId AND deviceId = :deviceId - - - - SELECT * FROM groups - - - - INSERT INTO groups (name, groupId, attributes) VALUES (:name, :groupId, :attributes) - - - - UPDATE groups SET name = :name, groupId = :groupId, attributes = :attributes WHERE id = :id - - - - DELETE FROM groups WHERE id = :id - - - - INSERT INTO user_group (userId, groupId) VALUES (:userId, :groupId) - - - - DELETE FROM user_group WHERE userId = :userId AND groupId = :groupId - - - - SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime - - - - INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes) - VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes) - - - - SELECT * FROM positions WHERE id IN (SELECT positionId FROM devices) - - - - UPDATE devices SET positionId = :id WHERE id = :deviceId - - - - SELECT * FROM events WHERE id = :id - - - - INSERT INTO events (type, serverTime, deviceId, positionId, geofenceId, attributes) - VALUES (:type, :serverTime, :deviceId, :positionId, :geofenceId, :attributes) - - - - SELECT * FROM events WHERE deviceId = :deviceId AND serverTime BETWEEN :from AND :to ORDER BY serverTime - - - - SELECT * FROM geofences - - - - INSERT INTO geofences (name, description, area, attributes) - VALUES (:name, :description, :area, :attributes) - - - - UPDATE geofences SET - name = :name, - description = :description, - area = :area, - attributes = :attributes - WHERE id = :id - - - - DELETE FROM geofences WHERE id = :id - - - - SELECT userId, geofenceId FROM user_geofence - - - - INSERT INTO user_geofence (userId, geofenceId) VALUES (:userId, :geofenceId) - - - - DELETE FROM user_geofence WHERE userId = :userId AND geofenceId = :geofenceId - - - - SELECT groupId, geofenceId FROM group_geofence - - - - INSERT INTO group_geofence (groupId, geofenceId) VALUES (:groupId, :geofenceId) - - - - DELETE FROM group_geofence WHERE groupId = :groupId AND geofenceId = :geofenceId - - - - SELECT deviceId, geofenceId FROM device_geofence - - - - INSERT INTO device_geofence (deviceId, geofenceId) VALUES (:deviceId, :geofenceId) - - - - DELETE FROM device_geofence WHERE deviceId = :deviceId AND geofenceId = :geofenceId - - - - SELECT * FROM notifications - - - - INSERT INTO notifications (userId, type, attributes) - VALUES (:userId, :type, :attributes) - - - - UPDATE notifications SET - userId = :userId, - type = :type, - attributes = :attributes - WHERE id = :id - - - - DELETE FROM notifications WHERE id = :id - - - - DELETE FROM positions WHERE serverTime < :serverTime AND id NOT IN (SELECT positionId FROM devices) - - - - SELECT * FROM attribute_aliases - - - - INSERT INTO attribute_aliases (deviceId, attribute, alias) - VALUES (:deviceId, :attribute, :alias) - - - - UPDATE attribute_aliases SET - deviceId = :deviceId, - attribute = :attribute, - alias = :alias - WHERE id = :id - - - - DELETE FROM attribute_aliases WHERE id = :id - - - - SELECT * FROM statistics WHERE captureTime BETWEEN :from AND :to ORDER BY captureTime - - - - INSERT INTO statistics (captureTime, activeUsers, activeDevices, requests, messagesReceived, messagesStored, attributes) - VALUES (:captureTime, :activeUsers, :activeDevices, :requests, :messagesReceived, :messagesStored, :attributes) - + - 5001 - 5002 - 5003 - 5004 - 5005 - 5006 - false - 5007 - 5008 - 5009 - 5010 - 5011 - 5012 - 5013 - 5014 - 5015 - 5016 - 5017 - 5018 - 5019 - 5020 - 5021 - 5022 - 5023 - 5024 - 5025 - 5026 - 5027 - 5028 - 5029 - 5030 - 5031 - 5032 - 5033 - 5034 - 5035 - 5036 - - 5038 - 5039 - 5040 - 5041 - 5042 - 5043 - 5044 - 5045 - 5046 - 5047 - 5048 - 5049 - 5050 - 5051 - 5052 - 5053 - 5054 - 5055 - 5056 - 5057 - 5058 - 5059 - 5060 - 5061 - 5062 - 5063 - 5064 - 5065 - 5066 - 5067 - 5068 - 5069 - 5070 - 5071 - 5072 - 5073 - 5074 - 5075 - 5076 - 5077 - 5078 - 5079 - 5080 - 5081 - 5082 - 5083 - 5084 - 5085 - 5086 - 5087 - 5088 - 5089 - 5090 - 5091 - 5092 - 5093 - 5094 - 5095 - 5096 - 5097 - 5098 - 5099 - 5100 - 5101 - 5102 - 5103 - 5104 - 5105 - 5106 - 5107 - 5108 - 5109 - 5110 - 5111 - 5112 - 5113 - 5114 - 5115 - 5116 - 5117 - 5118 - 5119 - 5120 - 5121 - 5122 - 5123 - 5124 - 5125 - 5126 - 5127 + 6037 diff --git a/setup/default.xml b/setup/default.xml new file mode 100644 index 000000000..8b1cfaeba --- /dev/null +++ b/setup/default.xml @@ -0,0 +1,442 @@ + + + + + + + + + true + 8082 + ./web + + true + google + + true + all + ./logs/tracker-server.log + + true + true + true + true + true + true + true + + + + org.h2.Driver + jdbc:h2:./data/database + sa + + + true + + ./schema/changelog-master.xml + + + SELECT * FROM server + + + + UPDATE server SET + registration = :registration, + readonly = :readonly, + map = :map, + bingKey = :bingKey, + mapUrl = :mapUrl, + distanceUnit = :distanceUnit, + speedUnit = :speedUnit, + latitude = :latitude, + longitude = :longitude, + zoom = :zoom, + twelveHourFormat = :twelveHourFormat, + attributes = :attributes + WHERE id = :id + + + + SELECT * FROM users + WHERE email = :email + + + + SELECT * FROM users + + + + INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, attributes) + VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :attributes) + + + + UPDATE users SET + name = :name, + email = :email, + admin = :admin, + map = :map, + distanceUnit = :distanceUnit, + speedUnit = :speedUnit, + latitude = :latitude, + longitude = :longitude, + zoom = :zoom, + twelveHourFormat = :twelveHourFormat, + attributes = :attributes + WHERE id = :id + + + + UPDATE users SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id + + + + DELETE FROM users WHERE id = :id + + + + SELECT userId, deviceId FROM user_device + + + + SELECT userId, groupId FROM user_group + + + + SELECT * FROM devices + + + + INSERT INTO devices (name, uniqueId, groupId, attributes, phone, model, contact, category) + VALUES (:name, :uniqueId, :groupId, :attributes, :phone, :model, :contact, :category) + + + + UPDATE devices SET + name = :name, + uniqueId = :uniqueId, + groupId = :groupId, + attributes = :attributes, + phone = :phone, + model = :model, + contact = :contact, + category = :category + WHERE id = :id + + + + UPDATE devices SET lastUpdate = :lastUpdate WHERE id = :id + + + + DELETE FROM devices WHERE id = :id + + + + INSERT INTO user_device (userId, deviceId) VALUES (:userId, :deviceId) + + + + DELETE FROM user_device WHERE userId = :userId AND deviceId = :deviceId + + + + SELECT * FROM groups + + + + INSERT INTO groups (name, groupId, attributes) VALUES (:name, :groupId, :attributes) + + + + UPDATE groups SET name = :name, groupId = :groupId, attributes = :attributes WHERE id = :id + + + + DELETE FROM groups WHERE id = :id + + + + INSERT INTO user_group (userId, groupId) VALUES (:userId, :groupId) + + + + DELETE FROM user_group WHERE userId = :userId AND groupId = :groupId + + + + SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime + + + + INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes) + VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes) + + + + SELECT * FROM positions WHERE id IN (SELECT positionId FROM devices) + + + + UPDATE devices SET positionId = :id WHERE id = :deviceId + + + + SELECT * FROM events WHERE id = :id + + + + INSERT INTO events (type, serverTime, deviceId, positionId, geofenceId, attributes) + VALUES (:type, :serverTime, :deviceId, :positionId, :geofenceId, :attributes) + + + + SELECT * FROM events WHERE deviceId = :deviceId AND serverTime BETWEEN :from AND :to ORDER BY serverTime + + + + SELECT * FROM geofences + + + + INSERT INTO geofences (name, description, area, attributes) + VALUES (:name, :description, :area, :attributes) + + + + UPDATE geofences SET + name = :name, + description = :description, + area = :area, + attributes = :attributes + WHERE id = :id + + + + DELETE FROM geofences WHERE id = :id + + + + SELECT userId, geofenceId FROM user_geofence + + + + INSERT INTO user_geofence (userId, geofenceId) VALUES (:userId, :geofenceId) + + + + DELETE FROM user_geofence WHERE userId = :userId AND geofenceId = :geofenceId + + + + SELECT groupId, geofenceId FROM group_geofence + + + + INSERT INTO group_geofence (groupId, geofenceId) VALUES (:groupId, :geofenceId) + + + + DELETE FROM group_geofence WHERE groupId = :groupId AND geofenceId = :geofenceId + + + + SELECT deviceId, geofenceId FROM device_geofence + + + + INSERT INTO device_geofence (deviceId, geofenceId) VALUES (:deviceId, :geofenceId) + + + + DELETE FROM device_geofence WHERE deviceId = :deviceId AND geofenceId = :geofenceId + + + + SELECT * FROM notifications + + + + INSERT INTO notifications (userId, type, attributes) + VALUES (:userId, :type, :attributes) + + + + UPDATE notifications SET + userId = :userId, + type = :type, + attributes = :attributes + WHERE id = :id + + + + DELETE FROM notifications WHERE id = :id + + + + DELETE FROM positions WHERE serverTime < :serverTime AND id NOT IN (SELECT positionId FROM devices) + + + + SELECT * FROM attribute_aliases + + + + INSERT INTO attribute_aliases (deviceId, attribute, alias) + VALUES (:deviceId, :attribute, :alias) + + + + UPDATE attribute_aliases SET + deviceId = :deviceId, + attribute = :attribute, + alias = :alias + WHERE id = :id + + + + DELETE FROM attribute_aliases WHERE id = :id + + + + SELECT * FROM statistics WHERE captureTime BETWEEN :from AND :to ORDER BY captureTime + + + + INSERT INTO statistics (captureTime, activeUsers, activeDevices, requests, messagesReceived, messagesStored, attributes) + VALUES (:captureTime, :activeUsers, :activeDevices, :requests, :messagesReceived, :messagesStored, :attributes) + + + + + 5001 + 5002 + 5003 + 5004 + 5005 + 5006 + false + 5007 + 5008 + 5009 + 5010 + 5011 + 5012 + 5013 + 5014 + 5015 + 5016 + 5017 + 5018 + 5019 + 5020 + 5021 + 5022 + 5023 + 5024 + 5025 + 5026 + 5027 + 5028 + 5029 + 5030 + 5031 + 5032 + 5033 + 5034 + 5035 + 5036 + 5037 + 5038 + 5039 + 5040 + 5041 + 5042 + 5043 + 5044 + 5045 + 5046 + 5047 + 5048 + 5049 + 5050 + 5051 + 5052 + 5053 + 5054 + 5055 + 5056 + 5057 + 5058 + 5059 + 5060 + 5061 + 5062 + 5063 + 5064 + 5065 + 5066 + 5067 + 5068 + 5069 + 5070 + 5071 + 5072 + 5073 + 5074 + 5075 + 5076 + 5077 + 5078 + 5079 + 5080 + 5081 + 5082 + 5083 + 5084 + 5085 + 5086 + 5087 + 5088 + 5089 + 5090 + 5091 + 5092 + 5093 + 5094 + 5095 + 5096 + 5097 + 5098 + 5099 + 5100 + 5101 + 5102 + 5103 + 5104 + 5105 + 5106 + 5107 + 5108 + 5109 + 5110 + 5111 + 5112 + 5113 + 5114 + 5115 + 5116 + 5117 + 5118 + 5119 + 5120 + 5121 + 5122 + 5123 + 5124 + 5125 + 5126 + 5127 + + diff --git a/setup/traccar.xml b/setup/traccar.xml index c13abb3e2..e4b3e9167 100644 --- a/setup/traccar.xml +++ b/setup/traccar.xml @@ -4,390 +4,6 @@ - - - true - 8082 - ./web - - true - google - - true - all - ./logs/tracker-server.log - - true - true - true - true - true - true - true - - - - org.h2.Driver - jdbc:h2:./data/database - sa - - - true - - ./schema/changelog-master.xml - - - SELECT * FROM server; - - - - UPDATE server SET - registration = :registration, - readonly = :readonly, - map = :map, - bingKey = :bingKey, - mapUrl = :mapUrl, - distanceUnit = :distanceUnit, - speedUnit = :speedUnit, - latitude = :latitude, - longitude = :longitude, - zoom = :zoom, - twelveHourFormat = :twelveHourFormat, - attributes = :attributes - WHERE id = :id; - - - - SELECT * FROM users - WHERE email = :email; - - - - SELECT * FROM users; - - - - INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, attributes) - VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :attributes); - - - - UPDATE users SET - name = :name, - email = :email, - admin = :admin, - map = :map, - distanceUnit = :distanceUnit, - speedUnit = :speedUnit, - latitude = :latitude, - longitude = :longitude, - zoom = :zoom, - twelveHourFormat = :twelveHourFormat, - attributes = :attributes - WHERE id = :id; - - - - UPDATE users SET hashedPassword = :hashedPassword, salt = :salt WHERE id = :id; - - - - DELETE FROM users WHERE id = :id; - - - - SELECT userId, deviceId FROM user_device; - - - - SELECT userId, groupId FROM user_group; - - - - SELECT * FROM devices; - - - - INSERT INTO devices (name, uniqueId, groupId, attributes) VALUES (:name, :uniqueId, :groupId, :attributes); - - - - UPDATE devices SET name = :name, uniqueId = :uniqueId, groupId = :groupId, attributes = :attributes WHERE id = :id; - - - - UPDATE devices SET lastUpdate = :lastUpdate WHERE id = :id; - - - - DELETE FROM devices WHERE id = :id; - - - - INSERT INTO user_device (userId, deviceId) VALUES (:userId, :deviceId); - - - - DELETE FROM user_device WHERE userId = :userId AND deviceId = :deviceId; - - - - SELECT * FROM groups; - - - - INSERT INTO groups (name, groupId, attributes) VALUES (:name, :groupId, :attributes); - - - - UPDATE groups SET name = :name, groupId = :groupId, attributes = :attributes WHERE id = :id; - - - - DELETE FROM groups WHERE id = :id; - - - - INSERT INTO user_group (userId, groupId) VALUES (:userId, :groupId); - - - - DELETE FROM user_group WHERE userId = :userId AND groupId = :groupId; - - - - SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime; - - - - INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes) - VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes); - - - - SELECT * FROM positions WHERE id IN (SELECT positionId FROM devices); - - - - UPDATE devices SET positionId = :id WHERE id = :deviceId; - - - - SELECT * FROM events WHERE id = :id; - - - - INSERT INTO events (type, serverTime, deviceId, positionId, geofenceId, attributes) - VALUES (:type, :serverTime, :deviceId, :positionId, :geofenceId, :attributes); - - - - SELECT * FROM events WHERE deviceId = :deviceId AND type LIKE :type AND serverTime BETWEEN :from AND :to ORDER BY serverTime DESC; - - - - SELECT * FROM geofences; - - - - INSERT INTO geofences (name, description, area, attributes) - VALUES (:name, :description, :area, :attributes); - - - - UPDATE geofences SET - name = :name, - description = :description, - area = :area, - attributes = :attributes - WHERE id = :id; - - - - DELETE FROM geofences WHERE id = :id; - - - - SELECT userId, geofenceId FROM user_geofence; - - - - INSERT INTO user_geofence (userId, geofenceId) VALUES (:userId, :geofenceId); - - - - DELETE FROM user_geofence WHERE userId = :userId AND geofenceId = :geofenceId; - - - - SELECT groupId, geofenceId FROM group_geofence; - - - - INSERT INTO group_geofence (groupId, geofenceId) VALUES (:groupId, :geofenceId); - - - - DELETE FROM group_geofence WHERE groupId = :groupId AND geofenceId = :geofenceId; - - - - SELECT deviceId, geofenceId FROM device_geofence; - - - - INSERT INTO device_geofence (deviceId, geofenceId) VALUES (:deviceId, :geofenceId); - - - - DELETE FROM device_geofence WHERE deviceId = :deviceId AND geofenceId = :geofenceId; - - - - SELECT * FROM notifications; - - - - INSERT INTO notifications (userId, type, attributes) - VALUES (:userId, :type, :attributes); - - - - UPDATE notifications SET - userId = :userId, - type = :type, - attributes = :attributes - WHERE id = :id; - - - - DELETE FROM notifications WHERE id = :id; - - - - DELETE FROM positions WHERE serverTime < :serverTime AND id NOT IN (SELECT positionId FROM devices); - - - - - 5001 - 5002 - 5003 - 5004 - 5005 - 5006 - false - 5007 - 5008 - 5009 - 5010 - 5011 - 5012 - 5013 - 5014 - 5015 - 5016 - 5017 - 5018 - 5019 - 5020 - 5021 - 5022 - 5023 - 5024 - 5025 - 5026 - 5027 - 5028 - 5029 - 5030 - 5031 - 5032 - 5033 - 5034 - 5035 - 5036 - 5037 - 5038 - 5039 - 5040 - 5041 - 5042 - 5043 - 5044 - 5045 - 5046 - 5047 - 5048 - 5049 - 5050 - 5051 - 5052 - 5053 - 5054 - 5055 - 5056 - 5057 - 5058 - 5059 - 5060 - 5061 - 5062 - 5063 - 5064 - 5065 - 5066 - 5067 - 5068 - 5069 - 5070 - 5071 - 5072 - 5073 - 5074 - 5075 - 5076 - 5077 - 5078 - 5079 - 5080 - 5081 - 5082 - 5083 - 5084 - 5085 - 5086 - 5087 - 5088 - 5089 - 5090 - 5091 - 5092 - 5093 - 5094 - 5095 - 5096 - 5097 - 5098 - 5099 - 5100 - 5101 - 5102 - 5103 - 5104 - 5105 - 5106 - 5107 - 5108 - 5109 - 5110 - 5111 - 5112 - 5113 - 5114 - 5115 - 5116 - 5117 - 5118 + ./conf/default.xml diff --git a/src/org/traccar/Config.java b/src/org/traccar/Config.java index 7fd725734..e63444f1f 100644 --- a/src/org/traccar/Config.java +++ b/src/org/traccar/Config.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,19 +23,44 @@ import java.util.Properties; public class Config { private final Properties properties = new Properties(); + private Properties defaultProperties; public void load(String file) throws IOException { try (InputStream inputStream = new FileInputStream(file)) { properties.loadFromXML(inputStream); } + + String defaultConfigFile = properties.getProperty("config.default"); + if (defaultConfigFile != null) { + try (InputStream inputStream = new FileInputStream(defaultConfigFile)) { + defaultProperties = new Properties(); + defaultProperties.loadFromXML(inputStream); + } + } } public boolean hasKey(String key) { - return properties.containsKey(key); + return properties.containsKey(key) || (defaultProperties != null && defaultProperties.containsKey(key)); + } + + public String getString(String key) { + if (properties.containsKey(key) || defaultProperties == null) { + return properties.getProperty(key); + } else { + return defaultProperties.getProperty(key); + } + } + + public String getString(String key, String defaultValue) { + if (hasKey(key)) { + return getString(key); + } else { + return defaultValue; + } } public boolean getBoolean(String key) { - return Boolean.parseBoolean(properties.getProperty(key)); + return Boolean.parseBoolean(getString(key)); } public int getInteger(String key) { @@ -43,8 +68,8 @@ public class Config { } public int getInteger(String key, int defaultValue) { - if (properties.containsKey(key)) { - return Integer.parseInt(properties.getProperty(key)); + if (hasKey(key)) { + return Integer.parseInt(getString(key)); } else { return defaultValue; } @@ -55,20 +80,8 @@ public class Config { } public long getLong(String key, long defaultValue) { - if (properties.containsKey(key)) { - return Long.parseLong(properties.getProperty(key)); - } else { - return defaultValue; - } - } - - public String getString(String key) { - return properties.getProperty(key); - } - - public String getString(String key, String defaultValue) { - if (properties.containsKey(key)) { - return properties.getProperty(key); + if (hasKey(key)) { + return Long.parseLong(getString(key)); } else { return defaultValue; } @@ -79,8 +92,8 @@ public class Config { } public double getDouble(String key, double defaultValue) { - if (properties.containsKey(key)) { - return Double.parseDouble(properties.getProperty(key)); + if (hasKey(key)) { + return Double.parseDouble(getString(key)); } else { return defaultValue; } -- cgit v1.2.3 From 1d78b042b98a632c2e7cfc1e72cd69152cc4cbaf Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 27 Oct 2016 17:02:07 +0500 Subject: Export positions to GPX --- src/org/traccar/api/resource/PositionResource.java | 17 ++++- src/org/traccar/helper/UnitsConverter.java | 4 ++ src/org/traccar/web/CsvBuilder.java | 16 +++++ src/org/traccar/web/GpxBuilder.java | 73 ++++++++++++++++++++++ 4 files changed, 109 insertions(+), 1 deletion(-) create mode 100644 src/org/traccar/web/GpxBuilder.java (limited to 'src/org') diff --git a/src/org/traccar/api/resource/PositionResource.java b/src/org/traccar/api/resource/PositionResource.java index 92b62c0a6..488964f23 100644 --- a/src/org/traccar/api/resource/PositionResource.java +++ b/src/org/traccar/api/resource/PositionResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ import org.traccar.Context; import org.traccar.api.BaseResource; import org.traccar.model.Position; import org.traccar.web.CsvBuilder; +import org.traccar.web.GpxBuilder; import org.traccar.web.JsonConverter; import javax.ws.rs.Consumes; @@ -39,6 +40,8 @@ public class PositionResource extends BaseResource { public static final String TEXT_CSV = "text/csv"; public static final String CONTENT_DISPOSITION_VALUE_CSV = "attachment; filename=positions.csv"; + public static final String GPX = "application/gpx+xml"; + public static final String CONTENT_DISPOSITION_VALUE_GPX = "attachment; filename=positions.gpx"; @GET @Produces(MediaType.APPLICATION_JSON) @@ -67,4 +70,16 @@ public class PositionResource extends BaseResource { return Response.ok(csv.build()).header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_CSV).build(); } + @GET + @Produces(GPX) + public Response getGpx( + @QueryParam("deviceId") long deviceId, @QueryParam("from") String from, @QueryParam("to") String to) + throws SQLException { + Context.getPermissionsManager().checkDevice(getUserId(), deviceId); + GpxBuilder gpx = new GpxBuilder(Context.getIdentityManager().getDeviceById(deviceId).getName()); + gpx.addPositions(Context.getDataManager().getPositions( + deviceId, JsonConverter.parseDate(from), JsonConverter.parseDate(to))); + return Response.ok(gpx.build()).header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_GPX).build(); + } + } diff --git a/src/org/traccar/helper/UnitsConverter.java b/src/org/traccar/helper/UnitsConverter.java index 4bc7348db..70916727e 100644 --- a/src/org/traccar/helper/UnitsConverter.java +++ b/src/org/traccar/helper/UnitsConverter.java @@ -45,6 +45,10 @@ public final class UnitsConverter { return value * KNOTS_TO_MPS_RATIO; } + public static double mpsFromKnots(double value) { + return value / KNOTS_TO_MPS_RATIO; + } + public static double knotsFromCps(double value) { // cm/s return value * KNOTS_TO_CPS_RATIO; } diff --git a/src/org/traccar/web/CsvBuilder.java b/src/org/traccar/web/CsvBuilder.java index f59aabc7f..4afc33144 100644 --- a/src/org/traccar/web/CsvBuilder.java +++ b/src/org/traccar/web/CsvBuilder.java @@ -1,3 +1,19 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * + * 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.web; import java.beans.Introspector; diff --git a/src/org/traccar/web/GpxBuilder.java b/src/org/traccar/web/GpxBuilder.java new file mode 100644 index 000000000..f9bebb730 --- /dev/null +++ b/src/org/traccar/web/GpxBuilder.java @@ -0,0 +1,73 @@ +/* + * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * + * 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.web; + +import java.util.Collection; + +import org.joda.time.DateTime; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; +import org.traccar.helper.UnitsConverter; +import org.traccar.model.Position; + +public class GpxBuilder { + + private StringBuilder builder = new StringBuilder(); + private static final String HEADER = "" + + "\n"; + private static final String NAME = "%1$s%n"; + private static final String POINT = "" + + "" + + "%4$f" + + "%5$f" + + "%6$f" + + "%n"; + private static final String FOOTER = ""; + + private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.dateTime(); + + public GpxBuilder() { + builder.append(HEADER); + builder.append("\n"); + } + + public GpxBuilder(String name) { + builder.append(HEADER); + builder.append(String.format(NAME, name)); + } + + public void addPosition(Position position) { + builder.append(String.format(POINT, position.getLatitude(), position.getLongitude(), + DATE_FORMAT.print(new DateTime(position.getFixTime())), position.getAltitude(), + position.getCourse(), UnitsConverter.mpsFromKnots(position.getSpeed()))); + } + + public void addPositions(Collection positions) { + for (Position position : positions) { + addPosition(position); + } + } + + public String build() { + builder.append(FOOTER); + return builder.toString(); + } + +} -- cgit v1.2.3 From 5e5b32f8ed85899a97236906fda13a6937e913c1 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 1 Nov 2016 14:32:36 +1300 Subject: Update resource error handling --- src/org/traccar/api/ResourceErrorHandler.java | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/ResourceErrorHandler.java b/src/org/traccar/api/ResourceErrorHandler.java index be63aad09..2f0c21a63 100644 --- a/src/org/traccar/api/ResourceErrorHandler.java +++ b/src/org/traccar/api/ResourceErrorHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,24 +20,22 @@ import org.traccar.helper.Log; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; import javax.ws.rs.ext.ExceptionMapper; -import java.util.HashMap; -import java.util.Map; public class ResourceErrorHandler implements ExceptionMapper { - private static final String KEY_MESSAGE = "message"; - private static final String KEY_DETAILS = "details"; - @Override public Response toResponse(Exception e) { - Map error = new HashMap<>(); if (e instanceof WebApplicationException) { - WebApplicationException webApplicationException = (WebApplicationException) e; - return Response.status(webApplicationException.getResponse().getStatus()).entity(error).build(); + WebApplicationException exception = (WebApplicationException) e; + String message; + if (exception.getCause() != null) { + message = Log.exceptionStack(exception.getCause()); + } else { + message = Log.exceptionStack(exception); + } + return Response.fromResponse(exception.getResponse()).entity(message).build(); } else { - error.put(KEY_MESSAGE, e.getMessage()); - error.put(KEY_DETAILS, Log.exceptionStack(e)); - return Response.status(Response.Status.BAD_REQUEST).entity(error).build(); + return Response.status(Response.Status.BAD_REQUEST).entity(Log.exceptionStack(e)).build(); } } -- cgit v1.2.3 From 153ea4ae66082ffe5af89b1acd23ea632d1ad65f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 1 Nov 2016 14:46:18 +1300 Subject: Simplify resource loading --- src/org/traccar/web/WebServer.java | 38 +++++--------------------------------- 1 file changed, 5 insertions(+), 33 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/web/WebServer.java b/src/org/traccar/web/WebServer.java index ecdac73c0..3970fb6eb 100644 --- a/src/org/traccar/web/WebServer.java +++ b/src/org/traccar/web/WebServer.java @@ -34,25 +34,7 @@ import org.traccar.api.CorsResponseFilter; import org.traccar.api.ObjectMapperProvider; import org.traccar.api.ResourceErrorHandler; import org.traccar.api.SecurityRequestFilter; -import org.traccar.api.resource.AttributeAliasResource; -import org.traccar.api.resource.CommandResource; -import org.traccar.api.resource.GroupPermissionResource; import org.traccar.api.resource.ServerResource; -import org.traccar.api.resource.SessionResource; -import org.traccar.api.resource.DevicePermissionResource; -import org.traccar.api.resource.StatisticsResource; -import org.traccar.api.resource.UserResource; -import org.traccar.api.resource.GroupResource; -import org.traccar.api.resource.NotificationResource; -import org.traccar.api.resource.DeviceResource; -import org.traccar.api.resource.PositionResource; -import org.traccar.api.resource.ReportResource; -import org.traccar.api.resource.CommandTypeResource; -import org.traccar.api.resource.DeviceGeofenceResource; -import org.traccar.api.resource.EventResource; -import org.traccar.api.resource.GeofencePermissionResource; -import org.traccar.api.resource.GeofenceResource; -import org.traccar.api.resource.GroupGeofenceResource; import org.traccar.helper.Log; import javax.naming.InitialContext; @@ -121,9 +103,7 @@ public class WebServer { resourceHandler.setResourceBase(config.getString("web.path")); if (config.getBoolean("web.debug")) { resourceHandler.setWelcomeFiles(new String[] {"debug.html"}); - //Troubleshooting Locked UI Files on Windows while app is running (like html, js, css, etc...), - //you can make changes to the UI Files and refresh the page in the browser without stopping the app first - resourceHandler.setMinMemoryMappedContentLength(-1); + resourceHandler.setMinMemoryMappedContentLength(-1); // avoid locking files on Windows } else { resourceHandler.setWelcomeFiles(new String[] {"release.html", "index.html"}); } @@ -153,18 +133,10 @@ public class WebServer { servletHandler.addServlet(new ServletHolder(new AsyncSocketServlet()), "/socket"); ResourceConfig resourceConfig = new ResourceConfig(); - resourceConfig.register(ObjectMapperProvider.class); - resourceConfig.register(JacksonFeature.class); - resourceConfig.register(ResourceErrorHandler.class); - resourceConfig.register(SecurityRequestFilter.class); - resourceConfig.register(CorsResponseFilter.class); - resourceConfig.registerClasses(ServerResource.class, SessionResource.class, CommandResource.class, - GroupPermissionResource.class, DevicePermissionResource.class, UserResource.class, - GroupResource.class, DeviceResource.class, PositionResource.class, - CommandTypeResource.class, EventResource.class, GeofenceResource.class, - DeviceGeofenceResource.class, GeofencePermissionResource.class, GroupGeofenceResource.class, - NotificationResource.class, ReportResource.class, AttributeAliasResource.class, - StatisticsResource.class); + resourceConfig.registerClasses(JacksonFeature.class, ObjectMapperProvider.class, ResourceErrorHandler.class); + resourceConfig.registerClasses(SecurityRequestFilter.class, CorsResponseFilter.class); + resourceConfig.packages(ServerResource.class.getPackage().getName()); + servletHandler.addServlet(new ServletHolder(new ServletContainer(resourceConfig)), "/*"); handlers.addHandler(servletHandler); -- cgit v1.2.3 From 1ea8569eb87a714d6b2e2b817d05190dd3784384 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Tue, 1 Nov 2016 10:35:31 +0500 Subject: Remove json conversion in reports --- src/org/traccar/api/resource/ReportResource.java | 29 ++++++++++++++---------- src/org/traccar/reports/Events.java | 12 ++++------ src/org/traccar/reports/Route.java | 14 ++++-------- src/org/traccar/reports/Summary.java | 20 +++++----------- src/org/traccar/reports/Trips.java | 14 ++++-------- 5 files changed, 35 insertions(+), 54 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/ReportResource.java b/src/org/traccar/api/resource/ReportResource.java index 709eef377..f6100f7b4 100644 --- a/src/org/traccar/api/resource/ReportResource.java +++ b/src/org/traccar/api/resource/ReportResource.java @@ -3,6 +3,7 @@ package org.traccar.api.resource; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.sql.SQLException; +import java.util.Collection; import java.util.List; import javax.ws.rs.Consumes; @@ -15,9 +16,13 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.traccar.api.BaseResource; +import org.traccar.model.Event; +import org.traccar.model.Position; import org.traccar.reports.Events; import org.traccar.reports.Summary; import org.traccar.reports.Trips; +import org.traccar.reports.model.SummaryReport; +import org.traccar.reports.model.TripReport; import org.traccar.reports.Route; import org.traccar.web.JsonConverter; @@ -31,11 +36,11 @@ public class ReportResource extends BaseResource { @Path("route") @GET @Produces(MediaType.APPLICATION_JSON) - public Response getRouteJson( + public Collection getRoute( @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { - return Response.ok(Route.getJson(getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to))).build(); + return Route.getObjects(getUserId(), deviceIds, groupIds, + JsonConverter.parseDate(from), JsonConverter.parseDate(to)); } @Path("route") @@ -55,12 +60,12 @@ public class ReportResource extends BaseResource { @Path("events") @GET @Produces(MediaType.APPLICATION_JSON) - public Response getEventsJson( + public Collection getEvents( @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("type") final List types, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { - return Response.ok(Events.getJson(getUserId(), deviceIds, groupIds, types, - JsonConverter.parseDate(from), JsonConverter.parseDate(to))).build(); + return Events.getObjects(getUserId(), deviceIds, groupIds, types, + JsonConverter.parseDate(from), JsonConverter.parseDate(to)); } @Path("events") @@ -81,11 +86,11 @@ public class ReportResource extends BaseResource { @Path("summary") @GET @Produces(MediaType.APPLICATION_JSON) - public Response getSummaryJson( + public Collection getSummary( @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { - return Response.ok(Summary.getJson(getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to))).build(); + return Summary.getObjects(getUserId(), deviceIds, groupIds, + JsonConverter.parseDate(from), JsonConverter.parseDate(to)); } @Path("summary") @@ -105,11 +110,11 @@ public class ReportResource extends BaseResource { @Path("trips") @GET @Produces(MediaType.APPLICATION_JSON) - public Response getTripsJson( + public Collection getTrips( @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { - return Response.ok(Trips.getJson(getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to))).build(); + return Trips.getObjects(getUserId(), deviceIds, groupIds, + JsonConverter.parseDate(from), JsonConverter.parseDate(to)); } @Path("trips") diff --git a/src/org/traccar/reports/Events.java b/src/org/traccar/reports/Events.java index 77d995f56..88ff687d8 100644 --- a/src/org/traccar/reports/Events.java +++ b/src/org/traccar/reports/Events.java @@ -28,9 +28,6 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; -import javax.json.Json; -import javax.json.JsonArrayBuilder; - import org.jxls.area.Area; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.CellRef; @@ -44,16 +41,15 @@ import org.traccar.model.Event; import org.traccar.model.Geofence; import org.traccar.model.Group; import org.traccar.reports.model.DeviceReport; -import org.traccar.web.JsonConverter; public final class Events { private Events() { } - public static String getJson(long userId, Collection deviceIds, Collection groupIds, + public static Collection getObjects(long userId, Collection deviceIds, Collection groupIds, Collection types, Date from, Date to) throws SQLException { - JsonArrayBuilder json = Json.createArrayBuilder(); + ArrayList result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); Collection events = Context.getDataManager().getEvents(deviceId, from, to); @@ -62,12 +58,12 @@ public final class Events { if (all || types.contains(event.getType())) { long geofenceId = event.getGeofenceId(); if (geofenceId == 0 || Context.getGeofenceManager().checkGeofence(userId, geofenceId)) { - json.add(JsonConverter.objectToJson(event)); + result.add(event); } } } } - return json.build().toString(); + return result; } public static void getExcel(OutputStream outputStream, diff --git a/src/org/traccar/reports/Route.java b/src/org/traccar/reports/Route.java index 6992c89cc..4226d05ef 100644 --- a/src/org/traccar/reports/Route.java +++ b/src/org/traccar/reports/Route.java @@ -26,9 +26,6 @@ import java.util.Collection; import java.util.Date; import java.util.List; -import javax.json.Json; -import javax.json.JsonArrayBuilder; - import org.jxls.area.Area; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.CellRef; @@ -41,23 +38,20 @@ import org.traccar.model.Device; import org.traccar.model.Group; import org.traccar.model.Position; import org.traccar.reports.model.DeviceReport; -import org.traccar.web.JsonConverter; public final class Route { private Route() { } - public static String getJson(long userId, Collection deviceIds, Collection groupIds, + public static Collection getObjects(long userId, Collection deviceIds, Collection groupIds, Date from, Date to) throws SQLException { - JsonArrayBuilder json = Json.createArrayBuilder(); + ArrayList result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - for (Position position : Context.getDataManager().getPositions(deviceId, from, to)) { - json.add(JsonConverter.objectToJson(position)); - } + result.addAll(Context.getDataManager().getPositions(deviceId, from, to)); } - return json.build().toString(); + return result; } public static void getExcel(OutputStream outputStream, diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index 14f8b7839..a82624bcf 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -25,15 +25,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; -import javax.json.Json; -import javax.json.JsonArrayBuilder; - import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.JxlsHelper; import org.traccar.Context; import org.traccar.model.Position; import org.traccar.reports.model.SummaryReport; -import org.traccar.web.JsonConverter; public final class Summary { @@ -74,24 +70,20 @@ public final class Summary { return result; } - public static String getJson(long userId, Collection deviceIds, Collection groupIds, - Date from, Date to) throws SQLException { - JsonArrayBuilder json = Json.createArrayBuilder(); + public static Collection getObjects(long userId, Collection deviceIds, + Collection groupIds, Date from, Date to) throws SQLException { + ArrayList result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - json.add(JsonConverter.objectToJson(calculateSummaryResult(deviceId, from, to))); + result.add(calculateSummaryResult(deviceId, from, to)); } - return json.build().toString(); + return result; } public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, Date from, Date to) throws SQLException, IOException { - ArrayList summaries = new ArrayList<>(); - for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { - Context.getPermissionsManager().checkDevice(userId, deviceId); - summaries.add(calculateSummaryResult(deviceId, from, to)); - } + Collection summaries = getObjects(userId, deviceIds, groupIds, from, to); String templatePath = Context.getConfig().getString("report.templatesPath", "templates/export/"); try (InputStream inputStream = new FileInputStream(templatePath + "/summary.xlsx")) { diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 705644849..30fef40c9 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -26,9 +26,6 @@ import java.util.Collection; import java.util.Date; import java.util.List; -import javax.json.Json; -import javax.json.JsonArrayBuilder; - import org.jxls.area.Area; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.CellRef; @@ -42,7 +39,6 @@ import org.traccar.model.Group; import org.traccar.model.Position; import org.traccar.reports.model.DeviceReport; import org.traccar.reports.model.TripReport; -import org.traccar.web.JsonConverter; public final class Trips { @@ -167,16 +163,14 @@ public final class Trips { return result; } - public static String getJson(long userId, Collection deviceIds, Collection groupIds, + public static Collection getObjects(long userId, Collection deviceIds, Collection groupIds, Date from, Date to) throws SQLException { - JsonArrayBuilder json = Json.createArrayBuilder(); + ArrayList result = new ArrayList<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - for (TripReport tripReport : detectTrips(deviceId, from, to)) { - json.add(JsonConverter.objectToJson(tripReport)); - } + result.addAll(detectTrips(deviceId, from, to)); } - return json.build().toString(); + return result; } public static void getExcel(OutputStream outputStream, -- cgit v1.2.3 From fdc61388a4f86bbd7fc7034fcf672486910eb58c Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Tue, 1 Nov 2016 10:55:19 +0500 Subject: Move parseDate to DateUtil --- src/org/traccar/api/resource/PositionResource.java | 8 ++++---- src/org/traccar/api/resource/ReportResource.java | 18 +++++++++--------- src/org/traccar/api/resource/StatisticsResource.java | 4 ++-- src/org/traccar/helper/DateUtil.java | 9 +++++++++ 4 files changed, 24 insertions(+), 15 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/PositionResource.java b/src/org/traccar/api/resource/PositionResource.java index 488964f23..1ba126b62 100644 --- a/src/org/traccar/api/resource/PositionResource.java +++ b/src/org/traccar/api/resource/PositionResource.java @@ -17,10 +17,10 @@ package org.traccar.api.resource; import org.traccar.Context; import org.traccar.api.BaseResource; +import org.traccar.helper.DateUtil; import org.traccar.model.Position; import org.traccar.web.CsvBuilder; import org.traccar.web.GpxBuilder; -import org.traccar.web.JsonConverter; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -53,7 +53,7 @@ public class PositionResource extends BaseResource { } else { Context.getPermissionsManager().checkDevice(getUserId(), deviceId); return Context.getDataManager().getPositions( - deviceId, JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + deviceId, DateUtil.parseDate(from), DateUtil.parseDate(to)); } } @@ -66,7 +66,7 @@ public class PositionResource extends BaseResource { CsvBuilder csv = new CsvBuilder(); csv.addHeaderLine(new Position()); csv.addArray(Context.getDataManager().getPositions( - deviceId, JsonConverter.parseDate(from), JsonConverter.parseDate(to))); + deviceId, DateUtil.parseDate(from), DateUtil.parseDate(to))); return Response.ok(csv.build()).header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_CSV).build(); } @@ -78,7 +78,7 @@ public class PositionResource extends BaseResource { Context.getPermissionsManager().checkDevice(getUserId(), deviceId); GpxBuilder gpx = new GpxBuilder(Context.getIdentityManager().getDeviceById(deviceId).getName()); gpx.addPositions(Context.getDataManager().getPositions( - deviceId, JsonConverter.parseDate(from), JsonConverter.parseDate(to))); + deviceId, DateUtil.parseDate(from), DateUtil.parseDate(to))); return Response.ok(gpx.build()).header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_GPX).build(); } diff --git a/src/org/traccar/api/resource/ReportResource.java b/src/org/traccar/api/resource/ReportResource.java index f6100f7b4..2717fe01e 100644 --- a/src/org/traccar/api/resource/ReportResource.java +++ b/src/org/traccar/api/resource/ReportResource.java @@ -16,6 +16,7 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import org.traccar.api.BaseResource; +import org.traccar.helper.DateUtil; import org.traccar.model.Event; import org.traccar.model.Position; import org.traccar.reports.Events; @@ -24,7 +25,6 @@ import org.traccar.reports.Trips; import org.traccar.reports.model.SummaryReport; import org.traccar.reports.model.TripReport; import org.traccar.reports.Route; -import org.traccar.web.JsonConverter; @Path("reports") @Consumes(MediaType.APPLICATION_JSON) @@ -40,7 +40,7 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { return Route.getObjects(getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); } @Path("route") @@ -51,7 +51,7 @@ public class ReportResource extends BaseResource { @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); Route.getExcel(stream, getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -65,7 +65,7 @@ public class ReportResource extends BaseResource { @QueryParam("type") final List types, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { return Events.getObjects(getUserId(), deviceIds, groupIds, types, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); } @Path("events") @@ -77,7 +77,7 @@ public class ReportResource extends BaseResource { @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); Events.getExcel(stream, getUserId(), deviceIds, groupIds, types, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -90,7 +90,7 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { return Summary.getObjects(getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); } @Path("summary") @@ -101,7 +101,7 @@ public class ReportResource extends BaseResource { @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); Summary.getExcel(stream, getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -114,7 +114,7 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { return Trips.getObjects(getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); } @Path("trips") @@ -125,7 +125,7 @@ public class ReportResource extends BaseResource { @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); Trips.getExcel(stream, getUserId(), deviceIds, groupIds, - JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + DateUtil.parseDate(from), DateUtil.parseDate(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); diff --git a/src/org/traccar/api/resource/StatisticsResource.java b/src/org/traccar/api/resource/StatisticsResource.java index e737560ef..f63fc0ddb 100644 --- a/src/org/traccar/api/resource/StatisticsResource.java +++ b/src/org/traccar/api/resource/StatisticsResource.java @@ -17,8 +17,8 @@ package org.traccar.api.resource; import org.traccar.Context; import org.traccar.api.BaseResource; +import org.traccar.helper.DateUtil; import org.traccar.model.Statistics; -import org.traccar.web.JsonConverter; import javax.ws.rs.Consumes; import javax.ws.rs.GET; @@ -38,7 +38,7 @@ public class StatisticsResource extends BaseResource { public Collection get( @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { Context.getPermissionsManager().checkAdmin(getUserId()); - return Context.getDataManager().getStatistics(JsonConverter.parseDate(from), JsonConverter.parseDate(to)); + return Context.getDataManager().getStatistics(DateUtil.parseDate(from), DateUtil.parseDate(to)); } } diff --git a/src/org/traccar/helper/DateUtil.java b/src/org/traccar/helper/DateUtil.java index 0dca88a2b..c2e691d5d 100644 --- a/src/org/traccar/helper/DateUtil.java +++ b/src/org/traccar/helper/DateUtil.java @@ -18,8 +18,13 @@ package org.traccar.helper; import java.util.Calendar; import java.util.Date; +import org.joda.time.format.DateTimeFormatter; +import org.joda.time.format.ISODateTimeFormat; + public final class DateUtil { + private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.dateTime(); + private DateUtil() { } @@ -55,4 +60,8 @@ public final class DateUtil { return calendar.getTime(); } + public static Date parseDate(String value) { + return DATE_FORMAT.parseDateTime(value).toDate(); + } + } -- cgit v1.2.3 From 8949b8275c730a008cd4dd677f03630f4111aba9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 2 Nov 2016 01:58:06 +1300 Subject: Allow remote access to web console --- src/org/traccar/web/ConsoleServlet.java | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/web/ConsoleServlet.java b/src/org/traccar/web/ConsoleServlet.java index b219eaba4..c1ab7c468 100644 --- a/src/org/traccar/web/ConsoleServlet.java +++ b/src/org/traccar/web/ConsoleServlet.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,10 +40,16 @@ public class ConsoleServlet extends WebServlet { + Context.getConfig().getString("database.url") + "|" + Context.getConfig().getString("database.user")); - Method method = org.h2.server.web.WebServer.class.getDeclaredMethod("updateSetting", ConnectionInfo.class); + Method method; + + method = org.h2.server.web.WebServer.class.getDeclaredMethod("updateSetting", ConnectionInfo.class); method.setAccessible(true); method.invoke(server, connectionInfo); + method = org.h2.server.web.WebServer.class.getDeclaredMethod("setAllowOthers", boolean.class); + method.setAccessible(true); + method.invoke(server, true); + } catch (NoSuchFieldException | IllegalAccessException | NoSuchMethodException | InvocationTargetException e) { Log.warning(e); } -- cgit v1.2.3 From 70a3fd581b79556b3feb083d79228384efdf66d2 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 2 Nov 2016 03:21:21 +1300 Subject: Handle Prime AT Plus protocol --- src/org/traccar/protocol/Gl200ProtocolDecoder.java | 18 +++++++++--------- .../org/traccar/protocol/Gl200ProtocolDecoderTest.java | 15 +++++++++++++++ 2 files changed, 24 insertions(+), 9 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Gl200ProtocolDecoder.java b/src/org/traccar/protocol/Gl200ProtocolDecoder.java index a0efc47fa..5785c08b7 100644 --- a/src/org/traccar/protocol/Gl200ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gl200ProtocolDecoder.java @@ -41,7 +41,7 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { .text("+ACK:GT") .expression("...,") // type .number("([0-9A-Z]{2}xxxx),") // protocol version - .number("(d{15}),") // imei + .number("(d{15}|x{14}),") // imei .any().text(",") .number("(dddd)(dd)(dd)") // date .number("(dd)(dd)(dd),") // time @@ -52,16 +52,16 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_INF = new PatternBuilder() .text("+").expression("(?:RESP|BUFF):GTINF,") .number("[0-9A-Z]{2}xxxx,") // protocol version - .number("(d{15}),") // imei + .number("(d{15}|x{14}),") // imei .expression("(?:[0-9A-Z]{17},)?") // vin .expression("(?:[^,]+)?,") // device name .number("(xx),") // state - .expression("[0-9F]{20},") // iccid + .expression("(?:[0-9F]{20})?,") // iccid .number("d{1,2},") .number("d{1,2},") .expression("[01],") // external power .number("([d.]+)?,") // odometer or external power - .number("[01]?,") // backup battery + .number("d*,") // backup battery or lightness .number("(d+.d+),") // battery .expression("([01]),") // charging .number("(?:d),") // led @@ -71,7 +71,7 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { .number("d{14},") // last fix time .groupBegin() .number("(d+),") // battery percentage - .expression("(?:[01]),") // flash type + .expression("[01]?,") // flash type .number("(-?[d.]+)?,,,") // temperature .or() .expression("(?:[01])?,").optional() // pin15 mode @@ -91,7 +91,7 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_VER = new PatternBuilder() .text("+").expression("(?:RESP|BUFF):GTVER,") .number("[0-9A-Z]{2}xxxx,") // protocol version - .number("(d{15}),") // imei + .number("(d{15}|x{14}),") // imei .expression("[^,]*,") // device name .expression("([^,]*),") // device type .number("(xxxx),") // firmware version @@ -129,7 +129,7 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_OBD = new PatternBuilder() .text("+RESP:GTOBD,") .number("[0-9A-Z]{2}xxxx,") // protocol version - .number("(d{15}),") // imei + .number("(d{15}|x{14}),") // imei .expression("(?:[0-9A-Z]{17})?,") // vin .expression("[^,]{0,20},") // device name .expression("[01],") // report type @@ -197,7 +197,7 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_IGN = new PatternBuilder() .text("+").expression("(?:RESP|BUFF):GTIG[NF],") .number("(?:[0-9A-Z]{2}xxxx)?,") // protocol version - .number("(d{15}),") // imei + .number("(d{15}|x{14}),") // imei .expression("[^,]*,") // device name .number("d+,") // ignition off duration .expression(PATTERN_LOCATION.pattern()) @@ -213,7 +213,7 @@ public class Gl200ProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN_IDA = new PatternBuilder() .text("+RESP:GTIDA,") .number("(?:[0-9A-Z]{2}xxxx)?,") // protocol version - .number("(d{15}),") // imei + .number("(d{15}|x{14}),") // imei .expression("[^,]*,,") // device name .number("([^,]+),") // rfid .expression("[01],") // report type diff --git a/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java b/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java index d3c82fb3a..fa8373898 100644 --- a/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Gl200ProtocolDecoderTest.java @@ -10,6 +10,21 @@ public class Gl200ProtocolDecoderTest extends ProtocolTest { Gl200ProtocolDecoder decoder = new Gl200ProtocolDecoder(new Gl200Protocol()); + verifyAttributes(decoder, text( + "+RESP:GTINF,210102,A10000499AEF9B,,41,,0,0,0,15.0,9,3.87,0,1,1,0,0,20161101140211,72,,,,,20161101140211,00A3$")); + + verifyAttributes(decoder, text( + "+RESP:GTNMR,210102,A10000499AEF9B,,0,0,1,9,0.0,0,288.0,-76.902364,39.578828,20161101134145,,,,,00,73,20161101134145,009F$")); + + verifyPositions(decoder, text( + "+RESP:GTFRI,210102,A10000499AEF9B,,0,1,1,9,0.5,0,288.0,-76.902364,39.578828,20161101134124,,,,,00,73,20161101134123,009D$")); + + verifyAttributes(decoder, text( + "+RESP:GTRTL,210102,A10000499AEF9B,,0,0,1,10,0.2,0,305.4,-76.902274,39.578517,20161101155001,,,,,00,73,20161101155001,00A6$")); + + verifyAttributes(decoder, text( + "+RESP:GTINF,110100,358688000000158,,41,898600810906F8048812,18,99,0,33.23,1,4.19,1,1,1,0,0,20110714104934,100,,,,,20110714104934,0014$")); + verifyAttributes(decoder, text( "+RESP:GTINF,080100,135790246811220,,16,898600810906F8048812,16,0,1,11870,,4.1,0,0,0,,20090214013254,,12340,,00,00,+0800,0,20090214093254,11F0$")); -- cgit v1.2.3 From 262069d02c8fa1a5848fab749a617bc53b928c70 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 2 Nov 2016 06:21:30 +1300 Subject: Change TK102 protocol to binary --- src/org/traccar/protocol/Ardi01Protocol.java | 2 +- src/org/traccar/protocol/Tk102Protocol.java | 10 +--- src/org/traccar/protocol/Tk102ProtocolDecoder.java | 68 +++++++++++++++++----- test/org/traccar/ProtocolTest.java | 2 +- .../traccar/protocol/Tk102ProtocolDecoderTest.java | 45 ++++++++------ 5 files changed, 87 insertions(+), 40 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Ardi01Protocol.java b/src/org/traccar/protocol/Ardi01Protocol.java index 5b7770647..66916db17 100644 --- a/src/org/traccar/protocol/Ardi01Protocol.java +++ b/src/org/traccar/protocol/Ardi01Protocol.java @@ -37,8 +37,8 @@ public class Ardi01Protocol extends BaseProtocol { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new LineBasedFrameDecoder(1024)); - pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("objectDecoder", new Ardi01ProtocolDecoder(Ardi01Protocol.this)); } }); diff --git a/src/org/traccar/protocol/Tk102Protocol.java b/src/org/traccar/protocol/Tk102Protocol.java index 7310d23bd..ad3d8affa 100644 --- a/src/org/traccar/protocol/Tk102Protocol.java +++ b/src/org/traccar/protocol/Tk102Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,10 +17,8 @@ package org.traccar.protocol; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelPipeline; -import org.jboss.netty.handler.codec.string.StringDecoder; -import org.jboss.netty.handler.codec.string.StringEncoder; +import org.jboss.netty.handler.codec.frame.LengthFieldBasedFrameDecoder; import org.traccar.BaseProtocol; -import org.traccar.CharacterDelimiterFrameDecoder; import org.traccar.TrackerServer; import java.util.List; @@ -36,9 +34,7 @@ public class Tk102Protocol extends BaseProtocol { serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, ']')); - pipeline.addLast("stringEncoder", new StringEncoder()); - pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("frameDecoder", new LengthFieldBasedFrameDecoder(1024, 1 + 1 + 10, 1, 1, 0)); pipeline.addLast("objectDecoder", new Tk102ProtocolDecoder(Tk102Protocol.this)); } }); diff --git a/src/org/traccar/protocol/Tk102ProtocolDecoder.java b/src/org/traccar/protocol/Tk102ProtocolDecoder.java index bb7510eb1..58eb36cff 100644 --- a/src/org/traccar/protocol/Tk102ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk102ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,6 +15,8 @@ */ package org.traccar.protocol; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; @@ -24,6 +26,7 @@ import org.traccar.helper.PatternBuilder; import org.traccar.model.Position; import java.net.SocketAddress; +import java.nio.charset.StandardCharsets; import java.util.regex.Pattern; public class Tk102ProtocolDecoder extends BaseProtocolDecoder { @@ -32,11 +35,18 @@ public class Tk102ProtocolDecoder extends BaseProtocolDecoder { super(protocol); } + public static final int MSG_LOGIN_REQUEST = 0x80; + public static final int MSG_LOGIN_REQUEST_2 = 0x21; + public static final int MSG_LOGIN_RESPONSE = 0x00; + public static final int MSG_HEARTBEAT_REQUEST = 0xF0; + public static final int MSG_HEARTBEAT_RESPONSE = 0xFF; + public static final int MSG_REPORT_ONCE = 0x90; + public static final int MSG_REPORT_INTERVAL = 0x93; + + public static final int MODE_GPRS = 0x30; + public static final int MODE_GPRS_SMS = 0x33; + private static final Pattern PATTERN = new PatternBuilder() - .text("[") - .expression(".") - .number("d{10}") - .expression(".") .text("(") .expression("[A-Z]+") .number("(dd)(dd)(dd)") // time @@ -45,25 +55,56 @@ public class Tk102ProtocolDecoder extends BaseProtocolDecoder { .number("(ddd)(dd.dddd)([EW])") // longitude .number("(ddd.ddd)") // speed .number("(dd)(dd)(dd)") // date (ddmmyy) - .number("d+") .any() .text(")") - .text("]").optional() .compile(); + private void sendResponse(Channel channel, int type, ChannelBuffer dataSequence, ChannelBuffer content) { + if (channel != null) { + ChannelBuffer response = ChannelBuffers.dynamicBuffer(); + response.writeByte('['); + response.writeByte(type); + response.writeBytes(dataSequence); + response.writeByte(content.readableBytes()); + response.writeBytes(content); + response.writeByte(']'); + channel.write(response); + } + } + @Override protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { - String sentence = (String) msg; + ChannelBuffer buf = (ChannelBuffer) msg; + + buf.skipBytes(1); // header + int type = buf.readUnsignedByte(); + ChannelBuffer dataSequence = buf.readBytes(10); + int length = buf.readUnsignedByte(); - if (sentence.startsWith("[!")) { + if (type == MSG_LOGIN_REQUEST || type == MSG_LOGIN_REQUEST_2) { - DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, sentence.substring(14, 14 + 15)); - if (deviceSession != null && channel != null) { - channel.write("[”0000000001" + sentence.substring(13) + "]"); + ChannelBuffer data = buf.readBytes(length); + + String id; + if (type == MSG_LOGIN_REQUEST) { + id = data.toString(StandardCharsets.US_ASCII); + } else { + id = data.copy(1, 15).toString(StandardCharsets.US_ASCII); + } + + if (getDeviceSession(channel, remoteAddress, id) != null) { + ChannelBuffer response = ChannelBuffers.dynamicBuffer(); + response.writeByte(MODE_GPRS); + response.writeBytes(data); + sendResponse(channel, MSG_LOGIN_RESPONSE, dataSequence, response); } + } else if (type == MSG_HEARTBEAT_REQUEST) { + + sendResponse(channel, MSG_HEARTBEAT_RESPONSE, dataSequence, buf.readBytes(length)); + } else { DeviceSession deviceSession = getDeviceSession(channel, remoteAddress); @@ -71,7 +112,7 @@ public class Tk102ProtocolDecoder extends BaseProtocolDecoder { return null; } - Parser parser = new Parser(PATTERN, sentence); + Parser parser = new Parser(PATTERN, buf.readBytes(length).toString(StandardCharsets.US_ASCII)); if (!parser.matches()) { return null; } @@ -92,6 +133,7 @@ public class Tk102ProtocolDecoder extends BaseProtocolDecoder { position.setTime(dateBuilder.getDate()); return position; + } return null; diff --git a/test/org/traccar/ProtocolTest.java b/test/org/traccar/ProtocolTest.java index 8211e9d6d..756393288 100644 --- a/test/org/traccar/ProtocolTest.java +++ b/test/org/traccar/ProtocolTest.java @@ -62,7 +62,7 @@ public class ProtocolTest extends BaseTest { } protected ChannelBuffer buffer(String... data) { - return ChannelBuffers.copiedBuffer(concatenateStrings(data), StandardCharsets.US_ASCII); + return ChannelBuffers.copiedBuffer(concatenateStrings(data), StandardCharsets.ISO_8859_1); } protected DefaultHttpRequest request(String url) { diff --git a/test/org/traccar/protocol/Tk102ProtocolDecoderTest.java b/test/org/traccar/protocol/Tk102ProtocolDecoderTest.java index 501466eeb..34ae1ab90 100644 --- a/test/org/traccar/protocol/Tk102ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Tk102ProtocolDecoderTest.java @@ -10,32 +10,41 @@ public class Tk102ProtocolDecoderTest extends ProtocolTest { Tk102ProtocolDecoder decoder = new Tk102ProtocolDecoder(new Tk102Protocol()); - verifyNothing(decoder, text( - "")); + verifyNothing(decoder, buffer( + "[\u00800000000000\u000821315452]")); - verifyNothing(decoder, text( - "[!0000000081r(353327023367238,TK102-W998_01_V1.1.001_130219,255,001,255,001,0,100,100,0,internet,0000,0000,0,0,255,0,4,1,11,00)")); + verifyNothing(decoder, buffer( + "[\u00f00000000000\u000821315452]")); + + verifyPosition(decoder, buffer( + "[\u00900100100001\u0036(ONE025857A2232.0729N11356.0030E000.02109110100000000)]")); + + verifyPosition(decoder, buffer( + "[\u00900100100001\u0036(ITV025857A2232.0729N11356.0030E000.02109110100000000)]")); + + verifyNothing(decoder, buffer( + "[\u00210000000081\u0072(353327023367238,TK102-W998_01_V1.1.001_130219,255,001,255,001,0,100,100,0,internet,0000,0000,0,0,255,0,4,1,11,00)]")); - verifyNothing(decoder, text( - "[L0000001323N(GSM,0,0,07410001,20120101162600,404,010,9261,130,0,2353,130,35,9263,130,33,1)")); + verifyNothing(decoder, buffer( + "[\u004c0000001323\u004e(GSM,0,0,07410001,20120101162600,404,010,9261,130,0,2353,130,35,9263,130,33,1)]")); - verifyNothing(decoder, text( - "[%0000000082\u001d(100100000000000600-30-65535)")); + verifyNothing(decoder, buffer( + "[\u00250000000082\u001d(100100000000000600-30-65535)]")); - verifyNothing(decoder, text( - "[#0000000004\u0018(062100000000000600-0-0)")); + verifyNothing(decoder, buffer( + "[\u00230000000004\u0018(062100000000000600-0-0)]")); - verifyPosition(decoder, text( - "[=00000000836(ITV013939A4913.8317N02824.9241E000.90018031310010000)")); + verifyPosition(decoder, buffer( + "[\u003d0000000083\u0036(ITV013939A4913.8317N02824.9241E000.90018031310010000)]")); - verifyPosition(decoder, text( - "[=00000000366(ITV012209A4913.8281N02824.9258E000.32018031310010000)")); + verifyPosition(decoder, buffer( + "[\u003d0000000036\u0036(ITV012209A4913.8281N02824.9258E000.32018031310010000)]")); - verifyPosition(decoder, text( - "[;00000000106(ONE200834A5952.8114N01046.0832E003.93212071305010000)")); + verifyPosition(decoder, buffer( + "[\u003b0000000010\u0036(ONE200834A5952.8114N01046.0832E003.93212071305010000)]")); - verifyPosition(decoder, text( - "[\u00930000000000F(ITV153047A1534.0805N03233.0888E000.00029041500000400&Wsz-wl001&B0000)]")); + verifyPosition(decoder, buffer( + "[\u00930000000000\u0046(ITV153047A1534.0805N03233.0888E000.00029041500000400&Wsz-wl001&B0000)]")); } -- cgit v1.2.3 From fa01e90f6ee1381766d15494e57ccf7b3eb14ca5 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 2 Nov 2016 23:18:41 +1300 Subject: Update copyright notice emails --- src/org/traccar/BaseDataHandler.java | 2 +- src/org/traccar/BaseEventHandler.java | 2 +- src/org/traccar/BasePipelineFactory.java | 2 +- src/org/traccar/BaseProtocol.java | 2 +- src/org/traccar/BaseProtocolDecoder.java | 2 +- src/org/traccar/BaseProtocolEncoder.java | 2 +- src/org/traccar/CharacterDelimiterFrameDecoder.java | 2 +- src/org/traccar/Config.java | 2 +- src/org/traccar/Context.java | 2 +- src/org/traccar/CoordinatesHandler.java | 2 +- src/org/traccar/CopyAttributesHandler.java | 4 ++-- src/org/traccar/DefaultDataHandler.java | 2 +- src/org/traccar/DeviceSession.java | 2 +- src/org/traccar/DistanceHandler.java | 2 +- src/org/traccar/ExtendedObjectDecoder.java | 2 +- src/org/traccar/FilterHandler.java | 2 +- src/org/traccar/GlobalChannelFactory.java | 2 +- src/org/traccar/GlobalTimer.java | 2 +- src/org/traccar/HemisphereHandler.java | 2 +- src/org/traccar/LocationProviderHandler.java | 2 +- src/org/traccar/Main.java | 2 +- src/org/traccar/MainEventHandler.java | 2 +- src/org/traccar/RemoteAddressHandler.java | 2 +- src/org/traccar/ReverseGeocoderHandler.java | 2 +- src/org/traccar/ServerManager.java | 2 +- src/org/traccar/StringProtocolEncoder.java | 2 +- src/org/traccar/TrackerServer.java | 2 +- src/org/traccar/WebDataHandler.java | 2 +- src/org/traccar/api/AsyncSocket.java | 2 +- src/org/traccar/api/AsyncSocketServlet.java | 2 +- src/org/traccar/api/BaseResource.java | 2 +- src/org/traccar/api/CorsResponseFilter.java | 2 +- src/org/traccar/api/ObjectMapperProvider.java | 2 +- src/org/traccar/api/ResourceErrorHandler.java | 2 +- src/org/traccar/api/SecurityRequestFilter.java | 2 +- src/org/traccar/api/UserPrincipal.java | 2 +- src/org/traccar/api/UserSecurityContext.java | 2 +- src/org/traccar/api/resource/AttributeAliasResource.java | 4 ++-- src/org/traccar/api/resource/CommandResource.java | 2 +- src/org/traccar/api/resource/DeviceGeofenceResource.java | 2 +- src/org/traccar/api/resource/DevicePermissionResource.java | 2 +- src/org/traccar/api/resource/DeviceResource.java | 2 +- src/org/traccar/api/resource/GeofencePermissionResource.java | 2 +- src/org/traccar/api/resource/GeofenceResource.java | 2 +- src/org/traccar/api/resource/GroupGeofenceResource.java | 2 +- src/org/traccar/api/resource/GroupPermissionResource.java | 2 +- src/org/traccar/api/resource/GroupResource.java | 2 +- src/org/traccar/api/resource/NotificationResource.java | 2 +- src/org/traccar/api/resource/PositionResource.java | 2 +- src/org/traccar/api/resource/ServerResource.java | 2 +- src/org/traccar/api/resource/SessionResource.java | 2 +- src/org/traccar/api/resource/StatisticsResource.java | 2 +- src/org/traccar/api/resource/UserResource.java | 2 +- src/org/traccar/database/ActiveDevice.java | 2 +- src/org/traccar/database/AliasesManager.java | 4 ++-- src/org/traccar/database/ConnectionManager.java | 2 +- src/org/traccar/database/DataManager.java | 2 +- src/org/traccar/database/DeviceManager.java | 2 +- src/org/traccar/database/GeofenceManager.java | 2 +- src/org/traccar/database/GroupTree.java | 2 +- src/org/traccar/database/IdentityManager.java | 2 +- src/org/traccar/database/NotificationManager.java | 2 +- src/org/traccar/database/PermissionsManager.java | 2 +- src/org/traccar/database/QueryBuilder.java | 2 +- src/org/traccar/database/StatisticsManager.java | 2 +- src/org/traccar/events/AlertEventHandler.java | 2 +- src/org/traccar/events/CommandResultEventHandler.java | 2 +- src/org/traccar/events/GeofenceEventHandler.java | 2 +- src/org/traccar/events/IgnitionEventHandler.java | 4 ++-- src/org/traccar/events/MotionEventHandler.java | 2 +- src/org/traccar/events/OverspeedEventHandler.java | 2 +- src/org/traccar/geocode/Address.java | 2 +- src/org/traccar/geocode/AddressFormat.java | 2 +- src/org/traccar/geocode/GeocodeFarmReverseGeocoder.java | 2 +- src/org/traccar/geocode/GisgraphyReverseGeocoder.java | 2 +- src/org/traccar/geocode/GoogleReverseGeocoder.java | 2 +- src/org/traccar/geocode/JsonReverseGeocoder.java | 2 +- src/org/traccar/geocode/NominatimReverseGeocoder.java | 2 +- src/org/traccar/geocode/OpenCageReverseGeocoder.java | 2 +- src/org/traccar/geocode/ReverseGeocoder.java | 2 +- src/org/traccar/geofence/GeofenceCircle.java | 2 +- src/org/traccar/geofence/GeofenceGeometry.java | 2 +- src/org/traccar/geofence/GeofencePolygon.java | 2 +- src/org/traccar/helper/BcdUtil.java | 2 +- src/org/traccar/helper/BitUtil.java | 2 +- src/org/traccar/helper/Checksum.java | 2 +- src/org/traccar/helper/DateBuilder.java | 2 +- src/org/traccar/helper/DateUtil.java | 2 +- src/org/traccar/helper/DistanceCalculator.java | 2 +- src/org/traccar/helper/Hashing.java | 2 +- src/org/traccar/helper/LocationTree.java | 2 +- src/org/traccar/helper/Log.java | 2 +- src/org/traccar/helper/ObdDecoder.java | 2 +- src/org/traccar/helper/Parser.java | 2 +- src/org/traccar/helper/PatternBuilder.java | 2 +- src/org/traccar/helper/PatternUtil.java | 2 +- src/org/traccar/helper/StringFinder.java | 2 +- src/org/traccar/helper/UnitsConverter.java | 2 +- src/org/traccar/location/BaseLocationProvider.java | 2 +- src/org/traccar/location/CellInfo.java | 2 +- src/org/traccar/location/LocationProvider.java | 2 +- src/org/traccar/location/MozillaLocationProvider.java | 2 +- src/org/traccar/location/OpenCellIdLocationProvider.java | 2 +- src/org/traccar/model/AttributeAlias.java | 4 ++-- src/org/traccar/model/Command.java | 2 +- src/org/traccar/model/Device.java | 2 +- src/org/traccar/model/DeviceGeofence.java | 2 +- src/org/traccar/model/DevicePermission.java | 2 +- src/org/traccar/model/DeviceTotalDistance.java | 4 ++-- src/org/traccar/model/Event.java | 2 +- src/org/traccar/model/Extensible.java | 2 +- src/org/traccar/model/Geofence.java | 2 +- src/org/traccar/model/GeofencePermission.java | 2 +- src/org/traccar/model/Group.java | 2 +- src/org/traccar/model/GroupGeofence.java | 2 +- src/org/traccar/model/GroupPermission.java | 2 +- src/org/traccar/model/Message.java | 2 +- src/org/traccar/model/MiscFormatter.java | 2 +- src/org/traccar/model/Notification.java | 2 +- src/org/traccar/model/Position.java | 2 +- src/org/traccar/model/Server.java | 2 +- src/org/traccar/model/Statistics.java | 2 +- src/org/traccar/model/User.java | 2 +- src/org/traccar/notification/EventForwarder.java | 2 +- src/org/traccar/notification/NotificationFormatter.java | 2 +- src/org/traccar/notification/NotificationMail.java | 2 +- src/org/traccar/notification/PropertiesProvider.java | 2 +- src/org/traccar/protocol/AdmProtocol.java | 2 +- src/org/traccar/protocol/AdmProtocolDecoder.java | 2 +- src/org/traccar/protocol/ApelProtocol.java | 2 +- src/org/traccar/protocol/ApelProtocolDecoder.java | 2 +- src/org/traccar/protocol/AplicomFrameDecoder.java | 2 +- src/org/traccar/protocol/AplicomProtocol.java | 2 +- src/org/traccar/protocol/AplicomProtocolDecoder.java | 2 +- src/org/traccar/protocol/AppelloProtocol.java | 2 +- src/org/traccar/protocol/AppelloProtocolDecoder.java | 2 +- src/org/traccar/protocol/AquilaProtocol.java | 2 +- src/org/traccar/protocol/AquilaProtocolDecoder.java | 2 +- src/org/traccar/protocol/Ardi01Protocol.java | 2 +- src/org/traccar/protocol/Ardi01ProtocolDecoder.java | 2 +- src/org/traccar/protocol/ArknavProtocol.java | 2 +- src/org/traccar/protocol/ArknavProtocolDecoder.java | 2 +- src/org/traccar/protocol/ArknavX8Protocol.java | 2 +- src/org/traccar/protocol/ArknavX8ProtocolDecoder.java | 2 +- src/org/traccar/protocol/ArnaviProtocol.java | 2 +- src/org/traccar/protocol/ArnaviProtocolDecoder.java | 2 +- src/org/traccar/protocol/AstraProtocol.java | 2 +- src/org/traccar/protocol/AstraProtocolDecoder.java | 2 +- src/org/traccar/protocol/AtrackFrameDecoder.java | 2 +- src/org/traccar/protocol/AtrackProtocol.java | 2 +- src/org/traccar/protocol/AtrackProtocolDecoder.java | 2 +- src/org/traccar/protocol/AuroProtocol.java | 2 +- src/org/traccar/protocol/AuroProtocolDecoder.java | 2 +- src/org/traccar/protocol/AutoFonFrameDecoder.java | 2 +- src/org/traccar/protocol/AutoFonProtocol.java | 2 +- src/org/traccar/protocol/AutoFonProtocolDecoder.java | 2 +- src/org/traccar/protocol/AutoGradeProtocol.java | 2 +- src/org/traccar/protocol/AutoGradeProtocolDecoder.java | 2 +- src/org/traccar/protocol/Avl301Protocol.java | 2 +- src/org/traccar/protocol/Avl301ProtocolDecoder.java | 2 +- src/org/traccar/protocol/BceFrameDecoder.java | 2 +- src/org/traccar/protocol/BceProtocol.java | 2 +- src/org/traccar/protocol/BceProtocolDecoder.java | 2 +- src/org/traccar/protocol/BlackKiteProtocol.java | 2 +- src/org/traccar/protocol/BlackKiteProtocolDecoder.java | 2 +- src/org/traccar/protocol/BoxProtocol.java | 2 +- src/org/traccar/protocol/BoxProtocolDecoder.java | 2 +- src/org/traccar/protocol/CalAmpProtocol.java | 2 +- src/org/traccar/protocol/CalAmpProtocolDecoder.java | 2 +- src/org/traccar/protocol/CarTrackProtocol.java | 2 +- src/org/traccar/protocol/CarTrackProtocolDecoder.java | 2 +- src/org/traccar/protocol/CarcellProtocol.java | 2 +- src/org/traccar/protocol/CarcellProtocolDecoder.java | 2 +- src/org/traccar/protocol/CarcellProtocolEncoder.java | 2 +- src/org/traccar/protocol/CarscopProtocol.java | 2 +- src/org/traccar/protocol/CarscopProtocolDecoder.java | 2 +- src/org/traccar/protocol/CastelProtocol.java | 2 +- src/org/traccar/protocol/CastelProtocolDecoder.java | 2 +- src/org/traccar/protocol/CellocatorFrameDecoder.java | 2 +- src/org/traccar/protocol/CellocatorProtocol.java | 2 +- src/org/traccar/protocol/CellocatorProtocolDecoder.java | 2 +- src/org/traccar/protocol/CguardProtocol.java | 2 +- src/org/traccar/protocol/CguardProtocolDecoder.java | 2 +- src/org/traccar/protocol/CityeasyProtocol.java | 2 +- src/org/traccar/protocol/CityeasyProtocolDecoder.java | 2 +- src/org/traccar/protocol/CityeasyProtocolEncoder.java | 2 +- src/org/traccar/protocol/CradlepointProtocol.java | 2 +- src/org/traccar/protocol/CradlepointProtocolDecoder.java | 2 +- src/org/traccar/protocol/DishaProtocol.java | 2 +- src/org/traccar/protocol/DishaProtocolDecoder.java | 2 +- src/org/traccar/protocol/EasyTrackProtocol.java | 2 +- src/org/traccar/protocol/EasyTrackProtocolDecoder.java | 2 +- src/org/traccar/protocol/EelinkProtocol.java | 2 +- src/org/traccar/protocol/EelinkProtocolDecoder.java | 2 +- src/org/traccar/protocol/EelinkProtocolEncoder.java | 2 +- src/org/traccar/protocol/EnforaProtocol.java | 2 +- src/org/traccar/protocol/EnforaProtocolDecoder.java | 2 +- src/org/traccar/protocol/ExtremTracProtocol.java | 2 +- src/org/traccar/protocol/ExtremTracProtocolDecoder.java | 2 +- src/org/traccar/protocol/FifotrackProtocol.java | 2 +- src/org/traccar/protocol/FifotrackProtocolDecoder.java | 2 +- src/org/traccar/protocol/FlextrackProtocol.java | 2 +- src/org/traccar/protocol/FlextrackProtocolDecoder.java | 2 +- src/org/traccar/protocol/FoxProtocol.java | 2 +- src/org/traccar/protocol/FoxProtocolDecoder.java | 2 +- src/org/traccar/protocol/FreedomProtocol.java | 2 +- src/org/traccar/protocol/FreedomProtocolDecoder.java | 2 +- src/org/traccar/protocol/GalileoFrameDecoder.java | 2 +- src/org/traccar/protocol/GalileoProtocol.java | 2 +- src/org/traccar/protocol/GalileoProtocolDecoder.java | 2 +- src/org/traccar/protocol/GatorProtocol.java | 2 +- src/org/traccar/protocol/GatorProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gl100Protocol.java | 2 +- src/org/traccar/protocol/Gl100ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gl200Protocol.java | 2 +- src/org/traccar/protocol/Gl200ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gl200ProtocolEncoder.java | 2 +- src/org/traccar/protocol/GlobalSatProtocol.java | 2 +- src/org/traccar/protocol/GlobalSatProtocolDecoder.java | 2 +- src/org/traccar/protocol/GnxProtocol.java | 2 +- src/org/traccar/protocol/GnxProtocolDecoder.java | 2 +- src/org/traccar/protocol/GoSafeProtocol.java | 2 +- src/org/traccar/protocol/GoSafeProtocolDecoder.java | 2 +- src/org/traccar/protocol/GotopProtocol.java | 2 +- src/org/traccar/protocol/GotopProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gps103Protocol.java | 2 +- src/org/traccar/protocol/Gps103ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gps103ProtocolEncoder.java | 2 +- src/org/traccar/protocol/GpsGateProtocol.java | 2 +- src/org/traccar/protocol/GpsGateProtocolDecoder.java | 2 +- src/org/traccar/protocol/GpsMarkerProtocol.java | 2 +- src/org/traccar/protocol/GpsMarkerProtocolDecoder.java | 2 +- src/org/traccar/protocol/GpsmtaProtocol.java | 2 +- src/org/traccar/protocol/GpsmtaProtocolDecoder.java | 2 +- src/org/traccar/protocol/GranitFrameDecoder.java | 2 +- src/org/traccar/protocol/GranitProtocol.java | 2 +- src/org/traccar/protocol/GranitProtocolDecoder.java | 2 +- src/org/traccar/protocol/GranitProtocolEncoder.java | 2 +- src/org/traccar/protocol/Gt02Protocol.java | 2 +- src/org/traccar/protocol/Gt02ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gt06FrameDecoder.java | 2 +- src/org/traccar/protocol/Gt06Protocol.java | 2 +- src/org/traccar/protocol/Gt06ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Gt06ProtocolEncoder.java | 2 +- src/org/traccar/protocol/H02FrameDecoder.java | 2 +- src/org/traccar/protocol/H02Protocol.java | 2 +- src/org/traccar/protocol/H02ProtocolDecoder.java | 2 +- src/org/traccar/protocol/H02ProtocolEncoder.java | 2 +- src/org/traccar/protocol/HaicomProtocol.java | 2 +- src/org/traccar/protocol/HaicomProtocolDecoder.java | 2 +- src/org/traccar/protocol/HomtecsProtocol.java | 2 +- src/org/traccar/protocol/HomtecsProtocolDecoder.java | 2 +- src/org/traccar/protocol/HuaShengFrameDecoder.java | 2 +- src/org/traccar/protocol/HuaShengProtocol.java | 2 +- src/org/traccar/protocol/HuaShengProtocolDecoder.java | 2 +- src/org/traccar/protocol/HuabaoFrameDecoder.java | 2 +- src/org/traccar/protocol/HuabaoProtocol.java | 2 +- src/org/traccar/protocol/HuabaoProtocolDecoder.java | 2 +- src/org/traccar/protocol/HunterProProtocol.java | 2 +- src/org/traccar/protocol/HunterProProtocolDecoder.java | 2 +- src/org/traccar/protocol/IdplProtocol.java | 2 +- src/org/traccar/protocol/IdplProtocolDecoder.java | 2 +- src/org/traccar/protocol/IntellitracFrameDecoder.java | 2 +- src/org/traccar/protocol/IntellitracProtocol.java | 2 +- src/org/traccar/protocol/IntellitracProtocolDecoder.java | 2 +- src/org/traccar/protocol/JpKorjarProtocolDecoder.java | 2 +- src/org/traccar/protocol/Jt600FrameDecoder.java | 2 +- src/org/traccar/protocol/Jt600Protocol.java | 2 +- src/org/traccar/protocol/Jt600ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Jt600ProtocolEncoder.java | 2 +- src/org/traccar/protocol/KenjiProtocolDecoder.java | 2 +- src/org/traccar/protocol/KhdProtocol.java | 2 +- src/org/traccar/protocol/KhdProtocolDecoder.java | 2 +- src/org/traccar/protocol/KhdProtocolEncoder.java | 2 +- src/org/traccar/protocol/L100FrameDecoder.java | 2 +- src/org/traccar/protocol/L100Protocol.java | 2 +- src/org/traccar/protocol/L100ProtocolDecoder.java | 2 +- src/org/traccar/protocol/LaipacProtocol.java | 2 +- src/org/traccar/protocol/LaipacProtocolDecoder.java | 2 +- src/org/traccar/protocol/M2mProtocol.java | 2 +- src/org/traccar/protocol/M2mProtocolDecoder.java | 2 +- src/org/traccar/protocol/ManPowerProtocol.java | 2 +- src/org/traccar/protocol/ManPowerProtocolDecoder.java | 2 +- src/org/traccar/protocol/MegastekFrameDecoder.java | 2 +- src/org/traccar/protocol/MegastekProtocol.java | 2 +- src/org/traccar/protocol/MegastekProtocolDecoder.java | 2 +- src/org/traccar/protocol/MeiligaoFrameDecoder.java | 2 +- src/org/traccar/protocol/MeiligaoProtocol.java | 2 +- src/org/traccar/protocol/MeiligaoProtocolDecoder.java | 2 +- src/org/traccar/protocol/MeiligaoProtocolEncoder.java | 2 +- src/org/traccar/protocol/MeitrackFrameDecoder.java | 2 +- src/org/traccar/protocol/MeitrackProtocol.java | 2 +- src/org/traccar/protocol/MeitrackProtocolDecoder.java | 2 +- src/org/traccar/protocol/MeitrackProtocolEncoder.java | 2 +- src/org/traccar/protocol/MiniFinderProtocol.java | 2 +- src/org/traccar/protocol/MiniFinderProtocolDecoder.java | 2 +- src/org/traccar/protocol/MiniFinderProtocolEncoder.java | 2 +- src/org/traccar/protocol/Mta6Protocol.java | 2 +- src/org/traccar/protocol/Mta6ProtocolDecoder.java | 2 +- src/org/traccar/protocol/MtxProtocol.java | 2 +- src/org/traccar/protocol/MtxProtocolDecoder.java | 2 +- src/org/traccar/protocol/MxtFrameDecoder.java | 2 +- src/org/traccar/protocol/MxtProtocol.java | 2 +- src/org/traccar/protocol/MxtProtocolDecoder.java | 2 +- src/org/traccar/protocol/NavigilFrameDecoder.java | 2 +- src/org/traccar/protocol/NavigilProtocol.java | 2 +- src/org/traccar/protocol/NavigilProtocolDecoder.java | 2 +- src/org/traccar/protocol/NavisProtocol.java | 2 +- src/org/traccar/protocol/NavisProtocolDecoder.java | 2 +- src/org/traccar/protocol/NoranProtocol.java | 2 +- src/org/traccar/protocol/NoranProtocolDecoder.java | 2 +- src/org/traccar/protocol/NoranProtocolEncoder.java | 2 +- src/org/traccar/protocol/NvsFrameDecoder.java | 2 +- src/org/traccar/protocol/NvsProtocol.java | 2 +- src/org/traccar/protocol/NvsProtocolDecoder.java | 2 +- src/org/traccar/protocol/ObdDongleProtocol.java | 2 +- src/org/traccar/protocol/ObdDongleProtocolDecoder.java | 2 +- src/org/traccar/protocol/OigoProtocol.java | 2 +- src/org/traccar/protocol/OigoProtocolDecoder.java | 2 +- src/org/traccar/protocol/OrionFrameDecoder.java | 2 +- src/org/traccar/protocol/OrionProtocol.java | 2 +- src/org/traccar/protocol/OrionProtocolDecoder.java | 2 +- src/org/traccar/protocol/OsmAndProtocol.java | 2 +- src/org/traccar/protocol/OsmAndProtocolDecoder.java | 2 +- src/org/traccar/protocol/PathAwayProtocol.java | 2 +- src/org/traccar/protocol/PathAwayProtocolDecoder.java | 2 +- src/org/traccar/protocol/PiligrimProtocol.java | 2 +- src/org/traccar/protocol/PiligrimProtocolDecoder.java | 2 +- src/org/traccar/protocol/ProgressProtocol.java | 2 +- src/org/traccar/protocol/ProgressProtocolDecoder.java | 2 +- src/org/traccar/protocol/Pt3000Protocol.java | 2 +- src/org/traccar/protocol/Pt3000ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Pt502FrameDecoder.java | 2 +- src/org/traccar/protocol/Pt502Protocol.java | 2 +- src/org/traccar/protocol/Pt502ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Pt502ProtocolEncoder.java | 2 +- src/org/traccar/protocol/RaveonProtocol.java | 2 +- src/org/traccar/protocol/RaveonProtocolDecoder.java | 2 +- src/org/traccar/protocol/RitiProtocol.java | 2 +- src/org/traccar/protocol/RitiProtocolDecoder.java | 2 +- src/org/traccar/protocol/RuptelaProtocol.java | 2 +- src/org/traccar/protocol/RuptelaProtocolDecoder.java | 2 +- src/org/traccar/protocol/RuptelaProtocolEncoder.java | 2 +- src/org/traccar/protocol/SanavProtocol.java | 2 +- src/org/traccar/protocol/SanavProtocolDecoder.java | 2 +- src/org/traccar/protocol/SkypatrolProtocol.java | 2 +- src/org/traccar/protocol/SkypatrolProtocolDecoder.java | 2 +- src/org/traccar/protocol/SmokeyProtocol.java | 2 +- src/org/traccar/protocol/SmokeyProtocolDecoder.java | 2 +- src/org/traccar/protocol/Stl060FrameDecoder.java | 2 +- src/org/traccar/protocol/Stl060Protocol.java | 2 +- src/org/traccar/protocol/Stl060ProtocolDecoder.java | 2 +- src/org/traccar/protocol/SuntechProtocol.java | 2 +- src/org/traccar/protocol/SuntechProtocolDecoder.java | 2 +- src/org/traccar/protocol/SuntechProtocolEncoder.java | 2 +- src/org/traccar/protocol/SupermateProtocol.java | 2 +- src/org/traccar/protocol/SupermateProtocolDecoder.java | 2 +- src/org/traccar/protocol/T55Protocol.java | 2 +- src/org/traccar/protocol/T55ProtocolDecoder.java | 2 +- src/org/traccar/protocol/T800xProtocol.java | 2 +- src/org/traccar/protocol/T800xProtocolDecoder.java | 2 +- src/org/traccar/protocol/T800xProtocolEncoder.java | 2 +- src/org/traccar/protocol/TaipProtocol.java | 2 +- src/org/traccar/protocol/TaipProtocolDecoder.java | 2 +- src/org/traccar/protocol/TelicFrameDecoder.java | 2 +- src/org/traccar/protocol/TelicProtocol.java | 2 +- src/org/traccar/protocol/TelicProtocolDecoder.java | 2 +- src/org/traccar/protocol/TeltonikaFrameDecoder.java | 2 +- src/org/traccar/protocol/TeltonikaProtocol.java | 2 +- src/org/traccar/protocol/TeltonikaProtocolDecoder.java | 2 +- src/org/traccar/protocol/TeltonikaProtocolEncoder.java | 2 +- src/org/traccar/protocol/ThinkRaceProtocol.java | 2 +- src/org/traccar/protocol/ThinkRaceProtocolDecoder.java | 2 +- src/org/traccar/protocol/Tk102Protocol.java | 2 +- src/org/traccar/protocol/Tk102ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Tk103Protocol.java | 2 +- src/org/traccar/protocol/Tk103ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Tlt2hProtocol.java | 2 +- src/org/traccar/protocol/Tlt2hProtocolDecoder.java | 2 +- src/org/traccar/protocol/TopflytechProtocol.java | 2 +- src/org/traccar/protocol/TopflytechProtocolDecoder.java | 2 +- src/org/traccar/protocol/TotemFrameDecoder.java | 2 +- src/org/traccar/protocol/TotemProtocol.java | 2 +- src/org/traccar/protocol/TotemProtocolDecoder.java | 2 +- src/org/traccar/protocol/TotemProtocolEncoder.java | 2 +- src/org/traccar/protocol/Tr20Protocol.java | 2 +- src/org/traccar/protocol/Tr20ProtocolDecoder.java | 2 +- src/org/traccar/protocol/Tr900Protocol.java | 2 +- src/org/traccar/protocol/Tr900ProtocolDecoder.java | 2 +- src/org/traccar/protocol/TrackboxProtocol.java | 2 +- src/org/traccar/protocol/TrackboxProtocolDecoder.java | 2 +- src/org/traccar/protocol/TrakMateProtocol.java | 2 +- src/org/traccar/protocol/TrakMateProtocolDecoder.java | 2 +- src/org/traccar/protocol/TramigoFrameDecoder.java | 2 +- src/org/traccar/protocol/TramigoProtocol.java | 2 +- src/org/traccar/protocol/TramigoProtocolDecoder.java | 2 +- src/org/traccar/protocol/TrvProtocol.java | 2 +- src/org/traccar/protocol/TrvProtocolDecoder.java | 2 +- src/org/traccar/protocol/Tt8850Protocol.java | 2 +- src/org/traccar/protocol/Tt8850ProtocolDecoder.java | 2 +- src/org/traccar/protocol/TytanProtocol.java | 2 +- src/org/traccar/protocol/TytanProtocolDecoder.java | 2 +- src/org/traccar/protocol/TzoneProtocol.java | 2 +- src/org/traccar/protocol/TzoneProtocolDecoder.java | 2 +- src/org/traccar/protocol/UlbotechFrameDecoder.java | 2 +- src/org/traccar/protocol/UlbotechProtocol.java | 2 +- src/org/traccar/protocol/UlbotechProtocolDecoder.java | 2 +- src/org/traccar/protocol/UproProtocol.java | 2 +- src/org/traccar/protocol/UproProtocolDecoder.java | 2 +- src/org/traccar/protocol/V680Protocol.java | 2 +- src/org/traccar/protocol/V680ProtocolDecoder.java | 2 +- src/org/traccar/protocol/VisiontekProtocol.java | 2 +- src/org/traccar/protocol/VisiontekProtocolDecoder.java | 2 +- src/org/traccar/protocol/WatchProtocol.java | 2 +- src/org/traccar/protocol/WatchProtocolDecoder.java | 2 +- src/org/traccar/protocol/WatchProtocolEncoder.java | 2 +- src/org/traccar/protocol/WialonProtocol.java | 2 +- src/org/traccar/protocol/WialonProtocolDecoder.java | 2 +- src/org/traccar/protocol/WialonProtocolEncoder.java | 4 ++-- src/org/traccar/protocol/WondexFrameDecoder.java | 2 +- src/org/traccar/protocol/WondexProtocol.java | 2 +- src/org/traccar/protocol/WondexProtocolDecoder.java | 2 +- src/org/traccar/protocol/WondexProtocolEncoder.java | 2 +- src/org/traccar/protocol/XexunFrameDecoder.java | 2 +- src/org/traccar/protocol/XexunProtocol.java | 2 +- src/org/traccar/protocol/XexunProtocolDecoder.java | 2 +- src/org/traccar/protocol/XirgoProtocol.java | 2 +- src/org/traccar/protocol/XirgoProtocolDecoder.java | 2 +- src/org/traccar/protocol/Xt013Protocol.java | 2 +- src/org/traccar/protocol/Xt013ProtocolDecoder.java | 2 +- src/org/traccar/protocol/YwtProtocol.java | 2 +- src/org/traccar/protocol/YwtProtocolDecoder.java | 2 +- src/org/traccar/reports/Events.java | 4 ++-- src/org/traccar/reports/ReportUtils.java | 4 ++-- src/org/traccar/reports/Route.java | 4 ++-- src/org/traccar/reports/Summary.java | 4 ++-- src/org/traccar/reports/Trips.java | 4 ++-- src/org/traccar/reports/model/BaseReport.java | 4 ++-- src/org/traccar/reports/model/DeviceReport.java | 4 ++-- src/org/traccar/reports/model/SummaryReport.java | 4 ++-- src/org/traccar/reports/model/TripReport.java | 4 ++-- src/org/traccar/web/ConsoleServlet.java | 2 +- src/org/traccar/web/CsvBuilder.java | 4 ++-- src/org/traccar/web/GpxBuilder.java | 4 ++-- src/org/traccar/web/JsonConverter.java | 2 +- src/org/traccar/web/WebServer.java | 2 +- test/org/traccar/notification/NotificiationMailTest.java | 2 +- 447 files changed, 465 insertions(+), 465 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/BaseDataHandler.java b/src/org/traccar/BaseDataHandler.java index 5ab124a79..0c71a6a4d 100644 --- a/src/org/traccar/BaseDataHandler.java +++ b/src/org/traccar/BaseDataHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/BaseEventHandler.java b/src/org/traccar/BaseEventHandler.java index 82e78c6b3..588406bf4 100644 --- a/src/org/traccar/BaseEventHandler.java +++ b/src/org/traccar/BaseEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java index 6d7089644..22bb80ca1 100644 --- a/src/org/traccar/BasePipelineFactory.java +++ b/src/org/traccar/BasePipelineFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/BaseProtocol.java b/src/org/traccar/BaseProtocol.java index eb09022f5..4cbb5bd7c 100644 --- a/src/org/traccar/BaseProtocol.java +++ b/src/org/traccar/BaseProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/BaseProtocolDecoder.java b/src/org/traccar/BaseProtocolDecoder.java index f1101567d..d8130c79e 100644 --- a/src/org/traccar/BaseProtocolDecoder.java +++ b/src/org/traccar/BaseProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/BaseProtocolEncoder.java b/src/org/traccar/BaseProtocolEncoder.java index a9aa24cb0..5c2c503e4 100644 --- a/src/org/traccar/BaseProtocolEncoder.java +++ b/src/org/traccar/BaseProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/CharacterDelimiterFrameDecoder.java b/src/org/traccar/CharacterDelimiterFrameDecoder.java index 96e86a947..d71974e78 100644 --- a/src/org/traccar/CharacterDelimiterFrameDecoder.java +++ b/src/org/traccar/CharacterDelimiterFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/Config.java b/src/org/traccar/Config.java index e63444f1f..e59c3c554 100644 --- a/src/org/traccar/Config.java +++ b/src/org/traccar/Config.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java index 827761cc5..581f00082 100644 --- a/src/org/traccar/Context.java +++ b/src/org/traccar/Context.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/CoordinatesHandler.java b/src/org/traccar/CoordinatesHandler.java index b9c33dc2b..80a423da1 100644 --- a/src/org/traccar/CoordinatesHandler.java +++ b/src/org/traccar/CoordinatesHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/CopyAttributesHandler.java b/src/org/traccar/CopyAttributesHandler.java index 10a065113..c4cac2e7f 100644 --- a/src/org/traccar/CopyAttributesHandler.java +++ b/src/org/traccar/CopyAttributesHandler.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/DefaultDataHandler.java b/src/org/traccar/DefaultDataHandler.java index 7194c6a77..e32fe0e7d 100644 --- a/src/org/traccar/DefaultDataHandler.java +++ b/src/org/traccar/DefaultDataHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/DeviceSession.java b/src/org/traccar/DeviceSession.java index 5e2686f23..36958287d 100644 --- a/src/org/traccar/DeviceSession.java +++ b/src/org/traccar/DeviceSession.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/DistanceHandler.java b/src/org/traccar/DistanceHandler.java index 7537e2867..138fc85d6 100644 --- a/src/org/traccar/DistanceHandler.java +++ b/src/org/traccar/DistanceHandler.java @@ -1,6 +1,6 @@ /* * Copyright 2015 Amila Silva - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/ExtendedObjectDecoder.java b/src/org/traccar/ExtendedObjectDecoder.java index 1cfc93541..ec03afa60 100644 --- a/src/org/traccar/ExtendedObjectDecoder.java +++ b/src/org/traccar/ExtendedObjectDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index f9904ccaf..40676c72d 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 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. diff --git a/src/org/traccar/GlobalChannelFactory.java b/src/org/traccar/GlobalChannelFactory.java index aa4f855c5..c5cd1a697 100644 --- a/src/org/traccar/GlobalChannelFactory.java +++ b/src/org/traccar/GlobalChannelFactory.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 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. diff --git a/src/org/traccar/GlobalTimer.java b/src/org/traccar/GlobalTimer.java index f5dc9b87a..70e6e2e45 100644 --- a/src/org/traccar/GlobalTimer.java +++ b/src/org/traccar/GlobalTimer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 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. diff --git a/src/org/traccar/HemisphereHandler.java b/src/org/traccar/HemisphereHandler.java index b46d0791c..b1e7d3fb2 100644 --- a/src/org/traccar/HemisphereHandler.java +++ b/src/org/traccar/HemisphereHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/LocationProviderHandler.java b/src/org/traccar/LocationProviderHandler.java index 8d5647d4b..d47f05bd1 100644 --- a/src/org/traccar/LocationProviderHandler.java +++ b/src/org/traccar/LocationProviderHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/Main.java b/src/org/traccar/Main.java index e992691ad..21625d3c1 100644 --- a/src/org/traccar/Main.java +++ b/src/org/traccar/Main.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/MainEventHandler.java b/src/org/traccar/MainEventHandler.java index 9f172c584..ec31c5efd 100644 --- a/src/org/traccar/MainEventHandler.java +++ b/src/org/traccar/MainEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/RemoteAddressHandler.java b/src/org/traccar/RemoteAddressHandler.java index 3d9695dab..188bbcab9 100644 --- a/src/org/traccar/RemoteAddressHandler.java +++ b/src/org/traccar/RemoteAddressHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/ReverseGeocoderHandler.java b/src/org/traccar/ReverseGeocoderHandler.java index 0b4fd53ce..88875fb3a 100644 --- a/src/org/traccar/ReverseGeocoderHandler.java +++ b/src/org/traccar/ReverseGeocoderHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/ServerManager.java b/src/org/traccar/ServerManager.java index 010438a44..953428b8f 100644 --- a/src/org/traccar/ServerManager.java +++ b/src/org/traccar/ServerManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/StringProtocolEncoder.java b/src/org/traccar/StringProtocolEncoder.java index 119b40cc4..1945ae174 100644 --- a/src/org/traccar/StringProtocolEncoder.java +++ b/src/org/traccar/StringProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/TrackerServer.java b/src/org/traccar/TrackerServer.java index 7bbab071d..108688fb8 100644 --- a/src/org/traccar/TrackerServer.java +++ b/src/org/traccar/TrackerServer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2014 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. diff --git a/src/org/traccar/WebDataHandler.java b/src/org/traccar/WebDataHandler.java index b179fac8f..b9de37ed2 100644 --- a/src/org/traccar/WebDataHandler.java +++ b/src/org/traccar/WebDataHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/AsyncSocket.java b/src/org/traccar/api/AsyncSocket.java index 4422dbccd..7ac3810fa 100644 --- a/src/org/traccar/api/AsyncSocket.java +++ b/src/org/traccar/api/AsyncSocket.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/AsyncSocketServlet.java b/src/org/traccar/api/AsyncSocketServlet.java index ef6cef732..9318b6fc6 100644 --- a/src/org/traccar/api/AsyncSocketServlet.java +++ b/src/org/traccar/api/AsyncSocketServlet.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/BaseResource.java b/src/org/traccar/api/BaseResource.java index 567b9735a..44ef33c53 100644 --- a/src/org/traccar/api/BaseResource.java +++ b/src/org/traccar/api/BaseResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/CorsResponseFilter.java b/src/org/traccar/api/CorsResponseFilter.java index 459fcee66..70ea7e3e1 100644 --- a/src/org/traccar/api/CorsResponseFilter.java +++ b/src/org/traccar/api/CorsResponseFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/ObjectMapperProvider.java b/src/org/traccar/api/ObjectMapperProvider.java index 6f654118a..c916c1f4c 100644 --- a/src/org/traccar/api/ObjectMapperProvider.java +++ b/src/org/traccar/api/ObjectMapperProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/ResourceErrorHandler.java b/src/org/traccar/api/ResourceErrorHandler.java index 2f0c21a63..1d618b08d 100644 --- a/src/org/traccar/api/ResourceErrorHandler.java +++ b/src/org/traccar/api/ResourceErrorHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index 9e0f03de7..fd4c77525 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/UserPrincipal.java b/src/org/traccar/api/UserPrincipal.java index 25fcdb233..80e92c2dd 100644 --- a/src/org/traccar/api/UserPrincipal.java +++ b/src/org/traccar/api/UserPrincipal.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/UserSecurityContext.java b/src/org/traccar/api/UserSecurityContext.java index 0ff67a0f8..55c0621bc 100644 --- a/src/org/traccar/api/UserSecurityContext.java +++ b/src/org/traccar/api/UserSecurityContext.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/resource/AttributeAliasResource.java b/src/org/traccar/api/resource/AttributeAliasResource.java index 2417fb0ec..9e01432d3 100644 --- a/src/org/traccar/api/resource/AttributeAliasResource.java +++ b/src/org/traccar/api/resource/AttributeAliasResource.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/api/resource/CommandResource.java b/src/org/traccar/api/resource/CommandResource.java index f41faae2e..cce2dac2b 100644 --- a/src/org/traccar/api/resource/CommandResource.java +++ b/src/org/traccar/api/resource/CommandResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/resource/DeviceGeofenceResource.java b/src/org/traccar/api/resource/DeviceGeofenceResource.java index 27535617d..6254fe3cf 100644 --- a/src/org/traccar/api/resource/DeviceGeofenceResource.java +++ b/src/org/traccar/api/resource/DeviceGeofenceResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/DevicePermissionResource.java b/src/org/traccar/api/resource/DevicePermissionResource.java index 7faa1ab09..3b89507fa 100644 --- a/src/org/traccar/api/resource/DevicePermissionResource.java +++ b/src/org/traccar/api/resource/DevicePermissionResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/resource/DeviceResource.java b/src/org/traccar/api/resource/DeviceResource.java index 1f65fa041..f20ed86ad 100644 --- a/src/org/traccar/api/resource/DeviceResource.java +++ b/src/org/traccar/api/resource/DeviceResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/resource/GeofencePermissionResource.java b/src/org/traccar/api/resource/GeofencePermissionResource.java index 3a82845f5..8faa63d85 100644 --- a/src/org/traccar/api/resource/GeofencePermissionResource.java +++ b/src/org/traccar/api/resource/GeofencePermissionResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/GeofenceResource.java b/src/org/traccar/api/resource/GeofenceResource.java index 615606cdc..df5eb2414 100644 --- a/src/org/traccar/api/resource/GeofenceResource.java +++ b/src/org/traccar/api/resource/GeofenceResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/GroupGeofenceResource.java b/src/org/traccar/api/resource/GroupGeofenceResource.java index 1ef495a86..81fd4e45f 100644 --- a/src/org/traccar/api/resource/GroupGeofenceResource.java +++ b/src/org/traccar/api/resource/GroupGeofenceResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/GroupPermissionResource.java b/src/org/traccar/api/resource/GroupPermissionResource.java index 94100362b..07f101765 100644 --- a/src/org/traccar/api/resource/GroupPermissionResource.java +++ b/src/org/traccar/api/resource/GroupPermissionResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/GroupResource.java b/src/org/traccar/api/resource/GroupResource.java index 6b722ef6d..0bc42ea97 100644 --- a/src/org/traccar/api/resource/GroupResource.java +++ b/src/org/traccar/api/resource/GroupResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/NotificationResource.java b/src/org/traccar/api/resource/NotificationResource.java index 5bec7fd85..9010babf2 100644 --- a/src/org/traccar/api/resource/NotificationResource.java +++ b/src/org/traccar/api/resource/NotificationResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/PositionResource.java b/src/org/traccar/api/resource/PositionResource.java index 1ba126b62..c1cfc0b5c 100644 --- a/src/org/traccar/api/resource/PositionResource.java +++ b/src/org/traccar/api/resource/PositionResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/api/resource/ServerResource.java b/src/org/traccar/api/resource/ServerResource.java index 0ca0d62aa..034a5c492 100644 --- a/src/org/traccar/api/resource/ServerResource.java +++ b/src/org/traccar/api/resource/ServerResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index deed70b37..2847e41c1 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/api/resource/StatisticsResource.java b/src/org/traccar/api/resource/StatisticsResource.java index f63fc0ddb..e801d4ff3 100644 --- a/src/org/traccar/api/resource/StatisticsResource.java +++ b/src/org/traccar/api/resource/StatisticsResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index 7790dc908..f0a8597cc 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/database/ActiveDevice.java b/src/org/traccar/database/ActiveDevice.java index 3f2510af1..6109bc517 100644 --- a/src/org/traccar/database/ActiveDevice.java +++ b/src/org/traccar/database/ActiveDevice.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/database/AliasesManager.java b/src/org/traccar/database/AliasesManager.java index 6c09e8731..4f4f09731 100644 --- a/src/org/traccar/database/AliasesManager.java +++ b/src/org/traccar/database/AliasesManager.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index 2017e81a0..216c90bc2 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index e98e1429c..afa8b1677 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index f71b9308c..5681602fe 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/database/GeofenceManager.java b/src/org/traccar/database/GeofenceManager.java index 74dff70f4..e2e0c12d4 100644 --- a/src/org/traccar/database/GeofenceManager.java +++ b/src/org/traccar/database/GeofenceManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/database/GroupTree.java b/src/org/traccar/database/GroupTree.java index 9062e7aa8..8798f55bc 100644 --- a/src/org/traccar/database/GroupTree.java +++ b/src/org/traccar/database/GroupTree.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/database/IdentityManager.java b/src/org/traccar/database/IdentityManager.java index 8507d1f2e..db8e9c1c7 100644 --- a/src/org/traccar/database/IdentityManager.java +++ b/src/org/traccar/database/IdentityManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index 779f42483..110f699b7 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index b9707ab7d..b0ae504d0 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/database/QueryBuilder.java b/src/org/traccar/database/QueryBuilder.java index 1a83daab9..50d689a2a 100644 --- a/src/org/traccar/database/QueryBuilder.java +++ b/src/org/traccar/database/QueryBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/database/StatisticsManager.java b/src/org/traccar/database/StatisticsManager.java index b9af4d9b7..5b0aa5f41 100644 --- a/src/org/traccar/database/StatisticsManager.java +++ b/src/org/traccar/database/StatisticsManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/events/AlertEventHandler.java b/src/org/traccar/events/AlertEventHandler.java index 61c2d7b16..296fe488c 100644 --- a/src/org/traccar/events/AlertEventHandler.java +++ b/src/org/traccar/events/AlertEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/events/CommandResultEventHandler.java b/src/org/traccar/events/CommandResultEventHandler.java index 3f4ff521b..aaa1d23f0 100644 --- a/src/org/traccar/events/CommandResultEventHandler.java +++ b/src/org/traccar/events/CommandResultEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/events/GeofenceEventHandler.java b/src/org/traccar/events/GeofenceEventHandler.java index 6126331bd..d31e516ef 100644 --- a/src/org/traccar/events/GeofenceEventHandler.java +++ b/src/org/traccar/events/GeofenceEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/events/IgnitionEventHandler.java b/src/org/traccar/events/IgnitionEventHandler.java index e241e450b..b52083f57 100644 --- a/src/org/traccar/events/IgnitionEventHandler.java +++ b/src/org/traccar/events/IgnitionEventHandler.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/events/MotionEventHandler.java b/src/org/traccar/events/MotionEventHandler.java index 33c7735cd..db19535a0 100644 --- a/src/org/traccar/events/MotionEventHandler.java +++ b/src/org/traccar/events/MotionEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index 57f60d864..c3e3e19cb 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/geocode/Address.java b/src/org/traccar/geocode/Address.java index 144a49474..d77602f2c 100644 --- a/src/org/traccar/geocode/Address.java +++ b/src/org/traccar/geocode/Address.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/geocode/AddressFormat.java b/src/org/traccar/geocode/AddressFormat.java index a2a0862bf..8046abfd7 100644 --- a/src/org/traccar/geocode/AddressFormat.java +++ b/src/org/traccar/geocode/AddressFormat.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/geocode/GeocodeFarmReverseGeocoder.java b/src/org/traccar/geocode/GeocodeFarmReverseGeocoder.java index 306fc25b8..477eec15b 100644 --- a/src/org/traccar/geocode/GeocodeFarmReverseGeocoder.java +++ b/src/org/traccar/geocode/GeocodeFarmReverseGeocoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/geocode/GisgraphyReverseGeocoder.java b/src/org/traccar/geocode/GisgraphyReverseGeocoder.java index 18f59c7b0..dd5e1ff5b 100644 --- a/src/org/traccar/geocode/GisgraphyReverseGeocoder.java +++ b/src/org/traccar/geocode/GisgraphyReverseGeocoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/geocode/GoogleReverseGeocoder.java b/src/org/traccar/geocode/GoogleReverseGeocoder.java index 1f607df78..b9835440e 100644 --- a/src/org/traccar/geocode/GoogleReverseGeocoder.java +++ b/src/org/traccar/geocode/GoogleReverseGeocoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/geocode/JsonReverseGeocoder.java b/src/org/traccar/geocode/JsonReverseGeocoder.java index dcc880ef9..c107d24e8 100644 --- a/src/org/traccar/geocode/JsonReverseGeocoder.java +++ b/src/org/traccar/geocode/JsonReverseGeocoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/geocode/NominatimReverseGeocoder.java b/src/org/traccar/geocode/NominatimReverseGeocoder.java index c1481d1cb..0fbeaef83 100644 --- a/src/org/traccar/geocode/NominatimReverseGeocoder.java +++ b/src/org/traccar/geocode/NominatimReverseGeocoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 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. diff --git a/src/org/traccar/geocode/OpenCageReverseGeocoder.java b/src/org/traccar/geocode/OpenCageReverseGeocoder.java index b5b31179e..df447d59e 100644 --- a/src/org/traccar/geocode/OpenCageReverseGeocoder.java +++ b/src/org/traccar/geocode/OpenCageReverseGeocoder.java @@ -1,6 +1,6 @@ /* * Copyright 2014 - 2015 Stefaan Van Dooren (stefaan.vandooren@gmail.com) - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/geocode/ReverseGeocoder.java b/src/org/traccar/geocode/ReverseGeocoder.java index 5d985fb31..e2641fa37 100644 --- a/src/org/traccar/geocode/ReverseGeocoder.java +++ b/src/org/traccar/geocode/ReverseGeocoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2013 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. diff --git a/src/org/traccar/geofence/GeofenceCircle.java b/src/org/traccar/geofence/GeofenceCircle.java index a36620aec..d78734714 100644 --- a/src/org/traccar/geofence/GeofenceCircle.java +++ b/src/org/traccar/geofence/GeofenceCircle.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/geofence/GeofenceGeometry.java b/src/org/traccar/geofence/GeofenceGeometry.java index e717ede0b..6b5b0acb7 100644 --- a/src/org/traccar/geofence/GeofenceGeometry.java +++ b/src/org/traccar/geofence/GeofenceGeometry.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/geofence/GeofencePolygon.java b/src/org/traccar/geofence/GeofencePolygon.java index 33d91c0ff..03638d6c9 100644 --- a/src/org/traccar/geofence/GeofencePolygon.java +++ b/src/org/traccar/geofence/GeofencePolygon.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/helper/BcdUtil.java b/src/org/traccar/helper/BcdUtil.java index a248daf22..495f94104 100644 --- a/src/org/traccar/helper/BcdUtil.java +++ b/src/org/traccar/helper/BcdUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/helper/BitUtil.java b/src/org/traccar/helper/BitUtil.java index 31271a691..b6108edff 100644 --- a/src/org/traccar/helper/BitUtil.java +++ b/src/org/traccar/helper/BitUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/helper/Checksum.java b/src/org/traccar/helper/Checksum.java index 815962be0..629f6e7ca 100644 --- a/src/org/traccar/helper/Checksum.java +++ b/src/org/traccar/helper/Checksum.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/helper/DateBuilder.java b/src/org/traccar/helper/DateBuilder.java index bf4432efc..6e1b779f0 100644 --- a/src/org/traccar/helper/DateBuilder.java +++ b/src/org/traccar/helper/DateBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/helper/DateUtil.java b/src/org/traccar/helper/DateUtil.java index c2e691d5d..ad8534eb8 100644 --- a/src/org/traccar/helper/DateUtil.java +++ b/src/org/traccar/helper/DateUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/helper/DistanceCalculator.java b/src/org/traccar/helper/DistanceCalculator.java index d191a27af..3452597ab 100644 --- a/src/org/traccar/helper/DistanceCalculator.java +++ b/src/org/traccar/helper/DistanceCalculator.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/helper/Hashing.java b/src/org/traccar/helper/Hashing.java index 38ae5813e..55086bac7 100644 --- a/src/org/traccar/helper/Hashing.java +++ b/src/org/traccar/helper/Hashing.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/helper/LocationTree.java b/src/org/traccar/helper/LocationTree.java index 5e16fc095..3aff3ce33 100644 --- a/src/org/traccar/helper/LocationTree.java +++ b/src/org/traccar/helper/LocationTree.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/helper/Log.java b/src/org/traccar/helper/Log.java index d13210a17..bdf83c4f3 100644 --- a/src/org/traccar/helper/Log.java +++ b/src/org/traccar/helper/Log.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2013 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. diff --git a/src/org/traccar/helper/ObdDecoder.java b/src/org/traccar/helper/ObdDecoder.java index 5a75fa368..aea23ca60 100644 --- a/src/org/traccar/helper/ObdDecoder.java +++ b/src/org/traccar/helper/ObdDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/helper/Parser.java b/src/org/traccar/helper/Parser.java index 2f99d6e49..d64993ccb 100644 --- a/src/org/traccar/helper/Parser.java +++ b/src/org/traccar/helper/Parser.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/helper/PatternBuilder.java b/src/org/traccar/helper/PatternBuilder.java index 1e7613043..f3de5c1e5 100644 --- a/src/org/traccar/helper/PatternBuilder.java +++ b/src/org/traccar/helper/PatternBuilder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/helper/PatternUtil.java b/src/org/traccar/helper/PatternUtil.java index f665eb30d..c308012e6 100644 --- a/src/org/traccar/helper/PatternUtil.java +++ b/src/org/traccar/helper/PatternUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/helper/StringFinder.java b/src/org/traccar/helper/StringFinder.java index 6c1dafcfd..2fa0aa9a4 100644 --- a/src/org/traccar/helper/StringFinder.java +++ b/src/org/traccar/helper/StringFinder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/helper/UnitsConverter.java b/src/org/traccar/helper/UnitsConverter.java index 70916727e..00b00861e 100644 --- a/src/org/traccar/helper/UnitsConverter.java +++ b/src/org/traccar/helper/UnitsConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/location/BaseLocationProvider.java b/src/org/traccar/location/BaseLocationProvider.java index 7778cc0c5..d228685e2 100644 --- a/src/org/traccar/location/BaseLocationProvider.java +++ b/src/org/traccar/location/BaseLocationProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/location/CellInfo.java b/src/org/traccar/location/CellInfo.java index fe61f3bec..2257cb1e8 100644 --- a/src/org/traccar/location/CellInfo.java +++ b/src/org/traccar/location/CellInfo.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/location/LocationProvider.java b/src/org/traccar/location/LocationProvider.java index 2bff1a7ca..cc445c2b3 100644 --- a/src/org/traccar/location/LocationProvider.java +++ b/src/org/traccar/location/LocationProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/location/MozillaLocationProvider.java b/src/org/traccar/location/MozillaLocationProvider.java index d30fbf642..37040a95e 100644 --- a/src/org/traccar/location/MozillaLocationProvider.java +++ b/src/org/traccar/location/MozillaLocationProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/location/OpenCellIdLocationProvider.java b/src/org/traccar/location/OpenCellIdLocationProvider.java index 94cc1a4e4..d5d1b0ace 100644 --- a/src/org/traccar/location/OpenCellIdLocationProvider.java +++ b/src/org/traccar/location/OpenCellIdLocationProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/model/AttributeAlias.java b/src/org/traccar/model/AttributeAlias.java index 023925ac3..2835c0558 100644 --- a/src/org/traccar/model/AttributeAlias.java +++ b/src/org/traccar/model/AttributeAlias.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/model/Command.java b/src/org/traccar/model/Command.java index 67c624fcd..51a61b966 100644 --- a/src/org/traccar/model/Command.java +++ b/src/org/traccar/model/Command.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/model/Device.java b/src/org/traccar/model/Device.java index 821984c47..e492a6120 100644 --- a/src/org/traccar/model/Device.java +++ b/src/org/traccar/model/Device.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/model/DeviceGeofence.java b/src/org/traccar/model/DeviceGeofence.java index 05f06bb3d..00c99add6 100644 --- a/src/org/traccar/model/DeviceGeofence.java +++ b/src/org/traccar/model/DeviceGeofence.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/DevicePermission.java b/src/org/traccar/model/DevicePermission.java index b3bc0cae0..c62173132 100644 --- a/src/org/traccar/model/DevicePermission.java +++ b/src/org/traccar/model/DevicePermission.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/model/DeviceTotalDistance.java b/src/org/traccar/model/DeviceTotalDistance.java index 1faa7ce11..4c89b7689 100644 --- a/src/org/traccar/model/DeviceTotalDistance.java +++ b/src/org/traccar/model/DeviceTotalDistance.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java index 5b4b0e089..cdb79f04d 100644 --- a/src/org/traccar/model/Event.java +++ b/src/org/traccar/model/Event.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/Extensible.java b/src/org/traccar/model/Extensible.java index eceeccadf..efe60fb75 100644 --- a/src/org/traccar/model/Extensible.java +++ b/src/org/traccar/model/Extensible.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/Geofence.java b/src/org/traccar/model/Geofence.java index 9a60f784f..ecfd3101c 100644 --- a/src/org/traccar/model/Geofence.java +++ b/src/org/traccar/model/Geofence.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/GeofencePermission.java b/src/org/traccar/model/GeofencePermission.java index 269918d66..464f4e9eb 100644 --- a/src/org/traccar/model/GeofencePermission.java +++ b/src/org/traccar/model/GeofencePermission.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/Group.java b/src/org/traccar/model/Group.java index e70b3f3d5..c21d43127 100644 --- a/src/org/traccar/model/Group.java +++ b/src/org/traccar/model/Group.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/GroupGeofence.java b/src/org/traccar/model/GroupGeofence.java index 0e261fd54..736e6c704 100644 --- a/src/org/traccar/model/GroupGeofence.java +++ b/src/org/traccar/model/GroupGeofence.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/GroupPermission.java b/src/org/traccar/model/GroupPermission.java index 9b0011575..59b41b049 100644 --- a/src/org/traccar/model/GroupPermission.java +++ b/src/org/traccar/model/GroupPermission.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/Message.java b/src/org/traccar/model/Message.java index 55d9fd0c7..ab472202b 100644 --- a/src/org/traccar/model/Message.java +++ b/src/org/traccar/model/Message.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/model/MiscFormatter.java b/src/org/traccar/model/MiscFormatter.java index 9bb856400..6194a998f 100644 --- a/src/org/traccar/model/MiscFormatter.java +++ b/src/org/traccar/model/MiscFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/model/Notification.java b/src/org/traccar/model/Notification.java index 0664d6a00..64e1ac60c 100644 --- a/src/org/traccar/model/Notification.java +++ b/src/org/traccar/model/Notification.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index abe8dd813..183fab72f 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/model/Server.java b/src/org/traccar/model/Server.java index b922c4340..060a7d1d6 100644 --- a/src/org/traccar/model/Server.java +++ b/src/org/traccar/model/Server.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/model/Statistics.java b/src/org/traccar/model/Statistics.java index 0461ebd7e..f458ddfad 100644 --- a/src/org/traccar/model/Statistics.java +++ b/src/org/traccar/model/Statistics.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index 860c91629..aa0b33713 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/notification/EventForwarder.java b/src/org/traccar/notification/EventForwarder.java index 6a1dc32a4..9bd116339 100644 --- a/src/org/traccar/notification/EventForwarder.java +++ b/src/org/traccar/notification/EventForwarder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index ae1a58d3a..b48fe9efc 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/notification/NotificationMail.java b/src/org/traccar/notification/NotificationMail.java index 1298a484d..c7c1d689c 100644 --- a/src/org/traccar/notification/NotificationMail.java +++ b/src/org/traccar/notification/NotificationMail.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/notification/PropertiesProvider.java b/src/org/traccar/notification/PropertiesProvider.java index 9a7338591..9136288f8 100644 --- a/src/org/traccar/notification/PropertiesProvider.java +++ b/src/org/traccar/notification/PropertiesProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/AdmProtocol.java b/src/org/traccar/protocol/AdmProtocol.java index 067ccf053..442121f0a 100644 --- a/src/org/traccar/protocol/AdmProtocol.java +++ b/src/org/traccar/protocol/AdmProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AdmProtocolDecoder.java b/src/org/traccar/protocol/AdmProtocolDecoder.java index e234e3f0b..72a6e5bce 100644 --- a/src/org/traccar/protocol/AdmProtocolDecoder.java +++ b/src/org/traccar/protocol/AdmProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 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. diff --git a/src/org/traccar/protocol/ApelProtocol.java b/src/org/traccar/protocol/ApelProtocol.java index 47bce37a0..690b5ed99 100644 --- a/src/org/traccar/protocol/ApelProtocol.java +++ b/src/org/traccar/protocol/ApelProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/ApelProtocolDecoder.java b/src/org/traccar/protocol/ApelProtocolDecoder.java index f10c4b5b1..aa58e478f 100644 --- a/src/org/traccar/protocol/ApelProtocolDecoder.java +++ b/src/org/traccar/protocol/ApelProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2014 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. diff --git a/src/org/traccar/protocol/AplicomFrameDecoder.java b/src/org/traccar/protocol/AplicomFrameDecoder.java index 8a896535c..785d90767 100644 --- a/src/org/traccar/protocol/AplicomFrameDecoder.java +++ b/src/org/traccar/protocol/AplicomFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/AplicomProtocol.java b/src/org/traccar/protocol/AplicomProtocol.java index 5155133c9..80f6f528f 100644 --- a/src/org/traccar/protocol/AplicomProtocol.java +++ b/src/org/traccar/protocol/AplicomProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AplicomProtocolDecoder.java b/src/org/traccar/protocol/AplicomProtocolDecoder.java index d1f92ea0a..8c06aad6f 100644 --- a/src/org/traccar/protocol/AplicomProtocolDecoder.java +++ b/src/org/traccar/protocol/AplicomProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/AppelloProtocol.java b/src/org/traccar/protocol/AppelloProtocol.java index b129a7520..8581850a1 100755 --- a/src/org/traccar/protocol/AppelloProtocol.java +++ b/src/org/traccar/protocol/AppelloProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/AppelloProtocolDecoder.java b/src/org/traccar/protocol/AppelloProtocolDecoder.java index 4535464ed..02c966834 100755 --- a/src/org/traccar/protocol/AppelloProtocolDecoder.java +++ b/src/org/traccar/protocol/AppelloProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/AquilaProtocol.java b/src/org/traccar/protocol/AquilaProtocol.java index 9607edd55..c1de71cd3 100644 --- a/src/org/traccar/protocol/AquilaProtocol.java +++ b/src/org/traccar/protocol/AquilaProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AquilaProtocolDecoder.java b/src/org/traccar/protocol/AquilaProtocolDecoder.java index 514448d9b..1ce763463 100644 --- a/src/org/traccar/protocol/AquilaProtocolDecoder.java +++ b/src/org/traccar/protocol/AquilaProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Ardi01Protocol.java b/src/org/traccar/protocol/Ardi01Protocol.java index 66916db17..446592bd0 100644 --- a/src/org/traccar/protocol/Ardi01Protocol.java +++ b/src/org/traccar/protocol/Ardi01Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Ardi01ProtocolDecoder.java b/src/org/traccar/protocol/Ardi01ProtocolDecoder.java index 1eaa65d84..71beb7d1d 100644 --- a/src/org/traccar/protocol/Ardi01ProtocolDecoder.java +++ b/src/org/traccar/protocol/Ardi01ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/ArknavProtocol.java b/src/org/traccar/protocol/ArknavProtocol.java index 6b9398f68..c22e5f443 100644 --- a/src/org/traccar/protocol/ArknavProtocol.java +++ b/src/org/traccar/protocol/ArknavProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ArknavProtocolDecoder.java b/src/org/traccar/protocol/ArknavProtocolDecoder.java index 6c6edc905..d6abd4134 100644 --- a/src/org/traccar/protocol/ArknavProtocolDecoder.java +++ b/src/org/traccar/protocol/ArknavProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ArknavX8Protocol.java b/src/org/traccar/protocol/ArknavX8Protocol.java index 3b78a27ff..e759b5294 100644 --- a/src/org/traccar/protocol/ArknavX8Protocol.java +++ b/src/org/traccar/protocol/ArknavX8Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ArknavX8ProtocolDecoder.java b/src/org/traccar/protocol/ArknavX8ProtocolDecoder.java index c0a18311e..214ccfae2 100644 --- a/src/org/traccar/protocol/ArknavX8ProtocolDecoder.java +++ b/src/org/traccar/protocol/ArknavX8ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ArnaviProtocol.java b/src/org/traccar/protocol/ArnaviProtocol.java index 29661b8d4..956f2329a 100644 --- a/src/org/traccar/protocol/ArnaviProtocol.java +++ b/src/org/traccar/protocol/ArnaviProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/ArnaviProtocolDecoder.java b/src/org/traccar/protocol/ArnaviProtocolDecoder.java index f7e146172..1215f7bad 100644 --- a/src/org/traccar/protocol/ArnaviProtocolDecoder.java +++ b/src/org/traccar/protocol/ArnaviProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AstraProtocol.java b/src/org/traccar/protocol/AstraProtocol.java index 461888c4f..87c562a9d 100644 --- a/src/org/traccar/protocol/AstraProtocol.java +++ b/src/org/traccar/protocol/AstraProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/AstraProtocolDecoder.java b/src/org/traccar/protocol/AstraProtocolDecoder.java index d89a21082..d51be633d 100644 --- a/src/org/traccar/protocol/AstraProtocolDecoder.java +++ b/src/org/traccar/protocol/AstraProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/AtrackFrameDecoder.java b/src/org/traccar/protocol/AtrackFrameDecoder.java index d1010daeb..a075254ea 100644 --- a/src/org/traccar/protocol/AtrackFrameDecoder.java +++ b/src/org/traccar/protocol/AtrackFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2014 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. diff --git a/src/org/traccar/protocol/AtrackProtocol.java b/src/org/traccar/protocol/AtrackProtocol.java index d61d31522..2ab33ea6d 100644 --- a/src/org/traccar/protocol/AtrackProtocol.java +++ b/src/org/traccar/protocol/AtrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AtrackProtocolDecoder.java b/src/org/traccar/protocol/AtrackProtocolDecoder.java index cb89f9438..9c34a2e78 100644 --- a/src/org/traccar/protocol/AtrackProtocolDecoder.java +++ b/src/org/traccar/protocol/AtrackProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/AuroProtocol.java b/src/org/traccar/protocol/AuroProtocol.java index e5635f12a..e1b23478f 100644 --- a/src/org/traccar/protocol/AuroProtocol.java +++ b/src/org/traccar/protocol/AuroProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AuroProtocolDecoder.java b/src/org/traccar/protocol/AuroProtocolDecoder.java index 428e83f99..26bf7dfc8 100644 --- a/src/org/traccar/protocol/AuroProtocolDecoder.java +++ b/src/org/traccar/protocol/AuroProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AutoFonFrameDecoder.java b/src/org/traccar/protocol/AutoFonFrameDecoder.java index 2c547d822..2fa1b4072 100644 --- a/src/org/traccar/protocol/AutoFonFrameDecoder.java +++ b/src/org/traccar/protocol/AutoFonFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton@traccar.org) * Copyright 2015 Vitaly Litvak (vitavaque@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/org/traccar/protocol/AutoFonProtocol.java b/src/org/traccar/protocol/AutoFonProtocol.java index 3e61b81a3..927bda120 100644 --- a/src/org/traccar/protocol/AutoFonProtocol.java +++ b/src/org/traccar/protocol/AutoFonProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/AutoFonProtocolDecoder.java b/src/org/traccar/protocol/AutoFonProtocolDecoder.java index 90e8ca103..1c618fdee 100644 --- a/src/org/traccar/protocol/AutoFonProtocolDecoder.java +++ b/src/org/traccar/protocol/AutoFonProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 Anton Tananaev (anton@traccar.org) * Copyright 2015 Vitaly Litvak (vitavaque@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/org/traccar/protocol/AutoGradeProtocol.java b/src/org/traccar/protocol/AutoGradeProtocol.java index 1fb6b1ce2..41bb8d9ad 100644 --- a/src/org/traccar/protocol/AutoGradeProtocol.java +++ b/src/org/traccar/protocol/AutoGradeProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/AutoGradeProtocolDecoder.java b/src/org/traccar/protocol/AutoGradeProtocolDecoder.java index 5c9dd7ece..d520c282c 100644 --- a/src/org/traccar/protocol/AutoGradeProtocolDecoder.java +++ b/src/org/traccar/protocol/AutoGradeProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/Avl301Protocol.java b/src/org/traccar/protocol/Avl301Protocol.java index b8453cfb3..4a217bad6 100644 --- a/src/org/traccar/protocol/Avl301Protocol.java +++ b/src/org/traccar/protocol/Avl301Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Avl301ProtocolDecoder.java b/src/org/traccar/protocol/Avl301ProtocolDecoder.java index 818dd94df..cac6f717f 100644 --- a/src/org/traccar/protocol/Avl301ProtocolDecoder.java +++ b/src/org/traccar/protocol/Avl301ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/BceFrameDecoder.java b/src/org/traccar/protocol/BceFrameDecoder.java index 1f8b8efcd..4fac79f85 100644 --- a/src/org/traccar/protocol/BceFrameDecoder.java +++ b/src/org/traccar/protocol/BceFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/BceProtocol.java b/src/org/traccar/protocol/BceProtocol.java index 576eb6862..5374fd0e1 100644 --- a/src/org/traccar/protocol/BceProtocol.java +++ b/src/org/traccar/protocol/BceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/BceProtocolDecoder.java b/src/org/traccar/protocol/BceProtocolDecoder.java index 06290b6b0..dace89659 100644 --- a/src/org/traccar/protocol/BceProtocolDecoder.java +++ b/src/org/traccar/protocol/BceProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/BlackKiteProtocol.java b/src/org/traccar/protocol/BlackKiteProtocol.java index ea5120b2b..db32f5328 100644 --- a/src/org/traccar/protocol/BlackKiteProtocol.java +++ b/src/org/traccar/protocol/BlackKiteProtocol.java @@ -1,6 +1,6 @@ /* * Copyright 2015 Vijay Kumar (vijaykumar@zilogic.com) - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/BlackKiteProtocolDecoder.java b/src/org/traccar/protocol/BlackKiteProtocolDecoder.java index c2c051884..86736c4c9 100644 --- a/src/org/traccar/protocol/BlackKiteProtocolDecoder.java +++ b/src/org/traccar/protocol/BlackKiteProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 Anton Tananaev (anton@traccar.org) * Copyright 2015 Vijay Kumar (vijaykumar@zilogic.com) * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/org/traccar/protocol/BoxProtocol.java b/src/org/traccar/protocol/BoxProtocol.java index 6e60a0dd8..36e7790f0 100644 --- a/src/org/traccar/protocol/BoxProtocol.java +++ b/src/org/traccar/protocol/BoxProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/BoxProtocolDecoder.java b/src/org/traccar/protocol/BoxProtocolDecoder.java index 55d3142b2..b1fe55e5e 100644 --- a/src/org/traccar/protocol/BoxProtocolDecoder.java +++ b/src/org/traccar/protocol/BoxProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 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. diff --git a/src/org/traccar/protocol/CalAmpProtocol.java b/src/org/traccar/protocol/CalAmpProtocol.java index a8eb59d0e..a3577f10c 100644 --- a/src/org/traccar/protocol/CalAmpProtocol.java +++ b/src/org/traccar/protocol/CalAmpProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CalAmpProtocolDecoder.java b/src/org/traccar/protocol/CalAmpProtocolDecoder.java index 2a4af2f03..510684411 100644 --- a/src/org/traccar/protocol/CalAmpProtocolDecoder.java +++ b/src/org/traccar/protocol/CalAmpProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/CarTrackProtocol.java b/src/org/traccar/protocol/CarTrackProtocol.java index 0244c0ce1..d235c92be 100644 --- a/src/org/traccar/protocol/CarTrackProtocol.java +++ b/src/org/traccar/protocol/CarTrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CarTrackProtocolDecoder.java b/src/org/traccar/protocol/CarTrackProtocolDecoder.java index 0d21e77e6..94f5d208b 100644 --- a/src/org/traccar/protocol/CarTrackProtocolDecoder.java +++ b/src/org/traccar/protocol/CarTrackProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 Anton Tananaev (anton@traccar.org) * Copyright 2014 Rohit * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/org/traccar/protocol/CarcellProtocol.java b/src/org/traccar/protocol/CarcellProtocol.java index 1303b56b3..e53a10eb5 100644 --- a/src/org/traccar/protocol/CarcellProtocol.java +++ b/src/org/traccar/protocol/CarcellProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/CarcellProtocolDecoder.java b/src/org/traccar/protocol/CarcellProtocolDecoder.java index e9b6cdf28..5f5877852 100644 --- a/src/org/traccar/protocol/CarcellProtocolDecoder.java +++ b/src/org/traccar/protocol/CarcellProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/CarcellProtocolEncoder.java b/src/org/traccar/protocol/CarcellProtocolEncoder.java index d01a11e52..0846949c4 100644 --- a/src/org/traccar/protocol/CarcellProtocolEncoder.java +++ b/src/org/traccar/protocol/CarcellProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/CarscopProtocol.java b/src/org/traccar/protocol/CarscopProtocol.java index 23c597a5b..01a754027 100644 --- a/src/org/traccar/protocol/CarscopProtocol.java +++ b/src/org/traccar/protocol/CarscopProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CarscopProtocolDecoder.java b/src/org/traccar/protocol/CarscopProtocolDecoder.java index 5e1973ae8..9abfe2f86 100644 --- a/src/org/traccar/protocol/CarscopProtocolDecoder.java +++ b/src/org/traccar/protocol/CarscopProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/CastelProtocol.java b/src/org/traccar/protocol/CastelProtocol.java index 42f7cbb88..db9df0674 100644 --- a/src/org/traccar/protocol/CastelProtocol.java +++ b/src/org/traccar/protocol/CastelProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CastelProtocolDecoder.java b/src/org/traccar/protocol/CastelProtocolDecoder.java index 47df3735c..9ac8c5240 100644 --- a/src/org/traccar/protocol/CastelProtocolDecoder.java +++ b/src/org/traccar/protocol/CastelProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/CellocatorFrameDecoder.java b/src/org/traccar/protocol/CellocatorFrameDecoder.java index c9cfab99e..b4708f5db 100644 --- a/src/org/traccar/protocol/CellocatorFrameDecoder.java +++ b/src/org/traccar/protocol/CellocatorFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/CellocatorProtocol.java b/src/org/traccar/protocol/CellocatorProtocol.java index e5f6ac8f6..bfaf03692 100644 --- a/src/org/traccar/protocol/CellocatorProtocol.java +++ b/src/org/traccar/protocol/CellocatorProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CellocatorProtocolDecoder.java b/src/org/traccar/protocol/CellocatorProtocolDecoder.java index f074cb5d3..14325e619 100644 --- a/src/org/traccar/protocol/CellocatorProtocolDecoder.java +++ b/src/org/traccar/protocol/CellocatorProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/CguardProtocol.java b/src/org/traccar/protocol/CguardProtocol.java index 1e6d212c8..460bd331f 100644 --- a/src/org/traccar/protocol/CguardProtocol.java +++ b/src/org/traccar/protocol/CguardProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/CguardProtocolDecoder.java b/src/org/traccar/protocol/CguardProtocolDecoder.java index 6c528c559..c5dc51d81 100644 --- a/src/org/traccar/protocol/CguardProtocolDecoder.java +++ b/src/org/traccar/protocol/CguardProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/CityeasyProtocol.java b/src/org/traccar/protocol/CityeasyProtocol.java index e22c964ce..c5ad05fcd 100644 --- a/src/org/traccar/protocol/CityeasyProtocol.java +++ b/src/org/traccar/protocol/CityeasyProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CityeasyProtocolDecoder.java b/src/org/traccar/protocol/CityeasyProtocolDecoder.java index 5cdbe525d..9f2a0250d 100644 --- a/src/org/traccar/protocol/CityeasyProtocolDecoder.java +++ b/src/org/traccar/protocol/CityeasyProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CityeasyProtocolEncoder.java b/src/org/traccar/protocol/CityeasyProtocolEncoder.java index 9c5695001..0c149c1c9 100644 --- a/src/org/traccar/protocol/CityeasyProtocolEncoder.java +++ b/src/org/traccar/protocol/CityeasyProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/CradlepointProtocol.java b/src/org/traccar/protocol/CradlepointProtocol.java index 9b8de7fb8..6ed54aa17 100644 --- a/src/org/traccar/protocol/CradlepointProtocol.java +++ b/src/org/traccar/protocol/CradlepointProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/CradlepointProtocolDecoder.java b/src/org/traccar/protocol/CradlepointProtocolDecoder.java index 4532172c0..f46459482 100644 --- a/src/org/traccar/protocol/CradlepointProtocolDecoder.java +++ b/src/org/traccar/protocol/CradlepointProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/DishaProtocol.java b/src/org/traccar/protocol/DishaProtocol.java index 612316112..53ba36004 100644 --- a/src/org/traccar/protocol/DishaProtocol.java +++ b/src/org/traccar/protocol/DishaProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/DishaProtocolDecoder.java b/src/org/traccar/protocol/DishaProtocolDecoder.java index eb00700d8..dc8bddd38 100644 --- a/src/org/traccar/protocol/DishaProtocolDecoder.java +++ b/src/org/traccar/protocol/DishaProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/EasyTrackProtocol.java b/src/org/traccar/protocol/EasyTrackProtocol.java index 86ec530d4..78f7f0b12 100644 --- a/src/org/traccar/protocol/EasyTrackProtocol.java +++ b/src/org/traccar/protocol/EasyTrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/EasyTrackProtocolDecoder.java b/src/org/traccar/protocol/EasyTrackProtocolDecoder.java index cec68b967..688629063 100644 --- a/src/org/traccar/protocol/EasyTrackProtocolDecoder.java +++ b/src/org/traccar/protocol/EasyTrackProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/EelinkProtocol.java b/src/org/traccar/protocol/EelinkProtocol.java index e91fc5efd..5900f0059 100644 --- a/src/org/traccar/protocol/EelinkProtocol.java +++ b/src/org/traccar/protocol/EelinkProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/EelinkProtocolDecoder.java b/src/org/traccar/protocol/EelinkProtocolDecoder.java index 10a8304c9..0bf7d229b 100644 --- a/src/org/traccar/protocol/EelinkProtocolDecoder.java +++ b/src/org/traccar/protocol/EelinkProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 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. diff --git a/src/org/traccar/protocol/EelinkProtocolEncoder.java b/src/org/traccar/protocol/EelinkProtocolEncoder.java index 1b9d6303f..b9d6b6f97 100644 --- a/src/org/traccar/protocol/EelinkProtocolEncoder.java +++ b/src/org/traccar/protocol/EelinkProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/EnforaProtocol.java b/src/org/traccar/protocol/EnforaProtocol.java index f4ca505ca..156e09d67 100644 --- a/src/org/traccar/protocol/EnforaProtocol.java +++ b/src/org/traccar/protocol/EnforaProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/EnforaProtocolDecoder.java b/src/org/traccar/protocol/EnforaProtocolDecoder.java index e9a32da2d..3c4473200 100644 --- a/src/org/traccar/protocol/EnforaProtocolDecoder.java +++ b/src/org/traccar/protocol/EnforaProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/protocol/ExtremTracProtocol.java b/src/org/traccar/protocol/ExtremTracProtocol.java index ce9f2b914..d9b178e23 100644 --- a/src/org/traccar/protocol/ExtremTracProtocol.java +++ b/src/org/traccar/protocol/ExtremTracProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ExtremTracProtocolDecoder.java b/src/org/traccar/protocol/ExtremTracProtocolDecoder.java index 3d42a5a28..c2f420d1c 100644 --- a/src/org/traccar/protocol/ExtremTracProtocolDecoder.java +++ b/src/org/traccar/protocol/ExtremTracProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/FifotrackProtocol.java b/src/org/traccar/protocol/FifotrackProtocol.java index 6e441beb1..f4ca450c0 100644 --- a/src/org/traccar/protocol/FifotrackProtocol.java +++ b/src/org/traccar/protocol/FifotrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/FifotrackProtocolDecoder.java b/src/org/traccar/protocol/FifotrackProtocolDecoder.java index a4b7932e6..9243d1894 100644 --- a/src/org/traccar/protocol/FifotrackProtocolDecoder.java +++ b/src/org/traccar/protocol/FifotrackProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/FlextrackProtocol.java b/src/org/traccar/protocol/FlextrackProtocol.java index d62c064d0..77e316d82 100644 --- a/src/org/traccar/protocol/FlextrackProtocol.java +++ b/src/org/traccar/protocol/FlextrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/FlextrackProtocolDecoder.java b/src/org/traccar/protocol/FlextrackProtocolDecoder.java index 0ce2ab780..db85acd5d 100644 --- a/src/org/traccar/protocol/FlextrackProtocolDecoder.java +++ b/src/org/traccar/protocol/FlextrackProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/FoxProtocol.java b/src/org/traccar/protocol/FoxProtocol.java index 30b76ef25..501bff4c4 100644 --- a/src/org/traccar/protocol/FoxProtocol.java +++ b/src/org/traccar/protocol/FoxProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/FoxProtocolDecoder.java b/src/org/traccar/protocol/FoxProtocolDecoder.java index 0a47f7ed1..cf1e4f1f2 100644 --- a/src/org/traccar/protocol/FoxProtocolDecoder.java +++ b/src/org/traccar/protocol/FoxProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/FreedomProtocol.java b/src/org/traccar/protocol/FreedomProtocol.java index 0176d9781..5b4bf22ff 100644 --- a/src/org/traccar/protocol/FreedomProtocol.java +++ b/src/org/traccar/protocol/FreedomProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/FreedomProtocolDecoder.java b/src/org/traccar/protocol/FreedomProtocolDecoder.java index 3a05486eb..a8995b8aa 100644 --- a/src/org/traccar/protocol/FreedomProtocolDecoder.java +++ b/src/org/traccar/protocol/FreedomProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/GalileoFrameDecoder.java b/src/org/traccar/protocol/GalileoFrameDecoder.java index 3c4284fe0..6d02ce744 100644 --- a/src/org/traccar/protocol/GalileoFrameDecoder.java +++ b/src/org/traccar/protocol/GalileoFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/GalileoProtocol.java b/src/org/traccar/protocol/GalileoProtocol.java index 7d5b47bbb..11151e9ca 100644 --- a/src/org/traccar/protocol/GalileoProtocol.java +++ b/src/org/traccar/protocol/GalileoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GalileoProtocolDecoder.java b/src/org/traccar/protocol/GalileoProtocolDecoder.java index 12b35333d..68063c5c3 100644 --- a/src/org/traccar/protocol/GalileoProtocolDecoder.java +++ b/src/org/traccar/protocol/GalileoProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/GatorProtocol.java b/src/org/traccar/protocol/GatorProtocol.java index e6b7161db..7fa4854d3 100644 --- a/src/org/traccar/protocol/GatorProtocol.java +++ b/src/org/traccar/protocol/GatorProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/GatorProtocolDecoder.java b/src/org/traccar/protocol/GatorProtocolDecoder.java index 88da9a37f..d9c8a086c 100644 --- a/src/org/traccar/protocol/GatorProtocolDecoder.java +++ b/src/org/traccar/protocol/GatorProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/Gl100Protocol.java b/src/org/traccar/protocol/Gl100Protocol.java index a78aff35f..0fd18d44f 100644 --- a/src/org/traccar/protocol/Gl100Protocol.java +++ b/src/org/traccar/protocol/Gl100Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Gl100ProtocolDecoder.java b/src/org/traccar/protocol/Gl100ProtocolDecoder.java index d9e5bc6e6..daef6ea52 100644 --- a/src/org/traccar/protocol/Gl100ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gl100ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/protocol/Gl200Protocol.java b/src/org/traccar/protocol/Gl200Protocol.java index 57c8fce1b..b6f01c773 100644 --- a/src/org/traccar/protocol/Gl200Protocol.java +++ b/src/org/traccar/protocol/Gl200Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/Gl200ProtocolDecoder.java b/src/org/traccar/protocol/Gl200ProtocolDecoder.java index 5785c08b7..66a4e2f7e 100644 --- a/src/org/traccar/protocol/Gl200ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gl200ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Gl200ProtocolEncoder.java b/src/org/traccar/protocol/Gl200ProtocolEncoder.java index 25ca1bf75..2c8efa318 100644 --- a/src/org/traccar/protocol/Gl200ProtocolEncoder.java +++ b/src/org/traccar/protocol/Gl200ProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/GlobalSatProtocol.java b/src/org/traccar/protocol/GlobalSatProtocol.java index 25d7656f1..f3d07fc96 100644 --- a/src/org/traccar/protocol/GlobalSatProtocol.java +++ b/src/org/traccar/protocol/GlobalSatProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GlobalSatProtocolDecoder.java b/src/org/traccar/protocol/GlobalSatProtocolDecoder.java index 084279732..4c127a90b 100644 --- a/src/org/traccar/protocol/GlobalSatProtocolDecoder.java +++ b/src/org/traccar/protocol/GlobalSatProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2014 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. diff --git a/src/org/traccar/protocol/GnxProtocol.java b/src/org/traccar/protocol/GnxProtocol.java index aeef247c2..84af24000 100644 --- a/src/org/traccar/protocol/GnxProtocol.java +++ b/src/org/traccar/protocol/GnxProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/GnxProtocolDecoder.java b/src/org/traccar/protocol/GnxProtocolDecoder.java index b88d306a8..aff86ea7b 100644 --- a/src/org/traccar/protocol/GnxProtocolDecoder.java +++ b/src/org/traccar/protocol/GnxProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/GoSafeProtocol.java b/src/org/traccar/protocol/GoSafeProtocol.java index 54abacd42..bfd473df9 100644 --- a/src/org/traccar/protocol/GoSafeProtocol.java +++ b/src/org/traccar/protocol/GoSafeProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GoSafeProtocolDecoder.java b/src/org/traccar/protocol/GoSafeProtocolDecoder.java index a511f9926..a258e922c 100644 --- a/src/org/traccar/protocol/GoSafeProtocolDecoder.java +++ b/src/org/traccar/protocol/GoSafeProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/GotopProtocol.java b/src/org/traccar/protocol/GotopProtocol.java index 6b31e1acf..5d522adf5 100644 --- a/src/org/traccar/protocol/GotopProtocol.java +++ b/src/org/traccar/protocol/GotopProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GotopProtocolDecoder.java b/src/org/traccar/protocol/GotopProtocolDecoder.java index 0dcae3c8d..0c613eb2d 100644 --- a/src/org/traccar/protocol/GotopProtocolDecoder.java +++ b/src/org/traccar/protocol/GotopProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/Gps103Protocol.java b/src/org/traccar/protocol/Gps103Protocol.java index 559de3187..82d42f1c9 100644 --- a/src/org/traccar/protocol/Gps103Protocol.java +++ b/src/org/traccar/protocol/Gps103Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Gps103ProtocolDecoder.java b/src/org/traccar/protocol/Gps103ProtocolDecoder.java index ed50c33f0..7754bd831 100644 --- a/src/org/traccar/protocol/Gps103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Gps103ProtocolEncoder.java b/src/org/traccar/protocol/Gps103ProtocolEncoder.java index 23942e554..afe87cf8c 100644 --- a/src/org/traccar/protocol/Gps103ProtocolEncoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GpsGateProtocol.java b/src/org/traccar/protocol/GpsGateProtocol.java index 78a7588ad..c7dc2c4f3 100644 --- a/src/org/traccar/protocol/GpsGateProtocol.java +++ b/src/org/traccar/protocol/GpsGateProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/GpsGateProtocolDecoder.java b/src/org/traccar/protocol/GpsGateProtocolDecoder.java index ac859b592..47b02de94 100644 --- a/src/org/traccar/protocol/GpsGateProtocolDecoder.java +++ b/src/org/traccar/protocol/GpsGateProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/GpsMarkerProtocol.java b/src/org/traccar/protocol/GpsMarkerProtocol.java index bb4b5b561..5c64d16b2 100644 --- a/src/org/traccar/protocol/GpsMarkerProtocol.java +++ b/src/org/traccar/protocol/GpsMarkerProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GpsMarkerProtocolDecoder.java b/src/org/traccar/protocol/GpsMarkerProtocolDecoder.java index 89537fa3d..3f9b52cd1 100644 --- a/src/org/traccar/protocol/GpsMarkerProtocolDecoder.java +++ b/src/org/traccar/protocol/GpsMarkerProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/GpsmtaProtocol.java b/src/org/traccar/protocol/GpsmtaProtocol.java index 51cce2650..2d1181bec 100644 --- a/src/org/traccar/protocol/GpsmtaProtocol.java +++ b/src/org/traccar/protocol/GpsmtaProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GpsmtaProtocolDecoder.java b/src/org/traccar/protocol/GpsmtaProtocolDecoder.java index f10b3771c..7360dbc1d 100644 --- a/src/org/traccar/protocol/GpsmtaProtocolDecoder.java +++ b/src/org/traccar/protocol/GpsmtaProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/GranitFrameDecoder.java b/src/org/traccar/protocol/GranitFrameDecoder.java index 5f1297c6d..7e8f4a3f5 100644 --- a/src/org/traccar/protocol/GranitFrameDecoder.java +++ b/src/org/traccar/protocol/GranitFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/GranitProtocol.java b/src/org/traccar/protocol/GranitProtocol.java index 1e097c17b..a5d5458f0 100644 --- a/src/org/traccar/protocol/GranitProtocol.java +++ b/src/org/traccar/protocol/GranitProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/GranitProtocolDecoder.java b/src/org/traccar/protocol/GranitProtocolDecoder.java index 3a2d24fa2..63b1671c6 100644 --- a/src/org/traccar/protocol/GranitProtocolDecoder.java +++ b/src/org/traccar/protocol/GranitProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/GranitProtocolEncoder.java b/src/org/traccar/protocol/GranitProtocolEncoder.java index 805bfbe24..dbfd30ff1 100644 --- a/src/org/traccar/protocol/GranitProtocolEncoder.java +++ b/src/org/traccar/protocol/GranitProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/Gt02Protocol.java b/src/org/traccar/protocol/Gt02Protocol.java index 595e6649e..e484b66cd 100644 --- a/src/org/traccar/protocol/Gt02Protocol.java +++ b/src/org/traccar/protocol/Gt02Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Gt02ProtocolDecoder.java b/src/org/traccar/protocol/Gt02ProtocolDecoder.java index dea1416ac..8a42293b9 100644 --- a/src/org/traccar/protocol/Gt02ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gt02ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Gt06FrameDecoder.java b/src/org/traccar/protocol/Gt06FrameDecoder.java index 67f42efb4..f35af6572 100644 --- a/src/org/traccar/protocol/Gt06FrameDecoder.java +++ b/src/org/traccar/protocol/Gt06FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 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. diff --git a/src/org/traccar/protocol/Gt06Protocol.java b/src/org/traccar/protocol/Gt06Protocol.java index e4c9ef2e0..e96679799 100644 --- a/src/org/traccar/protocol/Gt06Protocol.java +++ b/src/org/traccar/protocol/Gt06Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Gt06ProtocolDecoder.java b/src/org/traccar/protocol/Gt06ProtocolDecoder.java index 4af814e24..35cb83dac 100644 --- a/src/org/traccar/protocol/Gt06ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gt06ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Gt06ProtocolEncoder.java b/src/org/traccar/protocol/Gt06ProtocolEncoder.java index e78a1b388..b6ec5a0d1 100644 --- a/src/org/traccar/protocol/Gt06ProtocolEncoder.java +++ b/src/org/traccar/protocol/Gt06ProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/H02FrameDecoder.java b/src/org/traccar/protocol/H02FrameDecoder.java index 2a005e760..d461c9219 100644 --- a/src/org/traccar/protocol/H02FrameDecoder.java +++ b/src/org/traccar/protocol/H02FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/H02Protocol.java b/src/org/traccar/protocol/H02Protocol.java index 089721aed..498f63c0e 100644 --- a/src/org/traccar/protocol/H02Protocol.java +++ b/src/org/traccar/protocol/H02Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index f876f40bc..e74f9e862 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/H02ProtocolEncoder.java b/src/org/traccar/protocol/H02ProtocolEncoder.java index 4045b46d4..7b5ff13bb 100644 --- a/src/org/traccar/protocol/H02ProtocolEncoder.java +++ b/src/org/traccar/protocol/H02ProtocolEncoder.java @@ -1,6 +1,6 @@ /* * Copyright 2016 Gabor Somogyi (gabor.g.somogyi@gmail.com) - * 2016 Anton Tananaev (anton.tananaev@gmail.com) + * 2016 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. diff --git a/src/org/traccar/protocol/HaicomProtocol.java b/src/org/traccar/protocol/HaicomProtocol.java index 71970d476..4380dd2cc 100644 --- a/src/org/traccar/protocol/HaicomProtocol.java +++ b/src/org/traccar/protocol/HaicomProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/HaicomProtocolDecoder.java b/src/org/traccar/protocol/HaicomProtocolDecoder.java index 647477d50..8fbf98d3c 100644 --- a/src/org/traccar/protocol/HaicomProtocolDecoder.java +++ b/src/org/traccar/protocol/HaicomProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 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. diff --git a/src/org/traccar/protocol/HomtecsProtocol.java b/src/org/traccar/protocol/HomtecsProtocol.java index e8a86fa37..a9ea19c51 100644 --- a/src/org/traccar/protocol/HomtecsProtocol.java +++ b/src/org/traccar/protocol/HomtecsProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/HomtecsProtocolDecoder.java b/src/org/traccar/protocol/HomtecsProtocolDecoder.java index 21eb2c0b5..78bf0a813 100644 --- a/src/org/traccar/protocol/HomtecsProtocolDecoder.java +++ b/src/org/traccar/protocol/HomtecsProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/HuaShengFrameDecoder.java b/src/org/traccar/protocol/HuaShengFrameDecoder.java index 0e1becc30..4c29b7915 100644 --- a/src/org/traccar/protocol/HuaShengFrameDecoder.java +++ b/src/org/traccar/protocol/HuaShengFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/HuaShengProtocol.java b/src/org/traccar/protocol/HuaShengProtocol.java index dcef2bd69..e0fddae20 100644 --- a/src/org/traccar/protocol/HuaShengProtocol.java +++ b/src/org/traccar/protocol/HuaShengProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/HuaShengProtocolDecoder.java b/src/org/traccar/protocol/HuaShengProtocolDecoder.java index d83cea2ee..a0a1eb0ab 100644 --- a/src/org/traccar/protocol/HuaShengProtocolDecoder.java +++ b/src/org/traccar/protocol/HuaShengProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/HuabaoFrameDecoder.java b/src/org/traccar/protocol/HuabaoFrameDecoder.java index 003876fe5..8e9c9fe72 100644 --- a/src/org/traccar/protocol/HuabaoFrameDecoder.java +++ b/src/org/traccar/protocol/HuabaoFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/HuabaoProtocol.java b/src/org/traccar/protocol/HuabaoProtocol.java index 4a83689e3..053ce59bb 100644 --- a/src/org/traccar/protocol/HuabaoProtocol.java +++ b/src/org/traccar/protocol/HuabaoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/HuabaoProtocolDecoder.java b/src/org/traccar/protocol/HuabaoProtocolDecoder.java index 9223ea9a5..196d7927d 100644 --- a/src/org/traccar/protocol/HuabaoProtocolDecoder.java +++ b/src/org/traccar/protocol/HuabaoProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/HunterProProtocol.java b/src/org/traccar/protocol/HunterProProtocol.java index 502a95e11..17352a0f3 100644 --- a/src/org/traccar/protocol/HunterProProtocol.java +++ b/src/org/traccar/protocol/HunterProProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/HunterProProtocolDecoder.java b/src/org/traccar/protocol/HunterProProtocolDecoder.java index 2274ab1b8..fc19257f6 100644 --- a/src/org/traccar/protocol/HunterProProtocolDecoder.java +++ b/src/org/traccar/protocol/HunterProProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/IdplProtocol.java b/src/org/traccar/protocol/IdplProtocol.java index 88e106def..a954397cd 100644 --- a/src/org/traccar/protocol/IdplProtocol.java +++ b/src/org/traccar/protocol/IdplProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/IdplProtocolDecoder.java b/src/org/traccar/protocol/IdplProtocolDecoder.java index 4fdf9d677..cfef75952 100644 --- a/src/org/traccar/protocol/IdplProtocolDecoder.java +++ b/src/org/traccar/protocol/IdplProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/IntellitracFrameDecoder.java b/src/org/traccar/protocol/IntellitracFrameDecoder.java index 4e6241a40..49f8b4a5d 100644 --- a/src/org/traccar/protocol/IntellitracFrameDecoder.java +++ b/src/org/traccar/protocol/IntellitracFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/IntellitracProtocol.java b/src/org/traccar/protocol/IntellitracProtocol.java index 6db2b0011..2d9421636 100644 --- a/src/org/traccar/protocol/IntellitracProtocol.java +++ b/src/org/traccar/protocol/IntellitracProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/IntellitracProtocolDecoder.java b/src/org/traccar/protocol/IntellitracProtocolDecoder.java index af9f9bbab..a2720028f 100644 --- a/src/org/traccar/protocol/IntellitracProtocolDecoder.java +++ b/src/org/traccar/protocol/IntellitracProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/JpKorjarProtocolDecoder.java b/src/org/traccar/protocol/JpKorjarProtocolDecoder.java index e0fe0678d..debc66673 100644 --- a/src/org/traccar/protocol/JpKorjarProtocolDecoder.java +++ b/src/org/traccar/protocol/JpKorjarProtocolDecoder.java @@ -1,6 +1,6 @@ /* * Copyright 2016 Nyash (nyashh@gmail.com) - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/Jt600FrameDecoder.java b/src/org/traccar/protocol/Jt600FrameDecoder.java index bc6ad1b53..5606ae1fc 100644 --- a/src/org/traccar/protocol/Jt600FrameDecoder.java +++ b/src/org/traccar/protocol/Jt600FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Jt600Protocol.java b/src/org/traccar/protocol/Jt600Protocol.java index 8a73cbbe9..132770511 100644 --- a/src/org/traccar/protocol/Jt600Protocol.java +++ b/src/org/traccar/protocol/Jt600Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Jt600ProtocolDecoder.java b/src/org/traccar/protocol/Jt600ProtocolDecoder.java index e42ae5e09..ad7a00dc2 100644 --- a/src/org/traccar/protocol/Jt600ProtocolDecoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Jt600ProtocolEncoder.java b/src/org/traccar/protocol/Jt600ProtocolEncoder.java index d25ec637f..3eb0566a4 100644 --- a/src/org/traccar/protocol/Jt600ProtocolEncoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/KenjiProtocolDecoder.java b/src/org/traccar/protocol/KenjiProtocolDecoder.java index e13c91e3a..8e59341bd 100755 --- a/src/org/traccar/protocol/KenjiProtocolDecoder.java +++ b/src/org/traccar/protocol/KenjiProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/KhdProtocol.java b/src/org/traccar/protocol/KhdProtocol.java index e5bcc1be3..bf0d2855d 100644 --- a/src/org/traccar/protocol/KhdProtocol.java +++ b/src/org/traccar/protocol/KhdProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/KhdProtocolDecoder.java b/src/org/traccar/protocol/KhdProtocolDecoder.java index e34a24b40..0c3d8ee51 100644 --- a/src/org/traccar/protocol/KhdProtocolDecoder.java +++ b/src/org/traccar/protocol/KhdProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/KhdProtocolEncoder.java b/src/org/traccar/protocol/KhdProtocolEncoder.java index a056fdf05..618e43dad 100644 --- a/src/org/traccar/protocol/KhdProtocolEncoder.java +++ b/src/org/traccar/protocol/KhdProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/L100FrameDecoder.java b/src/org/traccar/protocol/L100FrameDecoder.java index 92af255dd..a597cbd7d 100644 --- a/src/org/traccar/protocol/L100FrameDecoder.java +++ b/src/org/traccar/protocol/L100FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/L100Protocol.java b/src/org/traccar/protocol/L100Protocol.java index 418b9beb7..2bcef4caa 100644 --- a/src/org/traccar/protocol/L100Protocol.java +++ b/src/org/traccar/protocol/L100Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/L100ProtocolDecoder.java b/src/org/traccar/protocol/L100ProtocolDecoder.java index ff0687751..7eed7df9a 100644 --- a/src/org/traccar/protocol/L100ProtocolDecoder.java +++ b/src/org/traccar/protocol/L100ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/LaipacProtocol.java b/src/org/traccar/protocol/LaipacProtocol.java index f64204749..45b803a0f 100644 --- a/src/org/traccar/protocol/LaipacProtocol.java +++ b/src/org/traccar/protocol/LaipacProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/LaipacProtocolDecoder.java b/src/org/traccar/protocol/LaipacProtocolDecoder.java index 25678af88..a0e394d2c 100644 --- a/src/org/traccar/protocol/LaipacProtocolDecoder.java +++ b/src/org/traccar/protocol/LaipacProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/M2mProtocol.java b/src/org/traccar/protocol/M2mProtocol.java index 662aa3f0f..09393fed0 100644 --- a/src/org/traccar/protocol/M2mProtocol.java +++ b/src/org/traccar/protocol/M2mProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/M2mProtocolDecoder.java b/src/org/traccar/protocol/M2mProtocolDecoder.java index 601b6d191..a3c2ada2f 100644 --- a/src/org/traccar/protocol/M2mProtocolDecoder.java +++ b/src/org/traccar/protocol/M2mProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/ManPowerProtocol.java b/src/org/traccar/protocol/ManPowerProtocol.java index ce7045899..60ce8b282 100644 --- a/src/org/traccar/protocol/ManPowerProtocol.java +++ b/src/org/traccar/protocol/ManPowerProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/ManPowerProtocolDecoder.java b/src/org/traccar/protocol/ManPowerProtocolDecoder.java index a2ede32b8..39b651d7e 100644 --- a/src/org/traccar/protocol/ManPowerProtocolDecoder.java +++ b/src/org/traccar/protocol/ManPowerProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/MegastekFrameDecoder.java b/src/org/traccar/protocol/MegastekFrameDecoder.java index da77d95fd..d9cb07108 100644 --- a/src/org/traccar/protocol/MegastekFrameDecoder.java +++ b/src/org/traccar/protocol/MegastekFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/MegastekProtocol.java b/src/org/traccar/protocol/MegastekProtocol.java index 77c2510bd..b28a05b92 100644 --- a/src/org/traccar/protocol/MegastekProtocol.java +++ b/src/org/traccar/protocol/MegastekProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MegastekProtocolDecoder.java b/src/org/traccar/protocol/MegastekProtocolDecoder.java index 3ea76536c..005d38c41 100644 --- a/src/org/traccar/protocol/MegastekProtocolDecoder.java +++ b/src/org/traccar/protocol/MegastekProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/MeiligaoFrameDecoder.java b/src/org/traccar/protocol/MeiligaoFrameDecoder.java index 9fb530f8a..9340b6198 100644 --- a/src/org/traccar/protocol/MeiligaoFrameDecoder.java +++ b/src/org/traccar/protocol/MeiligaoFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/MeiligaoProtocol.java b/src/org/traccar/protocol/MeiligaoProtocol.java index 2c61af5cb..23af19ef1 100644 --- a/src/org/traccar/protocol/MeiligaoProtocol.java +++ b/src/org/traccar/protocol/MeiligaoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MeiligaoProtocolDecoder.java b/src/org/traccar/protocol/MeiligaoProtocolDecoder.java index f0e5032b4..9915eab8c 100644 --- a/src/org/traccar/protocol/MeiligaoProtocolDecoder.java +++ b/src/org/traccar/protocol/MeiligaoProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/MeiligaoProtocolEncoder.java b/src/org/traccar/protocol/MeiligaoProtocolEncoder.java index 93399df60..a91b33a60 100644 --- a/src/org/traccar/protocol/MeiligaoProtocolEncoder.java +++ b/src/org/traccar/protocol/MeiligaoProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MeitrackFrameDecoder.java b/src/org/traccar/protocol/MeitrackFrameDecoder.java index 3c2d34394..1eb0dae0f 100644 --- a/src/org/traccar/protocol/MeitrackFrameDecoder.java +++ b/src/org/traccar/protocol/MeitrackFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/MeitrackProtocol.java b/src/org/traccar/protocol/MeitrackProtocol.java index 0c85c6203..918729f97 100644 --- a/src/org/traccar/protocol/MeitrackProtocol.java +++ b/src/org/traccar/protocol/MeitrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/MeitrackProtocolDecoder.java b/src/org/traccar/protocol/MeitrackProtocolDecoder.java index f2208984c..72ccaa037 100644 --- a/src/org/traccar/protocol/MeitrackProtocolDecoder.java +++ b/src/org/traccar/protocol/MeitrackProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/MeitrackProtocolEncoder.java b/src/org/traccar/protocol/MeitrackProtocolEncoder.java index 784b3b917..b10a751c1 100644 --- a/src/org/traccar/protocol/MeitrackProtocolEncoder.java +++ b/src/org/traccar/protocol/MeitrackProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/MiniFinderProtocol.java b/src/org/traccar/protocol/MiniFinderProtocol.java index 605633267..71a956d0f 100644 --- a/src/org/traccar/protocol/MiniFinderProtocol.java +++ b/src/org/traccar/protocol/MiniFinderProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/MiniFinderProtocolDecoder.java b/src/org/traccar/protocol/MiniFinderProtocolDecoder.java index 348476c6b..33396cebb 100644 --- a/src/org/traccar/protocol/MiniFinderProtocolDecoder.java +++ b/src/org/traccar/protocol/MiniFinderProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 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. diff --git a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java index c5210aa0b..96079745c 100644 --- a/src/org/traccar/protocol/MiniFinderProtocolEncoder.java +++ b/src/org/traccar/protocol/MiniFinderProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/Mta6Protocol.java b/src/org/traccar/protocol/Mta6Protocol.java index cafda2bc6..65a48808d 100644 --- a/src/org/traccar/protocol/Mta6Protocol.java +++ b/src/org/traccar/protocol/Mta6Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Mta6ProtocolDecoder.java b/src/org/traccar/protocol/Mta6ProtocolDecoder.java index 1da55f715..2109a63c3 100644 --- a/src/org/traccar/protocol/Mta6ProtocolDecoder.java +++ b/src/org/traccar/protocol/Mta6ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/MtxProtocol.java b/src/org/traccar/protocol/MtxProtocol.java index c549653d0..58b2361cd 100644 --- a/src/org/traccar/protocol/MtxProtocol.java +++ b/src/org/traccar/protocol/MtxProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MtxProtocolDecoder.java b/src/org/traccar/protocol/MtxProtocolDecoder.java index 6a6677830..0b84603bd 100644 --- a/src/org/traccar/protocol/MtxProtocolDecoder.java +++ b/src/org/traccar/protocol/MtxProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MxtFrameDecoder.java b/src/org/traccar/protocol/MxtFrameDecoder.java index cb1d8ed8e..b2cd6de93 100644 --- a/src/org/traccar/protocol/MxtFrameDecoder.java +++ b/src/org/traccar/protocol/MxtFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MxtProtocol.java b/src/org/traccar/protocol/MxtProtocol.java index a5d21e445..03c1da71e 100644 --- a/src/org/traccar/protocol/MxtProtocol.java +++ b/src/org/traccar/protocol/MxtProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/MxtProtocolDecoder.java b/src/org/traccar/protocol/MxtProtocolDecoder.java index 1dbfc3696..0e01f807f 100644 --- a/src/org/traccar/protocol/MxtProtocolDecoder.java +++ b/src/org/traccar/protocol/MxtProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/NavigilFrameDecoder.java b/src/org/traccar/protocol/NavigilFrameDecoder.java index 7a8989115..34eb28941 100644 --- a/src/org/traccar/protocol/NavigilFrameDecoder.java +++ b/src/org/traccar/protocol/NavigilFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/NavigilProtocol.java b/src/org/traccar/protocol/NavigilProtocol.java index 7cf6f35ff..6646c6cc6 100644 --- a/src/org/traccar/protocol/NavigilProtocol.java +++ b/src/org/traccar/protocol/NavigilProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/NavigilProtocolDecoder.java b/src/org/traccar/protocol/NavigilProtocolDecoder.java index e2afdf8d3..d18217861 100644 --- a/src/org/traccar/protocol/NavigilProtocolDecoder.java +++ b/src/org/traccar/protocol/NavigilProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/NavisProtocol.java b/src/org/traccar/protocol/NavisProtocol.java index d4cf40f1f..771c9d61d 100644 --- a/src/org/traccar/protocol/NavisProtocol.java +++ b/src/org/traccar/protocol/NavisProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/NavisProtocolDecoder.java b/src/org/traccar/protocol/NavisProtocolDecoder.java index 210c1d8c1..077f34e8d 100644 --- a/src/org/traccar/protocol/NavisProtocolDecoder.java +++ b/src/org/traccar/protocol/NavisProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 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. diff --git a/src/org/traccar/protocol/NoranProtocol.java b/src/org/traccar/protocol/NoranProtocol.java index eeddbdead..bf10eb127 100644 --- a/src/org/traccar/protocol/NoranProtocol.java +++ b/src/org/traccar/protocol/NoranProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/NoranProtocolDecoder.java b/src/org/traccar/protocol/NoranProtocolDecoder.java index e062a9907..ebeacc659 100644 --- a/src/org/traccar/protocol/NoranProtocolDecoder.java +++ b/src/org/traccar/protocol/NoranProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/NoranProtocolEncoder.java b/src/org/traccar/protocol/NoranProtocolEncoder.java index 1f1988802..5bd069218 100644 --- a/src/org/traccar/protocol/NoranProtocolEncoder.java +++ b/src/org/traccar/protocol/NoranProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/NvsFrameDecoder.java b/src/org/traccar/protocol/NvsFrameDecoder.java index 3991a1865..598bb1e4c 100644 --- a/src/org/traccar/protocol/NvsFrameDecoder.java +++ b/src/org/traccar/protocol/NvsFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/NvsProtocol.java b/src/org/traccar/protocol/NvsProtocol.java index 4610e4abc..fdcb2bbcf 100644 --- a/src/org/traccar/protocol/NvsProtocol.java +++ b/src/org/traccar/protocol/NvsProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/NvsProtocolDecoder.java b/src/org/traccar/protocol/NvsProtocolDecoder.java index c32501d56..0e82fae69 100644 --- a/src/org/traccar/protocol/NvsProtocolDecoder.java +++ b/src/org/traccar/protocol/NvsProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ObdDongleProtocol.java b/src/org/traccar/protocol/ObdDongleProtocol.java index d91eb765a..6547a31ab 100644 --- a/src/org/traccar/protocol/ObdDongleProtocol.java +++ b/src/org/traccar/protocol/ObdDongleProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ObdDongleProtocolDecoder.java b/src/org/traccar/protocol/ObdDongleProtocolDecoder.java index 84ff1450a..e5ae5e93f 100644 --- a/src/org/traccar/protocol/ObdDongleProtocolDecoder.java +++ b/src/org/traccar/protocol/ObdDongleProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/OigoProtocol.java b/src/org/traccar/protocol/OigoProtocol.java index c60ee1be6..4b6ad0dd0 100644 --- a/src/org/traccar/protocol/OigoProtocol.java +++ b/src/org/traccar/protocol/OigoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/OigoProtocolDecoder.java b/src/org/traccar/protocol/OigoProtocolDecoder.java index bbea38183..15a215c4f 100644 --- a/src/org/traccar/protocol/OigoProtocolDecoder.java +++ b/src/org/traccar/protocol/OigoProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/OrionFrameDecoder.java b/src/org/traccar/protocol/OrionFrameDecoder.java index 3babda175..f7371747a 100644 --- a/src/org/traccar/protocol/OrionFrameDecoder.java +++ b/src/org/traccar/protocol/OrionFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/OrionProtocol.java b/src/org/traccar/protocol/OrionProtocol.java index c0166b05d..f4bfef985 100644 --- a/src/org/traccar/protocol/OrionProtocol.java +++ b/src/org/traccar/protocol/OrionProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/OrionProtocolDecoder.java b/src/org/traccar/protocol/OrionProtocolDecoder.java index c65e534f4..c65924337 100644 --- a/src/org/traccar/protocol/OrionProtocolDecoder.java +++ b/src/org/traccar/protocol/OrionProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/OsmAndProtocol.java b/src/org/traccar/protocol/OsmAndProtocol.java index 7f5318576..785f4bd75 100644 --- a/src/org/traccar/protocol/OsmAndProtocol.java +++ b/src/org/traccar/protocol/OsmAndProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/OsmAndProtocolDecoder.java b/src/org/traccar/protocol/OsmAndProtocolDecoder.java index 6017f4a6c..5508cad92 100644 --- a/src/org/traccar/protocol/OsmAndProtocolDecoder.java +++ b/src/org/traccar/protocol/OsmAndProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/PathAwayProtocol.java b/src/org/traccar/protocol/PathAwayProtocol.java index 2583670a2..a41692750 100644 --- a/src/org/traccar/protocol/PathAwayProtocol.java +++ b/src/org/traccar/protocol/PathAwayProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/PathAwayProtocolDecoder.java b/src/org/traccar/protocol/PathAwayProtocolDecoder.java index aa2de5704..036cfa445 100644 --- a/src/org/traccar/protocol/PathAwayProtocolDecoder.java +++ b/src/org/traccar/protocol/PathAwayProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/PiligrimProtocol.java b/src/org/traccar/protocol/PiligrimProtocol.java index 0ab529d5c..a2960f762 100644 --- a/src/org/traccar/protocol/PiligrimProtocol.java +++ b/src/org/traccar/protocol/PiligrimProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/PiligrimProtocolDecoder.java b/src/org/traccar/protocol/PiligrimProtocolDecoder.java index 47f73fe8f..9d5bb9e24 100644 --- a/src/org/traccar/protocol/PiligrimProtocolDecoder.java +++ b/src/org/traccar/protocol/PiligrimProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/ProgressProtocol.java b/src/org/traccar/protocol/ProgressProtocol.java index 3fb702b7b..6e2093346 100644 --- a/src/org/traccar/protocol/ProgressProtocol.java +++ b/src/org/traccar/protocol/ProgressProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/ProgressProtocolDecoder.java b/src/org/traccar/protocol/ProgressProtocolDecoder.java index 0032a9a1b..9e24efc38 100644 --- a/src/org/traccar/protocol/ProgressProtocolDecoder.java +++ b/src/org/traccar/protocol/ProgressProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2014 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. diff --git a/src/org/traccar/protocol/Pt3000Protocol.java b/src/org/traccar/protocol/Pt3000Protocol.java index c4cb4129d..9c9da3301 100644 --- a/src/org/traccar/protocol/Pt3000Protocol.java +++ b/src/org/traccar/protocol/Pt3000Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Pt3000ProtocolDecoder.java b/src/org/traccar/protocol/Pt3000ProtocolDecoder.java index 88ffb0616..d25d96150 100644 --- a/src/org/traccar/protocol/Pt3000ProtocolDecoder.java +++ b/src/org/traccar/protocol/Pt3000ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/Pt502FrameDecoder.java b/src/org/traccar/protocol/Pt502FrameDecoder.java index 95289929e..200012965 100644 --- a/src/org/traccar/protocol/Pt502FrameDecoder.java +++ b/src/org/traccar/protocol/Pt502FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/Pt502Protocol.java b/src/org/traccar/protocol/Pt502Protocol.java index b609927ac..a15938dc3 100644 --- a/src/org/traccar/protocol/Pt502Protocol.java +++ b/src/org/traccar/protocol/Pt502Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/Pt502ProtocolDecoder.java b/src/org/traccar/protocol/Pt502ProtocolDecoder.java index 24dc2094f..2d3cb9101 100644 --- a/src/org/traccar/protocol/Pt502ProtocolDecoder.java +++ b/src/org/traccar/protocol/Pt502ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 Anton Tananaev (anton@traccar.org) * Copyright 2012 Luis Parada (luis.parada@gmail.com) * * Licensed under the Apache License, Version 2.0 (the "License"); diff --git a/src/org/traccar/protocol/Pt502ProtocolEncoder.java b/src/org/traccar/protocol/Pt502ProtocolEncoder.java index d8aeb6e5d..5f7665e50 100644 --- a/src/org/traccar/protocol/Pt502ProtocolEncoder.java +++ b/src/org/traccar/protocol/Pt502ProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/RaveonProtocol.java b/src/org/traccar/protocol/RaveonProtocol.java index a81d52f0e..e4e100e0b 100644 --- a/src/org/traccar/protocol/RaveonProtocol.java +++ b/src/org/traccar/protocol/RaveonProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/RaveonProtocolDecoder.java b/src/org/traccar/protocol/RaveonProtocolDecoder.java index d6942da6f..19a9d6314 100644 --- a/src/org/traccar/protocol/RaveonProtocolDecoder.java +++ b/src/org/traccar/protocol/RaveonProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/RitiProtocol.java b/src/org/traccar/protocol/RitiProtocol.java index 8a39c29e1..0ff3ce87b 100644 --- a/src/org/traccar/protocol/RitiProtocol.java +++ b/src/org/traccar/protocol/RitiProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/RitiProtocolDecoder.java b/src/org/traccar/protocol/RitiProtocolDecoder.java index 455c1387a..1ca517057 100644 --- a/src/org/traccar/protocol/RitiProtocolDecoder.java +++ b/src/org/traccar/protocol/RitiProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/RuptelaProtocol.java b/src/org/traccar/protocol/RuptelaProtocol.java index 1fe7b02ad..54cdcc267 100644 --- a/src/org/traccar/protocol/RuptelaProtocol.java +++ b/src/org/traccar/protocol/RuptelaProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/RuptelaProtocolDecoder.java b/src/org/traccar/protocol/RuptelaProtocolDecoder.java index 84cc0e101..461f9abc0 100644 --- a/src/org/traccar/protocol/RuptelaProtocolDecoder.java +++ b/src/org/traccar/protocol/RuptelaProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/RuptelaProtocolEncoder.java b/src/org/traccar/protocol/RuptelaProtocolEncoder.java index c036870d9..c3b3a3619 100644 --- a/src/org/traccar/protocol/RuptelaProtocolEncoder.java +++ b/src/org/traccar/protocol/RuptelaProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/SanavProtocol.java b/src/org/traccar/protocol/SanavProtocol.java index 0e7958b8e..4f463725e 100644 --- a/src/org/traccar/protocol/SanavProtocol.java +++ b/src/org/traccar/protocol/SanavProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/SanavProtocolDecoder.java b/src/org/traccar/protocol/SanavProtocolDecoder.java index 103b2d395..606668713 100644 --- a/src/org/traccar/protocol/SanavProtocolDecoder.java +++ b/src/org/traccar/protocol/SanavProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/SkypatrolProtocol.java b/src/org/traccar/protocol/SkypatrolProtocol.java index 7d8240294..fba432522 100644 --- a/src/org/traccar/protocol/SkypatrolProtocol.java +++ b/src/org/traccar/protocol/SkypatrolProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/SkypatrolProtocolDecoder.java b/src/org/traccar/protocol/SkypatrolProtocolDecoder.java index d07bb152b..dfe87caf5 100644 --- a/src/org/traccar/protocol/SkypatrolProtocolDecoder.java +++ b/src/org/traccar/protocol/SkypatrolProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2013 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. diff --git a/src/org/traccar/protocol/SmokeyProtocol.java b/src/org/traccar/protocol/SmokeyProtocol.java index bb7b91fad..4f9a8dd74 100644 --- a/src/org/traccar/protocol/SmokeyProtocol.java +++ b/src/org/traccar/protocol/SmokeyProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/SmokeyProtocolDecoder.java b/src/org/traccar/protocol/SmokeyProtocolDecoder.java index a3fa0e5ae..86496fba6 100644 --- a/src/org/traccar/protocol/SmokeyProtocolDecoder.java +++ b/src/org/traccar/protocol/SmokeyProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/Stl060FrameDecoder.java b/src/org/traccar/protocol/Stl060FrameDecoder.java index f11d86564..455a869ee 100644 --- a/src/org/traccar/protocol/Stl060FrameDecoder.java +++ b/src/org/traccar/protocol/Stl060FrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/Stl060Protocol.java b/src/org/traccar/protocol/Stl060Protocol.java index ccdd256d7..6fe2c5181 100644 --- a/src/org/traccar/protocol/Stl060Protocol.java +++ b/src/org/traccar/protocol/Stl060Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Stl060ProtocolDecoder.java b/src/org/traccar/protocol/Stl060ProtocolDecoder.java index 86b097f77..fa789510e 100644 --- a/src/org/traccar/protocol/Stl060ProtocolDecoder.java +++ b/src/org/traccar/protocol/Stl060ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 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. diff --git a/src/org/traccar/protocol/SuntechProtocol.java b/src/org/traccar/protocol/SuntechProtocol.java index df6109722..410dc8af7 100644 --- a/src/org/traccar/protocol/SuntechProtocol.java +++ b/src/org/traccar/protocol/SuntechProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/SuntechProtocolDecoder.java b/src/org/traccar/protocol/SuntechProtocolDecoder.java index 503f4d6f8..c9235f47f 100644 --- a/src/org/traccar/protocol/SuntechProtocolDecoder.java +++ b/src/org/traccar/protocol/SuntechProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/SuntechProtocolEncoder.java b/src/org/traccar/protocol/SuntechProtocolEncoder.java index 000583759..4a2b230f2 100644 --- a/src/org/traccar/protocol/SuntechProtocolEncoder.java +++ b/src/org/traccar/protocol/SuntechProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/SupermateProtocol.java b/src/org/traccar/protocol/SupermateProtocol.java index 70c3c00e6..c9ae86fc1 100755 --- a/src/org/traccar/protocol/SupermateProtocol.java +++ b/src/org/traccar/protocol/SupermateProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/SupermateProtocolDecoder.java b/src/org/traccar/protocol/SupermateProtocolDecoder.java index f673bff40..7f12121bb 100755 --- a/src/org/traccar/protocol/SupermateProtocolDecoder.java +++ b/src/org/traccar/protocol/SupermateProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/T55Protocol.java b/src/org/traccar/protocol/T55Protocol.java index 657155042..402fd46b8 100644 --- a/src/org/traccar/protocol/T55Protocol.java +++ b/src/org/traccar/protocol/T55Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/T55ProtocolDecoder.java b/src/org/traccar/protocol/T55ProtocolDecoder.java index 1909d9bea..faf9c4b7d 100644 --- a/src/org/traccar/protocol/T55ProtocolDecoder.java +++ b/src/org/traccar/protocol/T55ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/T800xProtocol.java b/src/org/traccar/protocol/T800xProtocol.java index 05650124c..70341d0dc 100644 --- a/src/org/traccar/protocol/T800xProtocol.java +++ b/src/org/traccar/protocol/T800xProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/T800xProtocolDecoder.java b/src/org/traccar/protocol/T800xProtocolDecoder.java index d92145e05..52d711a8d 100644 --- a/src/org/traccar/protocol/T800xProtocolDecoder.java +++ b/src/org/traccar/protocol/T800xProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/T800xProtocolEncoder.java b/src/org/traccar/protocol/T800xProtocolEncoder.java index d603328e2..7b02ed10b 100644 --- a/src/org/traccar/protocol/T800xProtocolEncoder.java +++ b/src/org/traccar/protocol/T800xProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/TaipProtocol.java b/src/org/traccar/protocol/TaipProtocol.java index 8b93eb42d..c3d934c04 100644 --- a/src/org/traccar/protocol/TaipProtocol.java +++ b/src/org/traccar/protocol/TaipProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TaipProtocolDecoder.java b/src/org/traccar/protocol/TaipProtocolDecoder.java index 11acbd343..7927c28e6 100644 --- a/src/org/traccar/protocol/TaipProtocolDecoder.java +++ b/src/org/traccar/protocol/TaipProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/TelicFrameDecoder.java b/src/org/traccar/protocol/TelicFrameDecoder.java index 2a6e121cf..245be28fb 100644 --- a/src/org/traccar/protocol/TelicFrameDecoder.java +++ b/src/org/traccar/protocol/TelicFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/TelicProtocol.java b/src/org/traccar/protocol/TelicProtocol.java index b55e16caf..fdd0b94c6 100644 --- a/src/org/traccar/protocol/TelicProtocol.java +++ b/src/org/traccar/protocol/TelicProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/TelicProtocolDecoder.java b/src/org/traccar/protocol/TelicProtocolDecoder.java index 376ff4c84..4d496426d 100644 --- a/src/org/traccar/protocol/TelicProtocolDecoder.java +++ b/src/org/traccar/protocol/TelicProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 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. diff --git a/src/org/traccar/protocol/TeltonikaFrameDecoder.java b/src/org/traccar/protocol/TeltonikaFrameDecoder.java index f8add090b..e7313b722 100644 --- a/src/org/traccar/protocol/TeltonikaFrameDecoder.java +++ b/src/org/traccar/protocol/TeltonikaFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/TeltonikaProtocol.java b/src/org/traccar/protocol/TeltonikaProtocol.java index c9c0f0f4d..f0ed61886 100644 --- a/src/org/traccar/protocol/TeltonikaProtocol.java +++ b/src/org/traccar/protocol/TeltonikaProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/TeltonikaProtocolDecoder.java b/src/org/traccar/protocol/TeltonikaProtocolDecoder.java index 00ab90ce0..474718ee8 100644 --- a/src/org/traccar/protocol/TeltonikaProtocolDecoder.java +++ b/src/org/traccar/protocol/TeltonikaProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/TeltonikaProtocolEncoder.java b/src/org/traccar/protocol/TeltonikaProtocolEncoder.java index d91f7f7bf..eb83477b8 100644 --- a/src/org/traccar/protocol/TeltonikaProtocolEncoder.java +++ b/src/org/traccar/protocol/TeltonikaProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/ThinkRaceProtocol.java b/src/org/traccar/protocol/ThinkRaceProtocol.java index add7d33d3..98f43e2e3 100644 --- a/src/org/traccar/protocol/ThinkRaceProtocol.java +++ b/src/org/traccar/protocol/ThinkRaceProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/ThinkRaceProtocolDecoder.java b/src/org/traccar/protocol/ThinkRaceProtocolDecoder.java index 2c49cccaf..f78f01329 100644 --- a/src/org/traccar/protocol/ThinkRaceProtocolDecoder.java +++ b/src/org/traccar/protocol/ThinkRaceProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Tk102Protocol.java b/src/org/traccar/protocol/Tk102Protocol.java index ad3d8affa..962f2401b 100644 --- a/src/org/traccar/protocol/Tk102Protocol.java +++ b/src/org/traccar/protocol/Tk102Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/Tk102ProtocolDecoder.java b/src/org/traccar/protocol/Tk102ProtocolDecoder.java index 58eb36cff..c2a94257d 100644 --- a/src/org/traccar/protocol/Tk102ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk102ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/Tk103Protocol.java b/src/org/traccar/protocol/Tk103Protocol.java index 3fe82ad8b..1520e88f6 100644 --- a/src/org/traccar/protocol/Tk103Protocol.java +++ b/src/org/traccar/protocol/Tk103Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Tk103ProtocolDecoder.java b/src/org/traccar/protocol/Tk103ProtocolDecoder.java index c638e7f27..9d04483c1 100644 --- a/src/org/traccar/protocol/Tk103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk103ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/Tlt2hProtocol.java b/src/org/traccar/protocol/Tlt2hProtocol.java index e33b1b561..752b0d8ef 100644 --- a/src/org/traccar/protocol/Tlt2hProtocol.java +++ b/src/org/traccar/protocol/Tlt2hProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Tlt2hProtocolDecoder.java b/src/org/traccar/protocol/Tlt2hProtocolDecoder.java index 6a58d6dcb..7df671109 100644 --- a/src/org/traccar/protocol/Tlt2hProtocolDecoder.java +++ b/src/org/traccar/protocol/Tlt2hProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/TopflytechProtocol.java b/src/org/traccar/protocol/TopflytechProtocol.java index 225cb66d7..7d4b13ee6 100644 --- a/src/org/traccar/protocol/TopflytechProtocol.java +++ b/src/org/traccar/protocol/TopflytechProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TopflytechProtocolDecoder.java b/src/org/traccar/protocol/TopflytechProtocolDecoder.java index 04f379557..0be411246 100644 --- a/src/org/traccar/protocol/TopflytechProtocolDecoder.java +++ b/src/org/traccar/protocol/TopflytechProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/TotemFrameDecoder.java b/src/org/traccar/protocol/TotemFrameDecoder.java index 374161758..6940d7b46 100644 --- a/src/org/traccar/protocol/TotemFrameDecoder.java +++ b/src/org/traccar/protocol/TotemFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/TotemProtocol.java b/src/org/traccar/protocol/TotemProtocol.java index 638755b7f..860fff894 100644 --- a/src/org/traccar/protocol/TotemProtocol.java +++ b/src/org/traccar/protocol/TotemProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TotemProtocolDecoder.java b/src/org/traccar/protocol/TotemProtocolDecoder.java index fbda41921..121b56ff9 100644 --- a/src/org/traccar/protocol/TotemProtocolDecoder.java +++ b/src/org/traccar/protocol/TotemProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2016 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. diff --git a/src/org/traccar/protocol/TotemProtocolEncoder.java b/src/org/traccar/protocol/TotemProtocolEncoder.java index 5e0ca407a..ff41a7df3 100644 --- a/src/org/traccar/protocol/TotemProtocolEncoder.java +++ b/src/org/traccar/protocol/TotemProtocolEncoder.java @@ -1,6 +1,6 @@ /* * Copyright 2015 Irving Gonzalez - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/Tr20Protocol.java b/src/org/traccar/protocol/Tr20Protocol.java index 1c47db86a..8de004be9 100644 --- a/src/org/traccar/protocol/Tr20Protocol.java +++ b/src/org/traccar/protocol/Tr20Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Tr20ProtocolDecoder.java b/src/org/traccar/protocol/Tr20ProtocolDecoder.java index 54b303b5d..20f7d2968 100644 --- a/src/org/traccar/protocol/Tr20ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tr20ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2015 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. diff --git a/src/org/traccar/protocol/Tr900Protocol.java b/src/org/traccar/protocol/Tr900Protocol.java index d54e4cb3c..40f287efa 100644 --- a/src/org/traccar/protocol/Tr900Protocol.java +++ b/src/org/traccar/protocol/Tr900Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Tr900ProtocolDecoder.java b/src/org/traccar/protocol/Tr900ProtocolDecoder.java index 8dfff9e41..32362acd2 100644 --- a/src/org/traccar/protocol/Tr900ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tr900ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TrackboxProtocol.java b/src/org/traccar/protocol/TrackboxProtocol.java index b71eb3810..c1aa5ac6a 100644 --- a/src/org/traccar/protocol/TrackboxProtocol.java +++ b/src/org/traccar/protocol/TrackboxProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TrackboxProtocolDecoder.java b/src/org/traccar/protocol/TrackboxProtocolDecoder.java index 89253b891..f909e8488 100644 --- a/src/org/traccar/protocol/TrackboxProtocolDecoder.java +++ b/src/org/traccar/protocol/TrackboxProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 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. diff --git a/src/org/traccar/protocol/TrakMateProtocol.java b/src/org/traccar/protocol/TrakMateProtocol.java index 3126fb80b..f6d9bf457 100644 --- a/src/org/traccar/protocol/TrakMateProtocol.java +++ b/src/org/traccar/protocol/TrakMateProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/TrakMateProtocolDecoder.java b/src/org/traccar/protocol/TrakMateProtocolDecoder.java index 0ca40e6ab..57003e832 100644 --- a/src/org/traccar/protocol/TrakMateProtocolDecoder.java +++ b/src/org/traccar/protocol/TrakMateProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/TramigoFrameDecoder.java b/src/org/traccar/protocol/TramigoFrameDecoder.java index 4178fba8d..20992c04b 100644 --- a/src/org/traccar/protocol/TramigoFrameDecoder.java +++ b/src/org/traccar/protocol/TramigoFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TramigoProtocol.java b/src/org/traccar/protocol/TramigoProtocol.java index ea4ea7140..28673c97b 100644 --- a/src/org/traccar/protocol/TramigoProtocol.java +++ b/src/org/traccar/protocol/TramigoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TramigoProtocolDecoder.java b/src/org/traccar/protocol/TramigoProtocolDecoder.java index 0aab1de34..9affa08b9 100644 --- a/src/org/traccar/protocol/TramigoProtocolDecoder.java +++ b/src/org/traccar/protocol/TramigoProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 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. diff --git a/src/org/traccar/protocol/TrvProtocol.java b/src/org/traccar/protocol/TrvProtocol.java index 585cb7cf6..348ccd92a 100644 --- a/src/org/traccar/protocol/TrvProtocol.java +++ b/src/org/traccar/protocol/TrvProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TrvProtocolDecoder.java b/src/org/traccar/protocol/TrvProtocolDecoder.java index 42f8d313c..0afe065c2 100644 --- a/src/org/traccar/protocol/TrvProtocolDecoder.java +++ b/src/org/traccar/protocol/TrvProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Tt8850Protocol.java b/src/org/traccar/protocol/Tt8850Protocol.java index 5d188de60..79dc031bc 100644 --- a/src/org/traccar/protocol/Tt8850Protocol.java +++ b/src/org/traccar/protocol/Tt8850Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/Tt8850ProtocolDecoder.java b/src/org/traccar/protocol/Tt8850ProtocolDecoder.java index 39fedc138..b128068be 100644 --- a/src/org/traccar/protocol/Tt8850ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tt8850ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/TytanProtocol.java b/src/org/traccar/protocol/TytanProtocol.java index b6608f925..0c27fb12b 100644 --- a/src/org/traccar/protocol/TytanProtocol.java +++ b/src/org/traccar/protocol/TytanProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TytanProtocolDecoder.java b/src/org/traccar/protocol/TytanProtocolDecoder.java index 7b5dc5ffe..b67902e56 100644 --- a/src/org/traccar/protocol/TytanProtocolDecoder.java +++ b/src/org/traccar/protocol/TytanProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TzoneProtocol.java b/src/org/traccar/protocol/TzoneProtocol.java index ca3e490d2..38d5b139a 100644 --- a/src/org/traccar/protocol/TzoneProtocol.java +++ b/src/org/traccar/protocol/TzoneProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/TzoneProtocolDecoder.java b/src/org/traccar/protocol/TzoneProtocolDecoder.java index 477dc6399..8fd695b80 100644 --- a/src/org/traccar/protocol/TzoneProtocolDecoder.java +++ b/src/org/traccar/protocol/TzoneProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/UlbotechFrameDecoder.java b/src/org/traccar/protocol/UlbotechFrameDecoder.java index 09c1db717..8e7b497c5 100644 --- a/src/org/traccar/protocol/UlbotechFrameDecoder.java +++ b/src/org/traccar/protocol/UlbotechFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2015 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. diff --git a/src/org/traccar/protocol/UlbotechProtocol.java b/src/org/traccar/protocol/UlbotechProtocol.java index ca31dffc9..40f4594a5 100644 --- a/src/org/traccar/protocol/UlbotechProtocol.java +++ b/src/org/traccar/protocol/UlbotechProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/UlbotechProtocolDecoder.java b/src/org/traccar/protocol/UlbotechProtocolDecoder.java index ff41c9cc4..d2a58f1b8 100644 --- a/src/org/traccar/protocol/UlbotechProtocolDecoder.java +++ b/src/org/traccar/protocol/UlbotechProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/UproProtocol.java b/src/org/traccar/protocol/UproProtocol.java index 8f940fa15..ae6cac603 100644 --- a/src/org/traccar/protocol/UproProtocol.java +++ b/src/org/traccar/protocol/UproProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index e6cb4e132..91404a241 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/V680Protocol.java b/src/org/traccar/protocol/V680Protocol.java index 83157790d..98c64830b 100644 --- a/src/org/traccar/protocol/V680Protocol.java +++ b/src/org/traccar/protocol/V680Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/V680ProtocolDecoder.java b/src/org/traccar/protocol/V680ProtocolDecoder.java index 29ac4fd90..181983f04 100644 --- a/src/org/traccar/protocol/V680ProtocolDecoder.java +++ b/src/org/traccar/protocol/V680ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2013 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. diff --git a/src/org/traccar/protocol/VisiontekProtocol.java b/src/org/traccar/protocol/VisiontekProtocol.java index dde906370..c6dd09562 100644 --- a/src/org/traccar/protocol/VisiontekProtocol.java +++ b/src/org/traccar/protocol/VisiontekProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/VisiontekProtocolDecoder.java b/src/org/traccar/protocol/VisiontekProtocolDecoder.java index 49c5dcc44..5ce12bd19 100644 --- a/src/org/traccar/protocol/VisiontekProtocolDecoder.java +++ b/src/org/traccar/protocol/VisiontekProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2014 - 2016 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. diff --git a/src/org/traccar/protocol/WatchProtocol.java b/src/org/traccar/protocol/WatchProtocol.java index 8f28916f0..b13fcfb11 100644 --- a/src/org/traccar/protocol/WatchProtocol.java +++ b/src/org/traccar/protocol/WatchProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/WatchProtocolDecoder.java b/src/org/traccar/protocol/WatchProtocolDecoder.java index d74fdbe81..13eb73254 100644 --- a/src/org/traccar/protocol/WatchProtocolDecoder.java +++ b/src/org/traccar/protocol/WatchProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/WatchProtocolEncoder.java b/src/org/traccar/protocol/WatchProtocolEncoder.java index dc07a1046..f15c0f0c0 100644 --- a/src/org/traccar/protocol/WatchProtocolEncoder.java +++ b/src/org/traccar/protocol/WatchProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/WialonProtocol.java b/src/org/traccar/protocol/WialonProtocol.java index 98af6973b..04e18cd85 100644 --- a/src/org/traccar/protocol/WialonProtocol.java +++ b/src/org/traccar/protocol/WialonProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/WialonProtocolDecoder.java b/src/org/traccar/protocol/WialonProtocolDecoder.java index 538ee51ca..e3db1f8f0 100644 --- a/src/org/traccar/protocol/WialonProtocolDecoder.java +++ b/src/org/traccar/protocol/WialonProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2014 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. diff --git a/src/org/traccar/protocol/WialonProtocolEncoder.java b/src/org/traccar/protocol/WialonProtocolEncoder.java index d3a0fc3b9..9c60a1356 100644 --- a/src/org/traccar/protocol/WialonProtocolEncoder.java +++ b/src/org/traccar/protocol/WialonProtocolEncoder.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/protocol/WondexFrameDecoder.java b/src/org/traccar/protocol/WondexFrameDecoder.java index ac1622350..db65ff80f 100644 --- a/src/org/traccar/protocol/WondexFrameDecoder.java +++ b/src/org/traccar/protocol/WondexFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 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. diff --git a/src/org/traccar/protocol/WondexProtocol.java b/src/org/traccar/protocol/WondexProtocol.java index 54b39a5c4..0cc21d2b4 100644 --- a/src/org/traccar/protocol/WondexProtocol.java +++ b/src/org/traccar/protocol/WondexProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/WondexProtocolDecoder.java b/src/org/traccar/protocol/WondexProtocolDecoder.java index 0fcb99578..491252bf6 100644 --- a/src/org/traccar/protocol/WondexProtocolDecoder.java +++ b/src/org/traccar/protocol/WondexProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2015 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. diff --git a/src/org/traccar/protocol/WondexProtocolEncoder.java b/src/org/traccar/protocol/WondexProtocolEncoder.java index c350838d0..8f9887b10 100644 --- a/src/org/traccar/protocol/WondexProtocolEncoder.java +++ b/src/org/traccar/protocol/WondexProtocolEncoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2016 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. diff --git a/src/org/traccar/protocol/XexunFrameDecoder.java b/src/org/traccar/protocol/XexunFrameDecoder.java index 184e2f57b..801fb4d59 100644 --- a/src/org/traccar/protocol/XexunFrameDecoder.java +++ b/src/org/traccar/protocol/XexunFrameDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/XexunProtocol.java b/src/org/traccar/protocol/XexunProtocol.java index ecaf18db4..2aea2f246 100644 --- a/src/org/traccar/protocol/XexunProtocol.java +++ b/src/org/traccar/protocol/XexunProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/XexunProtocolDecoder.java b/src/org/traccar/protocol/XexunProtocolDecoder.java index 06f255b91..5e390a4b7 100644 --- a/src/org/traccar/protocol/XexunProtocolDecoder.java +++ b/src/org/traccar/protocol/XexunProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/src/org/traccar/protocol/XirgoProtocol.java b/src/org/traccar/protocol/XirgoProtocol.java index 9298f71ad..9d7475308 100644 --- a/src/org/traccar/protocol/XirgoProtocol.java +++ b/src/org/traccar/protocol/XirgoProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/XirgoProtocolDecoder.java b/src/org/traccar/protocol/XirgoProtocolDecoder.java index edab1af11..f20f4ef35 100644 --- a/src/org/traccar/protocol/XirgoProtocolDecoder.java +++ b/src/org/traccar/protocol/XirgoProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/protocol/Xt013Protocol.java b/src/org/traccar/protocol/Xt013Protocol.java index db9d21333..ad3e24df0 100644 --- a/src/org/traccar/protocol/Xt013Protocol.java +++ b/src/org/traccar/protocol/Xt013Protocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/Xt013ProtocolDecoder.java b/src/org/traccar/protocol/Xt013ProtocolDecoder.java index b5c222ba6..68497980b 100644 --- a/src/org/traccar/protocol/Xt013ProtocolDecoder.java +++ b/src/org/traccar/protocol/Xt013ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/YwtProtocol.java b/src/org/traccar/protocol/YwtProtocol.java index e24c8b02e..412365ecb 100644 --- a/src/org/traccar/protocol/YwtProtocol.java +++ b/src/org/traccar/protocol/YwtProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 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. diff --git a/src/org/traccar/protocol/YwtProtocolDecoder.java b/src/org/traccar/protocol/YwtProtocolDecoder.java index da5a86175..85f1264a8 100644 --- a/src/org/traccar/protocol/YwtProtocolDecoder.java +++ b/src/org/traccar/protocol/YwtProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2013 - 2014 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2013 - 2014 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. diff --git a/src/org/traccar/reports/Events.java b/src/org/traccar/reports/Events.java index 88ff687d8..0ad6ab309 100644 --- a/src/org/traccar/reports/Events.java +++ b/src/org/traccar/reports/Events.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java index 818920ad5..6cbda0ede 100644 --- a/src/org/traccar/reports/ReportUtils.java +++ b/src/org/traccar/reports/ReportUtils.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/Route.java b/src/org/traccar/reports/Route.java index 4226d05ef..9ac183aea 100644 --- a/src/org/traccar/reports/Route.java +++ b/src/org/traccar/reports/Route.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index a82624bcf..d008f5d88 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 30fef40c9..5a3a9a355 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/model/BaseReport.java b/src/org/traccar/reports/model/BaseReport.java index 246cdede0..c33b9a8dd 100644 --- a/src/org/traccar/reports/model/BaseReport.java +++ b/src/org/traccar/reports/model/BaseReport.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/model/DeviceReport.java b/src/org/traccar/reports/model/DeviceReport.java index c072de231..58caa809b 100644 --- a/src/org/traccar/reports/model/DeviceReport.java +++ b/src/org/traccar/reports/model/DeviceReport.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/model/SummaryReport.java b/src/org/traccar/reports/model/SummaryReport.java index 1e6655904..2d650381d 100644 --- a/src/org/traccar/reports/model/SummaryReport.java +++ b/src/org/traccar/reports/model/SummaryReport.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/reports/model/TripReport.java b/src/org/traccar/reports/model/TripReport.java index d726195cb..b28793e44 100644 --- a/src/org/traccar/reports/model/TripReport.java +++ b/src/org/traccar/reports/model/TripReport.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/web/ConsoleServlet.java b/src/org/traccar/web/ConsoleServlet.java index c1ab7c468..9b3d8d54b 100644 --- a/src/org/traccar/web/ConsoleServlet.java +++ b/src/org/traccar/web/ConsoleServlet.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/web/CsvBuilder.java b/src/org/traccar/web/CsvBuilder.java index 4afc33144..532f06e3d 100644 --- a/src/org/traccar/web/CsvBuilder.java +++ b/src/org/traccar/web/CsvBuilder.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/web/GpxBuilder.java b/src/org/traccar/web/GpxBuilder.java index f9bebb730..bac7182dc 100644 --- a/src/org/traccar/web/GpxBuilder.java +++ b/src/org/traccar/web/GpxBuilder.java @@ -1,6 +1,6 @@ /* - * Copyright 2016 Anton Tananaev (anton.tananaev@gmail.com) - * Copyright 2016 Andrey Kunitsyn (abyss@fox5.ru) + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/src/org/traccar/web/JsonConverter.java b/src/org/traccar/web/JsonConverter.java index 19ac6f777..bec0afe8e 100644 --- a/src/org/traccar/web/JsonConverter.java +++ b/src/org/traccar/web/JsonConverter.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2015 - 2016 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. diff --git a/src/org/traccar/web/WebServer.java b/src/org/traccar/web/WebServer.java index 3970fb6eb..8201f8d16 100644 --- a/src/org/traccar/web/WebServer.java +++ b/src/org/traccar/web/WebServer.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2016 Anton Tananaev (anton.tananaev@gmail.com) + * Copyright 2012 - 2016 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. diff --git a/test/org/traccar/notification/NotificiationMailTest.java b/test/org/traccar/notification/NotificiationMailTest.java index adb7b5c15..975505a3a 100644 --- a/test/org/traccar/notification/NotificiationMailTest.java +++ b/test/org/traccar/notification/NotificiationMailTest.java @@ -12,7 +12,7 @@ import java.util.Properties; public class NotificiationMailTest { private static final String FROM = "notification@traccar.org"; - private static final String TO = "anton.tananaev@gmail.com"; + private static final String TO = "anton@traccar.org"; private static final String BODY = "Test email body."; private static final String SUBJECT = "Test"; -- cgit v1.2.3 From eba56dfeceee5c77eac64b7da8abc8a7e8b70415 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 3 Nov 2016 02:40:13 +1300 Subject: Include version in server model --- src/org/traccar/helper/Log.java | 8 ++++++-- src/org/traccar/model/Server.java | 11 ++++++++++- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/helper/Log.java b/src/org/traccar/helper/Log.java index bdf83c4f3..d74246a64 100644 --- a/src/org/traccar/helper/Log.java +++ b/src/org/traccar/helper/Log.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton@traccar.org) + * Copyright 2012 - 2016 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. @@ -49,6 +49,10 @@ public final class Log { private static Logger logger = null; + public static String getAppVersion() { + return Log.class.getPackage().getImplementationVersion(); + } + public static void setupLogger(Config config) throws IOException { Layout layout = new PatternLayout("%d{" + DATE_FORMAT + "} %5p: %m%n"); @@ -72,7 +76,7 @@ public final class Log { }); Log.logSystemInfo(); - Log.info("Version: " + Log.class.getPackage().getImplementationVersion()); + Log.info("Version: " + getAppVersion()); } public static Logger getLogger() { diff --git a/src/org/traccar/model/Server.java b/src/org/traccar/model/Server.java index 060a7d1d6..5cf26f7f2 100644 --- a/src/org/traccar/model/Server.java +++ b/src/org/traccar/model/Server.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2016 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. @@ -15,8 +15,17 @@ */ package org.traccar.model; +import org.traccar.helper.Log; + public class Server extends Extensible { + public String getVersion() { + return Log.getAppVersion(); + } + + public void setVersion(String version) { + } + private boolean registration; public boolean getRegistration() { -- cgit v1.2.3 From 77d193bf840ceb5294a6cb0d0cd6e1512e2b1efb Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 5 Nov 2016 15:04:07 +1300 Subject: Support new Totem protocol format --- src/org/traccar/protocol/TotemProtocolDecoder.java | 2 ++ test/org/traccar/protocol/TotemProtocolDecoderTest.java | 6 ++++++ 2 files changed, 8 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/protocol/TotemProtocolDecoder.java b/src/org/traccar/protocol/TotemProtocolDecoder.java index 121b56ff9..1fe91b942 100644 --- a/src/org/traccar/protocol/TotemProtocolDecoder.java +++ b/src/org/traccar/protocol/TotemProtocolDecoder.java @@ -138,9 +138,11 @@ public class TotemProtocolDecoder extends BaseProtocolDecoder { .number("(dd)") // external power .number("(dddd)") // adc 1 .groupBegin() + .groupBegin() .number("(dddd)") // adc 2 .number("(dddd)") // adc 3 .number("(dddd)") // adc 4 + .groupEnd("?") .number("(dddd)") // temperature 1 .number("(dddd)") // temperature 2 .groupEnd("?") diff --git a/test/org/traccar/protocol/TotemProtocolDecoderTest.java b/test/org/traccar/protocol/TotemProtocolDecoderTest.java index 8ff2e6f11..89400fe22 100644 --- a/test/org/traccar/protocol/TotemProtocolDecoderTest.java +++ b/test/org/traccar/protocol/TotemProtocolDecoderTest.java @@ -10,6 +10,12 @@ public class TotemProtocolDecoderTest extends ProtocolTest { TotemProtocolDecoder decoder = new TotemProtocolDecoder(new TotemProtocol()); + verifyPosition(decoder, text( + "$$0116AA864244026065291|18001800140916020524401100000000000027BA0E57063100000001.200000002237.8119N11403.5075E052020")); + + verifyPosition(decoder, text( + "$$0116AA867119025683137|108000001611020925324112000000000000616027F7001300000099.900000000000.0000N00000.0000E531824")); + verifyPosition(decoder, text( "$$0128AA864244026065291|18001800140916020524401100000000000000000000000027BA0E57063100000001.200000002237.8119N11403.5075E05202D")); -- cgit v1.2.3 From 850734d2f1bef8aba5761f540caa40c23608acc6 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 6 Nov 2016 08:34:02 +1300 Subject: Fix NMEA checksum calculation (fix #2405) --- src/org/traccar/helper/Checksum.java | 5 +++-- test/org/traccar/WebDataHandlerTest.java | 2 +- 2 files changed, 4 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/helper/Checksum.java b/src/org/traccar/helper/Checksum.java index 629f6e7ca..f08292392 100644 --- a/src/org/traccar/helper/Checksum.java +++ b/src/org/traccar/helper/Checksum.java @@ -204,8 +204,9 @@ public final class Checksum { public static String nmea(String msg) { int checksum = 0; - for (byte b : msg.getBytes(StandardCharsets.US_ASCII)) { - checksum ^= b; + byte[] bytes = msg.getBytes(StandardCharsets.US_ASCII); + for (int i = 1; i < bytes.length; i++) { + checksum ^= bytes[i]; } return String.format("*%02x", checksum).toUpperCase(); } diff --git a/test/org/traccar/WebDataHandlerTest.java b/test/org/traccar/WebDataHandlerTest.java index e68eaf74e..2a8205ad1 100644 --- a/test/org/traccar/WebDataHandlerTest.java +++ b/test/org/traccar/WebDataHandlerTest.java @@ -14,7 +14,7 @@ public class WebDataHandlerTest extends ProtocolTest { WebDataHandler handler = new WebDataHandler("http://localhost/?fixTime={fixTime}&gprmc={gprmc}&name={name}"); Assert.assertEquals( - "http://localhost/?fixTime=1451610123000&gprmc=$GPRMC,010203.000,A,2000.0000,N,03000.0000,E,0.00,0.00,010116,,*21&name=test", + "http://localhost/?fixTime=1451610123000&gprmc=$GPRMC,010203.000,A,2000.0000,N,03000.0000,E,0.00,0.00,010116,,*05&name=test", handler.formatRequest(p)); } -- cgit v1.2.3 From 395249ddf82bafec4ec1bf879a6d7282cbdc2ea9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 6 Nov 2016 09:06:33 +1300 Subject: Simplify formatting code --- src/org/traccar/WebDataHandler.java | 21 +++------------------ 1 file changed, 3 insertions(+), 18 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/WebDataHandler.java b/src/org/traccar/WebDataHandler.java index b9de37ed2..f99d7c97a 100644 --- a/src/org/traccar/WebDataHandler.java +++ b/src/org/traccar/WebDataHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2016 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. @@ -51,23 +51,8 @@ public class WebDataHandler extends BaseDataHandler { double lat = position.getLatitude(); double lon = position.getLongitude(); - char hemisphere; - - if (lat < 0) { - hemisphere = 'S'; - } else { - hemisphere = 'N'; - } - - f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, hemisphere); - - if (lon < 0) { - hemisphere = 'W'; - } else { - hemisphere = 'E'; - } - - f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, hemisphere); + f.format("%02d%07.4f,%c,", (int) Math.abs(lat), Math.abs(lat) % 1 * 60, lat < 0 ? 'S' : 'N'); + f.format("%03d%07.4f,%c,", (int) Math.abs(lon), Math.abs(lon) % 1 * 60, lon < 0 ? 'W' : 'E'); f.format("%.2f,%.2f,", position.getSpeed(), position.getCourse()); f.format("%1$td%1$tm%1$ty,,", calendar); -- cgit v1.2.3 From 313a51dbf23ca3ee0d5ac1d1dc37d0ff05cb2abd Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 6 Nov 2016 10:36:16 +1300 Subject: Use distance units in Excel reports --- src/org/traccar/reports/Events.java | 2 ++ src/org/traccar/reports/ReportUtils.java | 24 ++++++++++++++++++++---- src/org/traccar/reports/Route.java | 2 ++ src/org/traccar/reports/Summary.java | 2 ++ src/org/traccar/reports/Trips.java | 2 ++ templates/export/events.xlsx | Bin 11211 -> 8020 bytes templates/export/route.xlsx | Bin 11707 -> 8508 bytes templates/export/summary.xlsx | Bin 11209 -> 8081 bytes templates/export/trips.xlsx | Bin 12124 -> 8911 bytes 9 files changed, 28 insertions(+), 4 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/reports/Events.java b/src/org/traccar/reports/Events.java index 0ad6ab309..9d82b97a5 100644 --- a/src/org/traccar/reports/Events.java +++ b/src/org/traccar/reports/Events.java @@ -116,6 +116,8 @@ public final class Events { jxlsContext.putVar("geofenceNames", geofenceNames); jxlsContext.putVar("from", from); jxlsContext.putVar("to", to); + jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); + jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); jxlsContext.putVar("bracketsRegex", "[\\{\\}\"]"); Transformer transformer = TransformerFactory.createTransformer(inputStream, outputStream); List xlsAreas = new XlsCommentAreaBuilder(transformer).build(); diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java index 6cbda0ede..7fcc767e9 100644 --- a/src/org/traccar/reports/ReportUtils.java +++ b/src/org/traccar/reports/ReportUtils.java @@ -16,20 +16,36 @@ */ package org.traccar.reports; +import org.traccar.Context; +import org.traccar.helper.Log; +import org.traccar.model.Position; + import java.math.BigDecimal; import java.math.RoundingMode; import java.util.ArrayList; import java.util.Collection; -import org.traccar.Context; -import org.traccar.helper.Log; -import org.traccar.model.Position; - public final class ReportUtils { private ReportUtils() { } + public static String getDistanceUnit(long userId) { + String unit = Context.getPermissionsManager().getUser(userId).getDistanceUnit(); + if (unit == null) { + unit = Context.getPermissionsManager().getServer().getDistanceUnit(); + } + return unit != null ? unit : "km"; + } + + public static String getSpeedUnit(long userId) { + String unit = Context.getPermissionsManager().getUser(userId).getSpeedUnit(); + if (unit == null) { + unit = Context.getPermissionsManager().getServer().getSpeedUnit(); + } + return unit != null ? unit : "kn"; + } + public static Collection getDeviceList(Collection deviceIds, Collection groupIds) { Collection result = new ArrayList<>(); result.addAll(deviceIds); diff --git a/src/org/traccar/reports/Route.java b/src/org/traccar/reports/Route.java index 9ac183aea..b29e04b2e 100644 --- a/src/org/traccar/reports/Route.java +++ b/src/org/traccar/reports/Route.java @@ -83,6 +83,8 @@ public final class Route { jxlsContext.putVar("sheetNames", sheetNames); jxlsContext.putVar("from", from); jxlsContext.putVar("to", to); + jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); + jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); jxlsContext.putVar("bracketsRegex", "[\\{\\}\"]"); Transformer transformer = TransformerFactory.createTransformer(inputStream, outputStream); List xlsAreas = new XlsCommentAreaBuilder(transformer).build(); diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index d008f5d88..95a3737a1 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -91,6 +91,8 @@ public final class Summary { jxlsContext.putVar("summaries", summaries); jxlsContext.putVar("from", from); jxlsContext.putVar("to", to); + jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); + jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); JxlsHelper.getInstance().setUseFastFormulaProcessor(false) .processTemplate(inputStream, outputStream, jxlsContext); } diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 5a3a9a355..91a080d45 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -202,6 +202,8 @@ public final class Trips { jxlsContext.putVar("sheetNames", sheetNames); jxlsContext.putVar("from", from); jxlsContext.putVar("to", to); + jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); + jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); Transformer transformer = TransformerFactory.createTransformer(inputStream, outputStream); List xlsAreas = new XlsCommentAreaBuilder(transformer).build(); for (Area xlsArea : xlsAreas) { diff --git a/templates/export/events.xlsx b/templates/export/events.xlsx index 4f9569324..63c24d0ce 100644 Binary files a/templates/export/events.xlsx and b/templates/export/events.xlsx differ diff --git a/templates/export/route.xlsx b/templates/export/route.xlsx index efd659e64..fbddfd06d 100644 Binary files a/templates/export/route.xlsx and b/templates/export/route.xlsx differ diff --git a/templates/export/summary.xlsx b/templates/export/summary.xlsx index a989e0d19..c61258844 100644 Binary files a/templates/export/summary.xlsx and b/templates/export/summary.xlsx differ diff --git a/templates/export/trips.xlsx b/templates/export/trips.xlsx index 8e214a8a3..795189d16 100644 Binary files a/templates/export/trips.xlsx and b/templates/export/trips.xlsx differ -- cgit v1.2.3 From eb2165714a1ef71b4ec48a80613598b222284f0f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 7 Nov 2016 02:10:44 +1300 Subject: Handle new line in ET messages (fix #2509) --- src/org/traccar/protocol/EasyTrackProtocol.java | 4 ++-- test/org/traccar/protocol/EasyTrackProtocolDecoderTest.java | 12 ++++++++++++ 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/EasyTrackProtocol.java b/src/org/traccar/protocol/EasyTrackProtocol.java index 78f7f0b12..eeed07129 100644 --- a/src/org/traccar/protocol/EasyTrackProtocol.java +++ b/src/org/traccar/protocol/EasyTrackProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2016 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. @@ -36,7 +36,7 @@ public class EasyTrackProtocol extends BaseProtocol { serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, '#')); + pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, "#", "\r\n")); pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("objectDecoder", new EasyTrackProtocolDecoder(EasyTrackProtocol.this)); diff --git a/test/org/traccar/protocol/EasyTrackProtocolDecoderTest.java b/test/org/traccar/protocol/EasyTrackProtocolDecoderTest.java index 41c747ad6..51c515544 100644 --- a/test/org/traccar/protocol/EasyTrackProtocolDecoderTest.java +++ b/test/org/traccar/protocol/EasyTrackProtocolDecoderTest.java @@ -10,6 +10,18 @@ public class EasyTrackProtocolDecoderTest extends ProtocolTest { EasyTrackProtocolDecoder decoder = new EasyTrackProtocolDecoder(new EasyTrackProtocol()); + verifyPosition(decoder, text( + "*ET,358155100054249,HB,A,100b06,053318,803a0b51,03d507c9,0017,0000,00400000,07,100,0000,1435,63")); + + verifyNothing(decoder, text( + "*ET,358155100054249,MQ")); + + verifyNothing(decoder, text( + "*ET,358155100054249,TX,A,100b06,053230")); + + verifyPosition(decoder, text( + "*ET,358155100054249,HB,A,100b06,053212,803a0b20,03d507a2,0054,0000,40400000,06,100,0000,1435,44")); + verifyNothing(decoder, text( "*ET,135790246811221,GZ,0001,0005")); -- cgit v1.2.3 From 2a312faf02efc0130c419d31abd6169b6da30806 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 9 Nov 2016 03:36:54 +1300 Subject: Extend upro protocol decoder --- src/org/traccar/protocol/UproProtocolDecoder.java | 91 +++++++++++++++++----- .../traccar/protocol/UproProtocolDecoderTest.java | 9 +++ 2 files changed, 80 insertions(+), 20 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index 91404a241..e48162322 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -18,10 +18,10 @@ package org.traccar.protocol; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; +import org.traccar.helper.BitUtil; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; -import org.traccar.helper.PatternUtil; import org.traccar.model.Position; import java.net.SocketAddress; @@ -34,50 +34,101 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { } private static final Pattern PATTERN = new PatternBuilder() - .text("*AI20") + .text("*") + .expression("..20") .expression("[01]") // ack .number("(d+),") // device id - .expression(".+&A") + .expression(".") // type + .expression(".") // subtype + .expression("(.*)") // content + .expression("#?") // delimiter + .compile(); + + private static final Pattern PATTERN_LOCATION = new PatternBuilder() + .text("A") .number("(dd)(dd)(dd)") // time .number("(dd)(dd)(dddd)") // latitude .number("(ddd)(dd)(dddd)") // longitude - .number("d{5}") + .number("(d)") // flags + .number("(dd)") // speed + .number("(dd)") // course .number("(dd)(dd)(dd)") // date - .expression("&B") - .any() .compile(); + private void decodeLocation(Position position, String data) { + Parser parser = new Parser(PATTERN_LOCATION, data); + if (parser.matches()) { + + DateBuilder dateBuilder = new DateBuilder() + .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); + + position.setValid(true); + position.setLatitude(parser.nextCoordinate(Parser.CoordinateFormat.DEG_MIN_MIN)); + position.setLongitude(parser.nextCoordinate(Parser.CoordinateFormat.DEG_MIN_MIN)); + + int flags = parser.nextInt(); + position.setValid(BitUtil.check(flags, 0)); + if (!BitUtil.check(flags, 1)) { + position.setLatitude(-position.getLatitude()); + } + if (!BitUtil.check(flags, 2)) { + position.setLatitude(-position.getLatitude()); + } + + position.setSpeed(parser.nextInt() * 2); + position.setCourse(parser.nextInt() * 10); + + dateBuilder.setDateReverse(parser.nextInt(), parser.nextInt(), parser.nextInt()); + position.setTime(dateBuilder.getDate()); + + } + } + @Override protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { - PatternUtil.MatchResult r = PatternUtil.checkPattern(PATTERN.pattern(), (String) msg); - Parser parser = new Parser(PATTERN, (String) msg); if (!parser.matches()) { return null; } - Position position = new Position(); - position.setProtocol(getProtocolName()); - DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next()); if (deviceSession == null) { return null; } - position.setDeviceId(deviceSession.getDeviceId()); - DateBuilder dateBuilder = new DateBuilder() - .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); - position.setValid(true); - position.setLatitude(parser.nextCoordinate(Parser.CoordinateFormat.DEG_MIN_MIN)); - position.setLongitude(parser.nextCoordinate(Parser.CoordinateFormat.DEG_MIN_MIN)); + String[] data = parser.next().split("&"); + for (int i = 0; i < data.length; i++) { + if (i != 0) { + switch (data[i].charAt(0)) { + case 'A': + decodeLocation(position, data[i]); + break; + case 'B': + position.set(Position.KEY_STATUS, data[i].substring(1)); + break; + case 'P': + position.set(Position.KEY_MCC, Integer.parseInt(data[i].substring(1, 5))); + position.set(Position.KEY_MNC, Integer.parseInt(data[i].substring(5, 9))); + position.set(Position.KEY_LAC, Integer.parseInt(data[i].substring(9, 13), 16)); + position.set(Position.KEY_CID, Integer.parseInt(data[i].substring(13, 17), 16)); + break; + default: + break; + } + } + } - dateBuilder.setDateReverse(parser.nextInt(), parser.nextInt(), parser.nextInt()); - position.setTime(dateBuilder.getDate()); + if (position.getLatitude() != 0 && position.getLongitude() != 0) { + return position; + } - return position; + return null; } } diff --git a/test/org/traccar/protocol/UproProtocolDecoderTest.java b/test/org/traccar/protocol/UproProtocolDecoderTest.java index aab31ba26..d553d5f52 100644 --- a/test/org/traccar/protocol/UproProtocolDecoderTest.java +++ b/test/org/traccar/protocol/UproProtocolDecoderTest.java @@ -10,6 +10,15 @@ public class UproProtocolDecoderTest extends ProtocolTest { UproProtocolDecoder decoder = new UproProtocolDecoder(new UproProtocol()); + verifyNothing(decoder, text( + "*MG20113800138000,AH#")); + + verifyPosition(decoder, text( + "*MG201693502000034964,AB&A0200183324418107033792800009051116&B0000000000&N15&Z94&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0#")); + + verifyPosition(decoder, text( + "*MG201693502000034964,AB&A0200543324412007033805910000051116&P0730000032d66785&B0000000000&N15&Z92&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0#")); + verifyPosition(decoder, text( "*AI2000905447674,BA&A2003064913201201845107561627121016&B0100000000&C05>8=961&F0333&K023101002154A7#")); -- cgit v1.2.3 From ef7247060c22c060744580f825391673773703c5 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 9 Nov 2016 20:50:48 +1300 Subject: Support LBS for H02 protocol --- src/org/traccar/protocol/H02ProtocolDecoder.java | 65 ++++++++++++++++++++-- .../traccar/protocol/H02ProtocolDecoderTest.java | 14 ++++- 2 files changed, 74 insertions(+), 5 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index e74f9e862..45a978571 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -170,6 +170,22 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { .any() .compile(); + private static final Pattern PATTERN_NBR = new PatternBuilder() + .text("*") + .expression("..,") // manufacturer + .number("(d+),") // imei + .text("NBR,") + .number("(dd)(dd)(dd),") // time + .number("(d+),") // mcc + .number("(d+),") // mnc + .number("d+,") // gsm delay time + .number("d+,") // count + .number("((?:d+,d+,d+,)+)") // cells + .number("(dd)(dd)(dd),") // date (ddmmyy) + .number("(x{8})") // status + .any() + .compile(); + private Position decodeText(String sentence, Channel channel, SocketAddress remoteAddress) { Parser parser = new Parser(PATTERN, sentence); @@ -177,13 +193,13 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { return null; } - Position position = new Position(); - position.setProtocol(getProtocolName()); - DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next()); if (deviceSession == null) { return null; } + + Position position = new Position(); + position.setProtocol(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); DateBuilder dateBuilder = new DateBuilder(); @@ -224,6 +240,42 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { return position; } + private Position decodeLbs(String sentence, Channel channel, SocketAddress remoteAddress) { + + Parser parser = new Parser(PATTERN_NBR, sentence); + if (!parser.matches()) { + return null; + } + + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next()); + if (deviceSession == null) { + return null; + } + + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + DateBuilder dateBuilder = new DateBuilder() + .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); + + position.set(Position.KEY_MCC, parser.nextInt()); + position.set(Position.KEY_MNC, parser.nextInt()); + + String[] cells = parser.next().split(","); // decode all in future + position.set(Position.KEY_LAC, Integer.parseInt(cells[0])); + position.set(Position.KEY_CID, Integer.parseInt(cells[1])); + position.set(Position.KEY_GSM, Integer.parseInt(cells[2])); + + dateBuilder.setDateReverse(parser.nextInt(), parser.nextInt(), parser.nextInt()); + + getLastLocation(position, dateBuilder.getDate()); + + processStatus(position, parser.nextLong(16)); + + return position; + } + @Override protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { @@ -234,7 +286,12 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { // handle X mode? if (marker.equals("*")) { - return decodeText(buf.toString(StandardCharsets.US_ASCII), channel, remoteAddress); + String sentence = buf.toString(StandardCharsets.US_ASCII); + if (sentence.contains(",NBR,")) { + return decodeLbs(sentence, channel, remoteAddress); + } else { + return decodeText(sentence, channel, remoteAddress); + } } else if (marker.equals("$")) { return decodeBinary(buf, channel, remoteAddress); } diff --git a/test/org/traccar/protocol/H02ProtocolDecoderTest.java b/test/org/traccar/protocol/H02ProtocolDecoderTest.java index 88c76f66a..48fe408d8 100644 --- a/test/org/traccar/protocol/H02ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/H02ProtocolDecoderTest.java @@ -10,6 +10,18 @@ public class H02ProtocolDecoderTest extends ProtocolTest { H02ProtocolDecoder decoder = new H02ProtocolDecoder(new H02Protocol()); + verifyAttributes(decoder, buffer( + "*HQ,1400046168,NBR,160169,460,0,1,4,9338,3692,150,9338,3691,145,9338,3690,140,9338,3692,139,180813,FFFFFBFF#")); + + verifyAttributes(decoder, buffer( + "*HQ,1600068860,NBR,120156,262,03,255,6,802,54702,46,802,5032,37,802,54782,30,802,5052,28,802,54712,12,802,5042,12,081116,FFFFFBFF#")); + + verifyAttributes(decoder, buffer( + "*HQ,1600068860,NBR,110326,262,03,255,6,802,23152,23,812,49449,14,802,35382,13,802,35402,11,812,56622,09,802,23132,04,081116,FFFFFBFF#")); + + verifyNothing(decoder, buffer( + "*HQ,1600068860,LINK,112137,20,8,67,0,0,081116,FFFFFBFF#")); + verifyNothing(decoder, buffer( "*HQ,355488020533263,V3,121536,65501,04,000152,014001,156,-64,000161,010642,138,,000152,014003,129,,000152,013973,126,,02E4,0,X,071116,FFFFFBFF#")); @@ -23,7 +35,7 @@ public class H02ProtocolDecoderTest extends ProtocolTest { "*HQ,4210051415,V1,164549,A,0956.3869,N,08406.7068,W,000.00,000,221215,FFFFFBFF,712,01,0,0,6#"), position("2015-12-22 16:45:49.000", true, 9.93978, -84.11178)); - verifyNothing(decoder, buffer( + verifyAttributes(decoder, buffer( "*HQ,1451316451,NBR,112315,724,10,2,2,215,2135,123,215,2131,121,011215,FFFFFFFF#")); verifyPosition(decoder, buffer( -- cgit v1.2.3 From 9d9dbcdd3229c6f852031d2e458aca194bcee8b9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 10 Nov 2016 01:35:35 +1300 Subject: Fix issues with upro coordinates --- src/org/traccar/protocol/UproProtocolDecoder.java | 2 +- test/org/traccar/protocol/UproProtocolDecoderTest.java | 7 ++++++- 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index e48162322..02a241ddd 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -72,7 +72,7 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(-position.getLatitude()); } if (!BitUtil.check(flags, 2)) { - position.setLatitude(-position.getLatitude()); + position.setLongitude(-position.getLongitude()); } position.setSpeed(parser.nextInt() * 2); diff --git a/test/org/traccar/protocol/UproProtocolDecoderTest.java b/test/org/traccar/protocol/UproProtocolDecoderTest.java index d553d5f52..034fd78a1 100644 --- a/test/org/traccar/protocol/UproProtocolDecoderTest.java +++ b/test/org/traccar/protocol/UproProtocolDecoderTest.java @@ -10,6 +10,10 @@ public class UproProtocolDecoderTest extends ProtocolTest { UproProtocolDecoder decoder = new UproProtocolDecoder(new UproProtocol()); + verifyPosition(decoder, text( + "*MG201693502000034964,AB&A0800253335360507036975710000091116&P0730000032d2a94d&B0000000000&N13&Z12&U_P\0\0\0\u0004\0\0\0\0\0\0\0\0\0\0#"), + position("2016-11-09 08:00:25.000", true, -33.58934, -70.61626)); + verifyNothing(decoder, text( "*MG20113800138000,AH#")); @@ -23,7 +27,8 @@ public class UproProtocolDecoderTest extends ProtocolTest { "*AI2000905447674,BA&A2003064913201201845107561627121016&B0100000000&C05>8=961&F0333&K023101002154A7#")); verifyPosition(decoder, text( - "*AI200905300036,AH&A0317264913209801844913060000251115&B0500000000&C0;4?72:9&F0000#")); + "*AI200905300036,AH&A0317264913209801844913060000251115&B0500000000&C0;4?72:9&F0000#"), + position("2015-11-25 03:17:26.000", false, 49.22016, 18.74855)); verifyPosition(decoder, text( "*AI2000905300036,AS&A1647304913209801844913060000251115&B0400000000&C0;4?72:9&F0000")); -- cgit v1.2.3 From 096259c2fe6311bde08b993b18631053b7652c99 Mon Sep 17 00:00:00 2001 From: Enrique Villafane Date: Wed, 9 Nov 2016 18:22:33 -0400 Subject: Add acc on, acc off and door alarm to events from coban gps (gps103 protocol) --- src/org/traccar/model/Position.java | 2 ++ src/org/traccar/protocol/Gps103ProtocolDecoder.java | 6 ++++++ 2 files changed, 8 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index 183fab72f..b2965c89c 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -83,6 +83,8 @@ public class Position extends Message { public static final String ALARM_LOW_BATTERY = "lowBattery"; public static final String ALARM_FAULT = "fault"; public static final String ALARM_POWER_OFF = "powerOff"; + public static final String ALARM_POWER_ON = "powerOn"; + public static final String ALARM_DOOR = "door"; public static final String ALARM_GEOFENCE = "geofence"; public static final String ALARM_GEOFENCE_ENTER = "geofenceEnter"; public static final String ALARM_GEOFENCE_EXIT = "geofenceExit"; diff --git a/src/org/traccar/protocol/Gps103ProtocolDecoder.java b/src/org/traccar/protocol/Gps103ProtocolDecoder.java index 7754bd831..57dc784d3 100644 --- a/src/org/traccar/protocol/Gps103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolDecoder.java @@ -113,6 +113,12 @@ public class Gps103ProtocolDecoder extends BaseProtocolDecoder { return Position.ALARM_MOVEMENT; case "speed": return Position.ALARM_OVERSPEED; + case "acc on": + return Position.ALARM_POWER_ON; + case "acc off": + return Position.ALARM_POWER_OFF; + case "door alarm": + return Position.ALARM_DOOR; default: return null; } -- cgit v1.2.3 From f80ce6d7a36e753aa6e5c7197d39a9e08caa848e Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 11 Nov 2016 11:30:29 +0500 Subject: Analog input values tuning --- src/org/traccar/protocol/GranitProtocolDecoder.java | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/GranitProtocolDecoder.java b/src/org/traccar/protocol/GranitProtocolDecoder.java index 63b1671c6..2940f5c71 100644 --- a/src/org/traccar/protocol/GranitProtocolDecoder.java +++ b/src/org/traccar/protocol/GranitProtocolDecoder.java @@ -19,6 +19,7 @@ import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; +import org.traccar.Context; import org.traccar.DeviceSession; import org.traccar.helper.BitUtil; import org.traccar.helper.Checksum; @@ -36,8 +37,17 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder { private static final int HEADER_LENGTH = 6; + private static double adc1Ratio; + private static double adc2Ratio; + private static double adc3Ratio; + private static double adc4Ratio; + public GranitProtocolDecoder(GranitProtocol protocol) { super(protocol); + adc1Ratio = Context.getConfig().getDouble("granit.adc1Ratio", 1); + adc2Ratio = Context.getConfig().getDouble("granit.adc2Ratio", 1); + adc3Ratio = Context.getConfig().getDouble("granit.adc3Ratio", 1); + adc4Ratio = Context.getConfig().getDouble("granit.adc4Ratio", 1); } public static void appendChecksum(ChannelBuffer buffer, int length) { @@ -118,10 +128,10 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder { analogIn3 = analogInHi << 4 & 0x300 | analogIn3; analogIn4 = analogInHi << 2 & 0x300 | analogIn4; - position.set(Position.PREFIX_ADC + 1, analogIn1); - position.set(Position.PREFIX_ADC + 2, analogIn2); - position.set(Position.PREFIX_ADC + 3, analogIn3); - position.set(Position.PREFIX_ADC + 4, analogIn4); + position.set(Position.PREFIX_ADC + 1, analogIn1 * adc1Ratio); + position.set(Position.PREFIX_ADC + 2, analogIn2 * adc2Ratio); + position.set(Position.PREFIX_ADC + 3, analogIn3 * adc3Ratio); + position.set(Position.PREFIX_ADC + 4, analogIn4 * adc4Ratio); position.setAltitude(buf.readUnsignedByte() * 10); -- cgit v1.2.3 From 2b5f9090882a4ddb5ca72d47b74ca6466e2240d0 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 11 Nov 2016 13:44:41 +0500 Subject: Remove static --- src/org/traccar/protocol/GranitProtocolDecoder.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/GranitProtocolDecoder.java b/src/org/traccar/protocol/GranitProtocolDecoder.java index 2940f5c71..5fa786e4d 100644 --- a/src/org/traccar/protocol/GranitProtocolDecoder.java +++ b/src/org/traccar/protocol/GranitProtocolDecoder.java @@ -37,10 +37,10 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder { private static final int HEADER_LENGTH = 6; - private static double adc1Ratio; - private static double adc2Ratio; - private static double adc3Ratio; - private static double adc4Ratio; + private double adc1Ratio; + private double adc2Ratio; + private double adc3Ratio; + private double adc4Ratio; public GranitProtocolDecoder(GranitProtocol protocol) { super(protocol); @@ -78,7 +78,7 @@ public class GranitProtocolDecoder extends BaseProtocolDecoder { channel.write(response); } - private static void decodeStructure(ChannelBuffer buf, Position position) { + private void decodeStructure(ChannelBuffer buf, Position position) { short flags = buf.readUnsignedByte(); position.setValid(BitUtil.check(flags, 7)); if (BitUtil.check(flags, 1)) { -- cgit v1.2.3 From bafda68f2b84c77553e663f116305ab6ed807254 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 12 Nov 2016 09:47:43 +1300 Subject: New format for V680 protocol --- src/org/traccar/protocol/V680ProtocolDecoder.java | 28 ++++++++++++++++------ .../traccar/protocol/V680ProtocolDecoderTest.java | 7 +++++- 2 files changed, 27 insertions(+), 8 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/V680ProtocolDecoder.java b/src/org/traccar/protocol/V680ProtocolDecoder.java index 181983f04..ca9c451c2 100644 --- a/src/org/traccar/protocol/V680ProtocolDecoder.java +++ b/src/org/traccar/protocol/V680ProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2012 - 2013 Anton Tananaev (anton@traccar.org) + * Copyright 2012 - 2016 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. @@ -43,10 +43,8 @@ public class V680ProtocolDecoder extends BaseProtocolDecoder { .number("(d+)#") // packet number .expression("([^#]+)?#?") // gsm base station .expression("(?:[^#]+#)?") - .number("(d+)?(dd.d+),") // longitude - .expression("([EW]),") - .number("(d+)?(dd.d+),") // latitude - .expression("([NS]),") + .number("(d+.d+),([EW]),") // longitude + .number("(d+.d+),([NS]),") // latitude .number("(d+.d+),") // speed .number("(d+.?d*)?#") // course .number("(dd)(dd)(dd)#") // date @@ -93,8 +91,24 @@ public class V680ProtocolDecoder extends BaseProtocolDecoder { position.set("packet", parser.next()); position.set(Position.KEY_GSM, parser.next()); - position.setLongitude(parser.nextCoordinate()); - position.setLatitude(parser.nextCoordinate()); + double lon = parser.nextDouble(); + boolean west = parser.next().equals("W"); + double lat = parser.nextDouble(); + boolean south = parser.next().equals("S"); + + if (lat > 90 || lon > 180) { + int lonDegrees = (int) (lon * 0.01); + lon = (lon - lonDegrees * 100) / 60.0; + lon += lonDegrees; + + int latDegrees = (int) (lat * 0.01); + lat = (lat - latDegrees * 100) / 60.0; + lat += latDegrees; + } + + position.setLongitude(west ? -lon : lon); + position.setLatitude(south ? -lat : lat); + position.setSpeed(parser.nextDouble()); position.setCourse(parser.nextDouble()); diff --git a/test/org/traccar/protocol/V680ProtocolDecoderTest.java b/test/org/traccar/protocol/V680ProtocolDecoderTest.java index 2e36010c7..f68497304 100644 --- a/test/org/traccar/protocol/V680ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/V680ProtocolDecoderTest.java @@ -10,6 +10,10 @@ public class V680ProtocolDecoderTest extends ProtocolTest { V680ProtocolDecoder decoder = new V680ProtocolDecoder(new V680Protocol()); + verifyPosition(decoder, text( + "#867967020910610#01234567890#1#0000#AUT#1#0500000000120000#114.036291,E,22.665795,N,111.00,000.00#111116#193333##"), + position("2016-11-11 19:33:33.000", true, 22.66579, 114.03629)); + verifyPosition(decoder, text( "#355488020168617##1#0000#AUT#01#260001a412966f#1834.790700,E,5302.748800,N,0.00,0.00#310316#174538.000##")); @@ -23,7 +27,8 @@ public class V680ProtocolDecoderTest extends ProtocolTest { "#135790246811222#13486119277#1#0000#SOS#1#27bc10af#11407.4182,E,2232.7632,N,0.00,79.50#070709#134147.000##")); verifyPosition(decoder, text( - "#356823031193431##0#0000#SF#1#72403#V#04702.3025,W,2252.18380,S,008.18,0#090413#134938")); + "#356823031193431##0#0000#SF#1#72403#V#04702.3025,W,2252.18380,S,008.18,0#090413#134938"), + position("2013-04-09 13:49:38.000", false, -22.86973, -47.038375)); verifyPosition(decoder, text( "#356823033219838#1000#0#1478#AUT#1#66830FFB#03855.6628,E,4716.6821,N,001.41,259#130812#143905")); -- cgit v1.2.3 From 4066c24ed1ba8749a1a682acb5b027401d0df70f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 14 Nov 2016 01:56:26 +1300 Subject: Another attempt to fix H02 frame decoder --- src/org/traccar/protocol/H02FrameDecoder.java | 16 +++++++++------- test/org/traccar/protocol/H02FrameDecoderTest.java | 21 ++++++++++++++++++--- .../traccar/protocol/H02ProtocolDecoderTest.java | 3 +++ 3 files changed, 30 insertions(+), 10 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/H02FrameDecoder.java b/src/org/traccar/protocol/H02FrameDecoder.java index d461c9219..a22252a57 100644 --- a/src/org/traccar/protocol/H02FrameDecoder.java +++ b/src/org/traccar/protocol/H02FrameDecoder.java @@ -54,16 +54,18 @@ public class H02FrameDecoder extends FrameDecoder { } else if (marker == '$') { - if (messageLength > 0 && buf.readableBytes() >= messageLength) { - return buf.readBytes(messageLength); - } else if (buf.readableBytes() >= MESSAGE_SHORT) { - if (buf.getUnsignedByte(buf.readerIndex() + MESSAGE_SHORT - 1) == 0) { - return buf.readBytes(MESSAGE_SHORT); - } else if (buf.readableBytes() >= MESSAGE_LONG) { - return buf.readBytes(MESSAGE_LONG); + if (messageLength == 0) { + if (buf.readableBytes() == MESSAGE_LONG) { + messageLength = MESSAGE_LONG; + } else { + messageLength = MESSAGE_SHORT; } } + if (buf.readableBytes() >= messageLength) { + return buf.readBytes(messageLength); + } + } return null; diff --git a/test/org/traccar/protocol/H02FrameDecoderTest.java b/test/org/traccar/protocol/H02FrameDecoderTest.java index 3e12bb446..7d54299a5 100644 --- a/test/org/traccar/protocol/H02FrameDecoderTest.java +++ b/test/org/traccar/protocol/H02FrameDecoderTest.java @@ -7,13 +7,17 @@ import org.traccar.ProtocolTest; public class H02FrameDecoderTest extends ProtocolTest { @Test - public void testDecode() throws Exception { + public void testDecodeShort() throws Exception { H02FrameDecoder decoder = new H02FrameDecoder(0); Assert.assertEquals( - binary("24410600082621532131081504419390060740418306000000fffffbfdff0015060000002c02dc0c000000001f"), - decoder.decode(null, null, binary("24410600082621532131081504419390060740418306000000fffffbfdff0015060000002c02dc0c000000001f"))); + binary("2441060116601245431311165035313006004318210e000000fffffbffff0024"), + decoder.decode(null, null, binary("2441060116601245431311165035313006004318210e000000fffffbffff0024"))); + + Assert.assertEquals( + binary("2441060116601245431311165035313006004318210e000000fffffbffff0024"), + decoder.decode(null, null, binary("2441060116601245431311165035313006004318210e000000fffffbffff00242a48512c343130363031313636302c56312c3132343535322c412c353033352e333132392c4e2c30303433312e383231312c452c3030302e32302c3030302c3133313131362c464646464642464623"))); Assert.assertEquals( binary("2a48512c3335333538383036303031353536382c56312c3139333530352c412c3830392e303031302c532c333435342e383939372c572c302e30302c302e30302c3239313031332c65666666666266662c3030303264342c3030303030622c3030353338352c3030353261612c323523"), @@ -25,4 +29,15 @@ public class H02FrameDecoderTest extends ProtocolTest { } + @Test + public void testDecodeLong() throws Exception { + + H02FrameDecoder decoder = new H02FrameDecoder(0); + + Assert.assertEquals( + binary("24410600082621532131081504419390060740418306000000fffffbfdff0015060000002c02dc0c000000001f"), + decoder.decode(null, null, binary("24410600082621532131081504419390060740418306000000fffffbfdff0015060000002c02dc0c000000001f"))); + + } + } diff --git a/test/org/traccar/protocol/H02ProtocolDecoderTest.java b/test/org/traccar/protocol/H02ProtocolDecoderTest.java index 48fe408d8..9fed9943c 100644 --- a/test/org/traccar/protocol/H02ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/H02ProtocolDecoderTest.java @@ -115,6 +115,9 @@ public class H02ProtocolDecoderTest extends ProtocolTest { verifyNothing(decoder, buffer( "*HQ,8401016597,BASE,152609,0,0,0,0,211014,FFFFFFFF#")); + verifyPosition(decoder, binary( + "2441060116601245431311165035313006004318210e000000fffffbffff0024")); + verifyPosition(decoder, binary( "24410600082621532131081504419390060740418306000000fffffbfdff0015060000002c02dc0c000000001f"), position("2015-08-31 21:53:21.000", true, 4.69898, -74.06971)); -- cgit v1.2.3 From 133a527625b9341138e2b52d566c824c36fb940f Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 14 Nov 2016 22:51:30 +1300 Subject: Fix Navis speed decoding --- src/org/traccar/protocol/NavisProtocolDecoder.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/NavisProtocolDecoder.java b/src/org/traccar/protocol/NavisProtocolDecoder.java index 077f34e8d..e06ef1b57 100644 --- a/src/org/traccar/protocol/NavisProtocolDecoder.java +++ b/src/org/traccar/protocol/NavisProtocolDecoder.java @@ -22,6 +22,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; import org.traccar.helper.BitUtil; import org.traccar.helper.DateBuilder; +import org.traccar.helper.UnitsConverter; import org.traccar.model.Position; import java.net.SocketAddress; @@ -144,7 +145,7 @@ public class NavisProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(buf.readFloat() / Math.PI * 180); position.setLongitude(buf.readFloat() / Math.PI * 180); - position.setSpeed(buf.readFloat()); + position.setSpeed(UnitsConverter.knotsFromKph(buf.readFloat())); position.setCourse(buf.readUnsignedShort()); position.set(Position.KEY_ODOMETER, buf.readFloat() * 1000); -- cgit v1.2.3 From fcc70df74b1fb17280b837b2a31722c2f3fc8ad2 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 15 Nov 2016 22:06:41 +1300 Subject: Fix Astra decoding problem --- src/org/traccar/protocol/AstraProtocolDecoder.java | 12 +++++++++--- test/org/traccar/protocol/AstraProtocolDecoderTest.java | 3 +++ 2 files changed, 12 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/AstraProtocolDecoder.java b/src/org/traccar/protocol/AstraProtocolDecoder.java index d51be633d..390434d54 100644 --- a/src/org/traccar/protocol/AstraProtocolDecoder.java +++ b/src/org/traccar/protocol/AstraProtocolDecoder.java @@ -22,6 +22,7 @@ import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; import org.traccar.helper.BitUtil; import org.traccar.helper.DateBuilder; +import org.traccar.helper.Log; import org.traccar.helper.UnitsConverter; import org.traccar.model.Position; @@ -82,7 +83,9 @@ public class AstraProtocolDecoder extends BaseProtocolDecoder { int reason = buf.readUnsignedMedium(); position.set(Position.KEY_EVENT, reason); - position.set(Position.KEY_STATUS, buf.readUnsignedShort()); + int status = buf.readUnsignedShort(); + position.set(Position.KEY_STATUS, status); + position.set(Position.PREFIX_IO + 1, buf.readUnsignedByte()); position.set(Position.PREFIX_ADC + 1, buf.readUnsignedByte()); position.set(Position.KEY_BATTERY, buf.readUnsignedByte()); @@ -101,7 +104,7 @@ public class AstraProtocolDecoder extends BaseProtocolDecoder { buf.readUnsignedByte(); // geofence events - if (BitUtil.check(reason, 6) || BitUtil.check(reason, 7)) { + if (BitUtil.check(status, 8)) { position.set(Position.KEY_RFID, buf.readBytes(7).toString(StandardCharsets.US_ASCII)); position.set(Position.KEY_ODOMETER, buf.readUnsignedMedium() * 1000); @@ -110,7 +113,10 @@ public class AstraProtocolDecoder extends BaseProtocolDecoder { } - // extra data + if (BitUtil.check(status, 6)) { + Log.warning("Extension data is not supported"); + return position; + } positions.add(position); diff --git a/test/org/traccar/protocol/AstraProtocolDecoderTest.java b/test/org/traccar/protocol/AstraProtocolDecoderTest.java index e8a9b12b5..3531be5a8 100644 --- a/test/org/traccar/protocol/AstraProtocolDecoderTest.java +++ b/test/org/traccar/protocol/AstraProtocolDecoderTest.java @@ -10,6 +10,9 @@ public class AstraProtocolDecoderTest extends ProtocolTest { AstraProtocolDecoder decoder = new AstraProtocolDecoder(new AstraProtocol()); + verifyPositions(decoder, binary( + "4b00700529c0c265976b8202cba9ff00676d864554a9c30000000020073401006436000300030008000000000000a0000100001920c43d00009600428302cba9ff00676d864554aa3e000000002007240100643b000300020008000000000000b0000100001920c43d00009600420f0e")); + verifyPositions(decoder, binary( "4b00320524c1da58769e6d0322617effe874024453065600a800000100080000643e0000000000000000000000069500e7bb")); -- cgit v1.2.3 From a99aeb0236cc2cf44e31e9adeb6fbb827c30b1ad Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 15 Nov 2016 22:59:50 +1300 Subject: Implement upro protocol response --- src/org/traccar/protocol/UproProtocolDecoder.java | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index 02a241ddd..d5a00c6df 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -36,10 +36,10 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { private static final Pattern PATTERN = new PatternBuilder() .text("*") .expression("..20") - .expression("[01]") // ack + .expression("([01])") // ack .number("(d+),") // device id - .expression(".") // type - .expression(".") // subtype + .expression("(.)") // type + .expression("(.)") // subtype .expression("(.*)") // content .expression("#?") // delimiter .compile(); @@ -93,6 +93,8 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { return null; } + boolean reply = parser.next().equals("1"); + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next()); if (deviceSession == null) { return null; @@ -102,6 +104,13 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { position.setProtocol(getProtocolName()); position.setDeviceId(deviceSession.getDeviceId()); + String type = parser.next(); + String subtype = parser.next(); + + if (reply && channel != null) { + channel.write("*MG20Y" + type + subtype + "#"); + } + String[] data = parser.next().split("&"); for (int i = 0; i < data.length; i++) { if (i != 0) { -- cgit v1.2.3 From 57b831ca0b08c3ac2c4aa93b9ba2a3c44d78344b Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 16 Nov 2016 03:32:20 +1300 Subject: Decode upro odometer and OBD --- src/org/traccar/protocol/UproProtocolDecoder.java | 11 +++++++++++ test/org/traccar/protocol/UproProtocolDecoderTest.java | 3 +++ 2 files changed, 14 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index d5a00c6df..c6f400cae 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -121,12 +121,23 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { case 'B': position.set(Position.KEY_STATUS, data[i].substring(1)); break; + case 'C': + long odometer = 0; + for (int j = 1; j < data[i].length(); j++) { + odometer <<= 4; + odometer += data[i].charAt(j) - '0'; + } + position.set(Position.KEY_ODOMETER, odometer); + break; case 'P': position.set(Position.KEY_MCC, Integer.parseInt(data[i].substring(1, 5))); position.set(Position.KEY_MNC, Integer.parseInt(data[i].substring(5, 9))); position.set(Position.KEY_LAC, Integer.parseInt(data[i].substring(9, 13), 16)); position.set(Position.KEY_CID, Integer.parseInt(data[i].substring(13, 17), 16)); break; + case 'S': + position.set("obd", data[i]); + break; default: break; } diff --git a/test/org/traccar/protocol/UproProtocolDecoderTest.java b/test/org/traccar/protocol/UproProtocolDecoderTest.java index 034fd78a1..711fe39b6 100644 --- a/test/org/traccar/protocol/UproProtocolDecoderTest.java +++ b/test/org/traccar/protocol/UproProtocolDecoderTest.java @@ -10,6 +10,9 @@ public class UproProtocolDecoderTest extends ProtocolTest { UproProtocolDecoder decoder = new UproProtocolDecoder(new UproProtocol()); + verifyPosition(decoder, text( + "*MG201693502000035441,BA&A1213073325458307036690710000151116&P0730000032ce4fb3&D1&B0000000000&C005799?7&S3,20161115120025,07035.54659E,3324.87721N,3000,0,0,0,0,847,599,8,40,0,19,20&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0&T0107#")); + verifyPosition(decoder, text( "*MG201693502000034964,AB&A0800253335360507036975710000091116&P0730000032d2a94d&B0000000000&N13&Z12&U_P\0\0\0\u0004\0\0\0\0\0\0\0\0\0\0#"), position("2016-11-09 08:00:25.000", true, -33.58934, -70.61626)); -- cgit v1.2.3 From 512b95fd6975005c6460ddad16714502510cb16e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 17 Nov 2016 16:56:44 +1300 Subject: Correctly decode upro mileage --- src/org/traccar/protocol/UproProtocolDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index c6f400cae..24a0f5dcd 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -127,7 +127,7 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { odometer <<= 4; odometer += data[i].charAt(j) - '0'; } - position.set(Position.KEY_ODOMETER, odometer); + position.set(Position.KEY_ODOMETER, odometer * 2 * 1852 / 3600); break; case 'P': position.set(Position.KEY_MCC, Integer.parseInt(data[i].substring(1, 5))); -- cgit v1.2.3 From af6c734879aa483efcc8150d5fdb704f40fb59cd Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 17 Nov 2016 22:48:33 +1300 Subject: Add user expiration and device limit --- schema/changelog-3.8.xml | 10 ++++++ setup/default.xml | 8 +++-- src/org/traccar/api/SecurityRequestFilter.java | 2 +- src/org/traccar/api/resource/DeviceResource.java | 7 ++++ src/org/traccar/api/resource/SessionResource.java | 2 +- src/org/traccar/api/resource/UserResource.java | 11 ++++--- src/org/traccar/database/PermissionsManager.java | 6 ++-- src/org/traccar/model/User.java | 40 +++++++++++++++++++++++ 8 files changed, 75 insertions(+), 11 deletions(-) (limited to 'src/org') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index 780a2d029..ba591f192 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -107,5 +107,15 @@ + + + + + + + + + + diff --git a/setup/default.xml b/setup/default.xml index f50f3904f..a9d7684d4 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -62,8 +62,8 @@ - INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, attributes) - VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :attributes) + INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, attributes) + VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :attributes) @@ -78,6 +78,10 @@ longitude = :longitude, zoom = :zoom, twelveHourFormat = :twelveHourFormat, + coordinateFormat = :coordinateFormat, + disabled = :disabled, + expirationTime = :expirationTime, + deviceLimit = :deviceLimit, attributes = :attributes WHERE id = :id diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index fd4c77525..598e4566d 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -67,7 +67,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { try { String[] auth = decodeBasicAuth(authHeader); - User user = Context.getDataManager().login(auth[0], auth[1]); + User user = Context.getPermissionsManager().login(auth[0], auth[1]); if (user != null) { Context.getStatisticsManager().registerRequest(user.getId()); securityContext = new UserSecurityContext(new UserPrincipal(user.getId())); diff --git a/src/org/traccar/api/resource/DeviceResource.java b/src/org/traccar/api/resource/DeviceResource.java index f20ed86ad..0b389ede1 100644 --- a/src/org/traccar/api/resource/DeviceResource.java +++ b/src/org/traccar/api/resource/DeviceResource.java @@ -58,6 +58,13 @@ public class DeviceResource extends BaseResource { @POST public Response add(Device entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); + int deviceLimit = Context.getPermissionsManager().getUser(getUserId()).getDeviceLimit(); + if (deviceLimit != 0) { + int deviceCount = Context.getPermissionsManager().getDevicePermissions(getUserId()).size(); + if (deviceCount >= deviceLimit) { + throw new SecurityException("User device limit reached"); + } + } Context.getDeviceManager().addDevice(entity); Context.getDataManager().linkDevice(getUserId(), entity.getId()); Context.getPermissionsManager().refreshPermissions(); diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index 2847e41c1..a459186fe 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -64,7 +64,7 @@ public class SessionResource extends BaseResource { } } if (email != null && password != null) { - User user = Context.getDataManager().login(email, password); + User user = Context.getPermissionsManager().login(email, password); if (user != null) { userId = user.getId(); request.getSession().setAttribute(USER_ID_KEY, userId); diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index f0a8597cc..c6e84c918 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -60,13 +60,16 @@ public class UserResource extends BaseResource { @Path("{id}") @PUT public Response update(@PathParam("id") long id, User entity) throws SQLException { - if (entity.getAdmin()) { + User old = Context.getPermissionsManager().getUser(entity.getId()); + if (old.getExpirationTime() == null && entity.getExpirationTime() != null + || old.getExpirationTime() != null && !old.getExpirationTime().equals(entity.getExpirationTime()) + || old.getAdmin() != entity.getAdmin() + || old.getReadonly() != entity.getReadonly() + || old.getDisabled() != entity.getDisabled() + || old.getDeviceLimit() != entity.getDeviceLimit()) { Context.getPermissionsManager().checkAdmin(getUserId()); } else { Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); - if (!entity.getReadonly()) { - Context.getPermissionsManager().checkReadonly(entity.getId()); - } } Context.getPermissionsManager().updateUser(entity); if (Context.getNotificationManager() != null) { diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index b0ae504d0..e620d5334 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -217,11 +217,11 @@ public class PermissionsManager { public User login(String email, String password) throws SQLException { User user = dataManager.login(email, password); - if (user != null && users.get(user.getId()) != null) { + if (user != null && !user.getDisabled() && (user.getExpirationTime() == null + || user.getExpirationTime().getTime() > System.currentTimeMillis())) { return users.get(user.getId()); - } else { - return null; } + return null; } } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index aa0b33713..a36fa0e31 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -18,6 +18,8 @@ package org.traccar.model; import com.fasterxml.jackson.annotation.JsonIgnore; import org.traccar.helper.Hashing; +import java.util.Date; + public class User extends Extensible { private String name; @@ -140,6 +142,44 @@ public class User extends Extensible { this.coordinateFormat = coordinateFormat; } + private boolean disabled; + + public boolean getDisabled() { + return disabled; + } + + public void setDisabled(boolean disabled) { + this.disabled = disabled; + } + + private Date expirationTime; + + public Date getExpirationTime() { + if (expirationTime != null) { + return new Date(expirationTime.getTime()); + } else { + return null; + } + } + + public void setExpirationTime(Date expirationTime) { + if (expirationTime != null) { + this.expirationTime = new Date(expirationTime.getTime()); + } else { + this.expirationTime = null; + } + } + + private int deviceLimit; + + public int getDeviceLimit() { + return deviceLimit; + } + + public void setDeviceLimit(int deviceLimit) { + this.deviceLimit = deviceLimit; + } + public String getPassword() { return null; } -- cgit v1.2.3 From 468e3b0aa03fbe69b4c590743cf9f6886ef99751 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 18 Nov 2016 00:16:55 +1300 Subject: Check account on every call --- src/org/traccar/api/SecurityRequestFilter.java | 1 + src/org/traccar/database/PermissionsManager.java | 16 +++++++++++++--- 2 files changed, 14 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index 598e4566d..be74a3607 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -80,6 +80,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { Long userId = (Long) request.getSession().getAttribute(SessionResource.USER_ID_KEY); if (userId != null) { + Context.getPermissionsManager().checkUser(userId); Context.getStatisticsManager().registerRequest(userId); securityContext = new UserSecurityContext(new UserPrincipal(userId)); } diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index e620d5334..1c995a11d 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -146,7 +146,17 @@ public class PermissionsManager { public void checkReadonly(long userId) throws SecurityException { if (!isAdmin(userId) && (server.getReadonly() || isReadonly(userId))) { - throw new SecurityException("User is readonly"); + throw new SecurityException("Account is readonly"); + } + } + + public void checkUser(long userId) throws SecurityException { + User user = getUser(userId); + if (user.getDisabled()) { + throw new SecurityException("Account is disabled"); + } + if (user.getExpirationTime() != null && System.currentTimeMillis() > user.getExpirationTime().getTime()) { + throw new SecurityException("Account has expired"); } } @@ -217,8 +227,8 @@ public class PermissionsManager { public User login(String email, String password) throws SQLException { User user = dataManager.login(email, password); - if (user != null && !user.getDisabled() && (user.getExpirationTime() == null - || user.getExpirationTime().getTime() > System.currentTimeMillis())) { + if (user != null) { + checkUser(user.getId()); return users.get(user.getId()); } return null; -- cgit v1.2.3 From 5efc8a36b7b9f88552e70e4bded314e1b7d1e292 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 18 Nov 2016 01:45:44 +1300 Subject: Decode AutoGrade status byte --- src/org/traccar/protocol/AutoGradeProtocolDecoder.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/AutoGradeProtocolDecoder.java b/src/org/traccar/protocol/AutoGradeProtocolDecoder.java index d520c282c..d8fe8b1a2 100644 --- a/src/org/traccar/protocol/AutoGradeProtocolDecoder.java +++ b/src/org/traccar/protocol/AutoGradeProtocolDecoder.java @@ -18,6 +18,7 @@ package org.traccar.protocol; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; +import org.traccar.helper.BitUtil; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; @@ -43,7 +44,7 @@ public class AutoGradeProtocolDecoder extends BaseProtocolDecoder { .number("([d.]{5})") // speed .number("(dd)(dd)(dd)") // time .number("([d.]{6})") // course - .expression(".") // status + .expression("(.)") // status .number("A(xxxx)") .number("B(xxxx)") .number("C(xxxx)") @@ -88,6 +89,10 @@ public class AutoGradeProtocolDecoder extends BaseProtocolDecoder { position.setCourse(parser.nextDouble()); + int status = (byte) parser.next().charAt(0); + position.set(Position.KEY_STATUS, status); + position.set(Position.KEY_IGNITION, BitUtil.check(status, 0)); + for (int i = 1; i <= 5; i++) { position.set(Position.PREFIX_ADC + i, parser.next()); } -- cgit v1.2.3 From 2bd0cdf04b2849a510f178cafea17fffa5d34961 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 18 Nov 2016 03:51:43 +1300 Subject: Fix the problem with session --- src/org/traccar/api/SecurityRequestFilter.java | 41 +++++++++++++++----------- 1 file changed, 24 insertions(+), 17 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index be74a3607..3f2390754 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -17,6 +17,7 @@ package org.traccar.api; import org.traccar.Context; import org.traccar.api.resource.SessionResource; +import org.traccar.helper.Log; import org.traccar.model.User; import javax.annotation.security.PermitAll; @@ -62,29 +63,35 @@ public class SecurityRequestFilter implements ContainerRequestFilter { SecurityContext securityContext = null; - String authHeader = requestContext.getHeaderString(AUTHORIZATION_HEADER); - if (authHeader != null) { + try { - try { - String[] auth = decodeBasicAuth(authHeader); - User user = Context.getPermissionsManager().login(auth[0], auth[1]); - if (user != null) { - Context.getStatisticsManager().registerRequest(user.getId()); - securityContext = new UserSecurityContext(new UserPrincipal(user.getId())); + String authHeader = requestContext.getHeaderString(AUTHORIZATION_HEADER); + if (authHeader != null) { + + try { + String[] auth = decodeBasicAuth(authHeader); + User user = Context.getPermissionsManager().login(auth[0], auth[1]); + if (user != null) { + Context.getStatisticsManager().registerRequest(user.getId()); + securityContext = new UserSecurityContext(new UserPrincipal(user.getId())); + } + } catch (SQLException e) { + throw new WebApplicationException(e); } - } catch (SQLException e) { - throw new WebApplicationException(e); - } - } else if (request.getSession() != null) { + } else if (request.getSession() != null) { + + Long userId = (Long) request.getSession().getAttribute(SessionResource.USER_ID_KEY); + if (userId != null) { + Context.getPermissionsManager().checkUser(userId); + Context.getStatisticsManager().registerRequest(userId); + securityContext = new UserSecurityContext(new UserPrincipal(userId)); + } - Long userId = (Long) request.getSession().getAttribute(SessionResource.USER_ID_KEY); - if (userId != null) { - Context.getPermissionsManager().checkUser(userId); - Context.getStatisticsManager().registerRequest(userId); - securityContext = new UserSecurityContext(new UserPrincipal(userId)); } + } catch (SecurityException e) { + Log.warning(e); } if (securityContext != null) { -- cgit v1.2.3 From f35da3ffdf6f960a877149b72b819a1979c9395a Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 18 Nov 2016 18:43:33 +1300 Subject: Check user in session resource --- src/org/traccar/api/resource/SessionResource.java | 1 + 1 file changed, 1 insertion(+) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index a459186fe..a61738c7e 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -73,6 +73,7 @@ public class SessionResource extends BaseResource { } if (userId != null) { + Context.getPermissionsManager().checkUser(userId); return Context.getPermissionsManager().getUser(userId); } else { throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build()); -- cgit v1.2.3 From c9b67d19132b687bea9130f39f13a5515b120e5e Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 18 Nov 2016 16:05:35 +0500 Subject: Implement users tokens --- schema/changelog-3.8.xml | 5 +++++ setup/default.xml | 5 +++-- src/org/traccar/api/resource/SessionResource.java | 6 ++++++ src/org/traccar/api/resource/UserResource.java | 3 ++- src/org/traccar/database/PermissionsManager.java | 26 +++++++++++++++++++++++ src/org/traccar/model/User.java | 25 ++++++++++++++++++++++ 6 files changed, 67 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/schema/changelog-3.8.xml b/schema/changelog-3.8.xml index ba591f192..f53673eae 100644 --- a/schema/changelog-3.8.xml +++ b/schema/changelog-3.8.xml @@ -116,6 +116,11 @@ + + + + + diff --git a/setup/default.xml b/setup/default.xml index a9d7684d4..e6d701f4c 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -62,8 +62,8 @@ - INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, attributes) - VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :attributes) + INSERT INTO users (name, email, hashedPassword, salt, admin, map, distanceUnit, speedUnit, latitude, longitude, zoom, twelveHourFormat, coordinateFormat, disabled, expirationTime, deviceLimit, token, attributes) + VALUES (:name, :email, :hashedPassword, :salt, :admin, :map, :distanceUnit, :speedUnit, :latitude, :longitude, :zoom, :twelveHourFormat, :coordinateFormat, :disabled, :expirationTime, :deviceLimit, :token, :attributes) @@ -82,6 +82,7 @@ disabled = :disabled, expirationTime = :expirationTime, deviceLimit = :deviceLimit, + token = :token, attributes = :attributes WHERE id = :id diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index a61738c7e..6c5263123 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -69,6 +69,12 @@ public class SessionResource extends BaseResource { userId = user.getId(); request.getSession().setAttribute(USER_ID_KEY, userId); } + } else if (request.getParameter("token") != null) { + User user = Context.getPermissionsManager().getUserByToken(request.getParameter("token")); + if (user != null) { + userId = user.getId(); + request.getSession().setAttribute(USER_ID_KEY, userId); + } } } diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index c6e84c918..094de2812 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -66,7 +66,8 @@ public class UserResource extends BaseResource { || old.getAdmin() != entity.getAdmin() || old.getReadonly() != entity.getReadonly() || old.getDisabled() != entity.getDisabled() - || old.getDeviceLimit() != entity.getDeviceLimit()) { + || old.getDeviceLimit() != entity.getDeviceLimit() + || !old.getToken().equals(entity.getToken())) { Context.getPermissionsManager().checkAdmin(getUserId()); } else { Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 1c995a11d..269dfc7bf 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -29,6 +29,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -39,6 +40,7 @@ public class PermissionsManager { private volatile Server server; private final Map users = new ConcurrentHashMap<>(); + private final Map usersTokens = new HashMap<>(); private final Map> groupPermissions = new HashMap<>(); private final Map> devicePermissions = new HashMap<>(); @@ -81,10 +83,14 @@ public class PermissionsManager { public final void refreshUsers() { users.clear(); + usersTokens.clear(); try { server = dataManager.getServer(); for (User user : dataManager.getUsers()) { users.put(user.getId(), user); + if (user.getToken() != null) { + usersTokens.put(user.getId(), user.getToken()); + } } } catch (SQLException error) { Log.warning(error); @@ -210,18 +216,27 @@ public class PermissionsManager { public void addUser(User user) throws SQLException { dataManager.addUser(user); users.put(user.getId(), user); + if (user.getToken() != null) { + usersTokens.put(user.getId(), user.getToken()); + } refreshPermissions(); } public void updateUser(User user) throws SQLException { dataManager.updateUser(user); users.put(user.getId(), user); + if (user.getToken() != null) { + usersTokens.put(user.getId(), user.getToken()); + } else if (usersTokens.containsKey(user.getId())) { + usersTokens.remove(user.getId()); + } refreshPermissions(); } public void removeUser(long userId) throws SQLException { dataManager.removeUser(userId); users.remove(userId); + usersTokens.remove(userId); refreshPermissions(); } @@ -234,4 +249,15 @@ public class PermissionsManager { return null; } + public User getUserByToken(String token) { + if (usersTokens.containsValue(token)) { + for (Entry entry : usersTokens.entrySet()) { + if (entry.getValue().equals(token)) { + return users.get(entry.getKey()); + } + } + } + return null; + } + } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index a36fa0e31..816f49da9 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -180,6 +180,31 @@ public class User extends Extensible { this.deviceLimit = deviceLimit; } + private String token; + + public String getToken() { + return token; + } + + public void setToken(String token) { + if (token != null && !token.isEmpty()) { + if (validateToken(token)) { + this.token = token; + } else { + throw new IllegalArgumentException("Bad token"); + } + } else { + this.token = null; + } + } + + public static boolean validateToken(String token) { + if (token.length() < 16 || !token.matches("^[a-zA-Z0-9]+$")) { + return false; + } + return true; + } + public String getPassword() { return null; } -- cgit v1.2.3 From 670c8c7041163a2232d3edb4ef413af70182ea0a Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 18 Nov 2016 18:08:52 +0500 Subject: - Flip user-token map - Fix null check - Combine validation to setter --- src/org/traccar/api/resource/SessionResource.java | 5 +++-- src/org/traccar/api/resource/UserResource.java | 3 ++- src/org/traccar/database/PermissionsManager.java | 26 +++++++++-------------- src/org/traccar/model/User.java | 14 +++--------- 4 files changed, 18 insertions(+), 30 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index 6c5263123..db8a5c837 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -29,6 +29,7 @@ import javax.ws.rs.GET; import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.QueryParam; import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; @@ -48,7 +49,7 @@ public class SessionResource extends BaseResource { @PermitAll @GET - public User get() throws SQLException { + public User get(@QueryParam("token") String token) throws SQLException { Long userId = (Long) request.getSession().getAttribute(USER_ID_KEY); if (userId == null) { Cookie[] cookies = request.getCookies(); @@ -69,7 +70,7 @@ public class SessionResource extends BaseResource { userId = user.getId(); request.getSession().setAttribute(USER_ID_KEY, userId); } - } else if (request.getParameter("token") != null) { + } else if (token != null) { User user = Context.getPermissionsManager().getUserByToken(request.getParameter("token")); if (user != null) { userId = user.getId(); diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index 094de2812..2ff1639f6 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -67,7 +67,8 @@ public class UserResource extends BaseResource { || old.getReadonly() != entity.getReadonly() || old.getDisabled() != entity.getDisabled() || old.getDeviceLimit() != entity.getDeviceLimit() - || !old.getToken().equals(entity.getToken())) { + || old.getToken() == null && entity.getToken() != null + || old.getToken() != null && !old.getToken().equals(entity.getToken())) { Context.getPermissionsManager().checkAdmin(getUserId()); } else { Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 269dfc7bf..71633f6ef 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -29,7 +29,6 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; -import java.util.Map.Entry; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -40,7 +39,7 @@ public class PermissionsManager { private volatile Server server; private final Map users = new ConcurrentHashMap<>(); - private final Map usersTokens = new HashMap<>(); + private final Map usersTokens = new HashMap<>(); private final Map> groupPermissions = new HashMap<>(); private final Map> devicePermissions = new HashMap<>(); @@ -89,7 +88,7 @@ public class PermissionsManager { for (User user : dataManager.getUsers()) { users.put(user.getId(), user); if (user.getToken() != null) { - usersTokens.put(user.getId(), user.getToken()); + usersTokens.put(user.getToken(), user.getId()); } } } catch (SQLException error) { @@ -217,26 +216,28 @@ public class PermissionsManager { dataManager.addUser(user); users.put(user.getId(), user); if (user.getToken() != null) { - usersTokens.put(user.getId(), user.getToken()); + usersTokens.put(user.getToken(), user.getId()); } refreshPermissions(); } public void updateUser(User user) throws SQLException { dataManager.updateUser(user); + User old = users.get(user.getId()); users.put(user.getId(), user); if (user.getToken() != null) { - usersTokens.put(user.getId(), user.getToken()); - } else if (usersTokens.containsKey(user.getId())) { - usersTokens.remove(user.getId()); + usersTokens.put(user.getToken(), user.getId()); + } + if (old.getToken() != null && !old.getToken().equals(user.getToken())) { + usersTokens.remove(old.getToken()); } refreshPermissions(); } public void removeUser(long userId) throws SQLException { dataManager.removeUser(userId); + usersTokens.remove(users.get(userId).getToken()); users.remove(userId); - usersTokens.remove(userId); refreshPermissions(); } @@ -250,14 +251,7 @@ public class PermissionsManager { } public User getUserByToken(String token) { - if (usersTokens.containsValue(token)) { - for (Entry entry : usersTokens.entrySet()) { - if (entry.getValue().equals(token)) { - return users.get(entry.getKey()); - } - } - } - return null; + return users.get(usersTokens.get(token)); } } diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index 816f49da9..e6b9d663f 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -188,23 +188,15 @@ public class User extends Extensible { public void setToken(String token) { if (token != null && !token.isEmpty()) { - if (validateToken(token)) { - this.token = token; - } else { - throw new IllegalArgumentException("Bad token"); + if (!token.matches("^[a-zA-Z0-9]{16,}$")) { + throw new IllegalArgumentException("Illegal token"); } + this.token = token; } else { this.token = null; } } - public static boolean validateToken(String token) { - if (token.length() < 16 || !token.matches("^[a-zA-Z0-9]+$")) { - return false; - } - return true; - } - public String getPassword() { return null; } -- cgit v1.2.3 From e21cc32bb74d998246b52faaf49b6ea742e4d6e3 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Fri, 18 Nov 2016 18:51:39 +0500 Subject: Remove useless else --- src/org/traccar/model/User.java | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index e6b9d663f..aa24b795e 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -192,8 +192,6 @@ public class User extends Extensible { throw new IllegalArgumentException("Illegal token"); } this.token = token; - } else { - this.token = null; } } -- cgit v1.2.3 From a0246954d9d9f248183563d25fad1f2ff2f78b08 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 19 Nov 2016 10:27:44 +1300 Subject: Small adjustments to tokens --- src/org/traccar/api/resource/SessionResource.java | 2 +- src/org/traccar/model/User.java | 4 +++- 2 files changed, 4 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index db8a5c837..996865c4b 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -71,7 +71,7 @@ public class SessionResource extends BaseResource { request.getSession().setAttribute(USER_ID_KEY, userId); } } else if (token != null) { - User user = Context.getPermissionsManager().getUserByToken(request.getParameter("token")); + User user = Context.getPermissionsManager().getUserByToken(token); if (user != null) { userId = user.getId(); request.getSession().setAttribute(USER_ID_KEY, userId); diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index aa24b795e..411b556fc 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -187,11 +187,13 @@ public class User extends Extensible { } public void setToken(String token) { - if (token != null && !token.isEmpty()) { + if (token != null) { if (!token.matches("^[a-zA-Z0-9]{16,}$")) { throw new IllegalArgumentException("Illegal token"); } this.token = token; + } else { + this.token = null; } } -- cgit v1.2.3 From f14c747e1dd04ad5514f9cff07ea2e5be0312683 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 19 Nov 2016 10:53:31 +1300 Subject: Remove duplicated information in requests --- src/org/traccar/api/resource/AttributeAliasResource.java | 2 +- src/org/traccar/api/resource/DeviceResource.java | 6 +++--- src/org/traccar/api/resource/GeofenceResource.java | 4 ++-- src/org/traccar/api/resource/GroupResource.java | 4 ++-- src/org/traccar/api/resource/UserResource.java | 2 +- 5 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/AttributeAliasResource.java b/src/org/traccar/api/resource/AttributeAliasResource.java index 9e01432d3..db767616f 100644 --- a/src/org/traccar/api/resource/AttributeAliasResource.java +++ b/src/org/traccar/api/resource/AttributeAliasResource.java @@ -64,7 +64,7 @@ public class AttributeAliasResource extends BaseResource { @Path("{id}") @PUT - public Response update(@PathParam("id") long id, AttributeAlias entity) throws SQLException { + public Response update(AttributeAlias entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); if (!Context.getPermissionsManager().isAdmin(getUserId())) { AttributeAlias oldEntity = Context.getAliasesManager().getAttributeAlias(entity.getId()); diff --git a/src/org/traccar/api/resource/DeviceResource.java b/src/org/traccar/api/resource/DeviceResource.java index 0b389ede1..e4ecd3625 100644 --- a/src/org/traccar/api/resource/DeviceResource.java +++ b/src/org/traccar/api/resource/DeviceResource.java @@ -76,9 +76,9 @@ public class DeviceResource extends BaseResource { @Path("{id}") @PUT - public Response update(@PathParam("id") long id, Device entity) throws SQLException { + public Response update(Device entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); - Context.getPermissionsManager().checkDevice(getUserId(), id); + Context.getPermissionsManager().checkDevice(getUserId(), entity.getId()); Context.getDeviceManager().updateDevice(entity); if (Context.getGeofenceManager() != null) { Context.getGeofenceManager().refresh(); @@ -102,7 +102,7 @@ public class DeviceResource extends BaseResource { @Path("{id}/distance") @PUT - public Response updateTotalDistance(@PathParam("id") long id, DeviceTotalDistance entity) throws SQLException { + public Response updateTotalDistance(DeviceTotalDistance entity) throws SQLException { Context.getPermissionsManager().checkAdmin(getUserId()); Context.getDeviceManager().resetTotalDistance(entity); return Response.noContent().build(); diff --git a/src/org/traccar/api/resource/GeofenceResource.java b/src/org/traccar/api/resource/GeofenceResource.java index df5eb2414..591908813 100644 --- a/src/org/traccar/api/resource/GeofenceResource.java +++ b/src/org/traccar/api/resource/GeofenceResource.java @@ -88,9 +88,9 @@ public class GeofenceResource extends BaseResource { @Path("{id}") @PUT - public Response update(@PathParam("id") long id, Geofence entity) throws SQLException { + public Response update(Geofence entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); - Context.getPermissionsManager().checkGeofence(getUserId(), id); + Context.getPermissionsManager().checkGeofence(getUserId(), entity.getId()); Context.getGeofenceManager().updateGeofence(entity); return Response.ok(entity).build(); } diff --git a/src/org/traccar/api/resource/GroupResource.java b/src/org/traccar/api/resource/GroupResource.java index 0bc42ea97..c98a20b7e 100644 --- a/src/org/traccar/api/resource/GroupResource.java +++ b/src/org/traccar/api/resource/GroupResource.java @@ -67,9 +67,9 @@ public class GroupResource extends BaseResource { @Path("{id}") @PUT - public Response update(@PathParam("id") long id, Group entity) throws SQLException { + public Response update(Group entity) throws SQLException { Context.getPermissionsManager().checkReadonly(getUserId()); - Context.getPermissionsManager().checkGroup(getUserId(), id); + Context.getPermissionsManager().checkGroup(getUserId(), entity.getId()); Context.getDeviceManager().updateGroup(entity); if (Context.getGeofenceManager() != null) { Context.getGeofenceManager().refresh(); diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index 2ff1639f6..a9edced25 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -59,7 +59,7 @@ public class UserResource extends BaseResource { @Path("{id}") @PUT - public Response update(@PathParam("id") long id, User entity) throws SQLException { + public Response update(User entity) throws SQLException { User old = Context.getPermissionsManager().getUser(entity.getId()); if (old.getExpirationTime() == null && entity.getExpirationTime() != null || old.getExpirationTime() != null && !old.getExpirationTime().equals(entity.getExpirationTime()) -- cgit v1.2.3 From 80fcbfcb89d7a21f838dbe5d2e9e5b6156bae1e1 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 19 Nov 2016 11:47:41 +1300 Subject: Fix code analysis problems --- src/org/traccar/Config.java | 2 +- src/org/traccar/helper/PatternUtil.java | 12 +++++++ .../traccar/protocol/CastelProtocolDecoder.java | 42 +++++++++++----------- 3 files changed, 34 insertions(+), 22 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/Config.java b/src/org/traccar/Config.java index e59c3c554..1be86fce0 100644 --- a/src/org/traccar/Config.java +++ b/src/org/traccar/Config.java @@ -40,7 +40,7 @@ public class Config { } public boolean hasKey(String key) { - return properties.containsKey(key) || (defaultProperties != null && defaultProperties.containsKey(key)); + return properties.containsKey(key) || defaultProperties != null && defaultProperties.containsKey(key); } public String getString(String key) { diff --git a/src/org/traccar/helper/PatternUtil.java b/src/org/traccar/helper/PatternUtil.java index c308012e6..12536eaef 100644 --- a/src/org/traccar/helper/PatternUtil.java +++ b/src/org/traccar/helper/PatternUtil.java @@ -33,6 +33,18 @@ public final class PatternUtil { public String getPatternMatch() { return patternMatch; } + + public String getPatternTail() { + return patternTail; + } + + public String getStringMatch() { + return stringMatch; + } + + public String getStringTail() { + return stringTail; + } } public static MatchResult checkPattern(String pattern, String input) { diff --git a/src/org/traccar/protocol/CastelProtocolDecoder.java b/src/org/traccar/protocol/CastelProtocolDecoder.java index 9ac8c5240..790dcd932 100644 --- a/src/org/traccar/protocol/CastelProtocolDecoder.java +++ b/src/org/traccar/protocol/CastelProtocolDecoder.java @@ -73,27 +73,27 @@ public class CastelProtocolDecoder extends BaseProtocolDecoder { super(protocol); } - private static final short MSG_SC_LOGIN = 0x1001; - private static final short MSG_SC_LOGIN_RESPONSE = (short) 0x9001; - private static final short MSG_SC_LOGOUT = 0x1002; - private static final short MSG_SC_HEARTBEAT = 0x1003; - private static final short MSG_SC_HEARTBEAT_RESPONSE = (short) 0x9003; - private static final short MSG_SC_GPS = 0x4001; - private static final short MSG_SC_PID_DATA = 0x4002; - private static final short MSG_SC_SUPPORTED_PID = 0x4004; - private static final short MSG_SC_OBD_DATA = 0x4005; - private static final short MSG_SC_DTCS_PASSENGER = 0x4006; - private static final short MSG_SC_DTCS_COMMERCIAL = 0x400B; - private static final short MSG_SC_ALARM = 0x4007; - private static final short MSG_SC_CELL = 0x4008; - private static final short MSG_SC_GPS_SLEEP = 0x4009; - private static final short MSG_SC_AGPS_REQUEST = 0x5101; - private static final short MSG_SC_CURRENT_LOCATION = (short) 0xB001; - - private static final short MSG_CC_LOGIN = 0x4001; - private static final short MSG_CC_LOGIN_RESPONSE = (short) 0x8001; - private static final short MSG_CC_HEARTBEAT = 0x4206; - private static final short MSG_CC_HEARTBEAT_RESPONSE = (short) 0x8206; + public static final short MSG_SC_LOGIN = 0x1001; + public static final short MSG_SC_LOGIN_RESPONSE = (short) 0x9001; + public static final short MSG_SC_LOGOUT = 0x1002; + public static final short MSG_SC_HEARTBEAT = 0x1003; + public static final short MSG_SC_HEARTBEAT_RESPONSE = (short) 0x9003; + public static final short MSG_SC_GPS = 0x4001; + public static final short MSG_SC_PID_DATA = 0x4002; + public static final short MSG_SC_SUPPORTED_PID = 0x4004; + public static final short MSG_SC_OBD_DATA = 0x4005; + public static final short MSG_SC_DTCS_PASSENGER = 0x4006; + public static final short MSG_SC_DTCS_COMMERCIAL = 0x400B; + public static final short MSG_SC_ALARM = 0x4007; + public static final short MSG_SC_CELL = 0x4008; + public static final short MSG_SC_GPS_SLEEP = 0x4009; + public static final short MSG_SC_AGPS_REQUEST = 0x5101; + public static final short MSG_SC_CURRENT_LOCATION = (short) 0xB001; + + public static final short MSG_CC_LOGIN = 0x4001; + public static final short MSG_CC_LOGIN_RESPONSE = (short) 0x8001; + public static final short MSG_CC_HEARTBEAT = 0x4206; + public static final short MSG_CC_HEARTBEAT_RESPONSE = (short) 0x8206; private Position readPosition(DeviceSession deviceSession, ChannelBuffer buf) { -- cgit v1.2.3 From 532a00aca413a700defc1013252bce05b727f2a9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 19 Nov 2016 12:07:54 +1300 Subject: Check for empty token --- src/org/traccar/model/User.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/model/User.java b/src/org/traccar/model/User.java index 411b556fc..e6b9d663f 100644 --- a/src/org/traccar/model/User.java +++ b/src/org/traccar/model/User.java @@ -187,7 +187,7 @@ public class User extends Extensible { } public void setToken(String token) { - if (token != null) { + if (token != null && !token.isEmpty()) { if (!token.matches("^[a-zA-Z0-9]{16,}$")) { throw new IllegalArgumentException("Illegal token"); } -- cgit v1.2.3 From d08857e6c87d41eba835f16035e2da9159de9e49 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 22 Nov 2016 06:28:00 +1300 Subject: Implement unknown status event --- src/org/traccar/api/resource/NotificationResource.java | 1 + src/org/traccar/database/ConnectionManager.java | 16 ++++++++++++---- src/org/traccar/database/NotificationManager.java | 6 +++--- src/org/traccar/model/Event.java | 1 + 4 files changed, 17 insertions(+), 7 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/NotificationResource.java b/src/org/traccar/api/resource/NotificationResource.java index 9010babf2..c43cca122 100644 --- a/src/org/traccar/api/resource/NotificationResource.java +++ b/src/org/traccar/api/resource/NotificationResource.java @@ -56,4 +56,5 @@ public class NotificationResource extends BaseResource { Context.getNotificationManager().updateNotification(entity); return Response.ok(entity).build(); } + } diff --git a/src/org/traccar/database/ConnectionManager.java b/src/org/traccar/database/ConnectionManager.java index 216c90bc2..bc44c31ae 100644 --- a/src/org/traccar/database/ConnectionManager.java +++ b/src/org/traccar/database/ConnectionManager.java @@ -76,10 +76,19 @@ public class ConnectionManager { } if (enableStatusEvents && !status.equals(device.getStatus())) { - Event event = new Event(Event.TYPE_DEVICE_OFFLINE, deviceId); - if (status.equals(Device.STATUS_ONLINE)) { - event.setType(Event.TYPE_DEVICE_ONLINE); + String eventType; + switch (status) { + case Device.STATUS_ONLINE: + eventType = Event.TYPE_DEVICE_ONLINE; + break; + case Device.STATUS_UNKNOWN: + eventType = Event.TYPE_DEVICE_UNKNOWN; + break; + default: + eventType = Event.TYPE_DEVICE_OFFLINE; + break; } + Event event = new Event(eventType, deviceId); if (Context.getNotificationManager() != null) { Context.getNotificationManager().updateEvent(event, null); } @@ -91,7 +100,6 @@ public class ConnectionManager { timeout.cancel(); } - if (time != null) { device.setLastUpdate(time); } diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index 110f699b7..b82fca0f3 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -74,7 +74,6 @@ public class NotificationManager { } public void updateEvents(Collection events, Position position) { - for (Event event : events) { updateEvent(event, position); } @@ -159,6 +158,7 @@ public class NotificationManager { } } else { notification.setId(cachedNotification.getId()); + notification.setId(cachedNotification.getId()); } } else if (!notification.getAttributes().isEmpty()) { try { @@ -176,9 +176,8 @@ public class NotificationManager { } public Set getAllNotifications() { - Set notifications = new HashSet<>(); - long id = 0; + long id = 1; Field[] fields = Event.class.getDeclaredFields(); for (Field field : fields) { if (Modifier.isStatic(field.getModifiers()) && field.getName().startsWith("TYPE_")) { @@ -194,4 +193,5 @@ public class NotificationManager { } return notifications; } + } diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java index cdb79f04d..3dc4778e1 100644 --- a/src/org/traccar/model/Event.java +++ b/src/org/traccar/model/Event.java @@ -40,6 +40,7 @@ public class Event extends Message { public static final String TYPE_COMMAND_RESULT = "commandResult"; public static final String TYPE_DEVICE_ONLINE = "deviceOnline"; + public static final String TYPE_DEVICE_UNKNOWN = "deviceUnknown"; public static final String TYPE_DEVICE_OFFLINE = "deviceOffline"; public static final String TYPE_DEVICE_MOVING = "deviceMoving"; -- cgit v1.2.3 From cd121c173f7c3ef0a815583eccec1232968894b9 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 22 Nov 2016 18:25:25 +1300 Subject: Remove duplicate line --- src/org/traccar/database/NotificationManager.java | 1 - 1 file changed, 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index b82fca0f3..7e79e289f 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -158,7 +158,6 @@ public class NotificationManager { } } else { notification.setId(cachedNotification.getId()); - notification.setId(cachedNotification.getId()); } } else if (!notification.getAttributes().isEmpty()) { try { -- cgit v1.2.3 From 1861e896418a284dbbccfa55db7add1036bb94ba Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Tue, 22 Nov 2016 12:18:19 +0500 Subject: Implement maintenance event --- setup/default.xml | 2 + src/org/traccar/BasePipelineFactory.java | 9 +++ .../traccar/events/MaintenanceEventHandler.java | 70 ++++++++++++++++++++++ src/org/traccar/model/Event.java | 2 + 4 files changed, 83 insertions(+) create mode 100644 src/org/traccar/events/MaintenanceEventHandler.java (limited to 'src/org') diff --git a/setup/default.xml b/setup/default.xml index e6d701f4c..d6f8a1752 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -24,6 +24,8 @@ true true true + true + true diff --git a/src/org/traccar/BasePipelineFactory.java b/src/org/traccar/BasePipelineFactory.java index 22bb80ca1..d73b022ae 100644 --- a/src/org/traccar/BasePipelineFactory.java +++ b/src/org/traccar/BasePipelineFactory.java @@ -32,6 +32,7 @@ import org.jboss.netty.handler.timeout.IdleStateHandler; import org.traccar.events.CommandResultEventHandler; import org.traccar.events.GeofenceEventHandler; import org.traccar.events.IgnitionEventHandler; +import org.traccar.events.MaintenanceEventHandler; import org.traccar.events.MotionEventHandler; import org.traccar.events.OverspeedEventHandler; import org.traccar.events.AlertEventHandler; @@ -58,6 +59,7 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory { private GeofenceEventHandler geofenceEventHandler; private AlertEventHandler alertEventHandler; private IgnitionEventHandler ignitionEventHandler; + private MaintenanceEventHandler maintenanceEventHandler; private static final class OpenChannelHandler extends SimpleChannelHandler { @@ -164,6 +166,9 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory { if (Context.getConfig().getBoolean("event.ignitionHandler")) { ignitionEventHandler = new IgnitionEventHandler(); } + if (Context.getConfig().getBoolean("event.maintenanceHandler")) { + maintenanceEventHandler = new MaintenanceEventHandler(); + } } protected abstract void addSpecificHandlers(ChannelPipeline pipeline); @@ -242,6 +247,10 @@ public abstract class BasePipelineFactory implements ChannelPipelineFactory { pipeline.addLast("IgnitionEventHandler", ignitionEventHandler); } + if (maintenanceEventHandler != null) { + pipeline.addLast("MaintenanceEventHandler", maintenanceEventHandler); + } + pipeline.addLast("mainHandler", new MainEventHandler()); return pipeline; } diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java new file mode 100644 index 000000000..078848b86 --- /dev/null +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -0,0 +1,70 @@ +/* + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@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.events; + +import java.util.ArrayList; +import java.util.Collection; + +import org.traccar.BaseEventHandler; +import org.traccar.Context; +import org.traccar.model.Device; +import org.traccar.model.Event; +import org.traccar.model.Position; + +public class MaintenanceEventHandler extends BaseEventHandler { + + public static final String ATTRIBUTE_MAINTENANCE_START = "device.maintenanceStart"; + public static final String ATTRIBUTE_MAINTENANCE_INTERVAL = "device.maintenanceInterval"; + + @Override + protected Collection analyzePosition(Position position) { + Device device = Context.getIdentityManager().getDeviceById(position.getDeviceId()); + if (device == null || !Context.getIdentityManager().isLatestPosition(position)) { + return null; + } + + double maintenanceInterval = Context.getDeviceManager() + .lookupServerDouble(device.getId(), ATTRIBUTE_MAINTENANCE_INTERVAL, 0); + if (maintenanceInterval == 0) { + return null; + } + double maintenanceStart = Context.getDeviceManager() + .lookupServerDouble(device.getId(), ATTRIBUTE_MAINTENANCE_START, 0); + + Collection events = new ArrayList<>(); + double oldTotalDistance = 0.0; + double newTotalDistance = 0.0; + + Position lastPosition = Context.getIdentityManager().getLastPosition(position.getDeviceId()); + if (lastPosition != null && lastPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { + oldTotalDistance = ((Number) lastPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue(); + } + + if (position.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { + newTotalDistance = ((Number) position.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue(); + } + + oldTotalDistance -= maintenanceStart; + newTotalDistance -= maintenanceStart; + if ((long) (oldTotalDistance / maintenanceInterval) < (long) (newTotalDistance / maintenanceInterval)) { + events.add(new Event(Event.TYPE_MAINTENANCE_NEED, position.getDeviceId(), position.getId())); + } + + return events; + } + +} diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java index cdb79f04d..ad861c570 100644 --- a/src/org/traccar/model/Event.java +++ b/src/org/traccar/model/Event.java @@ -55,6 +55,8 @@ public class Event extends Message { public static final String TYPE_IGNITION_ON = "ignitionOn"; public static final String TYPE_IGNITION_OFF = "ignitionOff"; + public static final String TYPE_MAINTENANCE_NEED = "maintenanceNeed"; + private Date serverTime; public Date getServerTime() { -- cgit v1.2.3 From 64560f850e12ec8ff5db9d2401158d5d3007b214 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Tue, 22 Nov 2016 13:31:59 +0500 Subject: Add mail templates for new event types --- .../notification/NotificationFormatter.java | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index b48fe9efc..d21c05afe 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -39,6 +39,10 @@ public final class NotificationFormatter { public static final String MESSAGE_TEMPLATE_TYPE_DEVICE_ONLINE = "Device: %1$s%n" + "Online%n" + "Time: %2$tc%n"; + public static final String TITLE_TEMPLATE_TYPE_DEVICE_UNKNOWN = "%1$s: status is unknown"; + public static final String MESSAGE_TEMPLATE_TYPE_DEVICE_UNKNOWN = "Device: %1$s%n" + + "Status is unknown%n" + + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_DEVICE_OFFLINE = "%1$s: offline"; public static final String MESSAGE_TEMPLATE_TYPE_DEVICE_OFFLINE = "Device: %1$s%n" + "Offline%n" @@ -88,6 +92,11 @@ public final class NotificationFormatter { + "Ignition OFF%n" + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; + public static final String TITLE_TEMPLATE_TYPE_MAINTENANCE_NEED = "%1$s: maintenance is needed"; + public static final String MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEED = "Device: %1$s%n" + + "Maintenance is needed%n" + + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Time: %2$tc%n"; public static String formatTitle(long userId, Event event, Position position) { Device device = Context.getIdentityManager().getDeviceById(event.getDeviceId()); @@ -101,6 +110,9 @@ public final class NotificationFormatter { case Event.TYPE_DEVICE_ONLINE: formatter.format(TITLE_TEMPLATE_TYPE_DEVICE_ONLINE, device.getName()); break; + case Event.TYPE_DEVICE_UNKNOWN: + formatter.format(TITLE_TEMPLATE_TYPE_DEVICE_UNKNOWN, device.getName()); + break; case Event.TYPE_DEVICE_OFFLINE: formatter.format(TITLE_TEMPLATE_TYPE_DEVICE_OFFLINE, device.getName()); break; @@ -128,6 +140,9 @@ public final class NotificationFormatter { case Event.TYPE_IGNITION_OFF: formatter.format(TITLE_TEMPLATE_TYPE_IGNITION_OFF, device.getName()); break; + case Event.TYPE_MAINTENANCE_NEED: + formatter.format(TITLE_TEMPLATE_TYPE_MAINTENANCE_NEED, device.getName()); + break; default: formatter.format("Unknown type"); break; @@ -150,6 +165,9 @@ public final class NotificationFormatter { case Event.TYPE_DEVICE_ONLINE: formatter.format(MESSAGE_TEMPLATE_TYPE_DEVICE_ONLINE, device.getName(), event.getServerTime()); break; + case Event.TYPE_DEVICE_UNKNOWN: + formatter.format(MESSAGE_TEMPLATE_TYPE_DEVICE_UNKNOWN, device.getName(), event.getServerTime()); + break; case Event.TYPE_DEVICE_OFFLINE: formatter.format(MESSAGE_TEMPLATE_TYPE_DEVICE_OFFLINE, device.getName(), event.getServerTime()); break; @@ -188,6 +206,10 @@ public final class NotificationFormatter { formatter.format(MESSAGE_TEMPLATE_TYPE_IGNITION_OFF, device.getName(), position.getFixTime(), position.getLatitude(), position.getLongitude()); break; + case Event.TYPE_MAINTENANCE_NEED: + formatter.format(MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEED, device.getName(), position.getFixTime(), + position.getLatitude(), position.getLongitude()); + break; default: formatter.format("Unknown type"); break; -- cgit v1.2.3 From 18305737a6dac8fb45037f193736b0261f92ab9d Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 23 Nov 2016 02:28:11 +1300 Subject: New user security check (fix #2589) --- src/org/traccar/api/SecurityRequestFilter.java | 2 +- src/org/traccar/api/resource/SessionResource.java | 2 +- src/org/traccar/api/resource/UserResource.java | 17 ++++------------- src/org/traccar/database/PermissionsManager.java | 16 ++++++++++++++-- 4 files changed, 20 insertions(+), 17 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/SecurityRequestFilter.java b/src/org/traccar/api/SecurityRequestFilter.java index 3f2390754..ca3ebf04d 100644 --- a/src/org/traccar/api/SecurityRequestFilter.java +++ b/src/org/traccar/api/SecurityRequestFilter.java @@ -83,7 +83,7 @@ public class SecurityRequestFilter implements ContainerRequestFilter { Long userId = (Long) request.getSession().getAttribute(SessionResource.USER_ID_KEY); if (userId != null) { - Context.getPermissionsManager().checkUser(userId); + Context.getPermissionsManager().checkUserEnabled(userId); Context.getStatisticsManager().registerRequest(userId); securityContext = new UserSecurityContext(new UserPrincipal(userId)); } diff --git a/src/org/traccar/api/resource/SessionResource.java b/src/org/traccar/api/resource/SessionResource.java index 996865c4b..5f1c597d1 100644 --- a/src/org/traccar/api/resource/SessionResource.java +++ b/src/org/traccar/api/resource/SessionResource.java @@ -80,7 +80,7 @@ public class SessionResource extends BaseResource { } if (userId != null) { - Context.getPermissionsManager().checkUser(userId); + Context.getPermissionsManager().checkUserEnabled(userId); return Context.getPermissionsManager().getUser(userId); } else { throw new WebApplicationException(Response.status(Response.Status.NOT_FOUND).build()); diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index a9edced25..ddbca6b0f 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -49,6 +49,7 @@ public class UserResource extends BaseResource { public Response add(User entity) throws SQLException { if (!Context.getPermissionsManager().isAdmin(getUserId())) { Context.getPermissionsManager().checkRegistration(getUserId()); + Context.getPermissionsManager().checkUserUpdate(getUserId(), new User(), entity); } Context.getPermissionsManager().addUser(entity); if (Context.getNotificationManager() != null) { @@ -60,19 +61,9 @@ public class UserResource extends BaseResource { @Path("{id}") @PUT public Response update(User entity) throws SQLException { - User old = Context.getPermissionsManager().getUser(entity.getId()); - if (old.getExpirationTime() == null && entity.getExpirationTime() != null - || old.getExpirationTime() != null && !old.getExpirationTime().equals(entity.getExpirationTime()) - || old.getAdmin() != entity.getAdmin() - || old.getReadonly() != entity.getReadonly() - || old.getDisabled() != entity.getDisabled() - || old.getDeviceLimit() != entity.getDeviceLimit() - || old.getToken() == null && entity.getToken() != null - || old.getToken() != null && !old.getToken().equals(entity.getToken())) { - Context.getPermissionsManager().checkAdmin(getUserId()); - } else { - Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); - } + User before = Context.getPermissionsManager().getUser(entity.getId()); + Context.getPermissionsManager().checkUser(getUserId(), entity.getId()); + Context.getPermissionsManager().checkUserUpdate(getUserId(), before, entity); Context.getPermissionsManager().updateUser(entity); if (Context.getNotificationManager() != null) { Context.getNotificationManager().refresh(); diff --git a/src/org/traccar/database/PermissionsManager.java b/src/org/traccar/database/PermissionsManager.java index 71633f6ef..078a5f935 100644 --- a/src/org/traccar/database/PermissionsManager.java +++ b/src/org/traccar/database/PermissionsManager.java @@ -29,6 +29,7 @@ import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; +import java.util.Objects; import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @@ -155,7 +156,7 @@ public class PermissionsManager { } } - public void checkUser(long userId) throws SecurityException { + public void checkUserEnabled(long userId) throws SecurityException { User user = getUser(userId); if (user.getDisabled()) { throw new SecurityException("Account is disabled"); @@ -165,6 +166,17 @@ public class PermissionsManager { } } + public void checkUserUpdate(long userId, User before, User after) throws SecurityException { + if (before.getAdmin() != after.getAdmin() + || before.getReadonly() != after.getReadonly() + || before.getDisabled() != after.getDisabled() + || before.getDeviceLimit() != after.getDeviceLimit() + || !Objects.equals(before.getExpirationTime(), after.getExpirationTime()) + || !Objects.equals(before.getToken(), after.getToken())) { + checkAdmin(userId); + } + } + public void checkUser(long userId, long otherUserId) throws SecurityException { if (userId != otherUserId) { checkAdmin(userId); @@ -244,7 +256,7 @@ public class PermissionsManager { public User login(String email, String password) throws SQLException { User user = dataManager.login(email, password); if (user != null) { - checkUser(user.getId()); + checkUserEnabled(user.getId()); return users.get(user.getId()); } return null; -- cgit v1.2.3 From 859cb5728ea26565d9e64fc2758f611071f74522 Mon Sep 17 00:00:00 2001 From: Turbovix Date: Tue, 22 Nov 2016 21:04:24 -0200 Subject: Update NotificationFormatter.java The URL that refers to the OpenStreetMaps website with the notifications received from the TRACCAR server now uses HTTPS, that is, a secure connection. --- src/org/traccar/notification/NotificationFormatter.java | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index ae1a58d3a..059f532cf 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -47,46 +47,46 @@ public final class NotificationFormatter { public static final String TITLE_TEMPLATE_TYPE_DEVICE_MOVING = "%1$s: moving"; public static final String MESSAGE_TEMPLATE_TYPE_DEVICE_MOVING = "Device: %1$s%n" + "Moving%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_DEVICE_STOPPED = "%1$s: stopped"; public static final String MESSAGE_TEMPLATE_TYPE_DEVICE_STOPPED = "Device: %1$s%n" + "Stopped%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_DEVICE_OVERSPEED = "%1$s: exceeds the speed"; public static final String MESSAGE_TEMPLATE_TYPE_DEVICE_OVERSPEED = "Device: %1$s%n" + "Exceeds the speed: %5$s%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_GEOFENCE_ENTER = "%1$s: has entered geofence"; public static final String MESSAGE_TEMPLATE_TYPE_GEOFENCE_ENTER = "Device: %1$s%n" + "Has entered geofence: %5$s%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_GEOFENCE_EXIT = "%1$s: has exited geofence"; public static final String MESSAGE_TEMPLATE_TYPE_GEOFENCE_EXIT = "Device: %1$s%n" + "Has exited geofence: %5$s%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_ALARM = "%1$s: alarm!"; public static final String MESSAGE_TEMPLATE_TYPE_ALARM = "Device: %1$s%n" + "Alarm: %5$s%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_IGNITION_ON = "%1$s: ignition ON"; public static final String MESSAGE_TEMPLATE_TYPE_IGNITION_ON = "Device: %1$s%n" + "Ignition ON%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static final String TITLE_TEMPLATE_TYPE_IGNITION_OFF = "%1$s: ignition OFF"; public static final String MESSAGE_TEMPLATE_TYPE_IGNITION_OFF = "Device: %1$s%n" + "Ignition OFF%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static String formatTitle(long userId, Event event, Position position) { -- cgit v1.2.3 From 2e2ec32b732f27df9c73f83a1982944cae45bf70 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 23 Nov 2016 09:11:55 +0500 Subject: Adjust constants names --- src/org/traccar/events/MaintenanceEventHandler.java | 6 +++--- src/org/traccar/model/Event.java | 2 +- src/org/traccar/notification/NotificationFormatter.java | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java index 078848b86..466e0b617 100644 --- a/src/org/traccar/events/MaintenanceEventHandler.java +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -27,8 +27,8 @@ import org.traccar.model.Position; public class MaintenanceEventHandler extends BaseEventHandler { - public static final String ATTRIBUTE_MAINTENANCE_START = "device.maintenanceStart"; - public static final String ATTRIBUTE_MAINTENANCE_INTERVAL = "device.maintenanceInterval"; + public static final String ATTRIBUTE_MAINTENANCE_START = "maintenance.start"; + public static final String ATTRIBUTE_MAINTENANCE_INTERVAL = "maintenance.interval"; @Override protected Collection analyzePosition(Position position) { @@ -61,7 +61,7 @@ public class MaintenanceEventHandler extends BaseEventHandler { oldTotalDistance -= maintenanceStart; newTotalDistance -= maintenanceStart; if ((long) (oldTotalDistance / maintenanceInterval) < (long) (newTotalDistance / maintenanceInterval)) { - events.add(new Event(Event.TYPE_MAINTENANCE_NEED, position.getDeviceId(), position.getId())); + events.add(new Event(Event.TYPE_MAINTENANCE_NEEDED, position.getDeviceId(), position.getId())); } return events; diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java index 9c252a1c3..45da9a711 100644 --- a/src/org/traccar/model/Event.java +++ b/src/org/traccar/model/Event.java @@ -56,7 +56,7 @@ public class Event extends Message { public static final String TYPE_IGNITION_ON = "ignitionOn"; public static final String TYPE_IGNITION_OFF = "ignitionOff"; - public static final String TYPE_MAINTENANCE_NEED = "maintenanceNeed"; + public static final String TYPE_MAINTENANCE_NEEDED = "maintenanceNeeded"; private Date serverTime; diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index d21c05afe..07be178fd 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -92,10 +92,10 @@ public final class NotificationFormatter { + "Ignition OFF%n" + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; - public static final String TITLE_TEMPLATE_TYPE_MAINTENANCE_NEED = "%1$s: maintenance is needed"; - public static final String MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEED = "Device: %1$s%n" + public static final String TITLE_TEMPLATE_TYPE_MAINTENANCE_NEEDED = "%1$s: maintenance is needed"; + public static final String MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEEDED = "Device: %1$s%n" + "Maintenance is needed%n" - + "Point: http://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; public static String formatTitle(long userId, Event event, Position position) { @@ -140,8 +140,8 @@ public final class NotificationFormatter { case Event.TYPE_IGNITION_OFF: formatter.format(TITLE_TEMPLATE_TYPE_IGNITION_OFF, device.getName()); break; - case Event.TYPE_MAINTENANCE_NEED: - formatter.format(TITLE_TEMPLATE_TYPE_MAINTENANCE_NEED, device.getName()); + case Event.TYPE_MAINTENANCE_NEEDED: + formatter.format(TITLE_TEMPLATE_TYPE_MAINTENANCE_NEEDED, device.getName()); break; default: formatter.format("Unknown type"); @@ -206,8 +206,8 @@ public final class NotificationFormatter { formatter.format(MESSAGE_TEMPLATE_TYPE_IGNITION_OFF, device.getName(), position.getFixTime(), position.getLatitude(), position.getLongitude()); break; - case Event.TYPE_MAINTENANCE_NEED: - formatter.format(MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEED, device.getName(), position.getFixTime(), + case Event.TYPE_MAINTENANCE_NEEDED: + formatter.format(MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEEDED, device.getName(), position.getFixTime(), position.getLatitude(), position.getLongitude()); break; default: -- cgit v1.2.3 From b14169a2b7bfcaecaa0f5ea9baafad4e7e4f1ae2 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 23 Nov 2016 11:41:11 +0500 Subject: - Pass client timezone to excel template - Templates: adjust timezone, use "https" in links --- src/org/traccar/api/resource/ReportResource.java | 12 ++++-------- src/org/traccar/helper/DateUtil.java | 6 ++++++ src/org/traccar/reports/Events.java | 9 +++++++-- src/org/traccar/reports/Route.java | 10 ++++++++-- src/org/traccar/reports/Summary.java | 9 +++++++-- src/org/traccar/reports/Trips.java | 9 +++++++-- templates/export/events.xlsx | Bin 12307 -> 12346 bytes templates/export/route.xlsx | Bin 12806 -> 13042 bytes templates/export/summary.xlsx | Bin 12330 -> 12315 bytes templates/export/trips.xlsx | Bin 13161 -> 13197 bytes 10 files changed, 39 insertions(+), 16 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/ReportResource.java b/src/org/traccar/api/resource/ReportResource.java index 2717fe01e..e8e80fa2f 100644 --- a/src/org/traccar/api/resource/ReportResource.java +++ b/src/org/traccar/api/resource/ReportResource.java @@ -50,8 +50,7 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Route.getExcel(stream, getUserId(), deviceIds, groupIds, - DateUtil.parseDate(from), DateUtil.parseDate(to)); + Route.getExcel(stream, getUserId(), deviceIds, groupIds, from, to); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -76,8 +75,7 @@ public class ReportResource extends BaseResource { @QueryParam("type") final List types, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Events.getExcel(stream, getUserId(), deviceIds, groupIds, types, - DateUtil.parseDate(from), DateUtil.parseDate(to)); + Events.getExcel(stream, getUserId(), deviceIds, groupIds, types, from, to); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -100,8 +98,7 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Summary.getExcel(stream, getUserId(), deviceIds, groupIds, - DateUtil.parseDate(from), DateUtil.parseDate(to)); + Summary.getExcel(stream, getUserId(), deviceIds, groupIds, from, to); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -124,8 +121,7 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Trips.getExcel(stream, getUserId(), deviceIds, groupIds, - DateUtil.parseDate(from), DateUtil.parseDate(to)); + Trips.getExcel(stream, getUserId(), deviceIds, groupIds, from, to); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); diff --git a/src/org/traccar/helper/DateUtil.java b/src/org/traccar/helper/DateUtil.java index ad8534eb8..840f37a7a 100644 --- a/src/org/traccar/helper/DateUtil.java +++ b/src/org/traccar/helper/DateUtil.java @@ -18,12 +18,14 @@ package org.traccar.helper; import java.util.Calendar; import java.util.Date; +import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormatter; import org.joda.time.format.ISODateTimeFormat; public final class DateUtil { private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.dateTime(); + private static final DateTimeFormatter DATE_FORMAT_NOMILLIS = ISODateTimeFormat.dateTimeNoMillis(); private DateUtil() { } @@ -64,4 +66,8 @@ public final class DateUtil { return DATE_FORMAT.parseDateTime(value).toDate(); } + public static DateTime parseDateTime(String value) { + return DATE_FORMAT_NOMILLIS.withOffsetParsed().parseDateTime(value); + } + } diff --git a/src/org/traccar/reports/Events.java b/src/org/traccar/reports/Events.java index 9d82b97a5..ada1580d9 100644 --- a/src/org/traccar/reports/Events.java +++ b/src/org/traccar/reports/Events.java @@ -28,6 +28,7 @@ import java.util.HashMap; import java.util.Iterator; import java.util.List; +import org.joda.time.DateTime; import org.jxls.area.Area; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.CellRef; @@ -36,6 +37,7 @@ import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.TransformerFactory; import org.traccar.Context; +import org.traccar.helper.DateUtil; import org.traccar.model.Device; import org.traccar.model.Event; import org.traccar.model.Geofence; @@ -68,13 +70,15 @@ public final class Events { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - Collection types, Date from, Date to) throws SQLException, IOException { + Collection types, String fromString, String toString) throws SQLException, IOException { ArrayList devicesEvents = new ArrayList<>(); ArrayList sheetNames = new ArrayList<>(); + DateTime from = DateUtil.parseDateTime(fromString); + DateTime to = DateUtil.parseDateTime(toString); HashMap geofenceNames = new HashMap<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - Collection events = Context.getDataManager().getEvents(deviceId, from, to); + Collection events = Context.getDataManager().getEvents(deviceId, from.toDate(), to.toDate()); boolean all = types.isEmpty() || types.contains(Event.ALL_EVENTS); for (Iterator iterator = events.iterator(); iterator.hasNext();) { Event event = iterator.next(); @@ -118,6 +122,7 @@ public final class Events { jxlsContext.putVar("to", to); jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); + jxlsContext.putVar("timezone", from.getZone()); jxlsContext.putVar("bracketsRegex", "[\\{\\}\"]"); Transformer transformer = TransformerFactory.createTransformer(inputStream, outputStream); List xlsAreas = new XlsCommentAreaBuilder(transformer).build(); diff --git a/src/org/traccar/reports/Route.java b/src/org/traccar/reports/Route.java index b29e04b2e..f438c8f4d 100644 --- a/src/org/traccar/reports/Route.java +++ b/src/org/traccar/reports/Route.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; +import org.joda.time.DateTime; import org.jxls.area.Area; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.CellRef; @@ -34,6 +35,7 @@ import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.TransformerFactory; import org.traccar.Context; +import org.traccar.helper.DateUtil; import org.traccar.model.Device; import org.traccar.model.Group; import org.traccar.model.Position; @@ -56,12 +58,15 @@ public final class Route { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - Date from, Date to) throws SQLException, IOException { + String fromString, String toString) throws SQLException, IOException { ArrayList devicesRoutes = new ArrayList<>(); ArrayList sheetNames = new ArrayList<>(); + DateTime from = DateUtil.parseDateTime(fromString); + DateTime to = DateUtil.parseDateTime(toString); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - Collection positions = Context.getDataManager().getPositions(deviceId, from, to); + Collection positions = Context.getDataManager() + .getPositions(deviceId, from.toDate(), to.toDate()); DeviceReport deviceRoutes = new DeviceReport(); Device device = Context.getIdentityManager().getDeviceById(deviceId); deviceRoutes.setDeviceName(device.getName()); @@ -85,6 +90,7 @@ public final class Route { jxlsContext.putVar("to", to); jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); + jxlsContext.putVar("timezone", from.getZone()); jxlsContext.putVar("bracketsRegex", "[\\{\\}\"]"); Transformer transformer = TransformerFactory.createTransformer(inputStream, outputStream); List xlsAreas = new XlsCommentAreaBuilder(transformer).build(); diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index 95a3737a1..d7d8ab417 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -25,9 +25,11 @@ import java.util.ArrayList; import java.util.Collection; import java.util.Date; +import org.joda.time.DateTime; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.JxlsHelper; import org.traccar.Context; +import org.traccar.helper.DateUtil; import org.traccar.model.Position; import org.traccar.reports.model.SummaryReport; @@ -82,8 +84,10 @@ public final class Summary { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - Date from, Date to) throws SQLException, IOException { - Collection summaries = getObjects(userId, deviceIds, groupIds, from, to); + String fromString, String toString) throws SQLException, IOException { + DateTime from = DateUtil.parseDateTime(fromString); + DateTime to = DateUtil.parseDateTime(toString); + Collection summaries = getObjects(userId, deviceIds, groupIds, from.toDate(), to.toDate()); String templatePath = Context.getConfig().getString("report.templatesPath", "templates/export/"); try (InputStream inputStream = new FileInputStream(templatePath + "/summary.xlsx")) { @@ -93,6 +97,7 @@ public final class Summary { jxlsContext.putVar("to", to); jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); + jxlsContext.putVar("timezone", from.getZone()); JxlsHelper.getInstance().setUseFastFormulaProcessor(false) .processTemplate(inputStream, outputStream, jxlsContext); } diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 91a080d45..c31eaac83 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -26,6 +26,7 @@ import java.util.Collection; import java.util.Date; import java.util.List; +import org.joda.time.DateTime; import org.jxls.area.Area; import org.jxls.builder.xls.XlsCommentAreaBuilder; import org.jxls.common.CellRef; @@ -34,6 +35,7 @@ import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.TransformerFactory; import org.traccar.Context; +import org.traccar.helper.DateUtil; import org.traccar.model.Device; import org.traccar.model.Group; import org.traccar.model.Position; @@ -175,12 +177,14 @@ public final class Trips { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - Date from, Date to) throws SQLException, IOException { + String fromString, String toString) throws SQLException, IOException { ArrayList devicesTrips = new ArrayList<>(); ArrayList sheetNames = new ArrayList<>(); + DateTime from = DateUtil.parseDateTime(fromString); + DateTime to = DateUtil.parseDateTime(toString); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); - Collection trips = detectTrips(deviceId, from, to); + Collection trips = detectTrips(deviceId, from.toDate(), to.toDate()); DeviceReport deviceTrips = new DeviceReport(); Device device = Context.getIdentityManager().getDeviceById(deviceId); deviceTrips.setDeviceName(device.getName()); @@ -204,6 +208,7 @@ public final class Trips { jxlsContext.putVar("to", to); jxlsContext.putVar("distanceUnit", ReportUtils.getDistanceUnit(userId)); jxlsContext.putVar("speedUnit", ReportUtils.getSpeedUnit(userId)); + jxlsContext.putVar("timezone", from.getZone()); Transformer transformer = TransformerFactory.createTransformer(inputStream, outputStream); List xlsAreas = new XlsCommentAreaBuilder(transformer).build(); for (Area xlsArea : xlsAreas) { diff --git a/templates/export/events.xlsx b/templates/export/events.xlsx index f0ff05a23..80a54fa57 100644 Binary files a/templates/export/events.xlsx and b/templates/export/events.xlsx differ diff --git a/templates/export/route.xlsx b/templates/export/route.xlsx index 24027523d..79a2649b7 100644 Binary files a/templates/export/route.xlsx and b/templates/export/route.xlsx differ diff --git a/templates/export/summary.xlsx b/templates/export/summary.xlsx index 88788f82a..53539ed8b 100644 Binary files a/templates/export/summary.xlsx and b/templates/export/summary.xlsx differ diff --git a/templates/export/trips.xlsx b/templates/export/trips.xlsx index 83d22678e..20130f44a 100644 Binary files a/templates/export/trips.xlsx and b/templates/export/trips.xlsx differ -- cgit v1.2.3 From e89bbb8ee9dd1dd1f19fb33f1f9291c6ae5f43db Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 23 Nov 2016 17:34:25 +0500 Subject: Implement attributes helpers --- src/org/traccar/BaseProtocol.java | 2 +- src/org/traccar/BaseProtocolEncoder.java | 4 +-- src/org/traccar/DistanceHandler.java | 6 ++-- src/org/traccar/FilterHandler.java | 2 +- src/org/traccar/events/IgnitionEventHandler.java | 12 ++----- .../traccar/events/MaintenanceEventHandler.java | 9 ++--- src/org/traccar/model/Extensible.java | 40 ++++++++++++++++++++++ .../traccar/protocol/CityeasyProtocolEncoder.java | 4 +-- .../traccar/protocol/EelinkProtocolEncoder.java | 2 +- src/org/traccar/protocol/Gt06ProtocolEncoder.java | 2 +- src/org/traccar/protocol/Jt600ProtocolEncoder.java | 2 +- .../traccar/protocol/MeiligaoProtocolEncoder.java | 8 ++--- src/org/traccar/protocol/NoranProtocolEncoder.java | 2 +- .../traccar/protocol/RuptelaProtocolEncoder.java | 2 +- src/org/traccar/protocol/T800xProtocolEncoder.java | 2 +- .../traccar/protocol/TeltonikaProtocolEncoder.java | 2 +- src/org/traccar/protocol/WatchProtocolEncoder.java | 4 +-- src/org/traccar/reports/ReportUtils.java | 15 ++++---- src/org/traccar/reports/Summary.java | 8 ++--- 19 files changed, 74 insertions(+), 54 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/BaseProtocol.java b/src/org/traccar/BaseProtocol.java index 4cbb5bd7c..59331d7cc 100644 --- a/src/org/traccar/BaseProtocol.java +++ b/src/org/traccar/BaseProtocol.java @@ -56,7 +56,7 @@ public abstract class BaseProtocol implements Protocol { if (supportedCommands.contains(command.getType())) { activeDevice.write(command); } else if (command.getType().equals(Command.TYPE_CUSTOM)) { - String data = (String) command.getAttributes().get(Command.KEY_DATA); + String data = command.getString(Command.KEY_DATA); if (activeDevice.getChannel().getPipeline().get(StringEncoder.class) != null) { activeDevice.write(data); } else { diff --git a/src/org/traccar/BaseProtocolEncoder.java b/src/org/traccar/BaseProtocolEncoder.java index 5c2c503e4..3c2d08471 100644 --- a/src/org/traccar/BaseProtocolEncoder.java +++ b/src/org/traccar/BaseProtocolEncoder.java @@ -31,8 +31,8 @@ public abstract class BaseProtocolEncoder extends OneToOneEncoder { protected void initDevicePassword(Command command, String defaultPassword) { if (!command.getAttributes().containsKey(Command.KEY_DEVICE_PASSWORD)) { Device device = Context.getIdentityManager().getDeviceById(command.getDeviceId()); - if (device.getAttributes().containsKey(Command.KEY_DEVICE_PASSWORD)) { - String password = (String) device.getAttributes().get(Command.KEY_DEVICE_PASSWORD); + String password = device.getString(Command.KEY_DEVICE_PASSWORD); + if (password != null) { command.set(Command.KEY_DEVICE_PASSWORD, password); } else { command.set(Command.KEY_DEVICE_PASSWORD, defaultPassword); diff --git a/src/org/traccar/DistanceHandler.java b/src/org/traccar/DistanceHandler.java index 138fc85d6..fdf9847a7 100644 --- a/src/org/traccar/DistanceHandler.java +++ b/src/org/traccar/DistanceHandler.java @@ -38,9 +38,7 @@ public class DistanceHandler extends BaseDataHandler { Position last = getLastPosition(position.getDeviceId()); if (last != null) { - if (last.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { - totalDistance = ((Number) last.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue(); - } + totalDistance = last.getDouble(Position.KEY_TOTAL_DISTANCE); if (!position.getAttributes().containsKey(Position.KEY_DISTANCE)) { distance = DistanceCalculator.distance( @@ -49,7 +47,7 @@ public class DistanceHandler extends BaseDataHandler { distance = BigDecimal.valueOf(distance).setScale(2, RoundingMode.HALF_EVEN).doubleValue(); } else { - distance = ((Number) position.getAttributes().get(Position.KEY_DISTANCE)).doubleValue(); + distance = position.getDouble(Position.KEY_DISTANCE); } } if (!position.getAttributes().containsKey(Position.KEY_DISTANCE)) { diff --git a/src/org/traccar/FilterHandler.java b/src/org/traccar/FilterHandler.java index 40676c72d..898651837 100644 --- a/src/org/traccar/FilterHandler.java +++ b/src/org/traccar/FilterHandler.java @@ -111,7 +111,7 @@ public class FilterHandler extends BaseDataHandler { } private boolean filterApproximate(Position position) { - Boolean approximate = (Boolean) position.getAttributes().get(Position.KEY_APPROXIMATE); + Boolean approximate = position.getBoolean(Position.KEY_APPROXIMATE); return filterApproximate && approximate != null && approximate; } diff --git a/src/org/traccar/events/IgnitionEventHandler.java b/src/org/traccar/events/IgnitionEventHandler.java index b52083f57..3086adb13 100644 --- a/src/org/traccar/events/IgnitionEventHandler.java +++ b/src/org/traccar/events/IgnitionEventHandler.java @@ -39,20 +39,12 @@ public class IgnitionEventHandler extends BaseEventHandler { Collection result = null; - boolean ignition = false; - Object ignitionObject = position.getAttributes().get(Position.KEY_IGNITION); - if (ignitionObject != null && ignitionObject instanceof Boolean) { - ignition = (Boolean) ignitionObject; - } + boolean ignition = position.getBoolean(Position.KEY_IGNITION); boolean oldIgnition = false; - Object oldIgnitionObject = null; Position lastPosition = Context.getIdentityManager().getLastPosition(position.getDeviceId()); if (lastPosition != null) { - oldIgnitionObject = lastPosition.getAttributes().get(Position.KEY_IGNITION); - } - if (oldIgnitionObject != null && oldIgnitionObject instanceof Boolean) { - oldIgnition = (Boolean) oldIgnitionObject; + oldIgnition = lastPosition.getBoolean(Position.KEY_IGNITION); } if (ignition && !oldIgnition) { diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java index 466e0b617..f423e035b 100644 --- a/src/org/traccar/events/MaintenanceEventHandler.java +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -50,13 +50,10 @@ public class MaintenanceEventHandler extends BaseEventHandler { double newTotalDistance = 0.0; Position lastPosition = Context.getIdentityManager().getLastPosition(position.getDeviceId()); - if (lastPosition != null && lastPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { - oldTotalDistance = ((Number) lastPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue(); - } - - if (position.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { - newTotalDistance = ((Number) position.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue(); + if (lastPosition != null) { + oldTotalDistance = lastPosition.getDouble(Position.KEY_TOTAL_DISTANCE); } + newTotalDistance = position.getDouble(Position.KEY_TOTAL_DISTANCE); oldTotalDistance -= maintenanceStart; newTotalDistance -= maintenanceStart; diff --git a/src/org/traccar/model/Extensible.java b/src/org/traccar/model/Extensible.java index efe60fb75..b8c83bb21 100644 --- a/src/org/traccar/model/Extensible.java +++ b/src/org/traccar/model/Extensible.java @@ -68,4 +68,44 @@ public class Extensible { } } + public String getString(String key) { + if (attributes.containsKey(key)) { + return (String) attributes.get(key); + } else { + return null; + } + } + + public double getDouble(String key) { + if (attributes.containsKey(key)) { + return ((Number) attributes.get(key)).doubleValue(); + } else { + return 0.0; + } + } + + public boolean getBoolean(String key) { + if (attributes.containsKey(key)) { + return Boolean.parseBoolean(attributes.get(key).toString()); + } else { + return false; + } + } + + public int getInteger(String key) { + if (attributes.containsKey(key)) { + return ((Number) attributes.get(key)).intValue(); + } else { + return 0; + } + } + + public long getLong(String key) { + if (attributes.containsKey(key)) { + return ((Number) attributes.get(key)).longValue(); + } else { + return 0; + } + } + } diff --git a/src/org/traccar/protocol/CityeasyProtocolEncoder.java b/src/org/traccar/protocol/CityeasyProtocolEncoder.java index 0c149c1c9..c800131d6 100644 --- a/src/org/traccar/protocol/CityeasyProtocolEncoder.java +++ b/src/org/traccar/protocol/CityeasyProtocolEncoder.java @@ -50,13 +50,13 @@ public class CityeasyProtocolEncoder extends BaseProtocolEncoder { case Command.TYPE_POSITION_SINGLE: return encodeContent(CityeasyProtocolDecoder.MSG_LOCATION_REQUEST, content); case Command.TYPE_POSITION_PERIODIC: - content.writeShort(((Number) command.getAttributes().get(Command.KEY_FREQUENCY)).intValue()); + content.writeShort(command.getInteger(Command.KEY_FREQUENCY)); return encodeContent(CityeasyProtocolDecoder.MSG_LOCATION_INTERVAL, content); case Command.TYPE_POSITION_STOP: content.writeShort(0); return encodeContent(CityeasyProtocolDecoder.MSG_LOCATION_INTERVAL, content); case Command.TYPE_SET_TIMEZONE: - int timezone = ((Number) command.getAttributes().get(Command.KEY_TIMEZONE)).intValue(); + int timezone = command.getInteger(Command.KEY_TIMEZONE); if (timezone < 0) { content.writeByte(1); } else { diff --git a/src/org/traccar/protocol/EelinkProtocolEncoder.java b/src/org/traccar/protocol/EelinkProtocolEncoder.java index b9d6b6f97..5a28733f7 100644 --- a/src/org/traccar/protocol/EelinkProtocolEncoder.java +++ b/src/org/traccar/protocol/EelinkProtocolEncoder.java @@ -47,7 +47,7 @@ public class EelinkProtocolEncoder extends BaseProtocolEncoder { switch (command.getType()) { case Command.TYPE_CUSTOM: - return encodeContent((String) command.getAttributes().get(Command.KEY_DATA)); + return encodeContent(command.getString(Command.KEY_DATA)); case Command.TYPE_ENGINE_STOP: return encodeContent("RELAY,1#"); case Command.TYPE_ENGINE_RESUME: diff --git a/src/org/traccar/protocol/Gt06ProtocolEncoder.java b/src/org/traccar/protocol/Gt06ProtocolEncoder.java index b6ec5a0d1..8e00522a7 100644 --- a/src/org/traccar/protocol/Gt06ProtocolEncoder.java +++ b/src/org/traccar/protocol/Gt06ProtocolEncoder.java @@ -59,7 +59,7 @@ public class Gt06ProtocolEncoder extends BaseProtocolEncoder { boolean alternative; Device device = Context.getIdentityManager().getDeviceById(command.getDeviceId()); if (device.getAttributes().containsKey("gt06.alternative")) { - alternative = Boolean.parseBoolean((String) device.getAttributes().get("gt06.alternative")); + alternative = device.getBoolean("gt06.alternative"); } else { alternative = Context.getConfig().getBoolean("gt06.alternative"); } diff --git a/src/org/traccar/protocol/Jt600ProtocolEncoder.java b/src/org/traccar/protocol/Jt600ProtocolEncoder.java index 3eb0566a4..0bf389460 100644 --- a/src/org/traccar/protocol/Jt600ProtocolEncoder.java +++ b/src/org/traccar/protocol/Jt600ProtocolEncoder.java @@ -29,7 +29,7 @@ public class Jt600ProtocolEncoder extends StringProtocolEncoder { case Command.TYPE_ENGINE_RESUME: return "(S07,1)"; case Command.TYPE_SET_TIMEZONE: - int offset = ((Number) command.getAttributes().get(Command.KEY_TIMEZONE)).intValue() / 60; + int offset = command.getInteger(Command.KEY_TIMEZONE) / 60; return "(S09,1," + offset + ")"; case Command.TYPE_REBOOT_DEVICE: return "(S17)"; diff --git a/src/org/traccar/protocol/MeiligaoProtocolEncoder.java b/src/org/traccar/protocol/MeiligaoProtocolEncoder.java index a91b33a60..268bae392 100644 --- a/src/org/traccar/protocol/MeiligaoProtocolEncoder.java +++ b/src/org/traccar/protocol/MeiligaoProtocolEncoder.java @@ -24,7 +24,6 @@ import org.traccar.model.Command; import javax.xml.bind.DatatypeConverter; import java.nio.charset.StandardCharsets; -import java.util.Map; public class MeiligaoProtocolEncoder extends BaseProtocolEncoder { @@ -62,13 +61,12 @@ public class MeiligaoProtocolEncoder extends BaseProtocolEncoder { protected Object encodeCommand(Command command) { ChannelBuffer content = ChannelBuffers.dynamicBuffer(); - Map attributes = command.getAttributes(); switch (command.getType()) { case Command.TYPE_POSITION_SINGLE: return encodeContent(command.getDeviceId(), MSG_TRACK_ON_DEMAND, content); case Command.TYPE_POSITION_PERIODIC: - content.writeShort(((Number) attributes.get(Command.KEY_FREQUENCY)).intValue() / 10); + content.writeShort(command.getInteger(Command.KEY_FREQUENCY) / 10); return encodeContent(command.getDeviceId(), MSG_TRACK_BY_INTERVAL, content); case Command.TYPE_ENGINE_STOP: content.writeByte(0x01); @@ -77,10 +75,10 @@ public class MeiligaoProtocolEncoder extends BaseProtocolEncoder { content.writeByte(0x00); return encodeContent(command.getDeviceId(), MSG_OUTPUT_CONTROL, content); case Command.TYPE_ALARM_GEOFENCE: - content.writeShort(((Number) attributes.get(Command.KEY_RADIUS)).intValue()); + content.writeShort(command.getInteger(Command.KEY_RADIUS)); return encodeContent(command.getDeviceId(), MSG_MOVEMENT_ALARM, content); case Command.TYPE_SET_TIMEZONE: - int offset = ((Number) attributes.get(Command.KEY_TIMEZONE)).intValue() / 60; + int offset = command.getInteger(Command.KEY_TIMEZONE) / 60; content.writeBytes(String.valueOf(offset).getBytes(StandardCharsets.US_ASCII)); return encodeContent(command.getDeviceId(), MSG_TIME_ZONE, content); case Command.TYPE_REBOOT_DEVICE: diff --git a/src/org/traccar/protocol/NoranProtocolEncoder.java b/src/org/traccar/protocol/NoranProtocolEncoder.java index 5bd069218..25b510a73 100644 --- a/src/org/traccar/protocol/NoranProtocolEncoder.java +++ b/src/org/traccar/protocol/NoranProtocolEncoder.java @@ -52,7 +52,7 @@ public class NoranProtocolEncoder extends BaseProtocolEncoder { case Command.TYPE_POSITION_SINGLE: return encodeContent("*KW,000,000,000000#"); case Command.TYPE_POSITION_PERIODIC: - int interval = ((Number) command.getAttributes().get(Command.KEY_FREQUENCY)).intValue(); + int interval = command.getInteger(Command.KEY_FREQUENCY); return encodeContent("*KW,000,002,000000," + interval + "#"); case Command.TYPE_POSITION_STOP: return encodeContent("*KW,000,002,000000,0#"); diff --git a/src/org/traccar/protocol/RuptelaProtocolEncoder.java b/src/org/traccar/protocol/RuptelaProtocolEncoder.java index c3b3a3619..0abfa18ce 100644 --- a/src/org/traccar/protocol/RuptelaProtocolEncoder.java +++ b/src/org/traccar/protocol/RuptelaProtocolEncoder.java @@ -43,7 +43,7 @@ public class RuptelaProtocolEncoder extends BaseProtocolEncoder { switch (command.getType()) { case Command.TYPE_CUSTOM: - return encodeContent((String) command.getAttributes().get(Command.KEY_DATA)); + return encodeContent(command.getString(Command.KEY_DATA)); default: Log.warning(new UnsupportedOperationException(command.getType())); break; diff --git a/src/org/traccar/protocol/T800xProtocolEncoder.java b/src/org/traccar/protocol/T800xProtocolEncoder.java index 7b02ed10b..6ed5dbccd 100644 --- a/src/org/traccar/protocol/T800xProtocolEncoder.java +++ b/src/org/traccar/protocol/T800xProtocolEncoder.java @@ -51,7 +51,7 @@ public class T800xProtocolEncoder extends BaseProtocolEncoder { switch (command.getType()) { case Command.TYPE_CUSTOM: - return encodeContent(command, (String) command.getAttributes().get(Command.KEY_DATA)); + return encodeContent(command, command.getString(Command.KEY_DATA)); default: Log.warning(new UnsupportedOperationException(command.getType())); break; diff --git a/src/org/traccar/protocol/TeltonikaProtocolEncoder.java b/src/org/traccar/protocol/TeltonikaProtocolEncoder.java index eb83477b8..fd6eae744 100644 --- a/src/org/traccar/protocol/TeltonikaProtocolEncoder.java +++ b/src/org/traccar/protocol/TeltonikaProtocolEncoder.java @@ -50,7 +50,7 @@ public class TeltonikaProtocolEncoder extends BaseProtocolEncoder { switch (command.getType()) { case Command.TYPE_CUSTOM: - return encodeContent((String) command.getAttributes().get(Command.KEY_DATA)); + return encodeContent(command.getString(Command.KEY_DATA)); default: Log.warning(new UnsupportedOperationException(command.getType())); break; diff --git a/src/org/traccar/protocol/WatchProtocolEncoder.java b/src/org/traccar/protocol/WatchProtocolEncoder.java index f15c0f0c0..0b6a83ce9 100644 --- a/src/org/traccar/protocol/WatchProtocolEncoder.java +++ b/src/org/traccar/protocol/WatchProtocolEncoder.java @@ -33,7 +33,7 @@ public class WatchProtocolEncoder extends StringProtocolEncoder { } private int getEnableFlag(Command command) { - if ((Boolean) command.getAttributes().get(Command.KEY_ENABLE)) { + if (command.getBoolean(Command.KEY_ENABLE)) { return 1; } else { return 0; @@ -51,7 +51,7 @@ public class WatchProtocolEncoder extends StringProtocolEncoder { } private String getBinaryData(Command command) { - byte[] data = DatatypeConverter.parseHexBinary((String) command.getAttributes().get(Command.KEY_DATA)); + byte[] data = DatatypeConverter.parseHexBinary(command.getString(Command.KEY_DATA)); int encodedLength = data.length; for (byte b : data) { diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java index 7fcc767e9..6c686503c 100644 --- a/src/org/traccar/reports/ReportUtils.java +++ b/src/org/traccar/reports/ReportUtils.java @@ -63,18 +63,17 @@ public final class ReportUtils { double distance = 0.0; double firstOdometer = 0.0; double lastOdometer = 0.0; - if (firstPosition.getAttributes().containsKey(Position.KEY_ODOMETER)) { - firstOdometer = ((Number) firstPosition.getAttributes().get(Position.KEY_ODOMETER)).doubleValue(); - } - if (lastPosition.getAttributes().containsKey(Position.KEY_ODOMETER)) { - lastOdometer = ((Number) lastPosition.getAttributes().get(Position.KEY_ODOMETER)).doubleValue(); - } + firstOdometer = firstPosition.getDouble(Position.KEY_ODOMETER); + + + lastOdometer = lastPosition.getDouble(Position.KEY_ODOMETER); + if (useOdometer && (firstOdometer != 0.0 || lastOdometer != 0.0)) { distance = lastOdometer - firstOdometer; } else if (firstPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE) && lastPosition.getAttributes().containsKey(Position.KEY_TOTAL_DISTANCE)) { - distance = ((Number) lastPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue() - - ((Number) firstPosition.getAttributes().get(Position.KEY_TOTAL_DISTANCE)).doubleValue(); + distance = lastPosition.getDouble(Position.KEY_TOTAL_DISTANCE) + - firstPosition.getDouble(Position.KEY_TOTAL_DISTANCE); } return distance; } diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index 95a3737a1..b404b0ed5 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -49,12 +49,8 @@ public final class Summary { if (firstPosition == null) { firstPosition = position; } - if (previousPosition != null - && position.getAttributes().get(Position.KEY_IGNITION) != null - && Boolean.parseBoolean(position.getAttributes().get(Position.KEY_IGNITION).toString()) - && previousPosition.getAttributes().get(Position.KEY_IGNITION) != null - && Boolean.parseBoolean(previousPosition.getAttributes() - .get(Position.KEY_IGNITION).toString())) { + if (previousPosition != null && position.getBoolean(Position.KEY_IGNITION) + && previousPosition.getBoolean(Position.KEY_IGNITION)) { result.addEngineHours(position.getFixTime().getTime() - previousPosition.getFixTime().getTime()); } -- cgit v1.2.3 From 03dc6436216c90fc6f6914afb5807659a71201de Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 23 Nov 2016 17:39:07 +0500 Subject: One more place --- src/org/traccar/database/DeviceManager.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index 5681602fe..e0b7fd2db 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -408,7 +408,7 @@ public class DeviceManager implements IdentityManager { long groupId = device.getGroupId(); while (groupId != 0) { if (getGroupById(groupId) != null) { - result = (String) getGroupById(groupId).getAttributes().get(attributeName); + result = getGroupById(groupId).getString(attributeName); if (result != null) { break; } -- cgit v1.2.3 From ef0b4ac118c3c430c3046d35229aa48cdb65e25d Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 23 Nov 2016 17:49:36 +0500 Subject: Some more places --- src/org/traccar/database/DeviceManager.java | 6 ++---- src/org/traccar/notification/PropertiesProvider.java | 2 +- 2 files changed, 3 insertions(+), 5 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index e0b7fd2db..600669579 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -401,9 +401,7 @@ public class DeviceManager implements IdentityManager { String result = null; Device device = getDeviceById(deviceId); if (device != null) { - if (device.getAttributes().containsKey(attributeName)) { - result = (String) device.getAttributes().get(attributeName); - } + result = device.getString(attributeName); if (result == null && lookupGroupsAttribute) { long groupId = device.getGroupId(); while (groupId != 0) { @@ -421,7 +419,7 @@ public class DeviceManager implements IdentityManager { if (result == null) { if (lookupServer) { Server server = Context.getPermissionsManager().getServer(); - result = (String) server.getAttributes().get(attributeName); + result = server.getString(attributeName); } else { result = Context.getConfig().getString(attributeName); } diff --git a/src/org/traccar/notification/PropertiesProvider.java b/src/org/traccar/notification/PropertiesProvider.java index 9136288f8..e7cac8d0f 100644 --- a/src/org/traccar/notification/PropertiesProvider.java +++ b/src/org/traccar/notification/PropertiesProvider.java @@ -36,7 +36,7 @@ public class PropertiesProvider { if (config != null) { return config.getString(key); } else { - return (String) extensible.getAttributes().get(key); + return extensible.getString(key); } } -- cgit v1.2.3 From ab1130746e900c3c97d96f15422aa41bad3d1f29 Mon Sep 17 00:00:00 2001 From: Enrique Villafane Date: Wed, 23 Nov 2016 16:58:25 -0400 Subject: Images from coban gps not exception. --- src/org/traccar/protocol/Gps103Protocol.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Gps103Protocol.java b/src/org/traccar/protocol/Gps103Protocol.java index 82d42f1c9..1caff5a7d 100644 --- a/src/org/traccar/protocol/Gps103Protocol.java +++ b/src/org/traccar/protocol/Gps103Protocol.java @@ -47,7 +47,7 @@ public class Gps103Protocol extends BaseProtocol { serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, "\r\n", "\n", ";")); + pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1048, "\r\n", "\n", ";")); pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("objectEncoder", new Gps103ProtocolEncoder()); -- cgit v1.2.3 From 73a8eb4f267615d865c2c2c5c0f462da983dd0a5 Mon Sep 17 00:00:00 2001 From: Sun Howwrongbum Date: Thu, 24 Nov 2016 04:41:30 +0530 Subject: Add option to set some default User properties - for `deviceLimit` and `expirationTime`. --- src/org/traccar/api/resource/UserResource.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index ddbca6b0f..bbbe465fc 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -16,6 +16,7 @@ package org.traccar.api.resource; import org.traccar.Context; +import org.traccar.Config; import org.traccar.api.BaseResource; import org.traccar.model.User; @@ -32,6 +33,8 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.sql.SQLException; import java.util.Collection; +import java.util.Date; +import java.util.Calendar; @Path("users") @Produces(MediaType.APPLICATION_JSON) @@ -50,6 +53,18 @@ public class UserResource extends BaseResource { if (!Context.getPermissionsManager().isAdmin(getUserId())) { Context.getPermissionsManager().checkRegistration(getUserId()); Context.getPermissionsManager().checkUserUpdate(getUserId(), new User(), entity); + Config config = Context.getConfig(); + int deviceLimit = config.getInteger("default.deviceLimit"); + int expirationDuration = config.getInteger("default.expirationDuration"); + if (deviceLimit > 0) { + entity.setDeviceLimit(deviceLimit); + } + if (expirationDuration > 0) { + Calendar cal = Calendar.getInstance(); + cal.add(Calendar.DATE, expirationDuration); + Date expirationTime = cal.getTime(); + entity.setExpirationTime(expirationTime); + } } Context.getPermissionsManager().addUser(entity); if (Context.getNotificationManager() != null) { -- cgit v1.2.3 From 02f4f14d28fd2e59868f9258b2735910140486f4 Mon Sep 17 00:00:00 2001 From: Sun Howwrongbum Date: Thu, 24 Nov 2016 07:39:15 +0530 Subject: Update as per code review - remove unnecessary variables and imports - change preliminary config variable names --- src/org/traccar/api/resource/UserResource.java | 19 ++++++------------- 1 file changed, 6 insertions(+), 13 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index bbbe465fc..5f940ebf1 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -16,7 +16,6 @@ package org.traccar.api.resource; import org.traccar.Context; -import org.traccar.Config; import org.traccar.api.BaseResource; import org.traccar.model.User; @@ -34,7 +33,6 @@ import javax.ws.rs.core.Response; import java.sql.SQLException; import java.util.Collection; import java.util.Date; -import java.util.Calendar; @Path("users") @Produces(MediaType.APPLICATION_JSON) @@ -53,17 +51,12 @@ public class UserResource extends BaseResource { if (!Context.getPermissionsManager().isAdmin(getUserId())) { Context.getPermissionsManager().checkRegistration(getUserId()); Context.getPermissionsManager().checkUserUpdate(getUserId(), new User(), entity); - Config config = Context.getConfig(); - int deviceLimit = config.getInteger("default.deviceLimit"); - int expirationDuration = config.getInteger("default.expirationDuration"); - if (deviceLimit > 0) { - entity.setDeviceLimit(deviceLimit); - } - if (expirationDuration > 0) { - Calendar cal = Calendar.getInstance(); - cal.add(Calendar.DATE, expirationDuration); - Date expirationTime = cal.getTime(); - entity.setExpirationTime(expirationTime); + int deviceLimit = Context.getConfig().getInteger("users.defaultDeviceLimit"); + int expirationDays = Context.getConfig().getInteger("users.defaultExpirationDays"); + entity.setDeviceLimit(deviceLimit); + if (expirationDays > 0) { + entity.setExpirationTime( + new Date(System.currentTimeMillis() + (long) expirationDays * 24 * 3600 * 1000)); } } Context.getPermissionsManager().addUser(entity); -- cgit v1.2.3 From a1ad3e264293cf58bb77992e143b0d7c1c2cef96 Mon Sep 17 00:00:00 2001 From: Sun Howwrongbum Date: Thu, 24 Nov 2016 07:53:15 +0530 Subject: Remove another unnecessary variable --- src/org/traccar/api/resource/UserResource.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/UserResource.java b/src/org/traccar/api/resource/UserResource.java index 5f940ebf1..678daac9b 100644 --- a/src/org/traccar/api/resource/UserResource.java +++ b/src/org/traccar/api/resource/UserResource.java @@ -51,9 +51,8 @@ public class UserResource extends BaseResource { if (!Context.getPermissionsManager().isAdmin(getUserId())) { Context.getPermissionsManager().checkRegistration(getUserId()); Context.getPermissionsManager().checkUserUpdate(getUserId(), new User(), entity); - int deviceLimit = Context.getConfig().getInteger("users.defaultDeviceLimit"); + entity.setDeviceLimit(Context.getConfig().getInteger("users.defaultDeviceLimit")); int expirationDays = Context.getConfig().getInteger("users.defaultExpirationDays"); - entity.setDeviceLimit(deviceLimit); if (expirationDays > 0) { entity.setExpirationTime( new Date(System.currentTimeMillis() + (long) expirationDays * 24 * 3600 * 1000)); -- cgit v1.2.3 From 04f33e6ba29b3a73a65b081d2a8b6ac3e0e0ebee Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 24 Nov 2016 15:52:52 +1300 Subject: Implement Teltonika AT200 protocol --- setup/default.xml | 1 + src/org/traccar/protocol/At2000FrameDecoder.java | 57 +++++++++ src/org/traccar/protocol/At2000Protocol.java | 42 +++++++ .../traccar/protocol/At2000ProtocolDecoder.java | 134 +++++++++++++++++++++ .../traccar/protocol/At2000FrameDecoderTest.java | 26 ++++ .../protocol/At2000ProtocolDecoderTest.java | 24 ++++ 6 files changed, 284 insertions(+) create mode 100644 src/org/traccar/protocol/At2000FrameDecoder.java create mode 100644 src/org/traccar/protocol/At2000Protocol.java create mode 100644 src/org/traccar/protocol/At2000ProtocolDecoder.java create mode 100644 test/org/traccar/protocol/At2000FrameDecoderTest.java create mode 100644 test/org/traccar/protocol/At2000ProtocolDecoderTest.java (limited to 'src/org') diff --git a/setup/default.xml b/setup/default.xml index d6f8a1752..869c077cf 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -440,5 +440,6 @@ 5125 5126 5127 + 5128 diff --git a/src/org/traccar/protocol/At2000FrameDecoder.java b/src/org/traccar/protocol/At2000FrameDecoder.java new file mode 100644 index 000000000..d0be3f5f4 --- /dev/null +++ b/src/org/traccar/protocol/At2000FrameDecoder.java @@ -0,0 +1,57 @@ +/* + * Copyright 2016 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.protocol; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.channel.Channel; +import org.jboss.netty.channel.ChannelHandlerContext; +import org.jboss.netty.handler.codec.frame.FrameDecoder; + +public class At2000FrameDecoder extends FrameDecoder { + + private static final int BLOCK_LENGTH = 16; + + private boolean firstPacket = true; + + @Override + protected Object decode( + ChannelHandlerContext ctx, Channel channel, ChannelBuffer buf) throws Exception { + + if (buf.readableBytes() < 5) { + return null; + } + + int length; + if (firstPacket) { + firstPacket = false; + length = buf.getUnsignedMedium(buf.readerIndex() + 2); + } else { + length = buf.getUnsignedMedium(buf.readerIndex() + 1); + } + + length += BLOCK_LENGTH; + if (length % BLOCK_LENGTH != 0) { + length = (length / BLOCK_LENGTH + 1) * BLOCK_LENGTH; + } + + if (buf.readableBytes() >= length) { + return buf.readBytes(length); + } + + return null; + } + +} diff --git a/src/org/traccar/protocol/At2000Protocol.java b/src/org/traccar/protocol/At2000Protocol.java new file mode 100644 index 000000000..418619cb4 --- /dev/null +++ b/src/org/traccar/protocol/At2000Protocol.java @@ -0,0 +1,42 @@ +/* + * Copyright 2016 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.protocol; + +import org.jboss.netty.bootstrap.ServerBootstrap; +import org.jboss.netty.channel.ChannelPipeline; +import org.traccar.BaseProtocol; +import org.traccar.TrackerServer; + +import java.util.List; + +public class At2000Protocol extends BaseProtocol { + + public At2000Protocol() { + super("at2000"); + } + + @Override + public void initTrackerServers(List serverList) { + serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { + @Override + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("frameDecoder", new At2000FrameDecoder()); + pipeline.addLast("objectDecoder", new At2000ProtocolDecoder(At2000Protocol.this)); + } + }); + } + +} diff --git a/src/org/traccar/protocol/At2000ProtocolDecoder.java b/src/org/traccar/protocol/At2000ProtocolDecoder.java new file mode 100644 index 000000000..17da0eef7 --- /dev/null +++ b/src/org/traccar/protocol/At2000ProtocolDecoder.java @@ -0,0 +1,134 @@ +/* + * Copyright 2016 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.protocol; + +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; +import org.jboss.netty.channel.Channel; +import org.traccar.BaseProtocolDecoder; +import org.traccar.DeviceSession; +import org.traccar.helper.UnitsConverter; +import org.traccar.model.Position; + +import javax.crypto.Cipher; +import javax.crypto.spec.IvParameterSpec; +import javax.crypto.spec.SecretKeySpec; +import javax.xml.bind.DatatypeConverter; +import java.net.SocketAddress; +import java.nio.ByteOrder; +import java.nio.charset.StandardCharsets; +import java.util.Date; + +public class At2000ProtocolDecoder extends BaseProtocolDecoder { + + private static final int BLOCK_LENGTH = 16; + + public At2000ProtocolDecoder(At2000Protocol protocol) { + super(protocol); + } + + public static final int MSG_ACKNOWLEDGEMENT = 0x00; + public static final int MSG_DEVICE_ID = 0x01; + public static final int MSG_TRACK_REQUEST = 0x88; + public static final int MSG_TRACK_RESPONSE = 0x89; + public static final int MSG_SESSION_END = 0x0c; + + private Cipher cipher; + + private static void sendResponse(Channel channel) { + if (channel != null) { + ChannelBuffer response = ChannelBuffers.directBuffer(BLOCK_LENGTH); + response.writeByte(MSG_ACKNOWLEDGEMENT); + response.writeMedium(1); + response.writeByte(0x00); // success + response.writerIndex(BLOCK_LENGTH); + channel.write(response); + } + } + + @Override + protected Object decode( + Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + + ChannelBuffer buf = (ChannelBuffer) msg; + + if (buf.getUnsignedByte(buf.readerIndex()) == 0x01) { + buf.readUnsignedByte(); // codec id + } + + int type = buf.readUnsignedByte(); + buf.readUnsignedMedium(); // length + buf.skipBytes(BLOCK_LENGTH - 1 - 3); + + if (type == MSG_DEVICE_ID) { + + String imei = buf.readBytes(15).toString(StandardCharsets.US_ASCII); + if (getDeviceSession(channel, remoteAddress, imei) != null) { + + byte[] iv = new byte[BLOCK_LENGTH]; + buf.readBytes(iv); + IvParameterSpec ivSpec = new IvParameterSpec(iv); + + SecretKeySpec keySpec = new SecretKeySpec( + DatatypeConverter.parseHexBinary("000102030405060708090a0b0c0d0e0f"), "AES"); + + cipher = Cipher.getInstance("AES/CBC/NoPadding"); + cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec); + + byte[] data = new byte[BLOCK_LENGTH]; + buf.readBytes(data); + cipher.update(data); + + } + + } else if (type == MSG_TRACK_RESPONSE) { + + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress); + if (deviceSession == null) { + return null; + } + + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + byte[] data = new byte[buf.capacity() - BLOCK_LENGTH]; + buf.readBytes(data); + buf = ChannelBuffers.wrappedBuffer(ByteOrder.LITTLE_ENDIAN, cipher.update(data)); + + buf.readUnsignedShort(); // index + buf.readUnsignedShort(); // reserved + + position.setValid(true); + + position.setTime(new Date(buf.readLong() * 1000)); + + position.setLatitude(buf.readFloat()); + position.setLongitude(buf.readFloat()); + position.setAltitude(buf.readFloat()); + position.setSpeed(UnitsConverter.knotsFromKph(buf.readFloat())); + position.setCourse(buf.readFloat()); + + return position; + + } + + sendResponse(channel); + + return null; + } + +} diff --git a/test/org/traccar/protocol/At2000FrameDecoderTest.java b/test/org/traccar/protocol/At2000FrameDecoderTest.java new file mode 100644 index 000000000..c7a3dc0b1 --- /dev/null +++ b/test/org/traccar/protocol/At2000FrameDecoderTest.java @@ -0,0 +1,26 @@ +package org.traccar.protocol; + +import org.junit.Assert; +import org.junit.Test; +import org.traccar.ProtocolTest; + +import java.nio.ByteOrder; + +public class At2000FrameDecoderTest extends ProtocolTest { + + @Test + public void testDecode() throws Exception { + + At2000FrameDecoder decoder = new At2000FrameDecoder(); + + Assert.assertEquals( + binary(ByteOrder.LITTLE_ENDIAN, "01012f00000000000000000000000000003335363137333036343430373439320fad981997ae8e031fe10c0ea7641903ca32c0331df467233d2a9cd886fbeef8"), + decoder.decode(null, null, binary(ByteOrder.LITTLE_ENDIAN, "01012f00000000000000000000000000003335363137333036343430373439320fad981997ae8e031fe10c0ea7641903ca32c0331df467233d2a9cd886fbeef8"))); + + Assert.assertEquals( + binary(ByteOrder.LITTLE_ENDIAN, "893f0000000000000000000000000000e048b1a31deba3f5dbe8877f574877e6ed4d022b6611a10d80dfc4c0c11fa8aacf4a9de61528327e2b66843dd9c5d3a7cc9ee1d9c71a34bb482145d88b4fda3e"), + decoder.decode(null, null, binary(ByteOrder.LITTLE_ENDIAN, "893f0000000000000000000000000000e048b1a31deba3f5dbe8877f574877e6ed4d022b6611a10d80dfc4c0c11fa8aacf4a9de61528327e2b66843dd9c5d3a7cc9ee1d9c71a34bb482145d88b4fda3e"))); + + } + +} diff --git a/test/org/traccar/protocol/At2000ProtocolDecoderTest.java b/test/org/traccar/protocol/At2000ProtocolDecoderTest.java new file mode 100644 index 000000000..14c6920d0 --- /dev/null +++ b/test/org/traccar/protocol/At2000ProtocolDecoderTest.java @@ -0,0 +1,24 @@ +package org.traccar.protocol; + +import org.junit.Test; +import org.traccar.ProtocolTest; + +public class At2000ProtocolDecoderTest extends ProtocolTest { + + @Test + public void testDecode() throws Exception { + + At2000ProtocolDecoder decoder = new At2000ProtocolDecoder(new At2000Protocol()); + + verifyNothing(decoder, binary( + "01012f00000000000000000000000000003335363137333036343430373439320fad981997ae8e031fe10c0ea7641903ca32c0331df467233d2a9cd886fbeef8")); + + verifyPosition(decoder, binary( + "893f0000000000000000000000000000e048b1a31deba3f5dbe8877f574877e6ed4d022b6611a10d80dfc4c0c11fa8aacf4a9de61528327e2b66843dd9c5d3a7cc9ee1d9c71a34bb482145d88b4fda3e")); + + verifyNothing(decoder, binary( + "01012f00000000000000000000000000003335373435343037313632363831345612da3748bede02ea4faf04ac02f420c0ff37719eccf2864fa2b8191abf8242")); + + } + +} -- cgit v1.2.3 From 03fb12d4a9453d6845198a167a70e720726df2e2 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 24 Nov 2016 08:27:35 +0500 Subject: Remove empty lines --- src/org/traccar/reports/ReportUtils.java | 2 -- 1 file changed, 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/reports/ReportUtils.java b/src/org/traccar/reports/ReportUtils.java index 6c686503c..032925a4a 100644 --- a/src/org/traccar/reports/ReportUtils.java +++ b/src/org/traccar/reports/ReportUtils.java @@ -64,8 +64,6 @@ public final class ReportUtils { double firstOdometer = 0.0; double lastOdometer = 0.0; firstOdometer = firstPosition.getDouble(Position.KEY_ODOMETER); - - lastOdometer = lastPosition.getDouble(Position.KEY_ODOMETER); if (useOdometer && (firstOdometer != 0.0 || lastOdometer != 0.0)) { -- cgit v1.2.3 From 0bbf8f554638cdc89d5dd618c500839554602dee Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 24 Nov 2016 10:45:44 +0500 Subject: - Use one parser - Reverted passing variables way --- src/org/traccar/api/resource/ReportResource.java | 12 ++++++++---- src/org/traccar/helper/DateUtil.java | 5 ++--- src/org/traccar/reports/Events.java | 5 +---- src/org/traccar/reports/Route.java | 5 +---- src/org/traccar/reports/Summary.java | 5 +---- src/org/traccar/reports/Trips.java | 5 +---- 6 files changed, 14 insertions(+), 23 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/ReportResource.java b/src/org/traccar/api/resource/ReportResource.java index e8e80fa2f..e37d6f01d 100644 --- a/src/org/traccar/api/resource/ReportResource.java +++ b/src/org/traccar/api/resource/ReportResource.java @@ -50,7 +50,8 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Route.getExcel(stream, getUserId(), deviceIds, groupIds, from, to); + Route.getExcel(stream, getUserId(), deviceIds, groupIds, + DateUtil.parseDateTime(from), DateUtil.parseDateTime(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -75,7 +76,8 @@ public class ReportResource extends BaseResource { @QueryParam("type") final List types, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Events.getExcel(stream, getUserId(), deviceIds, groupIds, types, from, to); + Events.getExcel(stream, getUserId(), deviceIds, groupIds, types, + DateUtil.parseDateTime(from), DateUtil.parseDateTime(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -98,7 +100,8 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Summary.getExcel(stream, getUserId(), deviceIds, groupIds, from, to); + Summary.getExcel(stream, getUserId(), deviceIds, groupIds, + DateUtil.parseDateTime(from), DateUtil.parseDateTime(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); @@ -121,7 +124,8 @@ public class ReportResource extends BaseResource { @QueryParam("deviceId") final List deviceIds, @QueryParam("groupId") final List groupIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException, IOException { ByteArrayOutputStream stream = new ByteArrayOutputStream(); - Trips.getExcel(stream, getUserId(), deviceIds, groupIds, from, to); + Trips.getExcel(stream, getUserId(), deviceIds, groupIds, + DateUtil.parseDateTime(from), DateUtil.parseDateTime(to)); return Response.ok(stream.toByteArray()) .header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_XLSX).build(); diff --git a/src/org/traccar/helper/DateUtil.java b/src/org/traccar/helper/DateUtil.java index 840f37a7a..de36d4420 100644 --- a/src/org/traccar/helper/DateUtil.java +++ b/src/org/traccar/helper/DateUtil.java @@ -24,8 +24,7 @@ import org.joda.time.format.ISODateTimeFormat; public final class DateUtil { - private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.dateTime(); - private static final DateTimeFormatter DATE_FORMAT_NOMILLIS = ISODateTimeFormat.dateTimeNoMillis(); + private static final DateTimeFormatter DATE_FORMAT = ISODateTimeFormat.dateTimeParser(); private DateUtil() { } @@ -67,7 +66,7 @@ public final class DateUtil { } public static DateTime parseDateTime(String value) { - return DATE_FORMAT_NOMILLIS.withOffsetParsed().parseDateTime(value); + return DATE_FORMAT.withOffsetParsed().parseDateTime(value); } } diff --git a/src/org/traccar/reports/Events.java b/src/org/traccar/reports/Events.java index ada1580d9..33893aad0 100644 --- a/src/org/traccar/reports/Events.java +++ b/src/org/traccar/reports/Events.java @@ -37,7 +37,6 @@ import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.TransformerFactory; import org.traccar.Context; -import org.traccar.helper.DateUtil; import org.traccar.model.Device; import org.traccar.model.Event; import org.traccar.model.Geofence; @@ -70,11 +69,9 @@ public final class Events { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - Collection types, String fromString, String toString) throws SQLException, IOException { + Collection types, DateTime from, DateTime to) throws SQLException, IOException { ArrayList devicesEvents = new ArrayList<>(); ArrayList sheetNames = new ArrayList<>(); - DateTime from = DateUtil.parseDateTime(fromString); - DateTime to = DateUtil.parseDateTime(toString); HashMap geofenceNames = new HashMap<>(); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); diff --git a/src/org/traccar/reports/Route.java b/src/org/traccar/reports/Route.java index f438c8f4d..468771a48 100644 --- a/src/org/traccar/reports/Route.java +++ b/src/org/traccar/reports/Route.java @@ -35,7 +35,6 @@ import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.TransformerFactory; import org.traccar.Context; -import org.traccar.helper.DateUtil; import org.traccar.model.Device; import org.traccar.model.Group; import org.traccar.model.Position; @@ -58,11 +57,9 @@ public final class Route { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - String fromString, String toString) throws SQLException, IOException { + DateTime from, DateTime to) throws SQLException, IOException { ArrayList devicesRoutes = new ArrayList<>(); ArrayList sheetNames = new ArrayList<>(); - DateTime from = DateUtil.parseDateTime(fromString); - DateTime to = DateUtil.parseDateTime(toString); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); Collection positions = Context.getDataManager() diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index d7d8ab417..02791fb5e 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -29,7 +29,6 @@ import org.joda.time.DateTime; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.JxlsHelper; import org.traccar.Context; -import org.traccar.helper.DateUtil; import org.traccar.model.Position; import org.traccar.reports.model.SummaryReport; @@ -84,9 +83,7 @@ public final class Summary { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - String fromString, String toString) throws SQLException, IOException { - DateTime from = DateUtil.parseDateTime(fromString); - DateTime to = DateUtil.parseDateTime(toString); + DateTime from, DateTime to) throws SQLException, IOException { Collection summaries = getObjects(userId, deviceIds, groupIds, from.toDate(), to.toDate()); String templatePath = Context.getConfig().getString("report.templatesPath", "templates/export/"); diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index c31eaac83..1c2ba3fe3 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -35,7 +35,6 @@ import org.jxls.transform.Transformer; import org.jxls.transform.poi.PoiTransformer; import org.jxls.util.TransformerFactory; import org.traccar.Context; -import org.traccar.helper.DateUtil; import org.traccar.model.Device; import org.traccar.model.Group; import org.traccar.model.Position; @@ -177,11 +176,9 @@ public final class Trips { public static void getExcel(OutputStream outputStream, long userId, Collection deviceIds, Collection groupIds, - String fromString, String toString) throws SQLException, IOException { + DateTime from, DateTime to) throws SQLException, IOException { ArrayList devicesTrips = new ArrayList<>(); ArrayList sheetNames = new ArrayList<>(); - DateTime from = DateUtil.parseDateTime(fromString); - DateTime to = DateUtil.parseDateTime(toString); for (long deviceId: ReportUtils.getDeviceList(deviceIds, groupIds)) { Context.getPermissionsManager().checkDevice(userId, deviceId); Collection trips = detectTrips(deviceId, from.toDate(), to.toDate()); -- cgit v1.2.3 From 7113cff737831d239d30edea7d0661ad89499198 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 24 Nov 2016 11:17:49 +0500 Subject: Combine lookupAttribute helpers --- src/org/traccar/CopyAttributesHandler.java | 4 +- src/org/traccar/database/DeviceManager.java | 63 +++++----------------- .../traccar/events/MaintenanceEventHandler.java | 4 +- src/org/traccar/events/OverspeedEventHandler.java | 2 +- src/org/traccar/reports/Summary.java | 2 +- src/org/traccar/reports/Trips.java | 2 +- 6 files changed, 20 insertions(+), 57 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/CopyAttributesHandler.java b/src/org/traccar/CopyAttributesHandler.java index c4cac2e7f..d7f0b4180 100644 --- a/src/org/traccar/CopyAttributesHandler.java +++ b/src/org/traccar/CopyAttributesHandler.java @@ -29,8 +29,8 @@ public class CopyAttributesHandler extends BaseDataHandler { @Override protected Position handlePosition(Position position) { - String attributesString = Context.getDeviceManager().lookupConfigString(position.getDeviceId(), - "processing.copyAttributes", null); + String attributesString = Context.getDeviceManager().lookupAttributeString(position.getDeviceId(), + "processing.copyAttributes", null, false); Position last = getLastPosition(position.getDeviceId()); if (attributesString != null && last != null) { for (String attribute : attributesString.split(" ")) { diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index 600669579..b0364051e 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -317,80 +317,43 @@ public class DeviceManager implements IdentityManager { groupsById.remove(groupId); } - public boolean lookupServerBoolean(long deviceId, String attributeName, boolean defaultValue) { - String result = lookupAttribute(deviceId, attributeName, true); + public boolean lookupAttributeBoolean(long deviceId, String attributeName, boolean defaultValue, + boolean lookupServer) { + String result = lookupAttribute(deviceId, attributeName, lookupServer); if (result != null) { return Boolean.parseBoolean(result); } return defaultValue; } - public String lookupServerString(long deviceId, String attributeName, String defaultValue) { - String result = lookupAttribute(deviceId, attributeName, true); + public String lookupAttributeString(long deviceId, String attributeName, String defaultValue, + boolean lookupServer) { + String result = lookupAttribute(deviceId, attributeName, lookupServer); if (result != null) { return result; } return defaultValue; } - public int lookupServerInteger(long deviceId, String attributeName, int defaultValue) { - String result = lookupAttribute(deviceId, attributeName, true); + public int lookupAttributeInteger(long deviceId, String attributeName, int defaultValue, boolean lookupServer) { + String result = lookupAttribute(deviceId, attributeName, lookupServer); if (result != null) { return Integer.parseInt(result); } return defaultValue; } - public long lookupServerLong(long deviceId, String attributeName, long defaultValue) { - String result = lookupAttribute(deviceId, attributeName, true); + public long lookupAttributeLong(long deviceId, String attributeName, long defaultValue, boolean lookupServer) { + String result = lookupAttribute(deviceId, attributeName, lookupServer); if (result != null) { return Long.parseLong(result); } return defaultValue; } - public double lookupServerDouble(long deviceId, String attributeName, double defaultValue) { - String result = lookupAttribute(deviceId, attributeName, true); - if (result != null) { - return Double.parseDouble(result); - } - return defaultValue; - } - - public boolean lookupConfigBoolean(long deviceId, String attributeName, boolean defaultValue) { - String result = lookupAttribute(deviceId, attributeName, false); - if (result != null) { - return Boolean.parseBoolean(result); - } - return defaultValue; - } - - public String lookupConfigString(long deviceId, String attributeName, String defaultValue) { - String result = lookupAttribute(deviceId, attributeName, false); - if (result != null) { - return result; - } - return defaultValue; - } - - public int lookupConfigInteger(long deviceId, String attributeName, int defaultValue) { - String result = lookupAttribute(deviceId, attributeName, false); - if (result != null) { - return Integer.parseInt(result); - } - return defaultValue; - } - - public long lookupConfigLong(long deviceId, String attributeName, long defaultValue) { - String result = lookupAttribute(deviceId, attributeName, false); - if (result != null) { - return Long.parseLong(result); - } - return defaultValue; - } - - public double lookupConfigDouble(long deviceId, String attributeName, double defaultValue) { - String result = lookupAttribute(deviceId, attributeName, false); + public double lookupAttributeDouble(long deviceId, String attributeName, double defaultValue, + boolean lookupServer) { + String result = lookupAttribute(deviceId, attributeName, lookupServer); if (result != null) { return Double.parseDouble(result); } diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java index f423e035b..9cc4a1aeb 100644 --- a/src/org/traccar/events/MaintenanceEventHandler.java +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -38,12 +38,12 @@ public class MaintenanceEventHandler extends BaseEventHandler { } double maintenanceInterval = Context.getDeviceManager() - .lookupServerDouble(device.getId(), ATTRIBUTE_MAINTENANCE_INTERVAL, 0); + .lookupAttributeDouble(device.getId(), ATTRIBUTE_MAINTENANCE_INTERVAL, 0, true); if (maintenanceInterval == 0) { return null; } double maintenanceStart = Context.getDeviceManager() - .lookupServerDouble(device.getId(), ATTRIBUTE_MAINTENANCE_START, 0); + .lookupAttributeDouble(device.getId(), ATTRIBUTE_MAINTENANCE_START, 0, true); Collection events = new ArrayList<>(); double oldTotalDistance = 0.0; diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index c3e3e19cb..4e4d7bb66 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -48,7 +48,7 @@ public class OverspeedEventHandler extends BaseEventHandler { Collection events = new ArrayList<>(); double speed = position.getSpeed(); double speedLimit = Context.getDeviceManager() - .lookupServerDouble(device.getId(), ATTRIBUTE_SPEED_LIMIT, 0); + .lookupAttributeDouble(device.getId(), ATTRIBUTE_SPEED_LIMIT, 0, true); if (speedLimit == 0) { return null; } diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index 4d6446017..7fc064ac2 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -60,7 +60,7 @@ public final class Summary { result.setMaxSpeed(position.getSpeed()); } boolean ignoreOdometer = Context.getDeviceManager() - .lookupConfigBoolean(deviceId, "report.ignoreOdometer", false); + .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false); result.setDistance(ReportUtils.calculateDistance(firstPosition, previousPosition, !ignoreOdometer)); result.setAverageSpeed(speedSum / positions.size()); } diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 1c2ba3fe3..134fd4969 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -80,7 +80,7 @@ public final class Trips { trip.setEndAddress(endTrip.getAddress()); boolean ignoreOdometer = Context.getDeviceManager() - .lookupConfigBoolean(deviceId, "report.ignoreOdometer", false); + .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false); trip.setDistance(ReportUtils.calculateDistance(startTrip, endTrip, !ignoreOdometer)); trip.setDuration(tripDuration); trip.setAverageSpeed(speedSum / (endIndex - startIndex)); -- cgit v1.2.3 From 1424c2048346206f750bd68232ba6e2cbe1545e9 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Thu, 24 Nov 2016 11:46:28 +0500 Subject: - Invert variable meaning - Style fixes --- src/org/traccar/CopyAttributesHandler.java | 4 +-- src/org/traccar/database/DeviceManager.java | 35 +++++++++++----------- .../traccar/events/MaintenanceEventHandler.java | 4 +-- src/org/traccar/events/OverspeedEventHandler.java | 2 +- src/org/traccar/reports/Summary.java | 2 +- src/org/traccar/reports/Trips.java | 2 +- 6 files changed, 25 insertions(+), 24 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/CopyAttributesHandler.java b/src/org/traccar/CopyAttributesHandler.java index d7f0b4180..f6326ea84 100644 --- a/src/org/traccar/CopyAttributesHandler.java +++ b/src/org/traccar/CopyAttributesHandler.java @@ -29,8 +29,8 @@ public class CopyAttributesHandler extends BaseDataHandler { @Override protected Position handlePosition(Position position) { - String attributesString = Context.getDeviceManager().lookupAttributeString(position.getDeviceId(), - "processing.copyAttributes", null, false); + String attributesString = Context.getDeviceManager().lookupAttributeString( + position.getDeviceId(), "processing.copyAttributes", null, true); Position last = getLastPosition(position.getDeviceId()); if (attributesString != null && last != null) { for (String attribute : attributesString.split(" ")) { diff --git a/src/org/traccar/database/DeviceManager.java b/src/org/traccar/database/DeviceManager.java index b0364051e..c70e67231 100644 --- a/src/org/traccar/database/DeviceManager.java +++ b/src/org/traccar/database/DeviceManager.java @@ -317,50 +317,51 @@ public class DeviceManager implements IdentityManager { groupsById.remove(groupId); } - public boolean lookupAttributeBoolean(long deviceId, String attributeName, boolean defaultValue, - boolean lookupServer) { - String result = lookupAttribute(deviceId, attributeName, lookupServer); + public boolean lookupAttributeBoolean( + long deviceId, String attributeName, boolean defaultValue, boolean lookupConfig) { + String result = lookupAttribute(deviceId, attributeName, lookupConfig); if (result != null) { return Boolean.parseBoolean(result); } return defaultValue; } - public String lookupAttributeString(long deviceId, String attributeName, String defaultValue, - boolean lookupServer) { - String result = lookupAttribute(deviceId, attributeName, lookupServer); + public String lookupAttributeString( + long deviceId, String attributeName, String defaultValue, boolean lookupConfig) { + String result = lookupAttribute(deviceId, attributeName, lookupConfig); if (result != null) { return result; } return defaultValue; } - public int lookupAttributeInteger(long deviceId, String attributeName, int defaultValue, boolean lookupServer) { - String result = lookupAttribute(deviceId, attributeName, lookupServer); + public int lookupAttributeInteger(long deviceId, String attributeName, int defaultValue, boolean lookupConfig) { + String result = lookupAttribute(deviceId, attributeName, lookupConfig); if (result != null) { return Integer.parseInt(result); } return defaultValue; } - public long lookupAttributeLong(long deviceId, String attributeName, long defaultValue, boolean lookupServer) { - String result = lookupAttribute(deviceId, attributeName, lookupServer); + public long lookupAttributeLong( + long deviceId, String attributeName, long defaultValue, boolean lookupConfig) { + String result = lookupAttribute(deviceId, attributeName, lookupConfig); if (result != null) { return Long.parseLong(result); } return defaultValue; } - public double lookupAttributeDouble(long deviceId, String attributeName, double defaultValue, - boolean lookupServer) { - String result = lookupAttribute(deviceId, attributeName, lookupServer); + public double lookupAttributeDouble( + long deviceId, String attributeName, double defaultValue, boolean lookupConfig) { + String result = lookupAttribute(deviceId, attributeName, lookupConfig); if (result != null) { return Double.parseDouble(result); } return defaultValue; } - private String lookupAttribute(long deviceId, String attributeName, boolean lookupServer) { + private String lookupAttribute(long deviceId, String attributeName, boolean lookupConfig) { String result = null; Device device = getDeviceById(deviceId); if (device != null) { @@ -380,11 +381,11 @@ public class DeviceManager implements IdentityManager { } } if (result == null) { - if (lookupServer) { + if (lookupConfig) { + result = Context.getConfig().getString(attributeName); + } else { Server server = Context.getPermissionsManager().getServer(); result = server.getString(attributeName); - } else { - result = Context.getConfig().getString(attributeName); } } } diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java index 9cc4a1aeb..5a36a74d1 100644 --- a/src/org/traccar/events/MaintenanceEventHandler.java +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -38,12 +38,12 @@ public class MaintenanceEventHandler extends BaseEventHandler { } double maintenanceInterval = Context.getDeviceManager() - .lookupAttributeDouble(device.getId(), ATTRIBUTE_MAINTENANCE_INTERVAL, 0, true); + .lookupAttributeDouble(device.getId(), ATTRIBUTE_MAINTENANCE_INTERVAL, 0, false); if (maintenanceInterval == 0) { return null; } double maintenanceStart = Context.getDeviceManager() - .lookupAttributeDouble(device.getId(), ATTRIBUTE_MAINTENANCE_START, 0, true); + .lookupAttributeDouble(device.getId(), ATTRIBUTE_MAINTENANCE_START, 0, false); Collection events = new ArrayList<>(); double oldTotalDistance = 0.0; diff --git a/src/org/traccar/events/OverspeedEventHandler.java b/src/org/traccar/events/OverspeedEventHandler.java index 4e4d7bb66..505d706f4 100644 --- a/src/org/traccar/events/OverspeedEventHandler.java +++ b/src/org/traccar/events/OverspeedEventHandler.java @@ -48,7 +48,7 @@ public class OverspeedEventHandler extends BaseEventHandler { Collection events = new ArrayList<>(); double speed = position.getSpeed(); double speedLimit = Context.getDeviceManager() - .lookupAttributeDouble(device.getId(), ATTRIBUTE_SPEED_LIMIT, 0, true); + .lookupAttributeDouble(device.getId(), ATTRIBUTE_SPEED_LIMIT, 0, false); if (speedLimit == 0) { return null; } diff --git a/src/org/traccar/reports/Summary.java b/src/org/traccar/reports/Summary.java index 7fc064ac2..cacb4d1d6 100644 --- a/src/org/traccar/reports/Summary.java +++ b/src/org/traccar/reports/Summary.java @@ -60,7 +60,7 @@ public final class Summary { result.setMaxSpeed(position.getSpeed()); } boolean ignoreOdometer = Context.getDeviceManager() - .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false); + .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, true); result.setDistance(ReportUtils.calculateDistance(firstPosition, previousPosition, !ignoreOdometer)); result.setAverageSpeed(speedSum / positions.size()); } diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index 134fd4969..d4e25f5e5 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -80,7 +80,7 @@ public final class Trips { trip.setEndAddress(endTrip.getAddress()); boolean ignoreOdometer = Context.getDeviceManager() - .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, false); + .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, true); trip.setDistance(ReportUtils.calculateDistance(startTrip, endTrip, !ignoreOdometer)); trip.setDuration(tripDuration); trip.setAverageSpeed(speedSum / (endIndex - startIndex)); -- cgit v1.2.3 From ab8fc4daef86295f9bab39890aa6de2e51342400 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 24 Nov 2016 22:37:09 +1300 Subject: Fix exception in TK103 protocol (fix #2598) --- src/org/traccar/protocol/Tk103ProtocolDecoder.java | 6 ++++-- test/org/traccar/protocol/Tk103ProtocolDecoderTest.java | 3 +++ 2 files changed, 7 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Tk103ProtocolDecoder.java b/src/org/traccar/protocol/Tk103ProtocolDecoder.java index 9d04483c1..d3bc0efdc 100644 --- a/src/org/traccar/protocol/Tk103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Tk103ProtocolDecoder.java @@ -113,9 +113,11 @@ public class Tk103ProtocolDecoder extends BaseProtocolDecoder { String type = sentence.substring(12, 16); if (type.equals("BP00") || type.equals("BP05")) { String content = sentence.substring(16); - getDeviceSession(channel, remoteAddress, content.substring(0, 15)); + if (content.length() >= 15) { + getDeviceSession(channel, remoteAddress, content.substring(0, 15)); + } if (type.equals("BP00")) { - channel.write("(" + id + "AP01" + content.substring(15) + ")"); + channel.write("(" + id + "AP01HSO)"); return null; } else if (type.equals("BP05")) { channel.write("(" + id + "AP05)"); diff --git a/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java b/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java index 4c6f0e004..1875e4ac5 100644 --- a/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Tk103ProtocolDecoderTest.java @@ -10,6 +10,9 @@ public class Tk103ProtocolDecoderTest extends ProtocolTest { Tk103ProtocolDecoder decoder = new Tk103ProtocolDecoder(new Tk103Protocol()); + verifyNothing(decoder, text( + "(087073005534BP00HSO")); + verifyNothing(decoder, text( "(027028258309BQ86,0,05550c21b10d1d0f431008bd114c0ea5078400010007a100423932,161117005322,01000001)")); -- cgit v1.2.3 From c3f396cc3d7c50f79ead6b1ac07af5d716343002 Mon Sep 17 00:00:00 2001 From: Enrique Villafane Date: Thu, 24 Nov 2016 17:01:11 -0400 Subject: Add more to CharacterDelimiterFrameDecoder gps103 --- src/org/traccar/protocol/Gps103Protocol.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Gps103Protocol.java b/src/org/traccar/protocol/Gps103Protocol.java index 1caff5a7d..e3beb34e5 100644 --- a/src/org/traccar/protocol/Gps103Protocol.java +++ b/src/org/traccar/protocol/Gps103Protocol.java @@ -47,7 +47,7 @@ public class Gps103Protocol extends BaseProtocol { serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { - pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1048, "\r\n", "\n", ";")); + pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(2048, "\r\n", "\n", ";")); pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("objectEncoder", new Gps103ProtocolEncoder()); -- cgit v1.2.3 From f1038fa65fe2befb2a1828c46cab99de6b560f67 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 25 Nov 2016 10:37:24 +1300 Subject: Rename maintenance events --- src/org/traccar/events/MaintenanceEventHandler.java | 2 +- src/org/traccar/model/Event.java | 2 +- src/org/traccar/notification/NotificationFormatter.java | 14 +++++++------- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/events/MaintenanceEventHandler.java b/src/org/traccar/events/MaintenanceEventHandler.java index 5a36a74d1..9e0da97f5 100644 --- a/src/org/traccar/events/MaintenanceEventHandler.java +++ b/src/org/traccar/events/MaintenanceEventHandler.java @@ -58,7 +58,7 @@ public class MaintenanceEventHandler extends BaseEventHandler { oldTotalDistance -= maintenanceStart; newTotalDistance -= maintenanceStart; if ((long) (oldTotalDistance / maintenanceInterval) < (long) (newTotalDistance / maintenanceInterval)) { - events.add(new Event(Event.TYPE_MAINTENANCE_NEEDED, position.getDeviceId(), position.getId())); + events.add(new Event(Event.TYPE_MAINTENANCE, position.getDeviceId(), position.getId())); } return events; diff --git a/src/org/traccar/model/Event.java b/src/org/traccar/model/Event.java index 45da9a711..ee62f9776 100644 --- a/src/org/traccar/model/Event.java +++ b/src/org/traccar/model/Event.java @@ -56,7 +56,7 @@ public class Event extends Message { public static final String TYPE_IGNITION_ON = "ignitionOn"; public static final String TYPE_IGNITION_OFF = "ignitionOff"; - public static final String TYPE_MAINTENANCE_NEEDED = "maintenanceNeeded"; + public static final String TYPE_MAINTENANCE = "maintenance"; private Date serverTime; diff --git a/src/org/traccar/notification/NotificationFormatter.java b/src/org/traccar/notification/NotificationFormatter.java index 38a228beb..6753873ed 100644 --- a/src/org/traccar/notification/NotificationFormatter.java +++ b/src/org/traccar/notification/NotificationFormatter.java @@ -92,9 +92,9 @@ public final class NotificationFormatter { + "Ignition OFF%n" + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; - public static final String TITLE_TEMPLATE_TYPE_MAINTENANCE_NEEDED = "%1$s: maintenance is needed"; - public static final String MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEEDED = "Device: %1$s%n" - + "Maintenance is needed%n" + public static final String TITLE_TEMPLATE_TYPE_MAINTENANCE = "%1$s: maintenance is required"; + public static final String MESSAGE_TEMPLATE_TYPE_MAINTENANCE = "Device: %1$s%n" + + "Maintenance is required%n" + "Point: https://www.openstreetmap.org/?mlat=%3$f&mlon=%4$f#map=16/%3$f/%4$f%n" + "Time: %2$tc%n"; @@ -140,8 +140,8 @@ public final class NotificationFormatter { case Event.TYPE_IGNITION_OFF: formatter.format(TITLE_TEMPLATE_TYPE_IGNITION_OFF, device.getName()); break; - case Event.TYPE_MAINTENANCE_NEEDED: - formatter.format(TITLE_TEMPLATE_TYPE_MAINTENANCE_NEEDED, device.getName()); + case Event.TYPE_MAINTENANCE: + formatter.format(TITLE_TEMPLATE_TYPE_MAINTENANCE, device.getName()); break; default: formatter.format("Unknown type"); @@ -206,8 +206,8 @@ public final class NotificationFormatter { formatter.format(MESSAGE_TEMPLATE_TYPE_IGNITION_OFF, device.getName(), position.getFixTime(), position.getLatitude(), position.getLongitude()); break; - case Event.TYPE_MAINTENANCE_NEEDED: - formatter.format(MESSAGE_TEMPLATE_TYPE_MAINTENANCE_NEEDED, device.getName(), position.getFixTime(), + case Event.TYPE_MAINTENANCE: + formatter.format(MESSAGE_TEMPLATE_TYPE_MAINTENANCE, device.getName(), position.getFixTime(), position.getLatitude(), position.getLongitude()); break; default: -- cgit v1.2.3 From b0068d87ddf894fc2f7d2688bd4c4ad88c891a2e Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 26 Nov 2016 19:54:14 +1300 Subject: Implement Maestro protocol decoder --- setup/default.xml | 1 + src/org/traccar/protocol/MaestroProtocol.java | 47 +++++++++ .../traccar/protocol/MaestroProtocolDecoder.java | 107 +++++++++++++++++++++ .../protocol/MaestroProtocolDecoderTest.java | 30 ++++++ 4 files changed, 185 insertions(+) create mode 100644 src/org/traccar/protocol/MaestroProtocol.java create mode 100644 src/org/traccar/protocol/MaestroProtocolDecoder.java create mode 100644 test/org/traccar/protocol/MaestroProtocolDecoderTest.java (limited to 'src/org') diff --git a/setup/default.xml b/setup/default.xml index 869c077cf..7df352c4d 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -441,5 +441,6 @@ 5126 5127 5128 + 5129 diff --git a/src/org/traccar/protocol/MaestroProtocol.java b/src/org/traccar/protocol/MaestroProtocol.java new file mode 100644 index 000000000..5e0b69916 --- /dev/null +++ b/src/org/traccar/protocol/MaestroProtocol.java @@ -0,0 +1,47 @@ +/* + * Copyright 2016 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.protocol; + +import org.jboss.netty.bootstrap.ServerBootstrap; +import org.jboss.netty.channel.ChannelPipeline; +import org.jboss.netty.handler.codec.frame.FixedLengthFrameDecoder; +import org.jboss.netty.handler.codec.string.StringDecoder; +import org.jboss.netty.handler.codec.string.StringEncoder; +import org.traccar.BaseProtocol; +import org.traccar.TrackerServer; + +import java.util.List; + +public class MaestroProtocol extends BaseProtocol { + + public MaestroProtocol() { + super("maestro"); + } + + @Override + public void initTrackerServers(List serverList) { + serverList.add(new TrackerServer(new ServerBootstrap(), getName()) { + @Override + protected void addSpecificHandlers(ChannelPipeline pipeline) { + pipeline.addLast("frameDecoder", new FixedLengthFrameDecoder(160)); + pipeline.addLast("stringEncoder", new StringEncoder()); + pipeline.addLast("stringDecoder", new StringDecoder()); + pipeline.addLast("objectDecoder", new MaestroProtocolDecoder(MaestroProtocol.this)); + } + }); + } + +} diff --git a/src/org/traccar/protocol/MaestroProtocolDecoder.java b/src/org/traccar/protocol/MaestroProtocolDecoder.java new file mode 100644 index 000000000..06ec2473d --- /dev/null +++ b/src/org/traccar/protocol/MaestroProtocolDecoder.java @@ -0,0 +1,107 @@ +/* + * Copyright 2016 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.protocol; + +import org.jboss.netty.channel.Channel; +import org.traccar.BaseProtocolDecoder; +import org.traccar.DeviceSession; +import org.traccar.helper.DateBuilder; +import org.traccar.helper.Parser; +import org.traccar.helper.PatternBuilder; +import org.traccar.helper.UnitsConverter; +import org.traccar.model.Position; + +import java.net.SocketAddress; +import java.util.regex.Pattern; + +public class MaestroProtocolDecoder extends BaseProtocolDecoder { + + public MaestroProtocolDecoder(MaestroProtocol protocol) { + super(protocol); + } + + private static final Pattern PATTERN = new PatternBuilder() + .text("@") + .number("(d+),") // imei + .number("d+,") // index + .expression("[^,]+,") // profile + .expression("([01]),") // validity + .number("(d+.d+),") // battery + .number("(d+),") // gsm + .expression("([01]),") // starter + .expression("([01]),") // ignition + .number("(dd)/(dd)/(dd),") // date + .number("(dd):(dd):(dd),") // time + .number("(-?d+.d+),") // longitude + .number("(-?d+.d+),") // latitude + .number("(d+.?d*),") // altitude + .number("(d+.?d*),") // speed + .number("(d+.?d*),") // course + .number("(d+),") // satellites + .number("(d+.?d*),") // hdop + .number("(d+.?d*)") // odometer + .number(",(d+)").optional() // adc + .any() + .compile(); + + @Override + protected Object decode( + Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + + Parser parser = new Parser(PATTERN, (String) msg); + if (!parser.matches()) { + return null; + } + + DeviceSession deviceSession = getDeviceSession(channel, remoteAddress, parser.next()); + if (deviceSession == null) { + return null; + } + + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + position.setValid(parser.nextInt() == 1); + + position.set(Position.KEY_BATTERY, parser.nextDouble()); + position.set(Position.KEY_GSM, parser.nextInt()); + position.set(Position.KEY_CHARGE, parser.nextInt() == 1); + position.set(Position.KEY_IGNITION, parser.nextInt() == 1); + + DateBuilder dateBuilder = new DateBuilder() + .setDate(parser.nextInt(), parser.nextInt(), parser.nextInt()) + .setTime(parser.nextInt(), parser.nextInt(), parser.nextInt()); + position.setTime(dateBuilder.getDate()); + + position.setLatitude(parser.nextDouble()); + position.setLongitude(parser.nextDouble()); + position.setAltitude(parser.nextDouble()); + position.setSpeed(UnitsConverter.knotsFromMph(parser.nextDouble())); + position.setCourse(parser.nextDouble()); + + position.set(Position.KEY_SATELLITES, parser.nextInt()); + position.set(Position.KEY_HDOP, parser.nextDouble()); + position.set(Position.KEY_ODOMETER, parser.nextDouble() * 1609.34); + + if (parser.hasNext()) { + position.set(Position.PREFIX_ADC + 1, parser.nextInt()); + } + + return position; + } + +} diff --git a/test/org/traccar/protocol/MaestroProtocolDecoderTest.java b/test/org/traccar/protocol/MaestroProtocolDecoderTest.java new file mode 100644 index 000000000..b480ad9b2 --- /dev/null +++ b/test/org/traccar/protocol/MaestroProtocolDecoderTest.java @@ -0,0 +1,30 @@ +package org.traccar.protocol; + +import org.junit.Test; +import org.traccar.ProtocolTest; + +public class MaestroProtocolDecoderTest extends ProtocolTest { + + @Test + public void testDecode() throws Exception { + + MaestroProtocolDecoder decoder = new MaestroProtocolDecoder(new MaestroProtocol()); + + verifyPosition(decoder, text( + "@353893040202807,705,UPV-02,1,13.2,17,0,0,16/09/11,11:42:49,0.352705,32.647918,1210.5,0.000000,35.33,11,0.8,0.000,0!\0")); + + verifyPosition(decoder, text( + "@353893040202807,705,UPV-02,1,13.4,18,0,0,16/09/11,11:43:30,0.352808,32.647990,1211.0,0.000000,80.96,11,0.8,0.000,0!\0")); + + verifyPosition(decoder, text( + "@353893040202807,601,UPV-02,0,13.4,10,0,0,16/11/04,17:21:14,0.352793,32.647927,0,0,0,0,99,0.000,0!\0")); + + verifyPosition(decoder, text( + "@123451234512345,531,M2MGTW,1,12.5,30,0,0,11/10/10,09:09:09,22.222222,114.141414,45.6,0.0,160.0,8,1,20!")); + + verifyPosition(decoder, text( + "@123451234512345,702,M2MGTW,1,14.7,30,0,1,11/10/10,09:09:09,22.222222,114.141414,45.6,25.12,160.0,8,1,25!")); + + } + +} -- cgit v1.2.3 From 8177dcd0d19053ab5f2d3dcfff959bc4fa3986bd Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sat, 26 Nov 2016 23:41:02 +1300 Subject: Refactor upro protocol decoder --- src/org/traccar/protocol/UproProtocol.java | 4 +- src/org/traccar/protocol/UproProtocolDecoder.java | 104 ++++++++++++++------- .../traccar/protocol/UproProtocolDecoderTest.java | 41 ++++---- 3 files changed, 92 insertions(+), 57 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/UproProtocol.java b/src/org/traccar/protocol/UproProtocol.java index ae6cac603..c00f859ee 100644 --- a/src/org/traccar/protocol/UproProtocol.java +++ b/src/org/traccar/protocol/UproProtocol.java @@ -1,5 +1,5 @@ /* - * Copyright 2015 Anton Tananaev (anton@traccar.org) + * Copyright 2015 - 2016 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. @@ -17,7 +17,6 @@ package org.traccar.protocol; import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.ChannelPipeline; -import org.jboss.netty.handler.codec.string.StringDecoder; import org.jboss.netty.handler.codec.string.StringEncoder; import org.traccar.BaseProtocol; import org.traccar.CharacterDelimiterFrameDecoder; @@ -37,7 +36,6 @@ public class UproProtocol extends BaseProtocol { @Override protected void addSpecificHandlers(ChannelPipeline pipeline) { pipeline.addLast("frameDecoder", new CharacterDelimiterFrameDecoder(1024, '#')); - pipeline.addLast("stringDecoder", new StringDecoder()); pipeline.addLast("stringEncoder", new StringEncoder()); pipeline.addLast("objectDecoder", new UproProtocolDecoder(UproProtocol.this)); } diff --git a/src/org/traccar/protocol/UproProtocolDecoder.java b/src/org/traccar/protocol/UproProtocolDecoder.java index 24a0f5dcd..e47dd8595 100644 --- a/src/org/traccar/protocol/UproProtocolDecoder.java +++ b/src/org/traccar/protocol/UproProtocolDecoder.java @@ -15,6 +15,8 @@ */ package org.traccar.protocol; +import org.jboss.netty.buffer.ChannelBuffer; +import org.jboss.netty.buffer.ChannelBuffers; import org.jboss.netty.channel.Channel; import org.traccar.BaseProtocolDecoder; import org.traccar.DeviceSession; @@ -25,6 +27,8 @@ import org.traccar.helper.PatternBuilder; import org.traccar.model.Position; import java.net.SocketAddress; +import java.nio.charset.StandardCharsets; +import java.text.ParseException; import java.util.regex.Pattern; public class UproProtocolDecoder extends BaseProtocolDecoder { @@ -33,19 +37,17 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { super(protocol); } - private static final Pattern PATTERN = new PatternBuilder() + private static final Pattern PATTERN_HEADER = new PatternBuilder() .text("*") .expression("..20") .expression("([01])") // ack .number("(d+),") // device id .expression("(.)") // type .expression("(.)") // subtype - .expression("(.*)") // content - .expression("#?") // delimiter + .any() .compile(); private static final Pattern PATTERN_LOCATION = new PatternBuilder() - .text("A") .number("(dd)(dd)(dd)") // time .number("(dd)(dd)(dddd)") // latitude .number("(ddd)(dd)(dddd)") // longitude @@ -88,7 +90,19 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { protected Object decode( Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { - Parser parser = new Parser(PATTERN, (String) msg); + ChannelBuffer buf = (ChannelBuffer) msg; + + if (buf.getByte(buf.readerIndex()) != '*') { + throw new ParseException(null, 0); + } + + int headerIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '&'); + if (headerIndex < 0) { + headerIndex = buf.writerIndex(); + } + String header = buf.readBytes(headerIndex - buf.readerIndex()).toString(StandardCharsets.US_ASCII); + + Parser parser = new Parser(PATTERN_HEADER, header); if (!parser.matches()) { return null; } @@ -111,37 +125,57 @@ public class UproProtocolDecoder extends BaseProtocolDecoder { channel.write("*MG20Y" + type + subtype + "#"); } - String[] data = parser.next().split("&"); - for (int i = 0; i < data.length; i++) { - if (i != 0) { - switch (data[i].charAt(0)) { - case 'A': - decodeLocation(position, data[i]); - break; - case 'B': - position.set(Position.KEY_STATUS, data[i].substring(1)); - break; - case 'C': - long odometer = 0; - for (int j = 1; j < data[i].length(); j++) { - odometer <<= 4; - odometer += data[i].charAt(j) - '0'; - } - position.set(Position.KEY_ODOMETER, odometer * 2 * 1852 / 3600); - break; - case 'P': - position.set(Position.KEY_MCC, Integer.parseInt(data[i].substring(1, 5))); - position.set(Position.KEY_MNC, Integer.parseInt(data[i].substring(5, 9))); - position.set(Position.KEY_LAC, Integer.parseInt(data[i].substring(9, 13), 16)); - position.set(Position.KEY_CID, Integer.parseInt(data[i].substring(13, 17), 16)); - break; - case 'S': - position.set("obd", data[i]); - break; - default: - break; - } + while (buf.readable()) { + + buf.readByte(); // skip delimiter + + byte dataType = buf.readByte(); + + int delimiterIndex = buf.indexOf(buf.readerIndex(), buf.writerIndex(), (byte) '&'); + if (delimiterIndex < 0) { + delimiterIndex = buf.writerIndex(); } + + ChannelBuffer data = buf.readBytes(delimiterIndex - buf.readerIndex()); + + switch (dataType) { + case 'A': + decodeLocation(position, data.toString(StandardCharsets.US_ASCII)); + break; + case 'B': + position.set(Position.KEY_STATUS, data.toString(StandardCharsets.US_ASCII)); + break; + case 'C': + long odometer = 0; + while (data.readable()) { + odometer <<= 4; + odometer += data.readByte() - (byte) '0'; + } + position.set(Position.KEY_ODOMETER, odometer * 2 * 1852 / 3600); + break; + case 'P': + position.set(Position.KEY_MCC, + Integer.parseInt(data.readBytes(4).toString(StandardCharsets.US_ASCII))); + position.set(Position.KEY_MNC, + Integer.parseInt(data.readBytes(4).toString(StandardCharsets.US_ASCII))); + position.set(Position.KEY_LAC, + Integer.parseInt(data.readBytes(4).toString(StandardCharsets.US_ASCII), 16)); + position.set(Position.KEY_CID, + Integer.parseInt(data.readBytes(4).toString(StandardCharsets.US_ASCII), 16)); + break; + case 'Q': + position.set("obd-pid", ChannelBuffers.hexDump(data)); + break; + case 'R': + position.set("odb-travel", ChannelBuffers.hexDump(data)); + break; + case 'S': + position.set("obd-traffic", ChannelBuffers.hexDump(data)); + break; + default: + break; + } + } if (position.getLatitude() != 0 && position.getLongitude() != 0) { diff --git a/test/org/traccar/protocol/UproProtocolDecoderTest.java b/test/org/traccar/protocol/UproProtocolDecoderTest.java index 711fe39b6..3af62da08 100644 --- a/test/org/traccar/protocol/UproProtocolDecoderTest.java +++ b/test/org/traccar/protocol/UproProtocolDecoderTest.java @@ -10,39 +10,42 @@ public class UproProtocolDecoderTest extends ProtocolTest { UproProtocolDecoder decoder = new UproProtocolDecoder(new UproProtocol()); - verifyPosition(decoder, text( - "*MG201693502000035441,BA&A1213073325458307036690710000151116&P0730000032ce4fb3&D1&B0000000000&C005799?7&S3,20161115120025,07035.54659E,3324.87721N,3000,0,0,0,0,847,599,8,40,0,19,20&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0&T0107#")); + verifyPosition(decoder, binary( + "2a4d473230303639333530323030303033353537332c42412641303834313237333332363334353230373033383933373630303030303235313131362642303130303030303030302647303036323030264d393930264e3235264f3035303026433030313a363b363926510411058c0c125c0d0a2fff4237ee614d66454c140826555f50000000000300000000000000000026543139333723")); - verifyPosition(decoder, text( - "*MG201693502000034964,AB&A0800253335360507036975710000091116&P0730000032d2a94d&B0000000000&N13&Z12&U_P\0\0\0\u0004\0\0\0\0\0\0\0\0\0\0#"), + verifyPosition(decoder, buffer( + "*MG201693502000035441,BA&A1213073325458307036690710000151116&P0730000032ce4fb3&D1&B0000000000&C005799?7&S3,20161115120025,07035.54659E,3324.87721N,3000,0,0,0,0,847,599,8,40,0,19,20&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0&T0107")); + + verifyPosition(decoder, buffer( + "*MG201693502000034964,AB&A0800253335360507036975710000091116&P0730000032d2a94d&B0000000000&N13&Z12&U_P\0\0\0\u0004\0\0\0\0\0\0\0\0\0\0"), position("2016-11-09 08:00:25.000", true, -33.58934, -70.61626)); - verifyNothing(decoder, text( - "*MG20113800138000,AH#")); + verifyNothing(decoder, buffer( + "*MG20113800138000,AH")); - verifyPosition(decoder, text( - "*MG201693502000034964,AB&A0200183324418107033792800009051116&B0000000000&N15&Z94&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0#")); + verifyPosition(decoder, buffer( + "*MG201693502000034964,AB&A0200183324418107033792800009051116&B0000000000&N15&Z94&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0")); - verifyPosition(decoder, text( - "*MG201693502000034964,AB&A0200543324412007033805910000051116&P0730000032d66785&B0000000000&N15&Z92&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0#")); + verifyPosition(decoder, buffer( + "*MG201693502000034964,AB&A0200543324412007033805910000051116&P0730000032d66785&B0000000000&N15&Z92&U_P\0\0\0\0\0\0\0\0\0\0\0\0\0\0")); - verifyPosition(decoder, text( - "*AI2000905447674,BA&A2003064913201201845107561627121016&B0100000000&C05>8=961&F0333&K023101002154A7#")); + verifyPosition(decoder, buffer( + "*AI2000905447674,BA&A2003064913201201845107561627121016&B0100000000&C05>8=961&F0333&K023101002154A7")); - verifyPosition(decoder, text( - "*AI200905300036,AH&A0317264913209801844913060000251115&B0500000000&C0;4?72:9&F0000#"), + verifyPosition(decoder, buffer( + "*AI200905300036,AH&A0317264913209801844913060000251115&B0500000000&C0;4?72:9&F0000"), position("2015-11-25 03:17:26.000", false, 49.22016, 18.74855)); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "*AI2000905300036,AS&A1647304913209801844913060000251115&B0400000000&C0;4?72:9&F0000")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "*AI2000905300036,AC1&A1648014913209801844913060000251115&B0400000000&C0;4?72:9&F0000")); - verifyPosition(decoder, text( - "*AI2000905300036,AB1&A1702464913231101844949860000251115&B0500000000&C0;4?72:9&F0000#")); + verifyPosition(decoder, buffer( + "*AI2000905300036,AB1&A1702464913231101844949860000251115&B0500000000&C0;4?72:9&F0000")); - verifyPosition(decoder, text( + verifyPosition(decoder, buffer( "*AI2000905300036,AD1&A1703054913231101844949860000251115&B0500000000&C0;4?72:9&F0000")); } -- cgit v1.2.3 From b09d0e98541edc7122d992e85547741ffd57f72a Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Sat, 26 Nov 2016 19:33:54 +0700 Subject: Implement polyline geofence --- src/org/traccar/geofence/GeofenceGeometry.java | 29 +++++++ src/org/traccar/geofence/GeofencePolygon.java | 29 ------- src/org/traccar/geofence/GeofencePolyline.java | 92 ++++++++++++++++++++++ src/org/traccar/helper/DistanceCalculator.java | 16 ++++ src/org/traccar/model/Geofence.java | 5 ++ .../org/traccar/geofence/GeofencePolylineTest.java | 54 +++++++++++++ .../org/traccar/helper/DistanceCalculatorTest.java | 9 +++ 7 files changed, 205 insertions(+), 29 deletions(-) create mode 100644 src/org/traccar/geofence/GeofencePolyline.java create mode 100644 test/org/traccar/geofence/GeofencePolylineTest.java (limited to 'src/org') diff --git a/src/org/traccar/geofence/GeofenceGeometry.java b/src/org/traccar/geofence/GeofenceGeometry.java index 6b5b0acb7..d61e357ce 100644 --- a/src/org/traccar/geofence/GeofenceGeometry.java +++ b/src/org/traccar/geofence/GeofenceGeometry.java @@ -25,4 +25,33 @@ public abstract class GeofenceGeometry { public abstract void fromWkt(String wkt) throws ParseException; + public static class Coordinate { + + public static final double DEGREE360 = 360; + + private double lat; + private double lon; + + public double getLat() { + return lat; + } + + public void setLat(double lat) { + this.lat = lat; + } + + public double getLon() { + return lon; + } + + // Need not to confuse algorithm by the abrupt reset of longitude + public double getLon360() { + return lon + DEGREE360; + } + + public void setLon(double lon) { + this.lon = lon; + } + } + } diff --git a/src/org/traccar/geofence/GeofencePolygon.java b/src/org/traccar/geofence/GeofencePolygon.java index 03638d6c9..48326dc10 100644 --- a/src/org/traccar/geofence/GeofencePolygon.java +++ b/src/org/traccar/geofence/GeofencePolygon.java @@ -27,35 +27,6 @@ public class GeofencePolygon extends GeofenceGeometry { fromWkt(wkt); } - private static class Coordinate { - - public static final double DEGREE360 = 360; - - private double lat; - private double lon; - - public double getLat() { - return lat; - } - - public void setLat(double lat) { - this.lat = lat; - } - - public double getLon() { - return lon; - } - - // Need not to confuse algorithm by the abrupt reset of longitude - public double getLon360() { - return lon + DEGREE360; - } - - public void setLon(double lon) { - this.lon = lon; - } - } - private ArrayList coordinates; private double[] constant; diff --git a/src/org/traccar/geofence/GeofencePolyline.java b/src/org/traccar/geofence/GeofencePolyline.java new file mode 100644 index 000000000..60d7b0605 --- /dev/null +++ b/src/org/traccar/geofence/GeofencePolyline.java @@ -0,0 +1,92 @@ +package org.traccar.geofence; + +import java.text.ParseException; +import java.util.ArrayList; + +import org.traccar.helper.DistanceCalculator; + +public class GeofencePolyline extends GeofenceGeometry { + + private ArrayList coordinates; + private double distance; + + public GeofencePolyline() { + } + + public GeofencePolyline(String wkt, double distance) throws ParseException { + fromWkt(wkt); + this.distance = distance; + } + + @Override + public boolean containsPoint(double latitude, double longitude) { + double longitude360 = longitude + Coordinate.DEGREE360; + for (int i = 1; i < coordinates.size(); i++) { + if (DistanceCalculator.distanceToInterval( + latitude, longitude360, coordinates.get(i - 1).getLat(), coordinates.get(i - 1).getLon360(), + coordinates.get(i).getLat(), coordinates.get(i).getLon360()) <= distance) { + return true; + } + } + return false; + } + + @Override + public String toWkt() { + StringBuilder buf = new StringBuilder(); + buf.append("LINESTRING ("); + for (Coordinate coordinate : coordinates) { + buf.append(String.valueOf(coordinate.getLat())); + buf.append(" "); + buf.append(String.valueOf(coordinate.getLon())); + buf.append(", "); + } + return buf.substring(0, buf.length() - 2) + ")"; + } + + @Override + public void fromWkt(String wkt) throws ParseException { + if (coordinates == null) { + coordinates = new ArrayList<>(); + } else { + coordinates.clear(); + } + + if (!wkt.startsWith("LINESTRING")) { + throw new ParseException("Mismatch geometry type", 0); + } + String content = wkt.substring(wkt.indexOf("(") + 1, wkt.indexOf(")")); + if (content.isEmpty()) { + throw new ParseException("No content", 0); + } + String[] commaTokens = content.split(","); + if (commaTokens.length < 2) { + throw new ParseException("Not valid content", 0); + } + + for (String commaToken : commaTokens) { + String[] tokens = commaToken.trim().split("\\s"); + if (tokens.length != 2) { + throw new ParseException("Here must be two coordinates: " + commaToken, 0); + } + Coordinate coordinate = new Coordinate(); + try { + coordinate.setLat(Double.parseDouble(tokens[0])); + } catch (NumberFormatException e) { + throw new ParseException(tokens[0] + " is not a double", 0); + } + try { + coordinate.setLon(Double.parseDouble(tokens[1])); + } catch (NumberFormatException e) { + throw new ParseException(tokens[1] + " is not a double", 0); + } + coordinates.add(coordinate); + } + + } + + public void setDistance(double distance) { + this.distance = distance; + } + +} diff --git a/src/org/traccar/helper/DistanceCalculator.java b/src/org/traccar/helper/DistanceCalculator.java index 3452597ab..ceeee4be4 100644 --- a/src/org/traccar/helper/DistanceCalculator.java +++ b/src/org/traccar/helper/DistanceCalculator.java @@ -33,4 +33,20 @@ public final class DistanceCalculator { return d * 1000; } + public static double distanceToInterval( + double pointLat, double pointLon, double lat1, double lon1, double lat2, double lon2) { + double d0 = distance(pointLat, pointLon, lat1, lon1); + double d1 = distance(lat1, lon1, lat2, lon2); + double d2 = distance(lat2, lon2, pointLat, pointLon); + if (Math.pow(d0, 2) > Math.pow(d1, 2) + Math.pow(d2, 2)) { + return d2; + } + if (Math.pow(d2, 2) > Math.pow(d1, 2) + Math.pow(d0, 2)) { + return d0; + } + double halfP = (d0 + d1 + d2) * 0.5; + double area = Math.sqrt(halfP * (halfP - d0) * (halfP - d1) * (halfP - d2)); + return 2 * area / d1; + } + } diff --git a/src/org/traccar/model/Geofence.java b/src/org/traccar/model/Geofence.java index ecfd3101c..326c45b5f 100644 --- a/src/org/traccar/model/Geofence.java +++ b/src/org/traccar/model/Geofence.java @@ -17,9 +17,11 @@ package org.traccar.model; import java.text.ParseException; +import org.traccar.Context; import org.traccar.geofence.GeofenceCircle; import org.traccar.geofence.GeofenceGeometry; import org.traccar.geofence.GeofencePolygon; +import org.traccar.geofence.GeofencePolyline; import com.fasterxml.jackson.annotation.JsonIgnore; @@ -27,6 +29,7 @@ public class Geofence extends Extensible { public static final String TYPE_GEOFENCE_CILCLE = "geofenceCircle"; public static final String TYPE_GEOFENCE_POLYGON = "geofencePolygon"; + public static final String TYPE_GEOFENCE_POLYLINE = "geofencePolyline"; private String name; @@ -60,6 +63,8 @@ public class Geofence extends Extensible { geometry = new GeofenceCircle(area); } else if (area.startsWith("POLYGON")) { geometry = new GeofencePolygon(area); + } else if (area.startsWith("LINESTRING")) { + geometry = new GeofencePolyline(area, Context.getConfig().getDouble("geofence.polylineDistance", 25)); } else { throw new ParseException("Unknown geometry type", 0); } diff --git a/test/org/traccar/geofence/GeofencePolylineTest.java b/test/org/traccar/geofence/GeofencePolylineTest.java new file mode 100644 index 000000000..df939d8ba --- /dev/null +++ b/test/org/traccar/geofence/GeofencePolylineTest.java @@ -0,0 +1,54 @@ +package org.traccar.geofence; + +import java.text.ParseException; + +import org.junit.Assert; +import org.junit.Test; + +public class GeofencePolylineTest { + + @Test + public void testPolylineWKT() { + String test = "LINESTRING (55.75474 37.61823, 55.75513 37.61888, 55.7535 37.6222, 55.75315 37.62165)"; + GeofenceGeometry geofenceGeometry = new GeofencePolyline(); + try { + geofenceGeometry.fromWkt(test); + } catch (ParseException e){ + Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); + } + Assert.assertEquals(geofenceGeometry.toWkt(), test); + } + + @Test + public void testContainsPolyline1Interval() { + String test = "LINESTRING (56.83777 60.59833, 56.83766 60.5968)"; + + try { + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 35); + Assert.assertTrue(geofenceGeometry.containsPoint(56.83801, 60.59748)); + + ((GeofencePolyline) geofenceGeometry).setDistance(15); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83801, 60.59748)); + + } catch (ParseException e){ + Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); + } + } + + + @Test + public void testContainsPolyline3Intervals() { + String test = "LINESTRING (56.836 60.6126, 56.8393 60.6114, 56.83887 60.60811, 56.83782 60.5988)"; + + try { + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 15); + Assert.assertTrue(geofenceGeometry.containsPoint(56.83847, 60.60458)); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83764, 60.59725)); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83861, 60.60822)); + + } catch (ParseException e){ + Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); + } + } + +} diff --git a/test/org/traccar/helper/DistanceCalculatorTest.java b/test/org/traccar/helper/DistanceCalculatorTest.java index 7bbb4e3b1..2ce54c583 100644 --- a/test/org/traccar/helper/DistanceCalculatorTest.java +++ b/test/org/traccar/helper/DistanceCalculatorTest.java @@ -10,5 +10,14 @@ public class DistanceCalculatorTest { Assert.assertEquals( DistanceCalculator.distance(0.0, 0.0, 0.05, 0.05), 7863.0, 10.0); } + + @Test + public void testDistanceToInterval() { + Assert.assertEquals(DistanceCalculator.distanceToInterval( + 56.83801, 60.59748, 56.83777, 60.59833, 56.83766, 60.5968), 33.0, 5.0); + + Assert.assertEquals(DistanceCalculator.distanceToInterval( + 56.83753, 60.59508, 56.83777, 60.59833, 56.83766, 60.5968), 105.0, 5.0); + } } -- cgit v1.2.3 From c814f3f3556422d9e7e49d6b958621058293c1ac Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Sat, 26 Nov 2016 20:06:35 +0700 Subject: Add license header --- src/org/traccar/geofence/GeofencePolyline.java | 16 ++++++++++++++++ src/org/traccar/helper/DistanceCalculator.java | 3 ++- 2 files changed, 18 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/geofence/GeofencePolyline.java b/src/org/traccar/geofence/GeofencePolyline.java index 60d7b0605..e99987207 100644 --- a/src/org/traccar/geofence/GeofencePolyline.java +++ b/src/org/traccar/geofence/GeofencePolyline.java @@ -1,3 +1,19 @@ +/* + * Copyright 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@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.geofence; import java.text.ParseException; diff --git a/src/org/traccar/helper/DistanceCalculator.java b/src/org/traccar/helper/DistanceCalculator.java index ceeee4be4..873e84977 100644 --- a/src/org/traccar/helper/DistanceCalculator.java +++ b/src/org/traccar/helper/DistanceCalculator.java @@ -1,5 +1,6 @@ /* - * Copyright 2014 Anton Tananaev (anton@traccar.org) + * Copyright 2014 - 2016 Anton Tananaev (anton@traccar.org) + * Copyright 2016 Andrey Kunitsyn (andrey@traccar.org) * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. -- cgit v1.2.3 From 5ea4572553a84126b7e9f06c822e1a183413a558 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Sun, 27 Nov 2016 10:18:13 +0700 Subject: - Rename function - Fix formatting --- src/org/traccar/geofence/GeofencePolyline.java | 2 +- src/org/traccar/helper/DistanceCalculator.java | 2 +- .../org/traccar/geofence/GeofencePolylineTest.java | 25 ++++++++-------------- .../org/traccar/helper/DistanceCalculatorTest.java | 6 +++--- 4 files changed, 14 insertions(+), 21 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/geofence/GeofencePolyline.java b/src/org/traccar/geofence/GeofencePolyline.java index e99987207..cadc69da6 100644 --- a/src/org/traccar/geofence/GeofencePolyline.java +++ b/src/org/traccar/geofence/GeofencePolyline.java @@ -38,7 +38,7 @@ public class GeofencePolyline extends GeofenceGeometry { public boolean containsPoint(double latitude, double longitude) { double longitude360 = longitude + Coordinate.DEGREE360; for (int i = 1; i < coordinates.size(); i++) { - if (DistanceCalculator.distanceToInterval( + if (DistanceCalculator.distanceToLine( latitude, longitude360, coordinates.get(i - 1).getLat(), coordinates.get(i - 1).getLon360(), coordinates.get(i).getLat(), coordinates.get(i).getLon360()) <= distance) { return true; diff --git a/src/org/traccar/helper/DistanceCalculator.java b/src/org/traccar/helper/DistanceCalculator.java index 873e84977..88d4ef8a4 100644 --- a/src/org/traccar/helper/DistanceCalculator.java +++ b/src/org/traccar/helper/DistanceCalculator.java @@ -34,7 +34,7 @@ public final class DistanceCalculator { return d * 1000; } - public static double distanceToInterval( + public static double distanceToLine( double pointLat, double pointLon, double lat1, double lon1, double lat2, double lon2) { double d0 = distance(pointLat, pointLon, lat1, lon1); double d1 = distance(lat1, lon1, lat2, lon2); diff --git a/test/org/traccar/geofence/GeofencePolylineTest.java b/test/org/traccar/geofence/GeofencePolylineTest.java index df939d8ba..e281c3dd6 100644 --- a/test/org/traccar/geofence/GeofencePolylineTest.java +++ b/test/org/traccar/geofence/GeofencePolylineTest.java @@ -12,7 +12,7 @@ public class GeofencePolylineTest { String test = "LINESTRING (55.75474 37.61823, 55.75513 37.61888, 55.7535 37.6222, 55.75315 37.62165)"; GeofenceGeometry geofenceGeometry = new GeofencePolyline(); try { - geofenceGeometry.fromWkt(test); + geofenceGeometry.fromWkt(test); } catch (ParseException e){ Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); } @@ -22,33 +22,26 @@ public class GeofencePolylineTest { @Test public void testContainsPolyline1Interval() { String test = "LINESTRING (56.83777 60.59833, 56.83766 60.5968)"; - try { - GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 35); - Assert.assertTrue(geofenceGeometry.containsPoint(56.83801, 60.59748)); - - ((GeofencePolyline) geofenceGeometry).setDistance(15); - Assert.assertTrue(!geofenceGeometry.containsPoint(56.83801, 60.59748)); - + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 35); + Assert.assertTrue(geofenceGeometry.containsPoint(56.83801, 60.59748)); + ((GeofencePolyline) geofenceGeometry).setDistance(15); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83801, 60.59748)); } catch (ParseException e){ Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); } } - @Test public void testContainsPolyline3Intervals() { String test = "LINESTRING (56.836 60.6126, 56.8393 60.6114, 56.83887 60.60811, 56.83782 60.5988)"; - try { - GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 15); - Assert.assertTrue(geofenceGeometry.containsPoint(56.83847, 60.60458)); - Assert.assertTrue(!geofenceGeometry.containsPoint(56.83764, 60.59725)); - Assert.assertTrue(!geofenceGeometry.containsPoint(56.83861, 60.60822)); - + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 15); + Assert.assertTrue(geofenceGeometry.containsPoint(56.83847, 60.60458)); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83764, 60.59725)); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83861, 60.60822)); } catch (ParseException e){ Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); } } - } diff --git a/test/org/traccar/helper/DistanceCalculatorTest.java b/test/org/traccar/helper/DistanceCalculatorTest.java index 2ce54c583..22e41c9a3 100644 --- a/test/org/traccar/helper/DistanceCalculatorTest.java +++ b/test/org/traccar/helper/DistanceCalculatorTest.java @@ -12,11 +12,11 @@ public class DistanceCalculatorTest { } @Test - public void testDistanceToInterval() { - Assert.assertEquals(DistanceCalculator.distanceToInterval( + public void testDistanceToLine() { + Assert.assertEquals(DistanceCalculator.distanceToLine( 56.83801, 60.59748, 56.83777, 60.59833, 56.83766, 60.5968), 33.0, 5.0); - Assert.assertEquals(DistanceCalculator.distanceToInterval( + Assert.assertEquals(DistanceCalculator.distanceToLine( 56.83753, 60.59508, 56.83777, 60.59833, 56.83766, 60.5968), 105.0, 5.0); } -- cgit v1.2.3 From f933147c0cba53df96448a64a2ba58dda4da1659 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Sun, 27 Nov 2016 16:01:24 +0700 Subject: - Remove try-catch frome tests - Fixed longitude normalizing for geofences near 180 longitude - Added more tests - Other fixes --- src/org/traccar/geofence/GeofenceGeometry.java | 7 ---- src/org/traccar/geofence/GeofencePolygon.java | 44 +++++++++++++++------ src/org/traccar/geofence/GeofencePolyline.java | 5 +-- test/org/traccar/geofence/GeofenceCircleTest.java | 14 +------ test/org/traccar/geofence/GeofencePolygonTest.java | 36 +++++++++++------ .../org/traccar/geofence/GeofencePolylineTest.java | 46 +++++++++++----------- 6 files changed, 82 insertions(+), 70 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/geofence/GeofenceGeometry.java b/src/org/traccar/geofence/GeofenceGeometry.java index d61e357ce..857ba3414 100644 --- a/src/org/traccar/geofence/GeofenceGeometry.java +++ b/src/org/traccar/geofence/GeofenceGeometry.java @@ -27,8 +27,6 @@ public abstract class GeofenceGeometry { public static class Coordinate { - public static final double DEGREE360 = 360; - private double lat; private double lon; @@ -44,11 +42,6 @@ public abstract class GeofenceGeometry { return lon; } - // Need not to confuse algorithm by the abrupt reset of longitude - public double getLon360() { - return lon + DEGREE360; - } - public void setLon(double lon) { this.lon = lon; } diff --git a/src/org/traccar/geofence/GeofencePolygon.java b/src/org/traccar/geofence/GeofencePolygon.java index 48326dc10..2048ba26d 100644 --- a/src/org/traccar/geofence/GeofencePolygon.java +++ b/src/org/traccar/geofence/GeofencePolygon.java @@ -32,10 +32,13 @@ public class GeofencePolygon extends GeofenceGeometry { private double[] constant; private double[] multiple; + private boolean needNormalize = false; + private void precalc() { if (coordinates == null) { return; } + int polyCorners = coordinates.size(); int i; int j = polyCorners - 1; @@ -50,38 +53,55 @@ public class GeofencePolygon extends GeofenceGeometry { constant = new double[polyCorners]; multiple = new double[polyCorners]; + boolean hasNegative = false; + boolean hasPositive = false; + for (i = 0; i < polyCorners; i++) { + if (coordinates.get(i).getLon() > 90) { + hasPositive = true; + } else if (coordinates.get(i).getLon() < -90) { + hasNegative = true; + } + } + needNormalize = hasPositive && hasNegative; for (i = 0; i < polyCorners; j = i++) { - if (coordinates.get(j).getLon360() == coordinates.get(i).getLon360()) { + if (normalizeLon(coordinates.get(j).getLon()) == normalizeLon(coordinates.get(i).getLon())) { constant[i] = coordinates.get(i).getLat(); multiple[i] = 0; } else { constant[i] = coordinates.get(i).getLat() - - (coordinates.get(i).getLon360() * coordinates.get(j).getLat()) - / (coordinates.get(j).getLon360() - coordinates.get(i).getLon360()) - + (coordinates.get(i).getLon360() * coordinates.get(i).getLat()) - / (coordinates.get(j).getLon360() - coordinates.get(i).getLon360()); + - (normalizeLon(coordinates.get(i).getLon()) * coordinates.get(j).getLat()) + / (normalizeLon(coordinates.get(j).getLon()) - normalizeLon(coordinates.get(i).getLon())) + + (normalizeLon(coordinates.get(i).getLon()) * coordinates.get(i).getLat()) + / (normalizeLon(coordinates.get(j).getLon()) - normalizeLon(coordinates.get(i).getLon())); multiple[i] = (coordinates.get(j).getLat() - coordinates.get(i).getLat()) - / (coordinates.get(j).getLon360() - coordinates.get(i).getLon360()); + / (normalizeLon(coordinates.get(j).getLon()) - normalizeLon(coordinates.get(i).getLon())); } } } + private double normalizeLon(double lon) { + if (needNormalize && lon < -90) { + return lon + 360; + } + return lon; + } + @Override public boolean containsPoint(double latitude, double longitude) { int polyCorners = coordinates.size(); int i; int j = polyCorners - 1; - double longitude360 = longitude + Coordinate.DEGREE360; + double longitudeNorm = normalizeLon(longitude); boolean oddNodes = false; for (i = 0; i < polyCorners; j = i++) { - if (coordinates.get(i).getLon360() < longitude360 - && coordinates.get(j).getLon360() >= longitude360 - || coordinates.get(j).getLon360() < longitude360 - && coordinates.get(i).getLon360() >= longitude360) { - oddNodes ^= longitude360 * multiple[i] + constant[i] < latitude; + if (normalizeLon(coordinates.get(i).getLon()) < longitudeNorm + && normalizeLon(coordinates.get(j).getLon()) >= longitudeNorm + || normalizeLon(coordinates.get(j).getLon()) < longitudeNorm + && normalizeLon(coordinates.get(i).getLon()) >= longitudeNorm) { + oddNodes ^= longitudeNorm * multiple[i] + constant[i] < latitude; } } return oddNodes; diff --git a/src/org/traccar/geofence/GeofencePolyline.java b/src/org/traccar/geofence/GeofencePolyline.java index cadc69da6..d84f512e3 100644 --- a/src/org/traccar/geofence/GeofencePolyline.java +++ b/src/org/traccar/geofence/GeofencePolyline.java @@ -36,11 +36,10 @@ public class GeofencePolyline extends GeofenceGeometry { @Override public boolean containsPoint(double latitude, double longitude) { - double longitude360 = longitude + Coordinate.DEGREE360; for (int i = 1; i < coordinates.size(); i++) { if (DistanceCalculator.distanceToLine( - latitude, longitude360, coordinates.get(i - 1).getLat(), coordinates.get(i - 1).getLon360(), - coordinates.get(i).getLat(), coordinates.get(i).getLon360()) <= distance) { + latitude, longitude, coordinates.get(i - 1).getLat(), coordinates.get(i - 1).getLon(), + coordinates.get(i).getLat(), coordinates.get(i).getLon()) <= distance) { return true; } } diff --git a/test/org/traccar/geofence/GeofenceCircleTest.java b/test/org/traccar/geofence/GeofenceCircleTest.java index 52c214b53..133ca1db8 100644 --- a/test/org/traccar/geofence/GeofenceCircleTest.java +++ b/test/org/traccar/geofence/GeofenceCircleTest.java @@ -8,29 +8,19 @@ import org.junit.Test; public class GeofenceCircleTest { @Test - public void testCircleWKT() { + public void testCircleWkt() throws ParseException { String test = "CIRCLE (55.75414 37.6204, 100)"; GeofenceGeometry geofenceGeometry = new GeofenceCircle(); - try { geofenceGeometry.fromWkt(test); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } Assert.assertEquals(geofenceGeometry.toWkt(), test); } @Test - public void testContainsCircle() { + public void testContainsCircle() throws ParseException { String test = "CIRCLE (55.75414 37.6204, 100)"; GeofenceGeometry geofenceGeometry = new GeofenceCircle(); - try { geofenceGeometry.fromWkt(test); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } - Assert.assertTrue(geofenceGeometry.containsPoint(55.75477, 37.62025)); - Assert.assertTrue(!geofenceGeometry.containsPoint(55.75545, 37.61921)); } } diff --git a/test/org/traccar/geofence/GeofencePolygonTest.java b/test/org/traccar/geofence/GeofencePolygonTest.java index e3d6aaa29..361e7b70f 100644 --- a/test/org/traccar/geofence/GeofencePolygonTest.java +++ b/test/org/traccar/geofence/GeofencePolygonTest.java @@ -8,31 +8,43 @@ import org.junit.Test; public class GeofencePolygonTest { @Test - public void testPolygonWKT() { + public void testPolygonWkt() throws ParseException { String test = "POLYGON ((55.75474 37.61823, 55.75513 37.61888, 55.7535 37.6222, 55.75315 37.62165))"; GeofenceGeometry geofenceGeometry = new GeofencePolygon(); - try { geofenceGeometry.fromWkt(test); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } Assert.assertEquals(geofenceGeometry.toWkt(), test); } @Test - public void testContainsPolygon() { + public void testContainsPolygon() throws ParseException { String test = "POLYGON ((55.75474 37.61823, 55.75513 37.61888, 55.7535 37.6222, 55.75315 37.62165))"; GeofenceGeometry geofenceGeometry = new GeofencePolygon(); - try { geofenceGeometry.fromWkt(test); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } - Assert.assertTrue(geofenceGeometry.containsPoint(55.75476, 37.61915)); - Assert.assertTrue(!geofenceGeometry.containsPoint(55.75545, 37.61921)); } + + @Test + public void testContainsPolygon180() throws ParseException { + String test = "POLYGON ((66.9494 179.838, 66.9508 -179.8496, 66.8406 -180.0014))"; + GeofenceGeometry geofenceGeometry = new GeofencePolygon(); + geofenceGeometry.fromWkt(test); + Assert.assertTrue(geofenceGeometry.containsPoint(66.9015, -180.0096)); + Assert.assertTrue(geofenceGeometry.containsPoint(66.9015, 179.991)); + Assert.assertTrue(!geofenceGeometry.containsPoint(66.8368, -179.8792)); + + } + + @Test + public void testContainsPolygon0() throws ParseException { + String test = "POLYGON ((51.1966 -0.6207, 51.1897 0.4147, 50.9377 0.5136, 50.8675 -0.6082))"; + GeofenceGeometry geofenceGeometry = new GeofencePolygon(); + geofenceGeometry.fromWkt(test); + Assert.assertTrue(geofenceGeometry.containsPoint(51.0466, -0.0165)); + Assert.assertTrue(geofenceGeometry.containsPoint(51.0466, 0.018)); + Assert.assertTrue(!geofenceGeometry.containsPoint(50.9477, 0.5836)); + + } } diff --git a/test/org/traccar/geofence/GeofencePolylineTest.java b/test/org/traccar/geofence/GeofencePolylineTest.java index e281c3dd6..71aeb4081 100644 --- a/test/org/traccar/geofence/GeofencePolylineTest.java +++ b/test/org/traccar/geofence/GeofencePolylineTest.java @@ -8,40 +8,38 @@ import org.junit.Test; public class GeofencePolylineTest { @Test - public void testPolylineWKT() { + public void testPolylineWkt() throws ParseException { String test = "LINESTRING (55.75474 37.61823, 55.75513 37.61888, 55.7535 37.6222, 55.75315 37.62165)"; GeofenceGeometry geofenceGeometry = new GeofencePolyline(); - try { - geofenceGeometry.fromWkt(test); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } + geofenceGeometry.fromWkt(test); Assert.assertEquals(geofenceGeometry.toWkt(), test); } @Test - public void testContainsPolyline1Interval() { + public void testContainsPolyline1Interval() throws ParseException { String test = "LINESTRING (56.83777 60.59833, 56.83766 60.5968)"; - try { - GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 35); - Assert.assertTrue(geofenceGeometry.containsPoint(56.83801, 60.59748)); - ((GeofencePolyline) geofenceGeometry).setDistance(15); - Assert.assertTrue(!geofenceGeometry.containsPoint(56.83801, 60.59748)); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 35); + Assert.assertTrue(geofenceGeometry.containsPoint(56.83801, 60.59748)); + ((GeofencePolyline) geofenceGeometry).setDistance(15); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83801, 60.59748)); } @Test - public void testContainsPolyline3Intervals() { + public void testContainsPolyline3Intervals() throws ParseException { String test = "LINESTRING (56.836 60.6126, 56.8393 60.6114, 56.83887 60.60811, 56.83782 60.5988)"; - try { - GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 15); - Assert.assertTrue(geofenceGeometry.containsPoint(56.83847, 60.60458)); - Assert.assertTrue(!geofenceGeometry.containsPoint(56.83764, 60.59725)); - Assert.assertTrue(!geofenceGeometry.containsPoint(56.83861, 60.60822)); - } catch (ParseException e){ - Assert.assertTrue("ParseExceprion: " + e.getMessage(), true); - } + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 15); + Assert.assertTrue(geofenceGeometry.containsPoint(56.83847, 60.60458)); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83764, 60.59725)); + Assert.assertTrue(!geofenceGeometry.containsPoint(56.83861, 60.60822)); + + } + + @Test + public void testContainsPolylineNear180() throws ParseException { + String test = "LINESTRING (66.9494 179.838, 66.9508 -179.8496)"; + GeofenceGeometry geofenceGeometry = new GeofencePolyline(test, 25); + Assert.assertTrue(geofenceGeometry.containsPoint(66.95, 180.0)); + Assert.assertTrue(!geofenceGeometry.containsPoint(66.96, 180.0)); + Assert.assertTrue(!geofenceGeometry.containsPoint(66.9509, -179.83)); } } -- cgit v1.2.3 From e24b3588647fc1597f31b9bcd26ed9b7378f9f5b Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Tue, 29 Nov 2016 02:52:19 +1300 Subject: Fix MiniFinder speed decoding --- src/org/traccar/protocol/MiniFinderProtocolDecoder.java | 5 +++-- test/org/traccar/protocol/MiniFinderProtocolDecoderTest.java | 3 +++ 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/MiniFinderProtocolDecoder.java b/src/org/traccar/protocol/MiniFinderProtocolDecoder.java index 33396cebb..1b49bccb0 100644 --- a/src/org/traccar/protocol/MiniFinderProtocolDecoder.java +++ b/src/org/traccar/protocol/MiniFinderProtocolDecoder.java @@ -1,5 +1,5 @@ /* - * Copyright 2014 - 2015 Anton Tananaev (anton@traccar.org) + * Copyright 2014 - 2016 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. @@ -22,6 +22,7 @@ import org.traccar.helper.BitUtil; import org.traccar.helper.DateBuilder; import org.traccar.helper.Parser; import org.traccar.helper.PatternBuilder; +import org.traccar.helper.UnitsConverter; import org.traccar.model.Position; import java.net.SocketAddress; @@ -86,7 +87,7 @@ public class MiniFinderProtocolDecoder extends BaseProtocolDecoder { position.setLatitude(parser.nextDouble()); position.setLongitude(parser.nextDouble()); - position.setSpeed(parser.nextDouble()); + position.setSpeed(UnitsConverter.knotsFromKph(parser.nextDouble())); position.setCourse(parser.nextDouble()); if (position.getCourse() > 360) { diff --git a/test/org/traccar/protocol/MiniFinderProtocolDecoderTest.java b/test/org/traccar/protocol/MiniFinderProtocolDecoderTest.java index 2b5bbd574..ccefee049 100644 --- a/test/org/traccar/protocol/MiniFinderProtocolDecoderTest.java +++ b/test/org/traccar/protocol/MiniFinderProtocolDecoderTest.java @@ -19,6 +19,9 @@ public class MiniFinderProtocolDecoderTest extends ProtocolTest { verifyNothing(decoder, text( "!1,860719027585011")); + verifyPosition(decoder, text( + "!D,28/11/16,00:04:09,42.926067,-85.747589,124,236,140001,179.8,60,11,16,0;")); + verifyPosition(decoder, text( "!C,30/1/16,1:1:6,31.259157,30.020910,0,0,100001,25.32,100,0.03,0.01,0")); -- cgit v1.2.3 From 3593df6595cb1af169098ea2e7594fc3480648d0 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 30 Nov 2016 03:09:20 +1300 Subject: Implement GPS103 custom command --- src/org/traccar/protocol/Gps103Protocol.java | 1 + src/org/traccar/protocol/Gps103ProtocolEncoder.java | 2 ++ test/org/traccar/protocol/Gps103ProtocolEncoderTest.java | 16 +++++++++++++++- 3 files changed, 18 insertions(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Gps103Protocol.java b/src/org/traccar/protocol/Gps103Protocol.java index e3beb34e5..a4d563bfc 100644 --- a/src/org/traccar/protocol/Gps103Protocol.java +++ b/src/org/traccar/protocol/Gps103Protocol.java @@ -32,6 +32,7 @@ public class Gps103Protocol extends BaseProtocol { public Gps103Protocol() { super("gps103"); setSupportedCommands( + Command.TYPE_CUSTOM, Command.TYPE_POSITION_SINGLE, Command.TYPE_POSITION_PERIODIC, Command.TYPE_POSITION_STOP, diff --git a/src/org/traccar/protocol/Gps103ProtocolEncoder.java b/src/org/traccar/protocol/Gps103ProtocolEncoder.java index afe87cf8c..36801b401 100644 --- a/src/org/traccar/protocol/Gps103ProtocolEncoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolEncoder.java @@ -42,6 +42,8 @@ public class Gps103ProtocolEncoder extends StringProtocolEncoder implements Stri protected Object encodeCommand(Command command) { switch (command.getType()) { + case Command.TYPE_CUSTOM: + return formatCommand(command, "**,imei:{%s},{%s}", Command.KEY_UNIQUE_ID, Command.KEY_DATA); case Command.TYPE_POSITION_STOP: return formatCommand(command, "**,imei:{%s},A", Command.KEY_UNIQUE_ID); case Command.TYPE_POSITION_SINGLE: diff --git a/test/org/traccar/protocol/Gps103ProtocolEncoderTest.java b/test/org/traccar/protocol/Gps103ProtocolEncoderTest.java index f8652bc9a..54c520c21 100644 --- a/test/org/traccar/protocol/Gps103ProtocolEncoderTest.java +++ b/test/org/traccar/protocol/Gps103ProtocolEncoderTest.java @@ -8,7 +8,7 @@ import org.traccar.model.Command; public class Gps103ProtocolEncoderTest extends ProtocolTest { @Test - public void testEncode() throws Exception { + public void testEncodePositionPeriodic() throws Exception { Gps103ProtocolEncoder encoder = new Gps103ProtocolEncoder(); @@ -21,4 +21,18 @@ public class Gps103ProtocolEncoderTest extends ProtocolTest { } + @Test + public void testEncodeCustom() throws Exception { + + Gps103ProtocolEncoder encoder = new Gps103ProtocolEncoder(); + + Command command = new Command(); + command.setDeviceId(1); + command.setType(Command.TYPE_CUSTOM); + command.set(Command.KEY_DATA, "H,080"); + + Assert.assertEquals("**,imei:123456789012345,H,080", encoder.encodeCommand(command)); + + } + } -- cgit v1.2.3 From 137adb0507cacb77c7180d06526f5258f857de57 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Wed, 30 Nov 2016 05:32:17 +1300 Subject: Implement missing MiniFinder alarms --- src/org/traccar/protocol/MiniFinderProtocolDecoder.java | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/protocol/MiniFinderProtocolDecoder.java b/src/org/traccar/protocol/MiniFinderProtocolDecoder.java index 1b49bccb0..da03dc8bf 100644 --- a/src/org/traccar/protocol/MiniFinderProtocolDecoder.java +++ b/src/org/traccar/protocol/MiniFinderProtocolDecoder.java @@ -112,6 +112,9 @@ public class MiniFinderProtocolDecoder extends BaseProtocolDecoder { if (BitUtil.check(flags, 8)) { position.set(Position.KEY_ALARM, Position.ALARM_FALL_DOWN); } + if (BitUtil.check(flags, 9) || BitUtil.check(flags, 10) || BitUtil.check(flags, 11)) { + position.set(Position.KEY_ALARM, Position.ALARM_GEOFENCE); + } if (BitUtil.check(flags, 12)) { position.set(Position.KEY_ALARM, Position.ALARM_LOW_BATTERY); } @@ -120,6 +123,7 @@ public class MiniFinderProtocolDecoder extends BaseProtocolDecoder { } position.set(Position.KEY_GSM, BitUtil.between(flags, 16, 20)); + position.set(Position.KEY_CHARGE, BitUtil.check(flags, 22)); position.setAltitude(parser.nextDouble()); -- cgit v1.2.3 From d5ec75ecd3697e37782c9dd53998c889d5b9ef4d Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 30 Nov 2016 09:58:48 +0500 Subject: Add API to get positions by Id --- setup/default.xml | 4 ++++ src/org/traccar/api/resource/PositionResource.java | 16 +++++++++++++--- src/org/traccar/database/DataManager.java | 6 ++++++ 3 files changed, 23 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/setup/default.xml b/setup/default.xml index 7df352c4d..5c6f8fe90 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -171,6 +171,10 @@ SELECT * FROM positions WHERE deviceId = :deviceId AND fixTime BETWEEN :from AND :to ORDER BY fixTime + + SELECT * FROM positions WHERE id = :id + + INSERT INTO positions (deviceId, protocol, serverTime, deviceTime, fixTime, valid, latitude, longitude, altitude, speed, course, address, attributes) VALUES (:deviceId, :protocol, :now, :deviceTime, :fixTime, :valid, :latitude, :longitude, :altitude, :speed, :course, :address, :attributes) diff --git a/src/org/traccar/api/resource/PositionResource.java b/src/org/traccar/api/resource/PositionResource.java index c1cfc0b5c..4db73cfd2 100644 --- a/src/org/traccar/api/resource/PositionResource.java +++ b/src/org/traccar/api/resource/PositionResource.java @@ -32,7 +32,9 @@ import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.sql.SQLException; +import java.util.ArrayList; import java.util.Collection; +import java.util.List; @Path("positions") @Consumes(MediaType.APPLICATION_JSON) @@ -46,9 +48,18 @@ public class PositionResource extends BaseResource { @GET @Produces(MediaType.APPLICATION_JSON) public Collection getJson( - @QueryParam("deviceId") long deviceId, @QueryParam("from") String from, @QueryParam("to") String to) + @QueryParam("deviceId") long deviceId, @QueryParam("positionId") List positionIds, + @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { - if (deviceId == 0) { + if (!positionIds.isEmpty()) { + ArrayList positions = new ArrayList<>(); + for (Long positionId : positionIds) { + Position position = Context.getDataManager().getPosition(positionId); + Context.getPermissionsManager().checkDevice(getUserId(), position.getDeviceId()); + positions.add(position); + } + return positions; + } else if (deviceId == 0) { return Context.getDeviceManager().getInitialState(getUserId()); } else { Context.getPermissionsManager().checkDevice(getUserId(), deviceId); @@ -81,5 +92,4 @@ public class PositionResource extends BaseResource { deviceId, DateUtil.parseDate(from), DateUtil.parseDate(to))); return Response.ok(gpx.build()).header(HttpHeaders.CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE_GPX).build(); } - } diff --git a/src/org/traccar/database/DataManager.java b/src/org/traccar/database/DataManager.java index afa8b1677..8be53ad7b 100644 --- a/src/org/traccar/database/DataManager.java +++ b/src/org/traccar/database/DataManager.java @@ -280,6 +280,12 @@ public class DataManager { .executeQuery(Position.class); } + public Position getPosition(long positionId) throws SQLException { + return QueryBuilder.create(dataSource, getQuery("database.selectPosition")) + .setLong("id", positionId) + .executeQuerySingle(Position.class); + } + public void addPosition(Position position) throws SQLException { position.setId(QueryBuilder.create(dataSource, getQuery("database.insertPosition"), true) .setDate("now", new Date()) -- cgit v1.2.3 From 49bca7c5a966d93b0366fc4b907a6a37fd8db1b6 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 30 Nov 2016 11:04:52 +0500 Subject: Use "id" parameter instead of "positionId" --- src/org/traccar/api/resource/PositionResource.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/PositionResource.java b/src/org/traccar/api/resource/PositionResource.java index 4db73cfd2..84f406bee 100644 --- a/src/org/traccar/api/resource/PositionResource.java +++ b/src/org/traccar/api/resource/PositionResource.java @@ -48,7 +48,7 @@ public class PositionResource extends BaseResource { @GET @Produces(MediaType.APPLICATION_JSON) public Collection getJson( - @QueryParam("deviceId") long deviceId, @QueryParam("positionId") List positionIds, + @QueryParam("deviceId") long deviceId, @QueryParam("id") List positionIds, @QueryParam("from") String from, @QueryParam("to") String to) throws SQLException { if (!positionIds.isEmpty()) { -- cgit v1.2.3 From b6d9d992b3b5eaaa5c7fec33fd63e28480f05d97 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 30 Nov 2016 14:18:26 +0500 Subject: Implement API to test mail --- .../traccar/api/resource/NotificationResource.java | 10 ++++ src/org/traccar/notification/NotificationMail.java | 63 +++++++++++----------- 2 files changed, 41 insertions(+), 32 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/NotificationResource.java b/src/org/traccar/api/resource/NotificationResource.java index c43cca122..e89887e92 100644 --- a/src/org/traccar/api/resource/NotificationResource.java +++ b/src/org/traccar/api/resource/NotificationResource.java @@ -18,6 +18,7 @@ package org.traccar.api.resource; import java.sql.SQLException; import java.util.Collection; +import javax.mail.MessagingException; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.POST; @@ -29,7 +30,9 @@ import javax.ws.rs.core.Response; import org.traccar.Context; import org.traccar.api.BaseResource; +import org.traccar.model.Event; import org.traccar.model.Notification; +import org.traccar.notification.NotificationMail; @Path("users/notifications") @Produces(MediaType.APPLICATION_JSON) @@ -57,4 +60,11 @@ public class NotificationResource extends BaseResource { return Response.ok(entity).build(); } + @Path("testmail") + @GET + public Response testMail() throws MessagingException { + NotificationMail.sendMailSync(getUserId(), new Event("unknown", 0), null); + return Response.noContent().build(); + } + } diff --git a/src/org/traccar/notification/NotificationMail.java b/src/org/traccar/notification/NotificationMail.java index c7c1d689c..17e4d6be4 100644 --- a/src/org/traccar/notification/NotificationMail.java +++ b/src/org/traccar/notification/NotificationMail.java @@ -79,52 +79,51 @@ public final class NotificationMail { return properties; } - private static void sendMailSync(long userId, Event event, Position position) { - try { - User user = Context.getPermissionsManager().getUser(userId); + public static void sendMailSync(long userId, Event event, Position position) throws MessagingException { + User user = Context.getPermissionsManager().getUser(userId); - Properties properties = getProperties(new PropertiesProvider(Context.getConfig())); + Properties properties = getProperties(new PropertiesProvider(Context.getConfig())); + if (!properties.containsKey("mail.smtp.host")) { + properties = getProperties(new PropertiesProvider(user)); if (!properties.containsKey("mail.smtp.host")) { - properties = getProperties(new PropertiesProvider(user)); - if (!properties.containsKey("mail.smtp.host")) { - Log.warning("No SMTP configuration found"); - return; - } + Log.warning("No SMTP configuration found"); + return; } + } - Session session = Session.getInstance(properties); + Session session = Session.getInstance(properties); - MimeMessage message = new MimeMessage(session); + MimeMessage message = new MimeMessage(session); - String from = properties.getProperty("mail.smtp.from"); - if (from != null) { - message.setFrom(new InternetAddress(from)); - } + String from = properties.getProperty("mail.smtp.from"); + if (from != null) { + message.setFrom(new InternetAddress(from)); + } - message.addRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); - message.setSubject(NotificationFormatter.formatTitle(userId, event, position)); - message.setText(NotificationFormatter.formatMessage(userId, event, position)); - - Transport transport = session.getTransport(); - try { - transport.connect( - properties.getProperty("mail.smtp.host"), - properties.getProperty("mail.smtp.username"), - properties.getProperty("mail.smtp.password")); - transport.sendMessage(message, message.getAllRecipients()); - } finally { - transport.close(); - } + message.addRecipient(Message.RecipientType.TO, new InternetAddress(user.getEmail())); + message.setSubject(NotificationFormatter.formatTitle(userId, event, position)); + message.setText(NotificationFormatter.formatMessage(userId, event, position)); - } catch (MessagingException error) { - Log.warning(error); + Transport transport = session.getTransport(); + try { + transport.connect( + properties.getProperty("mail.smtp.host"), + properties.getProperty("mail.smtp.username"), + properties.getProperty("mail.smtp.password")); + transport.sendMessage(message, message.getAllRecipients()); + } finally { + transport.close(); } } public static void sendMailAsync(final long userId, final Event event, final Position position) { new Thread(new Runnable() { public void run() { - sendMailSync(userId, event, position); + try { + sendMailSync(userId, event, position); + } catch (MessagingException error) { + Log.warning(error); + } } }).start(); } -- cgit v1.2.3 From c2d479e2acfa4f89b01d80ca902938dc2e37c1b6 Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Wed, 30 Nov 2016 15:04:55 +0500 Subject: Rename to test and use POST --- src/org/traccar/api/resource/NotificationResource.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/api/resource/NotificationResource.java b/src/org/traccar/api/resource/NotificationResource.java index e89887e92..6c9725f37 100644 --- a/src/org/traccar/api/resource/NotificationResource.java +++ b/src/org/traccar/api/resource/NotificationResource.java @@ -60,10 +60,10 @@ public class NotificationResource extends BaseResource { return Response.ok(entity).build(); } - @Path("testmail") - @GET + @Path("test") + @POST public Response testMail() throws MessagingException { - NotificationMail.sendMailSync(getUserId(), new Event("unknown", 0), null); + NotificationMail.sendMailSync(getUserId(), new Event("test", 0), null); return Response.noContent().build(); } -- cgit v1.2.3 From 477cd54b15fe35c45d006639eeeb485d6c29d79d Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 1 Dec 2016 05:35:19 +1300 Subject: Implement trips unit test --- src/org/traccar/reports/Trips.java | 39 +++++++++++++------ test/org/traccar/reports/TripsTest.java | 69 +++++++++++++++++++++++++++++++++ 2 files changed, 97 insertions(+), 11 deletions(-) create mode 100644 test/org/traccar/reports/TripsTest.java (limited to 'src/org') diff --git a/src/org/traccar/reports/Trips.java b/src/org/traccar/reports/Trips.java index d4e25f5e5..a52d48f16 100644 --- a/src/org/traccar/reports/Trips.java +++ b/src/org/traccar/reports/Trips.java @@ -46,7 +46,8 @@ public final class Trips { private Trips() { } - private static TripReport calculateTrip(ArrayList positions, int startIndex, int endIndex) { + private static TripReport calculateTrip( + ArrayList positions, int startIndex, int endIndex, boolean ignoreOdometer) { Position startTrip = positions.get(startIndex); Position endTrip = positions.get(endIndex); @@ -79,8 +80,6 @@ public final class Trips { trip.setEndTime(endTrip.getFixTime()); trip.setEndAddress(endTrip.getAddress()); - boolean ignoreOdometer = Context.getDeviceManager() - .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, true); trip.setDistance(ReportUtils.calculateDistance(startTrip, endTrip, !ignoreOdometer)); trip.setDuration(tripDuration); trip.setAverageSpeed(speedSum / (endIndex - startIndex)); @@ -90,15 +89,14 @@ public final class Trips { return trip; } - private static Collection detectTrips(long deviceId, Date from, Date to) throws SQLException { - double speedThreshold = Context.getConfig().getDouble("event.motion.speedThreshold", 0.01); - long minimalTripDuration = Context.getConfig().getLong("report.trip.minimalTripDuration", 300) * 1000; - double minimalTripDistance = Context.getConfig().getLong("report.trip.minimalTripDistance", 500); - long minimalParkingDuration = Context.getConfig().getLong("report.trip.minimalParkingDuration", 300) * 1000; - boolean greedyParking = Context.getConfig().getBoolean("report.trip.greedyParking"); + protected static Collection detectTrips( + double speedThreshold, double minimalTripDistance, + long minimalTripDuration, long minimalParkingDuration, boolean greedyParking, boolean ignoreOdometer, + Collection positionCollection) { + Collection result = new ArrayList<>(); - ArrayList positions = new ArrayList<>(Context.getDataManager().getPositions(deviceId, from, to)); + ArrayList positions = new ArrayList<>(positionCollection); if (positions != null && !positions.isEmpty()) { int previousStartParkingIndex = 0; int startParkingIndex = -1; @@ -150,7 +148,8 @@ public final class Trips { if ((parkingDuration >= minimalParkingDuration || isLast) && previousEndParkingIndex < startParkingIndex) { if (!tripFiltered) { - result.add(calculateTrip(positions, previousEndParkingIndex, startParkingIndex)); + result.add(calculateTrip( + positions, previousEndParkingIndex, startParkingIndex, ignoreOdometer)); } previousEndParkingIndex = endParkingIndex; skipped = false; @@ -161,9 +160,26 @@ public final class Trips { } } } + return result; } + private static Collection detectTrips(long deviceId, Date from, Date to) throws SQLException { + double speedThreshold = Context.getConfig().getDouble("event.motion.speedThreshold", 0.01); + long minimalTripDuration = Context.getConfig().getLong("report.trip.minimalTripDuration", 300) * 1000; + double minimalTripDistance = Context.getConfig().getLong("report.trip.minimalTripDistance", 500); + long minimalParkingDuration = Context.getConfig().getLong("report.trip.minimalParkingDuration", 300) * 1000; + boolean greedyParking = Context.getConfig().getBoolean("report.trip.greedyParking"); + + boolean ignoreOdometer = Context.getDeviceManager() + .lookupAttributeBoolean(deviceId, "report.ignoreOdometer", false, true); + + return detectTrips( + speedThreshold, minimalTripDistance, minimalTripDuration, + minimalParkingDuration, greedyParking, ignoreOdometer, + Context.getDataManager().getPositions(deviceId, from, to)); + } + public static Collection getObjects(long userId, Collection deviceIds, Collection groupIds, Date from, Date to) throws SQLException { ArrayList result = new ArrayList<>(); @@ -217,4 +233,5 @@ public final class Trips { transformer.write(); } } + } diff --git a/test/org/traccar/reports/TripsTest.java b/test/org/traccar/reports/TripsTest.java new file mode 100644 index 000000000..7b860b63d --- /dev/null +++ b/test/org/traccar/reports/TripsTest.java @@ -0,0 +1,69 @@ +package org.traccar.reports; + +import org.junit.Test; +import org.traccar.model.Position; +import org.traccar.reports.model.TripReport; + +import java.text.DateFormat; +import java.text.ParseException; +import java.text.SimpleDateFormat; +import java.util.Arrays; +import java.util.Collection; +import java.util.Date; +import java.util.TimeZone; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +public class TripsTest { + + private Date date(String time) throws ParseException { + DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSS"); + dateFormat.setTimeZone(TimeZone.getTimeZone("UTC")); + return dateFormat.parse(time); + } + + private Position position(String time, double speed, double totalDistance) throws ParseException { + + Position position = new Position(); + + if (time != null) { + position.setTime(date(time)); + } + position.setValid(true); + position.setSpeed(speed); + position.set(Position.KEY_TOTAL_DISTANCE, totalDistance); + + return position; + } + + @Test + public void testDetectTripsSimple() throws ParseException { + + Collection data = Arrays.asList( + position("2016-01-01 00:00:00.000", 0, 0), + position("2016-01-01 00:01:00.000", 0, 0), + position("2016-01-01 00:02:00.000", 10, 0), + position("2016-01-01 00:03:00.000", 10, 1000), + position("2016-01-01 00:04:00.000", 10, 2000), + position("2016-01-01 00:05:00.000", 0, 3000), + position("2016-01-01 00:06:00.000", 0, 3000)); + + Collection result = Trips.detectTrips(0.01, 500, 300000, 300000, false, false, data); + + assertNotNull(result); + assertFalse(result.isEmpty()); + + TripReport item = result.iterator().next(); + + assertEquals(date("2016-01-01 00:02:00.000"), item.getStartTime()); + assertEquals(date("2016-01-01 00:05:00.000"), item.getEndTime()); + assertEquals(180000, item.getDuration()); + assertEquals(10, item.getAverageSpeed(), 0.01); + assertEquals(10, item.getMaxSpeed(), 0.01); + assertEquals(3000, item.getDistance(), 0.01); + + } + +} -- cgit v1.2.3 From 6f6d17da2c8de35b7f31d29a6d902536497550a4 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 1 Dec 2016 06:30:22 +1300 Subject: Simplify CalAmp id decoding --- src/org/traccar/protocol/CalAmpProtocolDecoder.java | 15 ++------------- 1 file changed, 2 insertions(+), 13 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/CalAmpProtocolDecoder.java b/src/org/traccar/protocol/CalAmpProtocolDecoder.java index 510684411..ee4cc65b4 100644 --- a/src/org/traccar/protocol/CalAmpProtocolDecoder.java +++ b/src/org/traccar/protocol/CalAmpProtocolDecoder.java @@ -149,19 +149,8 @@ public class CalAmpProtocolDecoder extends BaseProtocolDecoder { int content = buf.readUnsignedByte(); if (BitUtil.check(content, 0)) { - - int length = buf.readUnsignedByte(); - long id = 0; - for (int i = 0; i < length; i++) { - int b = buf.readUnsignedByte(); - id = id * 10 + (b >> 4); - if ((b & 0xf) != 0xf) { - id = id * 10 + (b & 0xf); - } - } - - getDeviceSession(channel, remoteAddress, String.valueOf(id)); - + String id = ChannelBuffers.hexDump(buf.readBytes(buf.readUnsignedByte())); + getDeviceSession(channel, remoteAddress, id); } if (BitUtil.check(content, 1)) { -- cgit v1.2.3 From 09a1cbffdf19154a3fc990f0d0562677f29e39d8 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Thu, 1 Dec 2016 07:53:49 +1300 Subject: Implement G737IC extra data --- src/org/traccar/model/Position.java | 1 + .../traccar/protocol/GoSafeProtocolDecoder.java | 34 ++++++++++++++++------ .../protocol/GoSafeProtocolDecoderTest.java | 3 ++ 3 files changed, 29 insertions(+), 9 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/model/Position.java b/src/org/traccar/model/Position.java index b2965c89c..8ca2588e2 100644 --- a/src/org/traccar/model/Position.java +++ b/src/org/traccar/model/Position.java @@ -59,6 +59,7 @@ public class Position extends Message { public static final String KEY_MOTION = "motion"; public static final String KEY_ARMED = "armed"; public static final String KEY_ACCURACY = "accuracy"; + public static final String KEY_GEOFENCE = "geofence"; public static final String KEY_DTCS = "dtcs"; public static final String KEY_OBD_SPEED = "obdSpeed"; diff --git a/src/org/traccar/protocol/GoSafeProtocolDecoder.java b/src/org/traccar/protocol/GoSafeProtocolDecoder.java index a258e922c..1ae527160 100644 --- a/src/org/traccar/protocol/GoSafeProtocolDecoder.java +++ b/src/org/traccar/protocol/GoSafeProtocolDecoder.java @@ -90,13 +90,14 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { .groupBegin() .text("DTT:") .number("(x+);") // status - .expression("[^;]*;") - .number("x+;") // geo-fence 0-119 - .number("x+;") // geo-fence 120-155 - .number("x+,?") // event status + .number("(x+)?;") // io + .number("(x+);") // geo-fence 0-119 + .number("(x+);") // geo-fence 120-155 + .number("(x+)") // event status + .number("(?:;(x+))?,?") // packet type .groupEnd("?") .groupBegin() - .text("ETD:").expression("[^,]*,?") + .text("ETD:").expression("([^,]+),?") .groupEnd("?") .groupBegin() .text("OBD:") @@ -108,6 +109,9 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { .groupBegin() .text("TRU:").expression("[^,]*,?") .groupEnd("?") + .groupBegin() + .text("TAG:").expression("([^,]+),?") + .groupEnd("?") .compile(); private static final Pattern PATTERN_OLD = new PatternBuilder() @@ -122,7 +126,7 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { .number("([EW])(d+.d+);") // longitude .number("(d+)?;") // speed .number("(d+);") // course - .number("(d+.?d*)").optional() // hdop + .number("(d+.?d*)").optional() // hdop .number("(dd)(dd)(dd)") // date .any() .compile(); @@ -162,16 +166,28 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_POWER, parser.next()); position.set(Position.KEY_BATTERY, parser.next()); - String status = parser.next(); - if (status != null) { - position.set(Position.KEY_IGNITION, BitUtil.check(Integer.parseInt(status, 16), 13)); + if (parser.hasNext(6)) { + long status = parser.nextLong(16); + position.set(Position.KEY_IGNITION, BitUtil.check(status, 13)); position.set(Position.KEY_STATUS, status); + position.set("ioStatus", parser.next()); + position.set(Position.KEY_GEOFENCE, parser.next() + parser.next()); + position.set("eventStatus", parser.next()); + position.set("packetType", parser.next()); + } + + if (parser.hasNext()) { + position.set("eventData", parser.next()); } if (parser.hasNext()) { position.set("obd", parser.next()); } + if (parser.hasNext()) { + position.set("tagData", parser.next()); + } + return position; } diff --git a/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java b/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java index fb0dec4fb..35cf5fcb2 100644 --- a/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java +++ b/test/org/traccar/protocol/GoSafeProtocolDecoderTest.java @@ -10,6 +10,9 @@ public class GoSafeProtocolDecoderTest extends ProtocolTest { GoSafeProtocolDecoder decoder = new GoSafeProtocolDecoder(new GoSafeProtocol()); + verifyPositions(decoder, text( + "*GS26,356449061139936,022918011216,,SYS:G737IC;V1.13;V1.0.5,GPS:A;9;N42.651728;W70.623520;0;0;48;1.50,ADC:4.08,DTT:3900C;;0;0;0;1,#")); + verifyNotNull(decoder, text( "*GS56,356449063230915,052339180916,,SYS:G7S;V1.08;V1.2,GPS:V;4;N24.730006;E46.637816;14;0;630,GSM:;;420;4;5655;507A;-70,COT:75242;2-8-17,ADC:13.22;0.08,DTT:23004;;0;0;0;1#")); -- cgit v1.2.3 From f63658504320cb96501cf83d698ba932840e315b Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 2 Dec 2016 03:28:29 +1300 Subject: Decode H02 ignition correctly --- src/org/traccar/protocol/H02ProtocolDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index 45a978571..2b7d00969 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -75,7 +75,7 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { position.set(Position.KEY_ALARM, Position.ALARM_OVERSPEED); } } - position.set(Position.KEY_IGNITION, BitUtil.check(status, 10)); + position.set(Position.KEY_IGNITION, !BitUtil.check(status, 10)); position.set(Position.KEY_STATUS, status); } -- cgit v1.2.3 From 6782f2ee534494aa24dc73299f71e4227077e037 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 2 Dec 2016 03:43:46 +1300 Subject: Decode H02 cell info --- src/org/traccar/protocol/H02ProtocolDecoder.java | 19 +++++++++++++++++++ test/org/traccar/protocol/H02ProtocolDecoderTest.java | 3 +++ 2 files changed, 22 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/protocol/H02ProtocolDecoder.java b/src/org/traccar/protocol/H02ProtocolDecoder.java index 2b7d00969..2c7852d16 100644 --- a/src/org/traccar/protocol/H02ProtocolDecoder.java +++ b/src/org/traccar/protocol/H02ProtocolDecoder.java @@ -167,6 +167,12 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { .number("(?:(dd)(dd)(dd))?,") // date (ddmmyy) .any() .number("(x{8})") // status + .groupBegin() + .number(", *(x+),") // mcc + .number(" *(x+),") // mnc + .number(" *(x+),") // lac + .number(" *(x+)") // cid + .groupEnd("?") .any() .compile(); @@ -237,6 +243,19 @@ public class H02ProtocolDecoder extends BaseProtocolDecoder { processStatus(position, parser.nextLong(16)); + if (parser.hasNext(4)) { + int mcc = parser.nextInt(16); + int mnc = parser.nextInt(16); + int lac = parser.nextInt(16); + int cid = parser.nextInt(16); + if (mcc != 0 && mnc != 0 && lac != 0 && cid != 0) { + position.set(Position.KEY_MCC, mcc); + position.set(Position.KEY_MNC, mnc); + position.set(Position.KEY_LAC, lac); + position.set(Position.KEY_CID, cid); + } + } + return position; } diff --git a/test/org/traccar/protocol/H02ProtocolDecoderTest.java b/test/org/traccar/protocol/H02ProtocolDecoderTest.java index b2e336076..d1b2d3198 100644 --- a/test/org/traccar/protocol/H02ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/H02ProtocolDecoderTest.java @@ -10,6 +10,9 @@ public class H02ProtocolDecoderTest extends ProtocolTest { H02ProtocolDecoder decoder = new H02ProtocolDecoder(new H02Protocol()); + verifyPosition(decoder, buffer( + "*HQ,353588020068342,V1,084436,A,3257.01525,N,00655.03865,W,57.78,40,011216,FFFBFFFF,25c,a, 154,b04c#")); + verifyNothing(decoder, buffer( "*HQ,356803210091319,BS,,2d4,a,1b63,1969,26,1b63,10b2,31,0,0,25,,ffffffff,60#")); -- cgit v1.2.3 From b39ade422f42d5423db203dab87886d3f8f63dd1 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Fri, 2 Dec 2016 05:06:11 +1300 Subject: Add GPS103 power cut alarm --- src/org/traccar/protocol/Gps103ProtocolDecoder.java | 2 ++ test/org/traccar/protocol/Gps103ProtocolDecoderTest.java | 3 +++ 2 files changed, 5 insertions(+) (limited to 'src/org') diff --git a/src/org/traccar/protocol/Gps103ProtocolDecoder.java b/src/org/traccar/protocol/Gps103ProtocolDecoder.java index 57dc784d3..d929ae917 100644 --- a/src/org/traccar/protocol/Gps103ProtocolDecoder.java +++ b/src/org/traccar/protocol/Gps103ProtocolDecoder.java @@ -119,6 +119,8 @@ public class Gps103ProtocolDecoder extends BaseProtocolDecoder { return Position.ALARM_POWER_OFF; case "door alarm": return Position.ALARM_DOOR; + case "ac alarm": + return Position.ALARM_POWER_CUT; default: return null; } diff --git a/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java b/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java index 2640051fb..93817b575 100644 --- a/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java +++ b/test/org/traccar/protocol/Gps103ProtocolDecoderTest.java @@ -10,6 +10,9 @@ public class Gps103ProtocolDecoderTest extends ProtocolTest { Gps103ProtocolDecoder decoder = new Gps103ProtocolDecoder(new Gps103Protocol()); + verifyAttributes(decoder, text( + "imei:862106021237716,ac alarm,1611291645,,F,204457.000,A,1010.2783,N,06441.0274,W,0.00,,;")); + verifyAttributes(decoder, text( "imei:359710049057798,OBD,161003192752,1785,,,0,54,96.47%,75,20.00%,1892,0.00,P0134,P0571,,;")); -- cgit v1.2.3 From c9232000e595b0addd4bf7bbaf7a90e088c94624 Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Sun, 4 Dec 2016 10:49:01 +1300 Subject: Decode GoSafe speed correctly --- src/org/traccar/protocol/GoSafeProtocolDecoder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/GoSafeProtocolDecoder.java b/src/org/traccar/protocol/GoSafeProtocolDecoder.java index 1ae527160..a7f1024c6 100644 --- a/src/org/traccar/protocol/GoSafeProtocolDecoder.java +++ b/src/org/traccar/protocol/GoSafeProtocolDecoder.java @@ -227,7 +227,7 @@ public class GoSafeProtocolDecoder extends BaseProtocolDecoder { position.setValid(parser.next().equals("A")); position.setLatitude(parser.nextCoordinate(Parser.CoordinateFormat.HEM_DEG)); position.setLongitude(parser.nextCoordinate(Parser.CoordinateFormat.HEM_DEG)); - position.setSpeed(parser.nextDouble()); + position.setSpeed(UnitsConverter.knotsFromKph(parser.nextDouble())); position.setCourse(parser.nextDouble()); position.set(Position.KEY_HDOP, parser.next()); -- cgit v1.2.3 From 6bfda86daaef7ce7b591f2fe1b33ab3b1d5ca2cd Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Sun, 4 Dec 2016 17:33:17 +0700 Subject: Use model instead of attributes to store Notification options --- schema/changelog-3.9.xml | 37 ++++++++++++++++++++++ schema/changelog-master.xml | 1 + setup/default.xml | 6 ++-- .../traccar/api/resource/NotificationResource.java | 2 +- src/org/traccar/database/NotificationManager.java | 27 +++++++++++++--- src/org/traccar/model/Notification.java | 21 ++++++++++++ 6 files changed, 86 insertions(+), 8 deletions(-) create mode 100644 schema/changelog-3.9.xml (limited to 'src/org') diff --git a/schema/changelog-3.9.xml b/schema/changelog-3.9.xml new file mode 100644 index 000000000..93fa6123b --- /dev/null +++ b/schema/changelog-3.9.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + attributes = '{"web":"true"}' + + + + + attributes = '{"mail":"true"}' + + + + + + attributes = '{"web":"true","mail":"true"}' + + + + + + + + diff --git a/schema/changelog-master.xml b/schema/changelog-master.xml index 341714ca8..448015568 100644 --- a/schema/changelog-master.xml +++ b/schema/changelog-master.xml @@ -10,4 +10,5 @@ + diff --git a/setup/default.xml b/setup/default.xml index 5c6f8fe90..ad23d7bd3 100644 --- a/setup/default.xml +++ b/setup/default.xml @@ -264,14 +264,16 @@ - INSERT INTO notifications (userId, type, attributes) - VALUES (:userId, :type, :attributes) + INSERT INTO notifications (userId, type, web, mail, attributes) + VALUES (:userId, :type, :web, :mail, :attributes) UPDATE notifications SET userId = :userId, type = :type, + web = :web, + mail = :mail, attributes = :attributes WHERE id = :id diff --git a/src/org/traccar/api/resource/NotificationResource.java b/src/org/traccar/api/resource/NotificationResource.java index 6c9725f37..03f7e4ba0 100644 --- a/src/org/traccar/api/resource/NotificationResource.java +++ b/src/org/traccar/api/resource/NotificationResource.java @@ -49,7 +49,7 @@ public class NotificationResource extends BaseResource { userId = getUserId(); } Context.getPermissionsManager().checkUser(getUserId(), userId); - return Context.getNotificationManager().getUserNotifications(userId); + return Context.getNotificationManager().getAllUserNotifications(userId); } @POST diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index 7e79e289f..caf1091cc 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -59,10 +59,10 @@ public class NotificationManager { && Context.getGeofenceManager().checkGeofence(userId, event.getGeofenceId())) { Notification notification = getUserNotificationByType(userId, event.getType()); if (notification != null) { - if (notification.getAttributes().containsKey("web")) { + if (notification.getWeb()) { Context.getConnectionManager().updateEvent(userId, event, position); } - if (notification.getAttributes().containsKey("mail")) { + if (notification.getMail()) { NotificationMail.sendMailAsync(userId, event, position); } } @@ -130,8 +130,11 @@ public class NotificationManager { public void updateNotification(Notification notification) { Notification cachedNotification = getUserNotificationByType(notification.getUserId(), notification.getType()); if (cachedNotification != null) { - if (!cachedNotification.getAttributes().equals(notification.getAttributes())) { - if (notification.getAttributes().isEmpty()) { + if (cachedNotification.getWeb() != notification.getWeb() + || cachedNotification.getMail() != notification.getMail() + || !cachedNotification.getAttributes().equals(notification.getAttributes())) { + if (!notification.getWeb() && !notification.getMail() + && notification.getAttributes().isEmpty()) { try { dataManager.removeNotification(cachedNotification); } catch (SQLException error) { @@ -146,6 +149,8 @@ public class NotificationManager { } else { notificationsLock.writeLock().lock(); try { + cachedNotification.setWeb(notification.getWeb()); + cachedNotification.setMail(notification.getMail()); cachedNotification.setAttributes(notification.getAttributes()); } finally { notificationsLock.writeLock().unlock(); @@ -159,7 +164,7 @@ public class NotificationManager { } else { notification.setId(cachedNotification.getId()); } - } else if (!notification.getAttributes().isEmpty()) { + } else if (notification.getWeb() || notification.getMail() || !notification.getAttributes().isEmpty()) { try { dataManager.addNotification(notification); } catch (SQLException error) { @@ -193,4 +198,16 @@ public class NotificationManager { return notifications; } + public Collection getAllUserNotifications(long userId) { + Map notifications = new HashMap<>(); + for (Notification notification : getAllNotifications()) { + notification.setUserId(userId); + notifications.put(notification.getType(), notification); + } + for (Notification notification : getUserNotifications(userId)) { + notifications.put(notification.getType(), notification); + } + return notifications.values(); + } + } diff --git a/src/org/traccar/model/Notification.java b/src/org/traccar/model/Notification.java index 64e1ac60c..3f08c0a39 100644 --- a/src/org/traccar/model/Notification.java +++ b/src/org/traccar/model/Notification.java @@ -37,4 +37,25 @@ public class Notification extends Extensible { this.type = type; } + private boolean web; + + public boolean getWeb() { + return web; + } + + public void setWeb(boolean web) { + this.web = web; + } + + private boolean mail; + + public boolean getMail() { + return mail; + } + + public void setMail(boolean mail) { + this.mail = mail; + } + + } -- cgit v1.2.3 From 6936e7aa6404419c5a9380c5e62489abcd58ce0d Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 5 Dec 2016 07:55:25 +1300 Subject: Implement OIGO MG protocol --- src/org/traccar/helper/UnitsConverter.java | 9 ++ src/org/traccar/protocol/OigoProtocolDecoder.java | 97 ++++++++++++++++++++-- .../traccar/protocol/OigoProtocolDecoderTest.java | 15 ++++ 3 files changed, 113 insertions(+), 8 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/helper/UnitsConverter.java b/src/org/traccar/helper/UnitsConverter.java index 00b00861e..e0d94c6dc 100644 --- a/src/org/traccar/helper/UnitsConverter.java +++ b/src/org/traccar/helper/UnitsConverter.java @@ -21,6 +21,7 @@ public final class UnitsConverter { private static final double KNOTS_TO_MPH_RATIO = 0.868976; private static final double KNOTS_TO_MPS_RATIO = 1.94384; private static final double KNOTS_TO_CPS_RATIO = 0.0194384449; + private static final double METERS_TO_FEET_RATIO = 0.3048; private UnitsConverter() { } @@ -53,4 +54,12 @@ public final class UnitsConverter { return value * KNOTS_TO_CPS_RATIO; } + public static double feetFromMeters(double value) { + return value / METERS_TO_FEET_RATIO; + } + + public static double metersFromFeet(double value) { + return value * METERS_TO_FEET_RATIO; + } + } diff --git a/src/org/traccar/protocol/OigoProtocolDecoder.java b/src/org/traccar/protocol/OigoProtocolDecoder.java index 15a215c4f..3a4134eda 100644 --- a/src/org/traccar/protocol/OigoProtocolDecoder.java +++ b/src/org/traccar/protocol/OigoProtocolDecoder.java @@ -34,15 +34,12 @@ public class OigoProtocolDecoder extends BaseProtocolDecoder { super(protocol); } - public static final int MSG_LOCATION = 0x00; - public static final int MSG_REMOTE_START = 0x10; - public static final int MSG_ACKNOWLEDGEMENT = 0xE0; + public static final int MSG_AR_LOCATION = 0x00; + public static final int MSG_AR_REMOTE_START = 0x10; - @Override - protected Object decode( - Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + public static final int MSG_ACKNOWLEDGEMENT = 0xE0; - ChannelBuffer buf = (ChannelBuffer) msg; + private Position decodeArMessage(Channel channel, SocketAddress remoteAddress, ChannelBuffer buf) { buf.skipBytes(1); // header buf.readUnsignedShort(); // length @@ -67,7 +64,7 @@ public class OigoProtocolDecoder extends BaseProtocolDecoder { break; } - if (deviceSession == null || type != MSG_LOCATION) { + if (deviceSession == null || type != MSG_AR_LOCATION) { return null; } @@ -154,4 +151,88 @@ public class OigoProtocolDecoder extends BaseProtocolDecoder { return position; } + private double convertCoordinate(long value) { + boolean negative = value < 0; + value = Math.abs(value); + double minutes = (value % 100000) * 0.001; + double degrees = value / 100000 + minutes / 60; + return negative ? -degrees : degrees; + } + + private Position decodeMgMessage(Channel channel, SocketAddress remoteAddress, ChannelBuffer buf) { + + buf.readUnsignedByte(); // tag + int flags = buf.getUnsignedByte(buf.readerIndex()); + + DeviceSession deviceSession; + if (BitUtil.check(flags, 6)) { + buf.readUnsignedByte(); // flags + deviceSession = getDeviceSession(channel, remoteAddress); + } else { + String imei = ChannelBuffers.hexDump(buf.readBytes(8)).substring(1); + deviceSession = getDeviceSession(channel, remoteAddress, imei); + } + + if (deviceSession == null) { + return null; + } + + Position position = new Position(); + position.setProtocol(getProtocolName()); + position.setDeviceId(deviceSession.getDeviceId()); + + buf.skipBytes(8); // imsi + + int date = buf.readUnsignedShort(); + + DateBuilder dateBuilder = new DateBuilder() + .setDate(2010 + BitUtil.from(date, 12), BitUtil.between(date, 8, 12), BitUtil.to(date, 8)) + .setTime(buf.readUnsignedByte(), buf.readUnsignedByte(), 0); + + position.setValid(true); + position.setLatitude(convertCoordinate(buf.readInt())); + position.setLongitude(convertCoordinate(buf.readInt())); + + position.setAltitude(UnitsConverter.metersFromFeet(buf.readShort())); + position.setCourse(buf.readUnsignedShort()); + position.setSpeed(UnitsConverter.knotsFromMph(buf.readUnsignedByte())); + + position.set(Position.KEY_POWER, buf.readUnsignedByte() * 100 + "mV"); + position.set(Position.PREFIX_IO + 1, buf.readUnsignedByte()); + + dateBuilder.setSecond(buf.readUnsignedByte()); + position.setTime(dateBuilder.getDate()); + + position.set(Position.KEY_GSM, buf.readUnsignedByte()); + + int index = buf.readUnsignedByte(); + + position.set(Position.KEY_VERSION, buf.readUnsignedByte()); + position.set(Position.KEY_SATELLITES, buf.readUnsignedByte()); + position.set(Position.KEY_ODOMETER, (long) (buf.readUnsignedInt() * 1609.34)); + + if (channel != null && BitUtil.check(flags, 7)) { + ChannelBuffer response = ChannelBuffers.dynamicBuffer(); + response.writeByte(MSG_ACKNOWLEDGEMENT); + response.writeByte(index); + response.writeByte(0x00); + channel.write(response, remoteAddress); + } + + return position; + } + + @Override + protected Object decode( + Channel channel, SocketAddress remoteAddress, Object msg) throws Exception { + + ChannelBuffer buf = (ChannelBuffer) msg; + + if (buf.getUnsignedByte(buf.readerIndex()) == 0x7e) { + return decodeArMessage(channel, remoteAddress,buf); + } else { + return decodeMgMessage(channel, remoteAddress,buf); + } + } + } diff --git a/test/org/traccar/protocol/OigoProtocolDecoderTest.java b/test/org/traccar/protocol/OigoProtocolDecoderTest.java index 14c34ae7c..452e40a78 100644 --- a/test/org/traccar/protocol/OigoProtocolDecoderTest.java +++ b/test/org/traccar/protocol/OigoProtocolDecoderTest.java @@ -10,6 +10,21 @@ public class OigoProtocolDecoderTest extends ProtocolTest { OigoProtocolDecoder decoder = new OigoProtocolDecoder(new OigoProtocol()); + verifyPosition(decoder, binary( + "0103537820628365110310410790660962521813380026EE4EFF8593AA0065003E00794C020600100500000000")); + + verifyPosition(decoder, binary( + "0E03537820628344660204043255862749531B100E0026EE3AFF8593A3FFFE00BF00044C20090710C300000000")); + + verifyPosition(decoder, binary( + "00035378206638500203340201271426226b190203001ac000ff72eedd00370097238b4c34116a130b000094d9")); + + verifyPosition(decoder, binary( + "1d035378206638500203340201271426226b19020c001ab144ff72f74d005f0097298a4c1d066d130b000094de")); + + verifyPosition(decoder, binary( + "00035378206638500203340201271426226b191016001c04e5ff760081013d002900814c1a0f5e130b00009576")); + verifyPosition(decoder, binary( "7e004200000014631000258257000000ffff02d0690e000220690e0002200696dbd204bdfde31a070000b307101135de106e05f500000000010908010402200104ffff8001")); -- cgit v1.2.3 From 2342ccbce2681603057d183f3b15bd9f40bffafc Mon Sep 17 00:00:00 2001 From: Anton Tananaev Date: Mon, 5 Dec 2016 08:04:52 +1300 Subject: Fix check style issues --- src/org/traccar/protocol/OigoProtocolDecoder.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/protocol/OigoProtocolDecoder.java b/src/org/traccar/protocol/OigoProtocolDecoder.java index 3a4134eda..90588a628 100644 --- a/src/org/traccar/protocol/OigoProtocolDecoder.java +++ b/src/org/traccar/protocol/OigoProtocolDecoder.java @@ -229,9 +229,9 @@ public class OigoProtocolDecoder extends BaseProtocolDecoder { ChannelBuffer buf = (ChannelBuffer) msg; if (buf.getUnsignedByte(buf.readerIndex()) == 0x7e) { - return decodeArMessage(channel, remoteAddress,buf); + return decodeArMessage(channel, remoteAddress, buf); } else { - return decodeMgMessage(channel, remoteAddress,buf); + return decodeMgMessage(channel, remoteAddress, buf); } } -- cgit v1.2.3 From effcde41e6f77df3829a9809f48fcc3aed9caade Mon Sep 17 00:00:00 2001 From: Abyss777 Date: Mon, 5 Dec 2016 11:53:35 +0700 Subject: - Ignore attributes in notifications - Remove extra spaces --- src/org/traccar/database/NotificationManager.java | 8 +++----- src/org/traccar/model/Notification.java | 2 -- 2 files changed, 3 insertions(+), 7 deletions(-) (limited to 'src/org') diff --git a/src/org/traccar/database/NotificationManager.java b/src/org/traccar/database/NotificationManager.java index caf1091cc..ee804f5cd 100644 --- a/src/org/traccar/database/NotificationManager.java +++ b/src/org/traccar/database/NotificationManager.java @@ -131,10 +131,8 @@ public class NotificationManager { Notification cachedNotification = getUserNotificationByType(notification.getUserId(), notification.getType()); if (cachedNotification != null) { if (cachedNotification.getWeb() != notification.getWeb() - || cachedNotification.getMail() != notification.getMail() - || !cachedNotification.getAttributes().equals(notification.getAttributes())) { - if (!notification.getWeb() && !notification.getMail() - && notification.getAttributes().isEmpty()) { + || cachedNotification.getMail() != notification.getMail()) { + if (!notification.getWeb() && !notification.getMail()) { try { dataManager.removeNotification(cachedNotification); } catch (SQLException error) { @@ -164,7 +162,7 @@ public class NotificationManager { } else { notification.setId(cachedNotification.getId()); } - } else if (notification.getWeb() || notification.getMail() || !notification.getAttributes().isEmpty()) { + } else if (notification.getWeb() || notification.getMail()) { try { dataManager.addNotification(notification); } catch (SQLException error) { diff --git a/src/org/traccar/model/Notification.java b/src/org/traccar/model/Notification.java index 3f08c0a39..dd5f66f15 100644 --- a/src/org/traccar/model/Notification.java +++ b/src/org/traccar/model/Notification.java @@ -56,6 +56,4 @@ public class Notification extends Extensible { public void setMail(boolean mail) { this.mail = mail; } - - } -- cgit v1.2.3