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 <[email protected]> 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
