1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.openehealth.ipf.commons.audit.protocol;
18
19 import org.openehealth.ipf.commons.audit.AuditContext;
20 import org.openehealth.ipf.commons.audit.utils.AuditUtils;
21 import org.slf4j.Logger;
22 import org.slf4j.LoggerFactory;
23
24 import java.net.DatagramPacket;
25 import java.net.DatagramSocket;
26 import java.nio.charset.StandardCharsets;
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 public class UDPSyslogSenderImpl extends RFC5424Protocol implements AuditTransmissionProtocol {
42
43 private static final Logger LOG = LoggerFactory.getLogger(UDPSyslogSenderImpl.class);
44 private static final int MAX_DATAGRAM_PACKET_SIZE = 65479;
45
46 public UDPSyslogSenderImpl() {
47 this(AuditUtils.getLocalHostName(), AuditUtils.getProcessId());
48 }
49
50 public UDPSyslogSenderImpl(String sendingHost, String sendingProcess) {
51 super(sendingHost, sendingProcess);
52 }
53
54 @Override
55 public String getTransportName() {
56 return "UDP";
57 }
58
59 @Override
60 public void send(AuditContext auditContext, String... auditMessages) throws Exception {
61 if (auditMessages != null) {
62 try (DatagramSocket socket = new DatagramSocket()) {
63 for (String auditMessage : auditMessages) {
64 byte[] msgBytes = getTransportPayload(auditContext.getSendingApplication(), auditMessage);
65 LOG.debug("Auditing to {}:{}",
66 auditContext.getAuditRepositoryAddress().getHostAddress(),
67 auditContext.getAuditRepositoryPort());
68 LOG.trace("{}", new String(msgBytes, StandardCharsets.UTF_8));
69 DatagramPacket packet = new DatagramPacket(
70 msgBytes,
71 Math.min(MAX_DATAGRAM_PACKET_SIZE, msgBytes.length),
72 auditContext.getAuditRepositoryAddress(),
73 auditContext.getAuditRepositoryPort());
74 socket.send(packet);
75 }
76 }
77 }
78 }
79
80 @Override
81 public void shutdown() {
82
83 }
84 }