diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/org/traccar/Context.java | 4 | ||||
-rw-r--r-- | src/org/traccar/notification/FormTypeEventForwarder.java | 33 | ||||
-rw-r--r-- | src/org/traccar/notification/MultiPartEventForwarder.java | 47 |
3 files changed, 49 insertions, 35 deletions
diff --git a/src/org/traccar/Context.java b/src/org/traccar/Context.java index d77b6878f..3681cc2cc 100644 --- a/src/org/traccar/Context.java +++ b/src/org/traccar/Context.java @@ -71,8 +71,8 @@ import org.traccar.geolocation.GeolocationProvider; import org.traccar.geolocation.MozillaGeolocationProvider; import org.traccar.geolocation.OpenCellIdGeolocationProvider; import org.traccar.notification.EventForwarder; -import org.traccar.notification.FormTypeEventForwarder; import org.traccar.notification.JsonTypeEventForwarder; +import org.traccar.notification.MultiPartEventForwarder; import org.traccar.reports.model.TripsConfig; import org.traccar.smpp.SmppClient; import org.traccar.web.WebServer; @@ -375,7 +375,7 @@ public final class Context { if (config.getBoolean("event.forward.enable")) { if (Context.getConfig().getBoolean("event.forward.payloadAsParamMode")) { - eventForwarder = new FormTypeEventForwarder(); + eventForwarder = new MultiPartEventForwarder(); } else { eventForwarder = new JsonTypeEventForwarder(); } diff --git a/src/org/traccar/notification/FormTypeEventForwarder.java b/src/org/traccar/notification/FormTypeEventForwarder.java deleted file mode 100644 index 1478faa03..000000000 --- a/src/org/traccar/notification/FormTypeEventForwarder.java +++ /dev/null @@ -1,33 +0,0 @@ -package org.traccar.notification;
-
-import org.traccar.Context;
-import org.traccar.model.Event;
-import org.traccar.model.Position;
-
-import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder;
-
-public class FormTypeEventForwarder extends EventForwarder {
-
- private final String payloadParamName;
- private final String additionalParams;
-
- public FormTypeEventForwarder() {
- payloadParamName = Context.getConfig().getString("event.forward.paramMode.payloadParamName", "payload");
- additionalParams = Context.getConfig().getString("event.forward.paramMode.additionalParams", "");
- }
-
- @Override
- protected String getContentType() {
- return "application/x-www-form-urlencoded; charset=UTF-8";
- }
-
- @Override
- protected void setContent(Event event, Position position, BoundRequestBuilder requestBuilder) {
- if (!additionalParams.equals("")) {
- requestBuilder.setFormParams(splitParams(additionalParams, "="));
- }
-
- requestBuilder.addFormParam(payloadParamName, prepareJsonPayload(event, position));
- }
-
-}
diff --git a/src/org/traccar/notification/MultiPartEventForwarder.java b/src/org/traccar/notification/MultiPartEventForwarder.java new file mode 100644 index 000000000..a77ad5975 --- /dev/null +++ b/src/org/traccar/notification/MultiPartEventForwarder.java @@ -0,0 +1,47 @@ +package org.traccar.notification; + +import java.nio.charset.StandardCharsets; +import java.util.List; +import java.util.Map; +import java.util.Map.Entry; + +import org.traccar.Context; +import org.traccar.model.Event; +import org.traccar.model.Position; + +import com.ning.http.client.AsyncHttpClient.BoundRequestBuilder; +import com.ning.http.client.multipart.StringPart; + +public class MultiPartEventForwarder extends EventForwarder { + + private final String payloadParamName; + private final String additionalParams; + + public MultiPartEventForwarder() { + payloadParamName = Context.getConfig().getString("event.forward.paramMode.payloadParamName", "payload"); + additionalParams = Context.getConfig().getString("event.forward.paramMode.additionalParams", ""); + } + + @Override + protected String getContentType() { + return "multipart/form-data"; + } + + @Override + protected void setContent(Event event, Position position, BoundRequestBuilder requestBuilder) { + + if (!additionalParams.equals("")) { + Map<String, List<String>> paramsToAdd = splitParams(additionalParams, "="); + + for (Entry<String, List<String>> en : paramsToAdd.entrySet()) { + for (String value : en.getValue()) { + requestBuilder.addBodyPart(new StringPart(en.getKey(), value, null, StandardCharsets.UTF_8)); + } + } + } + requestBuilder.addBodyPart(new StringPart(payloadParamName, + prepareJsonPayload(event, position), + "application/json", + StandardCharsets.UTF_8)); + } +} |