diff --git a/gazelle-proxy-ejb/pom.xml b/gazelle-proxy-ejb/pom.xml index 109eeba1f5e064d335040712454f6013056ff170..da50488cea365150d40054a82a04893fb78b2956 100644 --- a/gazelle-proxy-ejb/pom.xml +++ b/gazelle-proxy-ejb/pom.xml @@ -80,6 +80,10 @@ <groupId>net.ihe.gazelle.simulators.tls</groupId> <artifactId>TLSSimulator-pki-jar</artifactId> </dependency> + <dependency> + <groupId>net.ihe.gazelle.simulators.tls</groupId> + <artifactId>TLSSimulator-test-jar</artifactId> + </dependency> <dependency> <groupId>commons-io</groupId> diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java index 4e15686e79df172e4522dbebe4a804be4c293c1f..d9499d669ccc7c5f921b3c19679e423c3b4eaa4d 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ChannelManagerBean.java @@ -31,8 +31,9 @@ import javax.ejb.Remove; import javax.faces.model.SelectItem; import net.ihe.gazelle.proxy.action.dao.ProxyDAO; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import net.ihe.gazelle.proxy.netty.protocols.tls.TlsCredentials; import net.ihe.gazelle.simulators.tls.model.Certificate; @@ -132,9 +133,9 @@ public class ChannelManagerBean implements Serializable { } private String createAndStartChannel(String name, Integer localPort, String remoteAddress, Integer remotePort, - ChannelType channelType, TlsConfig tlsConfig, Object config) { + ChannelType channelType, ConnectionConfig connectionConfig, Object config) { try { - proxyBean.startChannel(name, localPort, remoteAddress, remotePort, channelType, tlsConfig, config); + proxyBean.startChannel(name, localPort, remoteAddress, remotePort, channelType, connectionConfig, config); FacesMessages.instance().add(StatusMessage.Severity.INFO, "Channel successfully created"); return "/home.xhtml"; } catch (Throwable e) { @@ -253,7 +254,7 @@ public class ChannelManagerBean implements Serializable { return result.toArray(new SelectItem[result.size()]); } - private TlsConfig getTlsConfig() { + private ConnectionConfig getTlsConfig() { TlsCredentials clientCredentials = null; if (pki) { try { @@ -348,12 +349,12 @@ public class ChannelManagerBean implements Serializable { public void startChannel() { if (identity.hasRole("admin_role")) { - TlsConfig tlsConfig = null; + ConnectionConfig connectionConfig = null; if (secured) { - tlsConfig = getTlsConfig(); + connectionConfig = getTlsConfig(); } createAndStartChannel("", getProxyPort(), getResponderIP(), getResponderPort(), getMessageType(), - tlsConfig, null); + connectionConfig, null); } else { FacesMessages.instance().add("Wrong role"); } diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java index d7a334f04ebd949e1338c1bae0f6f08c54fbc3d2..9decd6674b18f58c121a3d94d6e3d649afd18cde 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessageBean.java @@ -13,7 +13,7 @@ import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.ihe.gazelle.proxy.action.dao.ProxyDAO; -import net.ihe.gazelle.proxy.enums.ChannelType; +import net.ihe.gazelle.proxy.model.ChannelType; import net.ihe.gazelle.proxy.model.message.AbstractMessage; import net.ihe.gazelle.proxy.model.message.DicomMessage; import net.ihe.gazelle.proxy.model.message.HL7Message; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java index 1f60b3e0d9f8830c2218cb4de010a610c870e5e7..71474fd817cdb5c4ca538e7ce48ec1bca67a46b4 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/MessagesBean.java @@ -16,8 +16,8 @@ import net.ihe.gazelle.common.filter.HibernateDataModel; import net.ihe.gazelle.proxy.action.dao.ProxyDAO; import net.ihe.gazelle.proxy.dao.MessageFilterStandard; import net.ihe.gazelle.proxy.dao.MessageFilterStep; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; +import net.ihe.gazelle.proxy.model.ChannelType; import net.ihe.gazelle.proxy.model.message.AbstractMessage; import net.ihe.gazelle.proxy.model.message.DicomMessage; import net.ihe.gazelle.proxy.model.message.HL7Message; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java index b2e905af96d697dd973eee595b757ce34b07986d..4a52ae4edbbcd0fa9f4ed36582deba4aa86b6c9e 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyBean.java @@ -11,18 +11,18 @@ import java.util.List; import javax.persistence.EntityManager; import net.ihe.gazelle.proxy.action.dao.ProxyDAO; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.listeners.DicomEventListener; import net.ihe.gazelle.proxy.listeners.HL7EventListener; import net.ihe.gazelle.proxy.listeners.HttpEventListener; import net.ihe.gazelle.proxy.listeners.SyslogEventListener; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.Proxy; import net.ihe.gazelle.proxy.netty.protocols.dicom.DicomProxy; import net.ihe.gazelle.proxy.netty.protocols.hl7.HL7Proxy; import net.ihe.gazelle.proxy.netty.protocols.http.HttpProxy; import net.ihe.gazelle.proxy.netty.protocols.syslog.SyslogProxy; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import net.ihe.gazelle.proxy.util.HibernateUtilProxy; import net.ihe.gazelle.proxy.util.Preferences; @@ -99,7 +99,7 @@ public class ProxyBean implements ProxyLocal { } public Channel startChannel(String name, Integer localPort, String remoteAddress, Integer remotePort, - ChannelType channelType, TlsConfig tlsConfig, Object config) { + ChannelType channelType, ConnectionConfig connectionConfig, Object config) { Channel channel = new Channel(); channel.setProxyPort(localPort); if (name != null) @@ -113,7 +113,7 @@ public class ProxyBean implements ProxyLocal { channel.setStartDate(new Date()); channel.setStarted(Boolean.TRUE); - ProxyChannel proxyChannel = createProxyChannel(channel, tlsConfig, config); + ProxyChannel proxyChannel = createProxyChannel(channel, connectionConfig, config); proxyChannel.proxy.start(); listOfProxies.add(proxyChannel); @@ -128,13 +128,13 @@ public class ProxyBean implements ProxyLocal { return channel; } - private ProxyChannel createProxyChannel(Channel channel, TlsConfig tlsConfig, Object config) { + private ProxyChannel createProxyChannel(Channel channel, ConnectionConfig connectionConfig, Object config) { ProxyChannel proxyChannel = new ProxyChannel(); proxyChannel.channel = channel; switch (channel.getChannelType()) { case HL7: proxyChannel.proxy = new HL7Proxy(new HL7EventListener(channel), channel.getProxyPort(), - channel.getRemoteAddress(), channel.getRemotePort(), tlsConfig); + channel.getRemoteAddress(), channel.getRemotePort(), connectionConfig); break; case DICOM: String path = "/tmp"; @@ -145,15 +145,15 @@ public class ProxyBean implements ProxyLocal { } path = null; proxyChannel.proxy = new DicomProxy(new DicomEventListener(channel), channel.getProxyPort(), - channel.getRemoteAddress(), channel.getRemotePort(), path, tlsConfig); + channel.getRemoteAddress(), channel.getRemotePort(), path, connectionConfig); break; case HTTP: proxyChannel.proxy = new HttpProxy(new HttpEventListener(channel), channel.getProxyPort(), - channel.getRemoteAddress(), channel.getRemotePort(), tlsConfig); + channel.getRemoteAddress(), channel.getRemotePort(), connectionConfig); break; case SYSLOG: proxyChannel.proxy = new SyslogProxy(new SyslogEventListener(channel), channel.getProxyPort(), - channel.getRemoteAddress(), channel.getRemotePort(), tlsConfig); + channel.getRemoteAddress(), channel.getRemotePort(), connectionConfig); break; default: throw new IllegalStateException(); diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java index 8f5008ed7848715494ef6a5b9962c153aa4475ba..916e388aa4e9a92202600a8950e739e808a558a0 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/action/ProxyLocal.java @@ -2,15 +2,15 @@ package net.ihe.gazelle.proxy.action; import javax.ejb.Local; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.model.Channel; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; +import net.ihe.gazelle.proxy.model.ChannelType; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; @Local public interface ProxyLocal { public Channel startChannel(String name, Integer localPort, String remoteAddress, Integer remotePort, - ChannelType channelType, TlsConfig tlsConfig, Object config); + ChannelType channelType, ConnectionConfig tlsConfig, Object config); public void stopChannel(Integer localPort); diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java index 5b3a07035e1c7597a9da48b22f2f8fb61fb188dd..a4d4cda899508c527f29a9a4aa64ffd2c7fbcc73 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/dao/MessageFilterStandard.java @@ -4,8 +4,8 @@ import java.util.Date; import net.ihe.gazelle.common.filter.hql.HQLQueryBuilder; import net.ihe.gazelle.common.filter.hql.HQLRestrictions; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; +import net.ihe.gazelle.proxy.model.ChannelType; import net.ihe.gazelle.proxy.model.message.AbstractMessage; import org.apache.commons.lang.StringUtils; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java index 63ba17db95758ca68d8cea354b50b4dc98e94577..c5bbf42f4d8551ccbaa5b05a5da8f0a10ce9bdf0 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/Channel.java @@ -27,7 +27,6 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import net.ihe.gazelle.proxy.enums.ChannelType; import org.hibernate.validator.NotNull; import org.hibernate.validator.Range; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/enums/ChannelType.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/ChannelType.java similarity index 97% rename from gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/enums/ChannelType.java rename to gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/ChannelType.java index ae4bc8a7e46ed797c799279c9d18aa25e313343f..fd3fdff40b92f6af256ea11ea47601bb0aa5a5bf 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/enums/ChannelType.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/ChannelType.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package net.ihe.gazelle.proxy.enums; +package net.ihe.gazelle.proxy.model; import net.ihe.gazelle.proxy.model.message.AbstractMessage; import net.ihe.gazelle.proxy.model.message.DicomMessage; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java index ceb27b936226a6d66e074490be9bddd5c90ec6d0..0044939ddcb8f8261550ae79133a21f331e6da8d 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/AbstractMessage.java @@ -37,9 +37,9 @@ import javax.persistence.Table; import javax.persistence.Temporal; import javax.persistence.TemporalType; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; import org.apache.commons.httpclient.methods.multipart.ByteArrayPartSource; import org.apache.commons.httpclient.methods.multipart.PartSource; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java index 93948750ee7ec79a554fe356c30a137d2f587906..7b0684437096f4585781391ab0855a05b3185b6e 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/DicomMessage.java @@ -36,9 +36,9 @@ import javax.persistence.EntityManager; import javax.persistence.FetchType; import javax.persistence.Transient; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; import net.ihe.gazelle.proxy.model.CommandFieldValues; import net.ihe.gazelle.proxy.model.DicomUIDValues; import net.ihe.gazelle.proxy.model.LabelKeywordDescriptionClass; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java index 87dc592e27022f7f337a6437ee7320b065d5ac11..5fe67c422db9f26b1a6be8249dcfe29419fe72d3 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HL7Message.java @@ -17,9 +17,9 @@ package net.ihe.gazelle.proxy.model.message; import javax.persistence.Entity; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; import org.jboss.seam.annotations.Name; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java index 3c6a7e47f3253527c666887d011e8fc7fffaaba6..59e921def20ea5bfed2d4586e3d5a1f32c9a33f2 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/HTTPMessage.java @@ -6,9 +6,9 @@ import javax.persistence.Entity; import javax.persistence.FetchType; import javax.persistence.OneToOne; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; import org.apache.commons.lang.StringEscapeUtils; import org.jboss.seam.annotations.Name; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java index cfff86689ab8181cdbad17624c17e88f34e949e1..fafd1373ca1f85b077aca73262890d4c54c4ec43 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/message/SyslogMessage.java @@ -17,9 +17,9 @@ package net.ihe.gazelle.proxy.model.message; import javax.persistence.Entity; -import net.ihe.gazelle.proxy.enums.ChannelType; import net.ihe.gazelle.proxy.enums.ProxySide; import net.ihe.gazelle.proxy.model.Channel; +import net.ihe.gazelle.proxy.model.ChannelType; import org.jboss.seam.annotations.Name; diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java index 4eb4c79dcc10fb832372b27856fca985d44d8401..0b2c21d9677078a5874d5ca2bc8a0cd53769f8ae 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/model/tm/Configuration.java @@ -10,7 +10,7 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlElement; -import net.ihe.gazelle.proxy.enums.ChannelType; +import net.ihe.gazelle.proxy.model.ChannelType; @Entity @Table(name = "tm_configuration", schema = "public") diff --git a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java index 91e94d31a307b442d426ecc653eb1f34c2bd4ed8..461d08cfc4b6b0196838c0a68b5faf79035e3c79 100644 --- a/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java +++ b/gazelle-proxy-ejb/src/main/java/net/ihe/gazelle/proxy/ws/ProxyForTM.java @@ -12,7 +12,7 @@ import javax.persistence.EntityManager; import net.ihe.gazelle.proxy.action.ProxyLocal; import net.ihe.gazelle.proxy.action.dao.ProxyDAO; -import net.ihe.gazelle.proxy.enums.ChannelType; +import net.ihe.gazelle.proxy.model.ChannelType; import net.ihe.gazelle.proxy.model.tm.Configuration; import net.ihe.gazelle.proxy.model.tm.Step; import net.ihe.gazelle.proxy.model.tm.TestInstance; diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java index ac7db83d17b3010791d6dfe2024fef152b288591..b91660ee15be8252fd72407550c0144248e564d9 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/App.java @@ -131,7 +131,7 @@ public class App { // return new HttpsTLSConfig(serverCredentials, clientCredentials); // } - private static TlsConfig createTLSConfig() throws FileNotFoundException { + private static ConnectionConfig createTLSConfig() throws FileNotFoundException { InputStream fis = new FileInputStream("/usr/local/jboss/sts.jks"); TlsCredentials serverCredentials = new TlsCredentials(fis, "gazelle".toCharArray(), "tomcat", "gazelle".toCharArray()); diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ConnectionConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ConnectionConfig.java new file mode 100644 index 0000000000000000000000000000000000000000..c152c4d83c3ec4b49dd0da97ef363826cb035c7a --- /dev/null +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ConnectionConfig.java @@ -0,0 +1,13 @@ +package net.ihe.gazelle.proxy.netty; + +import java.util.List; + +import org.jboss.netty.channel.ChannelHandler; + +public interface ConnectionConfig { + + List<ChannelHandler> getRequestConnectionHandlers(); + + List<ChannelHandler> getResponseConnectionHandlers(); + +} \ No newline at end of file diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java index 119cc8cbd778daf2797dd81d1be50e4e4b36e983..1048150af17526b4809937678452924f1847e089 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/Proxy.java @@ -4,8 +4,6 @@ import java.net.InetSocketAddress; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; - import org.jboss.netty.bootstrap.ServerBootstrap; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.socket.ClientSocketChannelFactory; @@ -17,19 +15,20 @@ public abstract class Proxy<REQU, RESP> { private Channel serverChannel; protected ProxyConfig<REQU, RESP> proxyConfig; - public Proxy(ProxyEventListener<REQU, RESP> eventListener, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { + public Proxy(ProxyEventListener<REQU, RESP> eventListener, int localPort, String remoteHost, int remotePort, + ConnectionConfig connectionConfig) { super(); ExecutorService executor = Executors.newCachedThreadPool(); // Set up the client socket factory (for connecting to remote host). ClientSocketChannelFactory cf = new NioClientSocketChannelFactory(executor, executor); - this.proxyConfig = getProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + this.proxyConfig = getProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); this.serverChannel = null; } protected abstract ProxyConfig<REQU, RESP> getProxyConfig(ProxyEventListener<REQU, RESP> eventListener, - ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig); + ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, ConnectionConfig tlsConfig); public void start() { if (serverChannel != null) { @@ -54,4 +53,11 @@ public abstract class Proxy<REQU, RESP> { serverChannel = null; } + public boolean isOpen() { + if (serverChannel == null && serverChannel.isOpen()) { + return true; + } + return false; + } + } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java index bd3a42eeb7be4ceda667da694fb83d7adc346287..e263a507d94c40aad4c16e8cef1291060b3f0af5 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfig.java @@ -3,7 +3,6 @@ package net.ihe.gazelle.proxy.netty; import java.util.List; import net.ihe.gazelle.proxy.netty.channel.ProxySide; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelFactory; @@ -32,9 +31,5 @@ public interface ProxyConfig<REQU, RESP> { public int getRemotePort(); public int getLocalPort(); - - public void initContexts(TlsConfig tlsConfig); - - public void setTLS(boolean isTLS); } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java index 0aa3512aa77676946be8dfa1efbcdee3fae6f7ff..f5578282dbaeb52e903b229e7408ac896fea8169 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/ProxyConfigAbstract.java @@ -1,76 +1,46 @@ package net.ihe.gazelle.proxy.netty; import java.util.ArrayList; -import java.util.Collections; import java.util.List; -import javax.net.ssl.KeyManager; -import javax.net.ssl.SSLContext; -import javax.net.ssl.SSLEngine; -import javax.net.ssl.TrustManager; - import net.ihe.gazelle.proxy.netty.channel.ServerPipelineFactory; -import net.ihe.gazelle.proxy.netty.protocols.tls.AlwaysTrustManager; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsCredentials; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsKeyManager; import org.jboss.netty.channel.ChannelFactory; import org.jboss.netty.channel.ChannelHandler; import org.jboss.netty.channel.ChannelPipelineFactory; import org.jboss.netty.channel.socket.ClientSocketChannelFactory; -import org.jboss.netty.handler.ssl.SslHandler; public abstract class ProxyConfigAbstract<REQU, RESP> implements ProxyConfig<REQU, RESP> { - private static final String PROTOCOL = "TLS"; - private static final TrustManager[] ALWAYS_TRUST_MANAGER = new TrustManager[] { new AlwaysTrustManager() }; - protected ProxyEventListener<REQU, RESP> eventListener; protected ClientSocketChannelFactory cf; protected int localPort; protected String remoteHost; protected int remotePort; - - // TLS configuration - protected boolean isTLS; - - private SSLContext serverContext = null; - private SSLContext clientContext = null; - - // end TLS configuration + private ConnectionConfig connectionConfig; public ProxyConfigAbstract(ProxyEventListener<REQU, RESP> eventListener, ClientSocketChannelFactory cf, - int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { + int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) { super(); this.eventListener = eventListener; this.cf = cf; this.localPort = localPort; this.remoteHost = remoteHost; this.remotePort = remotePort; - if (tlsConfig != null) { - isTLS = true; - initContexts(tlsConfig); - } else { - isTLS = false; - } + this.connectionConfig = connectionConfig; } public List<ChannelHandler> getRequestConnectionHandlers() { - if (isTLS) { - SSLEngine engine = serverContext.createSSLEngine(); - engine.setUseClientMode(false); - return Collections.singletonList(getChannelHandler(engine)); + if (connectionConfig != null) { + return connectionConfig.getRequestConnectionHandlers(); } else { return new ArrayList<ChannelHandler>(0); } } public List<ChannelHandler> getResponseConnectionHandlers() { - if (isTLS) { - SSLEngine engine = clientContext.createSSLEngine(); - engine.setUseClientMode(true); - return Collections.singletonList(getChannelHandler(engine)); + if (connectionConfig != null) { + return connectionConfig.getResponseConnectionHandlers(); } else { return new ArrayList<ChannelHandler>(0); } @@ -96,46 +66,4 @@ public abstract class ProxyConfigAbstract<REQU, RESP> implements ProxyConfig<REQ return localPort; } - // TLS stuff - - public boolean isTLS() { - return isTLS; - } - - public void setTLS(boolean isTLS) { - this.isTLS = isTLS; - } - - public void initContexts(TlsConfig tlsConfig) { - clientContext = createContext(tlsConfig.getClientCredentials()); - serverContext = createContext(tlsConfig.getServerCredentials()); - } - - private SSLContext createContext(TlsCredentials credentials) { - SSLContext context = null; - try { - context = SSLContext.getInstance(PROTOCOL); - if (credentials == null) { - context.init(null, ALWAYS_TRUST_MANAGER, null); - } else { - KeyManager keyManager = getKeyManager(credentials); - KeyManager[] keyManagers = new KeyManager[] { keyManager }; - context.init(keyManagers, ALWAYS_TRUST_MANAGER, null); - } - } catch (Exception e) { - throw new Error("Failed to initialize the SSLContext", e); - } - return context; - } - - private KeyManager getKeyManager(TlsCredentials clientCredentials) { - return new TlsKeyManager(clientCredentials); - } - - private ChannelHandler getChannelHandler(SSLEngine engine) { - SslHandler sslHandler = new SslHandler(engine); - sslHandler.setEnableRenegotiation(true); - return sslHandler; - } - } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java index 0082bdb9709b6611bd4ef2338961257f4114ec9b..5e063323318224d6e65312eb087e9f609a6ca0da 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxy.java @@ -1,26 +1,26 @@ package net.ihe.gazelle.proxy.netty.protocols.dicom; import jp.digitalsensation.ihej.transactionmonitor.dicom.messageexchange.DimseMessage; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.Proxy; import net.ihe.gazelle.proxy.netty.ProxyConfig; import net.ihe.gazelle.proxy.netty.ProxyEventListener; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.socket.ClientSocketChannelFactory; public class DicomProxy extends Proxy<DimseMessage, DimseMessage> { public DicomProxy(ProxyEventListener<DimseMessage, DimseMessage> eventListener, int localPort, String remoteHost, - int remotePort, String storageFolder, TlsConfig tlsConfig) { - super(eventListener, localPort, remoteHost, remotePort, tlsConfig); + int remotePort, String storageFolder, ConnectionConfig connectionConfig) { + super(eventListener, localPort, remoteHost, remotePort, connectionConfig); ((DicomProxyConfig) proxyConfig).setStorageFolder(storageFolder); } @Override protected ProxyConfig<DimseMessage, DimseMessage> getProxyConfig( ProxyEventListener<DimseMessage, DimseMessage> eventListener, ClientSocketChannelFactory cf, int localPort, - String remoteHost, int remotePort, TlsConfig tlsConfig) { - return new DicomProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + String remoteHost, int remotePort, ConnectionConfig connectionConfig) { + return new DicomProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java index eef87b9103ece333a1599bc3915c28e58c6c4179..3895b18434dfc70652e940fb71516b8259500e52 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/dicom/DicomProxyConfig.java @@ -4,10 +4,10 @@ import java.util.ArrayList; import java.util.List; import jp.digitalsensation.ihej.transactionmonitor.dicom.messageexchange.DimseMessage; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract; import net.ihe.gazelle.proxy.netty.ProxyEventListener; import net.ihe.gazelle.proxy.netty.channel.ProxySide; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandler; @@ -18,8 +18,8 @@ public class DicomProxyConfig extends ProxyConfigAbstract<DimseMessage, DimseMes private String storageFolder; public DicomProxyConfig(ProxyEventListener<DimseMessage, DimseMessage> eventListener, - ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { - super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) { + super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } public String getStorageFolder() { diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java index abf3fd5bdeaae2c199e166da390708b534f87a26..53079bf6a03295a2ecd3f86eac33257c678d854c 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7Proxy.java @@ -1,23 +1,24 @@ package net.ihe.gazelle.proxy.netty.protocols.hl7; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.Proxy; import net.ihe.gazelle.proxy.netty.ProxyConfig; import net.ihe.gazelle.proxy.netty.ProxyEventListener; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.socket.ClientSocketChannelFactory; public class HL7Proxy extends Proxy<String, String> { public HL7Proxy(ProxyEventListener<String, String> eventListener, int localPort, String remoteHost, int remotePort, - TlsConfig tlsConfig) { - super(eventListener, localPort, remoteHost, remotePort, tlsConfig); + ConnectionConfig connectionConfig) { + super(eventListener, localPort, remoteHost, remotePort, connectionConfig); } @Override protected ProxyConfig<String, String> getProxyConfig(ProxyEventListener<String, String> eventListener, - ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { - return new HL7ProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, + ConnectionConfig connectionConfig) { + return new HL7ProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java index 80ca214a63aaca5578d922402df02c7cf6d84e9a..3bef6069f047735145bf929d350a093caf9ee9d5 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/hl7/HL7ProxyConfig.java @@ -3,10 +3,10 @@ package net.ihe.gazelle.proxy.netty.protocols.hl7; import java.util.ArrayList; import java.util.List; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract; import net.ihe.gazelle.proxy.netty.ProxyEventListener; import net.ihe.gazelle.proxy.netty.channel.ProxySide; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandler; @@ -15,8 +15,8 @@ import org.jboss.netty.channel.socket.ClientSocketChannelFactory; public class HL7ProxyConfig extends ProxyConfigAbstract<String, String> { public HL7ProxyConfig(ProxyEventListener<String, String> eventListener, ClientSocketChannelFactory cf, - int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { - super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) { + super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } public List<ChannelHandler> getRequestDecoderChannels() { diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java index d848dae73c90ae46335d458477d67efeaa67e113..4b34116f4c0293489d3f26fdeca925914804702d 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxy.java @@ -1,9 +1,9 @@ package net.ihe.gazelle.proxy.netty.protocols.http; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.Proxy; import net.ihe.gazelle.proxy.netty.ProxyConfig; import net.ihe.gazelle.proxy.netty.ProxyEventListener; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.socket.ClientSocketChannelFactory; import org.jboss.netty.handler.codec.http.HttpRequest; @@ -12,15 +12,15 @@ import org.jboss.netty.handler.codec.http.HttpResponse; public class HttpProxy extends Proxy<HttpRequest, HttpResponse> { public HttpProxy(ProxyEventListener<HttpRequest, HttpResponse> proxyEvent, int localPort, String remoteHost, - int remotePort, TlsConfig tlsConfig) { - super(proxyEvent, localPort, remoteHost, remotePort, tlsConfig); + int remotePort, ConnectionConfig connectionConfig) { + super(proxyEvent, localPort, remoteHost, remotePort, connectionConfig); } @Override protected ProxyConfig<HttpRequest, HttpResponse> getProxyConfig( ProxyEventListener<HttpRequest, HttpResponse> eventListener, ClientSocketChannelFactory cf, int localPort, - String remoteHost, int remotePort, TlsConfig tlsConfig) { - return new HttpProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + String remoteHost, int remotePort, ConnectionConfig connectionConfig) { + return new HttpProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java index 8e3cd26d964e022ae314f0b6790f81b7fef033ca..1095a4cab4a0e84f4c92a38ca290bf320e4e500d 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/http/HttpProxyConfig.java @@ -3,10 +3,10 @@ package net.ihe.gazelle.proxy.netty.protocols.http; import java.util.ArrayList; import java.util.List; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract; import net.ihe.gazelle.proxy.netty.ProxyEventListener; import net.ihe.gazelle.proxy.netty.channel.ProxySide; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.Channel; import org.jboss.netty.channel.ChannelHandler; @@ -21,8 +21,8 @@ import org.jboss.netty.handler.codec.http.HttpResponseDecoder; public class HttpProxyConfig extends ProxyConfigAbstract<HttpRequest, HttpResponse> { public HttpProxyConfig(ProxyEventListener<HttpRequest, HttpResponse> eventListener, ClientSocketChannelFactory cf, - int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { - super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) { + super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } public List<ChannelHandler> getRequestDecoderChannels() { diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java index 057385790b162c9842a44a43c7486e31409a6b43..96724451d2de1dded6c05abe9364a05a086fd344 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxy.java @@ -1,23 +1,24 @@ package net.ihe.gazelle.proxy.netty.protocols.syslog; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.Proxy; import net.ihe.gazelle.proxy.netty.ProxyConfig; import net.ihe.gazelle.proxy.netty.ProxyEventListener; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.channel.socket.ClientSocketChannelFactory; public class SyslogProxy extends Proxy<String, String> { public SyslogProxy(ProxyEventListener<String, String> eventListener, int localPort, String remoteHost, - int remotePort, TlsConfig tlsConfig) { - super(eventListener, localPort, remoteHost, remotePort, tlsConfig); + int remotePort, ConnectionConfig connectionConfig) { + super(eventListener, localPort, remoteHost, remotePort, connectionConfig); } @Override protected ProxyConfig<String, String> getProxyConfig(ProxyEventListener<String, String> eventListener, - ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { - return new SyslogProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + ClientSocketChannelFactory cf, int localPort, String remoteHost, int remotePort, + ConnectionConfig connectionConfig) { + return new SyslogProxyConfig(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } } diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java index 8f06a5abdd61fec63b2b0726b70bf9d2368cfce1..5bfae11956c92b01f58b28099e5ac43142bbcd0f 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/syslog/SyslogProxyConfig.java @@ -3,10 +3,10 @@ package net.ihe.gazelle.proxy.netty.protocols.syslog; import java.util.ArrayList; import java.util.List; +import net.ihe.gazelle.proxy.netty.ConnectionConfig; import net.ihe.gazelle.proxy.netty.ProxyConfigAbstract; import net.ihe.gazelle.proxy.netty.ProxyEventListener; import net.ihe.gazelle.proxy.netty.channel.ProxySide; -import net.ihe.gazelle.proxy.netty.protocols.tls.TlsConfig; import org.jboss.netty.buffer.ChannelBuffer; import org.jboss.netty.buffer.ChannelBuffers; @@ -19,8 +19,8 @@ import org.jboss.netty.util.CharsetUtil; public class SyslogProxyConfig extends ProxyConfigAbstract<String, String> { public SyslogProxyConfig(ProxyEventListener<String, String> eventListener, ClientSocketChannelFactory cf, - int localPort, String remoteHost, int remotePort, TlsConfig tlsConfig) { - super(eventListener, cf, localPort, remoteHost, remotePort, tlsConfig); + int localPort, String remoteHost, int remotePort, ConnectionConfig connectionConfig) { + super(eventListener, cf, localPort, remoteHost, remotePort, connectionConfig); } public List<ChannelHandler> getRequestDecoderChannels() { diff --git a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java index 63a825d2a190b9cb7b6eeab5072c1d61f380f8e4..e88dfecbffd81d51a091593a690fae90ce5a965e 100644 --- a/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java +++ b/gazelle-proxy-netty/src/main/java/net/ihe/gazelle/proxy/netty/protocols/tls/TlsConfig.java @@ -1,22 +1,86 @@ package net.ihe.gazelle.proxy.netty.protocols.tls; -public class TlsConfig { +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; - private TlsCredentials serverCredentials; - private TlsCredentials clientCredentials; +import javax.net.ssl.KeyManager; +import javax.net.ssl.SSLContext; +import javax.net.ssl.SSLEngine; +import javax.net.ssl.TrustManager; + +import net.ihe.gazelle.proxy.netty.ConnectionConfig; + +import org.jboss.netty.channel.ChannelHandler; +import org.jboss.netty.handler.ssl.SslHandler; + +public class TlsConfig implements ConnectionConfig { + + private static final String PROTOCOL = "TLS"; + private static final TrustManager[] ALWAYS_TRUST_MANAGER = new TrustManager[] { new AlwaysTrustManager() }; + + private SSLContext clientContext; + private SSLContext serverContext; public TlsConfig(TlsCredentials serverCredentials, TlsCredentials clientCredentials) { super(); - this.serverCredentials = serverCredentials; - this.clientCredentials = clientCredentials; + if (clientCredentials != null) { + clientContext = createContext(clientCredentials); + } else { + clientContext = null; + } + if (serverCredentials != null) { + serverContext = createContext(serverCredentials); + } else { + serverContext = null; + } + } + + public List<ChannelHandler> getRequestConnectionHandlers() { + if (serverContext != null) { + SSLEngine engine = serverContext.createSSLEngine(); + engine.setUseClientMode(false); + return Collections.singletonList(getChannelHandler(engine)); + } else { + return new ArrayList<ChannelHandler>(0); + } + } + + public List<ChannelHandler> getResponseConnectionHandlers() { + if (clientContext != null) { + SSLEngine engine = clientContext.createSSLEngine(); + engine.setUseClientMode(true); + return Collections.singletonList(getChannelHandler(engine)); + } else { + return new ArrayList<ChannelHandler>(0); + } + } + + private SSLContext createContext(TlsCredentials credentials) { + SSLContext context = null; + try { + context = SSLContext.getInstance(PROTOCOL); + if (credentials == null) { + context.init(null, ALWAYS_TRUST_MANAGER, null); + } else { + KeyManager keyManager = getKeyManager(credentials); + KeyManager[] keyManagers = new KeyManager[] { keyManager }; + context.init(keyManagers, ALWAYS_TRUST_MANAGER, null); + } + } catch (Exception e) { + throw new Error("Failed to initialize the SSLContext", e); + } + return context; } - public TlsCredentials getServerCredentials() { - return serverCredentials; + private KeyManager getKeyManager(TlsCredentials clientCredentials) { + return new TlsKeyManager(clientCredentials); } - public TlsCredentials getClientCredentials() { - return clientCredentials; + private ChannelHandler getChannelHandler(SSLEngine engine) { + SslHandler sslHandler = new SslHandler(engine); + sslHandler.setEnableRenegotiation(true); + return sslHandler; } } diff --git a/pom.xml b/pom.xml index 5011c648ba4721b5fc88cb9cd208b17ff14a5257..8db4de868f50483cc55bae83e2eecf8954d2c344 100644 --- a/pom.xml +++ b/pom.xml @@ -43,7 +43,13 @@ <dependency> <groupId>net.ihe.gazelle.simulators.tls</groupId> <artifactId>TLSSimulator-pki-jar</artifactId> - <version>1.4</version> + <version>1.13</version> + <type>jar</type> + </dependency> + <dependency> + <groupId>net.ihe.gazelle.simulators.tls</groupId> + <artifactId>TLSSimulator-test-jar</artifactId> + <version>1.13</version> <type>jar</type> </dependency>