You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ol...@apache.org on 2018/09/22 19:12:53 UTC
[sling-org-apache-sling-commons-clam] 01/02: SLING-7947 Play
ping-pong with clam daemon after configuration of ClamdService
This is an automated email from the ASF dual-hosted git repository.
olli pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-commons-clam.git
commit d231c45df7aa215f9564cc343a8ec5d4cb793eba
Author: Oliver Lietz <ol...@apache.org>
AuthorDate: Sat Sep 22 21:10:43 2018 +0200
SLING-7947 Play ping-pong with clam daemon after configuration of ClamdService
---
.../sling/commons/clam/internal/ClamdService.java | 37 +++++++++++++++++++++-
1 file changed, 36 insertions(+), 1 deletion(-)
diff --git a/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java b/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java
index ef23eb8..581dc0d 100644
--- a/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java
+++ b/src/main/java/org/apache/sling/commons/clam/internal/ClamdService.java
@@ -25,6 +25,7 @@ import java.io.OutputStream;
import java.net.Socket;
import java.nio.ByteBuffer;
import java.nio.charset.StandardCharsets;
+import java.util.Arrays;
import org.apache.commons.io.IOUtils;
import org.apache.sling.commons.clam.ClamService;
@@ -53,6 +54,10 @@ public class ClamdService implements ClamService {
private ClamdServiceConfiguration configuration;
+ private static final byte[] PING_COMMAND = "nPING\n".getBytes(StandardCharsets.US_ASCII);
+
+ private static final byte[] PONG_REPLY = "PONG\n".getBytes(StandardCharsets.US_ASCII);
+
private static final byte[] INSTREAM_COMMAND = "nINSTREAM\n".getBytes(StandardCharsets.US_ASCII);
private static final String OK_REPLY_PATTERN = "stream: OK";
@@ -85,7 +90,7 @@ public class ClamdService implements ClamService {
private void configure(final ClamdServiceConfiguration configuration) {
this.configuration = configuration;
- // TODO play ping pong on configuration change
+ playPingPong();
}
@Override
@@ -100,6 +105,36 @@ public class ClamdService implements ClamService {
}
}
+ private byte[] doPing() throws IOException {
+ logger.info("pinging clam daemon at {}:{}", configuration.clamd_host(), configuration.clamd_port());
+ try (final Socket socket = new Socket(configuration.clamd_host(), configuration.clamd_port());
+ final OutputStream out = new BufferedOutputStream(socket.getOutputStream());
+ final InputStream in = socket.getInputStream()) {
+
+ socket.setSoTimeout(configuration.connection_timeout());
+
+ // send command
+ out.write(PING_COMMAND);
+ out.flush();
+
+ return IOUtils.toByteArray(in);
+ }
+ }
+
+ private void playPingPong() {
+ try {
+ final byte[] reply = doPing();
+ if (Arrays.equals(reply, PONG_REPLY)) {
+ logger.info("clam daemon replied with PONG");
+ } else {
+ final String message = new String(reply, StandardCharsets.US_ASCII);
+ logger.error("clam daemon replied with unknown message: {}", message);
+ }
+ } catch (IOException e) {
+ logger.error("pinging clam daemon failed: {}", e.getMessage());
+ }
+ }
+
/**
* man (8) clamd
* INSTREAM