You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by de...@apache.org on 2012/07/04 17:05:45 UTC
svn commit: r1357293 - in /activemq/trunk/activemq-optional/src/main:
java/org/apache/activemq/transport/ java/org/apache/activemq/transport/https/
java/org/apache/activemq/transport/ws/
java/org/apache/activemq/transport/wss/ resources/META-INF/servic...
Author: dejanb
Date: Wed Jul 4 15:05:44 2012
New Revision: 1357293
URL: http://svn.apache.org/viewvc?rev=1357293&view=rev
Log:
https://issues.apache.org/jira/browse/AMQ-3880 - wss transport implementation
Added:
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportFactory.java
- copied, changed from r1357201, activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportServer.java
activemq/trunk/activemq-optional/src/main/resources/META-INF/services/org/apache/activemq/transport/wss
Modified:
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/SecureSocketConnectorFactory.java
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java
activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java
Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/SecureSocketConnectorFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/SecureSocketConnectorFactory.java?rev=1357293&r1=1357292&r2=1357293&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/SecureSocketConnectorFactory.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/SecureSocketConnectorFactory.java Wed Jul 4 15:05:44 2012
@@ -20,6 +20,8 @@ import org.apache.activemq.spring.Spring
import org.apache.activemq.transport.https.Krb5AndCertsSslSocketConnector;
import org.apache.activemq.util.IntrospectionSupport;
import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.server.ssl.SslConnector;
+import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
import org.eclipse.jetty.util.ssl.SslContextFactory;
import org.apache.activemq.broker.SslContext;
@@ -47,7 +49,14 @@ public class SecureSocketConnectorFactor
@Override
public Connector createConnector() throws Exception {
- Krb5AndCertsSslSocketConnector sslConnector = new Krb5AndCertsSslSocketConnector();
+ IntrospectionSupport.setProperties(this, getTransportOptions());
+ SslConnector sslConnector;
+ if (Krb5AndCertsSslSocketConnector.isKrb(auth)) {
+ sslConnector = new Krb5AndCertsSslSocketConnector();
+ ((Krb5AndCertsSslSocketConnector)sslConnector).setMode(auth);
+ } else {
+ sslConnector = new SslSelectChannelConnector();
+ }
SSLContext sslContext = context == null ? null : context.getSSLContext();
@@ -61,11 +70,6 @@ public class SecureSocketConnectorFactor
factory.setSslContext(sslContext);
} else {
- IntrospectionSupport.setProperties(this, getTransportOptions());
-
- if (auth != null) {
- sslConnector.setMode(auth);
- }
if (keyStore != null) {
factory.setKeyStorePath(keyStore);
Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java?rev=1357293&r1=1357292&r2=1357293&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/https/Krb5AndCertsSslSocketConnector.java Wed Jul 4 15:05:44 2012
@@ -70,6 +70,10 @@ public class Krb5AndCertsSslSocketConnec
setPasswords();
}
+ public static boolean isKrb(String mode) {
+ return mode == MODE.KRB.toString() || mode == MODE.BOTH.toString();
+ }
+
public void setMode(String mode) {
useKrb = mode == MODE.KRB.toString() || mode == MODE.BOTH.toString();
useCerts = mode == MODE.CERTS.toString() || mode == MODE.BOTH.toString();
Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java?rev=1357293&r1=1357292&r2=1357293&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java Wed Jul 4 15:05:44 2012
@@ -19,9 +19,15 @@ package org.apache.activemq.transport.ws
import java.io.IOException;
import java.net.URI;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
import org.apache.activemq.transport.TransportFactory;
import org.apache.activemq.transport.TransportServer;
+import org.apache.activemq.util.IOExceptionSupport;
+import org.apache.activemq.util.IntrospectionSupport;
+import org.apache.activemq.util.URISupport;
/**
*
@@ -31,7 +37,15 @@ import org.apache.activemq.transport.Tra
public class WSTransportFactory extends TransportFactory {
public TransportServer doBind(URI location) throws IOException {
- return new WSTransportServer(location);
+ try {
+ Map<String, String> options = new HashMap<String, String>(URISupport.parseParameters(location));
+ WSTransportServer result = new WSTransportServer(location);
+ Map<String, Object> transportOptions = IntrospectionSupport.extractProperties(options, "transport.");
+ result.setTransportOption(transportOptions);
+ return result;
+ } catch (URISyntaxException e) {
+ throw IOExceptionSupport.create(e);
+ }
}
}
Modified: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java?rev=1357293&r1=1357292&r2=1357293&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportServer.java Wed Jul 4 15:05:44 2012
@@ -18,6 +18,7 @@
package org.apache.activemq.transport.ws;
import org.apache.activemq.command.BrokerInfo;
+import org.apache.activemq.transport.SocketConnectorFactory;
import org.apache.activemq.transport.TransportServerSupport;
import org.apache.activemq.util.ServiceStopper;
import org.eclipse.jetty.server.Connector;
@@ -28,6 +29,7 @@ import org.eclipse.jetty.servlet.Servlet
import java.net.InetSocketAddress;
import java.net.URI;
+import java.util.Map;
/**
* Creates a web server and registers web socket server
@@ -38,16 +40,18 @@ public class WSTransportServer extends T
private URI bindAddress;
private Server server;
private Connector connector;
+ protected SocketConnectorFactory socketConnectorFactory;
public WSTransportServer(URI location) {
super(location);
this.bindAddress = location;
+ socketConnectorFactory = new SocketConnectorFactory();
}
protected void doStart() throws Exception {
server = new Server();
if (connector == null) {
- connector = new SelectChannelConnector();
+ connector = socketConnectorFactory.createConnector();
}
connector.setHost(bindAddress.getHost());
connector.setPort(bindAddress.getPort());
@@ -81,4 +85,14 @@ public class WSTransportServer extends T
public void setBrokerInfo(BrokerInfo brokerInfo) {
}
+ protected void setConnector(Connector connector) {
+ this.connector = connector;
+ }
+
+ @Override
+ public void setTransportOption(Map<String, Object> transportOptions) {
+ socketConnectorFactory.setTransportOptions(transportOptions);
+ super.setTransportOption(transportOptions);
+ }
+
}
Copied: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportFactory.java (from r1357201, activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java)
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportFactory.java?p2=activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportFactory.java&p1=activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java&r1=1357201&r2=1357293&rev=1357293&view=diff
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/ws/WSTransportFactory.java (original)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportFactory.java Wed Jul 4 15:05:44 2012
@@ -14,24 +14,39 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
+package org.apache.activemq.transport.wss;
-package org.apache.activemq.transport.ws;
+import org.apache.activemq.broker.SslContext;
+import org.apache.activemq.transport.TransportFactory;
+import org.apache.activemq.transport.TransportServer;
+import org.apache.activemq.transport.ws.WSTransportServer;
+import org.apache.activemq.util.IOExceptionSupport;
+import org.apache.activemq.util.IntrospectionSupport;
+import org.apache.activemq.util.URISupport;
import java.io.IOException;
import java.net.URI;
-
-import org.apache.activemq.transport.TransportFactory;
-import org.apache.activemq.transport.TransportServer;
+import java.net.URISyntaxException;
+import java.util.HashMap;
+import java.util.Map;
/**
- *
- * Factory for WebSocket (ws) transport
+ *
+ * Factory for Secure WebSocket (wss) transport
*
*/
-public class WSTransportFactory extends TransportFactory {
+public class WSSTransportFactory extends TransportFactory {
public TransportServer doBind(URI location) throws IOException {
- return new WSTransportServer(location);
+ try {
+ Map<String, String> options = new HashMap<String, String>(URISupport.parseParameters(location));
+ WSSTransportServer result = new WSSTransportServer(location, SslContext.getCurrentSslContext());
+ Map<String, Object> transportOptions = IntrospectionSupport.extractProperties(options, "transport.");
+ result.setTransportOption(transportOptions);
+ return result;
+ } catch (URISyntaxException e) {
+ throw IOExceptionSupport.create(e);
+ }
}
}
Added: activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportServer.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportServer.java?rev=1357293&view=auto
==============================================================================
--- activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportServer.java (added)
+++ activemq/trunk/activemq-optional/src/main/java/org/apache/activemq/transport/wss/WSSTransportServer.java Wed Jul 4 15:05:44 2012
@@ -0,0 +1,47 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.activemq.transport.wss;
+
+import org.apache.activemq.broker.SslContext;
+import org.apache.activemq.transport.SecureSocketConnectorFactory;
+import org.apache.activemq.transport.https.Krb5AndCertsSslSocketConnector;
+import org.apache.activemq.transport.ws.WSTransportServer;
+import org.eclipse.jetty.server.Connector;
+import org.eclipse.jetty.util.ssl.SslContextFactory;
+
+import javax.net.ssl.SSLContext;
+import java.net.URI;
+
+public class WSSTransportServer extends WSTransportServer {
+ private SslContext context;
+
+ public WSSTransportServer(URI location, SslContext context) {
+ super(location);
+ this.context = context;
+ this.socketConnectorFactory = new SecureSocketConnectorFactory(context);
+ }
+
+ @Override
+ protected void doStart() throws Exception {
+
+ Connector sslConnector = socketConnectorFactory.createConnector();
+
+ setConnector(sslConnector);
+
+ super.doStart();
+ }
+}
Added: activemq/trunk/activemq-optional/src/main/resources/META-INF/services/org/apache/activemq/transport/wss
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-optional/src/main/resources/META-INF/services/org/apache/activemq/transport/wss?rev=1357293&view=auto
==============================================================================
--- activemq/trunk/activemq-optional/src/main/resources/META-INF/services/org/apache/activemq/transport/wss (added)
+++ activemq/trunk/activemq-optional/src/main/resources/META-INF/services/org/apache/activemq/transport/wss Wed Jul 4 15:05:44 2012
@@ -0,0 +1,17 @@
+## ---------------------------------------------------------------------------
+## Licensed to the Apache Software Foundation (ASF) under one or more
+## contributor license agreements. See the NOTICE file distributed with
+## this work for additional information regarding copyright ownership.
+## The ASF licenses this file to You under the Apache License, Version 2.0
+## (the "License"); you may not use this file except in compliance with
+## the License. You may obtain a copy of the License at
+##
+## http://www.apache.org/licenses/LICENSE-2.0
+##
+## Unless required by applicable law or agreed to in writing, software
+## distributed under the License is distributed on an "AS IS" BASIS,
+## WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+## See the License for the specific language governing permissions and
+## limitations under the License.
+## ---------------------------------------------------------------------------
+class=org.apache.activemq.transport.wss.WSSTransportFactory
\ No newline at end of file