summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins/websocket
diff options
context:
space:
mode:
authorAlex Rudyy <orudyy@apache.org>2015-04-15 09:47:28 +0000
committerAlex Rudyy <orudyy@apache.org>2015-04-15 09:47:28 +0000
commit0a0baee45ebcff44635907d457c4ff6810b09c87 (patch)
tree8bfb0f9eddbc23cff88af69be80ab3ce7d47011c /qpid/java/broker-plugins/websocket
parent54aa3d7070da16ce55c28ccad3f7d0871479e461 (diff)
downloadqpid-python-0a0baee45ebcff44635907d457c4ff6810b09c87.tar.gz
QPID-6481: Move java source tree to top level
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk@1673693 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'qpid/java/broker-plugins/websocket')
-rw-r--r--qpid/java/broker-plugins/websocket/pom.xml77
-rw-r--r--qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java345
-rw-r--r--qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProvider.java52
-rw-r--r--qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProviderFactory.java57
4 files changed, 0 insertions, 531 deletions
diff --git a/qpid/java/broker-plugins/websocket/pom.xml b/qpid/java/broker-plugins/websocket/pom.xml
deleted file mode 100644
index eb92e9da36..0000000000
--- a/qpid/java/broker-plugins/websocket/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
- 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.
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
- <modelVersion>4.0.0</modelVersion>
-
- <parent>
- <groupId>org.apache.qpid</groupId>
- <artifactId>qpid-java-build</artifactId>
- <version>0.32-SNAPSHOT</version>
- <relativePath>../../pom.xml</relativePath>
- </parent>
-
- <artifactId>qpid-broker-plugins-websocket</artifactId>
- <name>Qpid WebSocket Broker Plug-in</name>
- <description>WebSocket broker plug-in</description>
-
- <dependencies>
- <dependency>
- <groupId>org.apache.qpid</groupId>
- <artifactId>qpid-broker-core</artifactId>
- <version>${project.version}</version>
- <scope>provided</scope>
- </dependency>
-
-
- <dependency>
- <groupId>org.apache.qpid</groupId>
- <artifactId>qpid-broker-codegen</artifactId>
- <version>${project.version}</version>
- <optional>true</optional>
- </dependency>
-
- <dependency>
- <groupId>org.apache.geronimo.specs</groupId>
- <artifactId>geronimo-servlet_3.0_spec</artifactId>
- <version>${geronimo-servlet-version}</version>
- </dependency>
-
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-server</artifactId>
- <version>${jetty-version}</version>
- <exclusions>
- <exclusion>
- <groupId>org.eclipse.jetty.orbit</groupId>
- <artifactId>javax.servlet</artifactId>
- </exclusion>
- </exclusions>
- </dependency>
-
- <dependency>
- <groupId>org.eclipse.jetty</groupId>
- <artifactId>jetty-websocket</artifactId>
- <version>${jetty-version}</version>
- </dependency>
-
- </dependencies>
-
- <build>
- </build>
-
-</project>
diff --git a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java b/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java
deleted file mode 100644
index 896a7119f7..0000000000
--- a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketProvider.java
+++ /dev/null
@@ -1,345 +0,0 @@
-/*
- *
- * 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.qpid.server.transport.websocket;
-
-import java.io.IOException;
-import java.net.InetSocketAddress;
-import java.net.SocketAddress;
-import java.nio.ByteBuffer;
-import java.security.Principal;
-import java.security.cert.X509Certificate;
-import java.util.Collections;
-import java.util.Set;
-
-import javax.net.ssl.SSLContext;
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.eclipse.jetty.server.Connector;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
-import org.eclipse.jetty.util.ssl.SslContextFactory;
-import org.eclipse.jetty.websocket.WebSocket;
-import org.eclipse.jetty.websocket.WebSocketHandler;
-
-import org.apache.qpid.protocol.ProtocolEngine;
-import org.apache.qpid.protocol.ProtocolEngineFactory;
-import org.apache.qpid.server.model.Broker;
-import org.apache.qpid.server.model.Protocol;
-import org.apache.qpid.server.model.Transport;
-import org.apache.qpid.server.model.port.AmqpPort;
-import org.apache.qpid.server.protocol.MultiVersionProtocolEngineFactory;
-import org.apache.qpid.server.transport.AcceptingTransport;
-import org.apache.qpid.server.util.ServerScopedRuntimeException;
-import org.apache.qpid.transport.ByteBufferSender;
-import org.apache.qpid.transport.network.NetworkConnection;
-import org.apache.qpid.transport.network.security.ssl.SSLUtil;
-
-class WebSocketProvider implements AcceptingTransport
-{
- public static final String AMQP_WEBSOCKET_SUBPROTOCOL = "AMQPWSB10";
- public static final String X509_CERTIFICATES = "javax.servlet.request.X509Certificate";
- private final Transport _transport;
- private final SSLContext _sslContext;
- private final AmqpPort<?> _port;
- private final Set<Protocol> _supported;
- private final Protocol _defaultSupportedProtocolReply;
- private final ProtocolEngineFactory _factory;
- private Server _server;
-
- WebSocketProvider(final Transport transport,
- final SSLContext sslContext,
- final AmqpPort<?> port,
- final Set<Protocol> supported,
- final Protocol defaultSupportedProtocolReply)
- {
- _transport = transport;
- _sslContext = sslContext;
- _port = port;
- _supported = supported;
- _defaultSupportedProtocolReply = defaultSupportedProtocolReply;
- _factory = new MultiVersionProtocolEngineFactory(
- _port.getParent(Broker.class),
- _supported,
- _defaultSupportedProtocolReply,
- _port,
- _transport);
-
- }
-
- @Override
- public void start()
- {
- _server = new Server();
-
- Connector connector = null;
-
-
- if (_transport == Transport.WS)
- {
- connector = new SelectChannelConnector();
- }
- else if (_transport == Transport.WSS)
- {
- SslContextFactory factory = new SslContextFactory();
- factory.setSslContext(_sslContext);
- factory.addExcludeProtocols(SSLUtil.SSLV3_PROTOCOL);
- factory.setNeedClientAuth(_port.getNeedClientAuth());
- factory.setWantClientAuth(_port.getWantClientAuth());
- connector = new SslSelectChannelConnector(factory);
- }
- else
- {
- throw new IllegalArgumentException("Unexpected transport on port " + _port.getName() + ":" + _transport);
- }
-
- String bindingAddress = null;
-
- bindingAddress = _port.getBindingAddress();
-
- if (bindingAddress != null && !bindingAddress.trim().equals("") && !bindingAddress.trim().equals("*"))
- {
- connector.setHost(bindingAddress.trim());
- }
-
- connector.setPort(_port.getPort());
- _server.addConnector(connector);
-
- WebSocketHandler wshandler = new WebSocketHandler()
- {
- @Override
- public WebSocket doWebSocketConnect(final HttpServletRequest request, final String protocol)
- {
-
- Principal principal = null;
- if(Collections.list(request.getAttributeNames()).contains(X509_CERTIFICATES))
- {
- X509Certificate[] certificates =
- (X509Certificate[]) request.getAttribute(X509_CERTIFICATES);
- if(certificates != null && certificates.length != 0)
- {
-
- principal = certificates[0].getSubjectDN();
- }
- }
-
- SocketAddress remoteAddress = new InetSocketAddress(request.getRemoteHost(), request.getRemotePort());
- SocketAddress localAddress = new InetSocketAddress(request.getLocalName(), request.getLocalPort());
- return AMQP_WEBSOCKET_SUBPROTOCOL.equals(protocol) ? new AmqpWebSocket(_transport, localAddress, remoteAddress, principal) : null;
- }
- };
-
- _server.setHandler(wshandler);
- _server.setSendServerVersion(false);
- wshandler.setHandler(new AbstractHandler()
- {
- @Override
- public void handle(final String target,
- final Request baseRequest,
- final HttpServletRequest request,
- final HttpServletResponse response)
- throws IOException, ServletException
- {
- if (response.isCommitted() || baseRequest.isHandled())
- {
- return;
- }
- baseRequest.setHandled(true);
- response.setStatus(HttpServletResponse.SC_FORBIDDEN);
-
-
- }
- });
- try
- {
- _server.start();
- }
- catch(RuntimeException e)
- {
- throw e;
- }
- catch (Exception e)
- {
- throw new ServerScopedRuntimeException(e);
- }
-
- }
-
- @Override
- public void close()
- {
-
- }
-
- private class AmqpWebSocket implements WebSocket,WebSocket.OnBinaryMessage
- {
- private final SocketAddress _localAddress;
- private final SocketAddress _remoteAddress;
- private final Principal _userPrincipal;
- private Connection _connection;
- private final Transport _transport;
- private ProtocolEngine _engine;
-
- private AmqpWebSocket(final Transport transport,
- final SocketAddress localAddress,
- final SocketAddress remoteAddress,
- final Principal userPrincipal)
- {
- _transport = transport;
- _localAddress = localAddress;
- _remoteAddress = remoteAddress;
- _userPrincipal = userPrincipal;
- }
-
- @Override
- public void onMessage(final byte[] data, final int offset, final int length)
- {
- _engine.received(ByteBuffer.wrap(data, offset, length).slice());
- }
-
- @Override
- public void onOpen(final Connection connection)
- {
- _connection = connection;
-
- _engine = _factory.newProtocolEngine(_remoteAddress);
-
- final ConnectionWrapper connectionWrapper =
- new ConnectionWrapper(connection, _localAddress, _remoteAddress);
- connectionWrapper.setPeerPrincipal(_userPrincipal);
- _engine.setNetworkConnection(connectionWrapper, connectionWrapper.getSender());
-
- }
-
- @Override
- public void onClose(final int closeCode, final String message)
- {
- _engine.closed();
- }
- }
-
- private class ConnectionWrapper implements NetworkConnection, ByteBufferSender
- {
- private final WebSocket.Connection _connection;
- private final SocketAddress _localAddress;
- private final SocketAddress _remoteAddress;
- private Principal _principal;
- private int _maxWriteIdle;
- private int _maxReadIdle;
-
- public ConnectionWrapper(final WebSocket.Connection connection,
- final SocketAddress localAddress,
- final SocketAddress remoteAddress)
- {
- _connection = connection;
- _localAddress = localAddress;
- _remoteAddress = remoteAddress;
- }
-
- @Override
- public ByteBufferSender getSender()
- {
- return this;
- }
-
- @Override
- public void start()
- {
-
- }
-
- @Override
- public void send(final ByteBuffer msg)
- {
- try
- {
- _connection.sendMessage(msg.array(),msg.arrayOffset()+msg.position(),msg.remaining());
- }
- catch (IOException e)
- {
- close();
- }
- }
-
- @Override
- public void flush()
- {
-
- }
-
- @Override
- public void close()
- {
- _connection.close();
- }
-
- @Override
- public SocketAddress getRemoteAddress()
- {
- return _remoteAddress;
- }
-
- @Override
- public SocketAddress getLocalAddress()
- {
- return _localAddress;
- }
-
- @Override
- public void setMaxWriteIdle(final int sec)
- {
- _maxWriteIdle = sec;
- }
-
- @Override
- public void setMaxReadIdle(final int sec)
- {
- _maxReadIdle = sec;
- }
-
- @Override
- public Principal getPeerPrincipal()
- {
- return _principal;
- }
-
- @Override
- public int getMaxReadIdle()
- {
- return _maxReadIdle;
- }
-
- @Override
- public int getMaxWriteIdle()
- {
- return _maxWriteIdle;
- }
-
- void setPeerPrincipal(final Principal peerPrincipal)
- {
- _principal = peerPrincipal;
- }
- }
-}
diff --git a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProvider.java b/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProvider.java
deleted file mode 100644
index c7578adb91..0000000000
--- a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProvider.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/*
- *
- * 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.qpid.server.transport.websocket;
-
-import java.util.Set;
-
-import javax.net.ssl.SSLContext;
-
-import org.apache.qpid.server.model.Protocol;
-import org.apache.qpid.server.model.Transport;
-import org.apache.qpid.server.model.port.AmqpPort;
-import org.apache.qpid.server.transport.AcceptingTransport;
-import org.apache.qpid.server.transport.TransportProvider;
-
-class WebSocketTransportProvider implements TransportProvider
-{
- public WebSocketTransportProvider()
- {
- }
-
- @Override
- public AcceptingTransport createTransport(final Set<Transport> transports,
- final SSLContext sslContext,
- final AmqpPort<?> port,
- final Set<Protocol> supported,
- final Protocol defaultSupportedProtocolReply)
- {
- return new WebSocketProvider(transports.iterator().next(),
- sslContext,
- port,
- supported,
- defaultSupportedProtocolReply);
- }
-}
diff --git a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProviderFactory.java b/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProviderFactory.java
deleted file mode 100644
index e3db7e3686..0000000000
--- a/qpid/java/broker-plugins/websocket/src/main/java/org/apache/qpid/server/transport/websocket/WebSocketTransportProviderFactory.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/*
- *
- * 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.qpid.server.transport.websocket;
-
-import java.util.Arrays;
-import java.util.EnumSet;
-import java.util.HashSet;
-import java.util.Set;
-
-import org.apache.qpid.server.model.Transport;
-import org.apache.qpid.server.plugin.PluggableService;
-import org.apache.qpid.server.plugin.TransportProviderFactory;
-import org.apache.qpid.server.transport.TransportProvider;
-
-@PluggableService
-public class WebSocketTransportProviderFactory implements TransportProviderFactory
-{
-
- private static final String TYPE = "Websocket";
-
- @Override
- public Set<Set<Transport>> getSupportedTransports()
- {
- return new HashSet<Set<Transport>>(Arrays.asList(EnumSet.of(Transport.WS),
- EnumSet.of(Transport.WSS)));
- }
-
- @Override
- public TransportProvider getTransportProvider(final Set<Transport> transports)
- {
- return new WebSocketTransportProvider();
- }
-
- @Override
- public String getType()
- {
- return TYPE;
- }
-}