aboutsummaryrefslogtreecommitdiff
path: root/src/org/traccar
diff options
context:
space:
mode:
Diffstat (limited to 'src/org/traccar')
-rw-r--r--src/org/traccar/sms/SmsGatewayClient.java72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/org/traccar/sms/SmsGatewayClient.java b/src/org/traccar/sms/SmsGatewayClient.java
new file mode 100644
index 000000000..b1683783d
--- /dev/null
+++ b/src/org/traccar/sms/SmsGatewayClient.java
@@ -0,0 +1,72 @@
+/*
+ * To change this license header, choose License Headers in Project Properties.
+ * To change this template file, choose Tools | Templates
+ * and open the template in the editor.
+ */
+package org.traccar.sms;
+
+import javax.json.Json;
+import javax.json.JsonArray;
+import javax.ws.rs.client.Entity;
+import javax.ws.rs.client.Invocation;
+import javax.ws.rs.core.Response;
+import org.traccar.Context;
+import org.traccar.helper.Log;
+import org.traccar.notification.MessageException;
+
+/**
+ *
+ * @author marcos
+ */
+public class SmsGatewayClient implements SmsManager {
+
+ private static final String URL = "https://smsgateway.me/api/v4/message/send";
+ private static final String KEY_PHONE_NUMBER = "phone_number";
+ private static final String KEY_MESSAGE = "message";
+ private static final String KEY_DEVICE_ID = "device_id";
+ private static final String KEY_AUTHORIZATION = "Authorization";
+
+ private final String token;
+ private final int deviceId;
+
+ public SmsGatewayClient() {
+ token = Context.getConfig().getString("sms.smsgateway.token");
+ deviceId = Context.getConfig().getInteger("sms.smsgateway.deviceId");
+ }
+
+ protected JsonArray preparePayload(String destAddress, String message) {
+ return Json.createArrayBuilder()
+ .add(Json.createObjectBuilder()
+ .add(KEY_PHONE_NUMBER, destAddress)
+ .add(KEY_MESSAGE, message)
+ .add(KEY_DEVICE_ID, deviceId))
+ .build();
+ }
+
+ @Override
+ public void sendMessageSync(String destAddress, String message, boolean command)
+ throws InterruptedException, MessageException {
+ Invocation.Builder requestBuilder = Context.getClient().target(URL).request();
+
+ requestBuilder = requestBuilder.header(KEY_AUTHORIZATION, token);
+
+ Response response = requestBuilder.post(Entity.json(preparePayload(destAddress, message)));
+ if (!response.getStatusInfo().equals(Response.Status.OK)) {
+ String output = response.readEntity(String.class);
+ Log.error(output);
+ }
+ }
+
+ @Override
+ public void sendMessageAsync(final String destAddress, final String message, final boolean command) {
+ new Thread(new Runnable() {
+ public void run() {
+ try {
+ sendMessageSync(destAddress, message, command);
+ } catch (MessageException | InterruptedException error) {
+ Log.warning(error);
+ }
+ }
+ }).start();
+ }
+}