summaryrefslogtreecommitdiff
path: root/qpid/java/broker-plugins
diff options
context:
space:
mode:
Diffstat (limited to 'qpid/java/broker-plugins')
-rw-r--r--qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java14
-rw-r--r--qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java16
2 files changed, 24 insertions, 6 deletions
diff --git a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
index 26d659fc34..6e2a6cac7d 100644
--- a/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
+++ b/qpid/java/broker-plugins/amqp-0-10-protocol/src/main/java/org/apache/qpid/server/protocol/v0_10/ServerConnectionDelegate.java
@@ -184,7 +184,8 @@ public class ServerConnectionDelegate extends ServerDelegate
vhostName = "";
}
- vhost = ((AmqpPort)sconn.getPort()).getVirtualHost(vhostName);
+ AmqpPort port = (AmqpPort) sconn.getPort();
+ vhost = port.getVirtualHost(vhostName);
@@ -193,7 +194,16 @@ public class ServerConnectionDelegate extends ServerDelegate
if (vhost.getState() != State.ACTIVE)
{
sconn.setState(Connection.State.CLOSING);
- sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED, "Virtual host '"+vhostName+"' is not active"));
+ final String redirectHost = vhost.getRedirectHost(port);
+ if(redirectHost == null)
+ {
+ sconn.invoke(new ConnectionClose(ConnectionCloseCode.CONNECTION_FORCED,
+ "Virtual host '" + vhostName + "' is not active"));
+ }
+ else
+ {
+ sconn.invoke(new ConnectionRedirect(redirectHost, new ArrayList<Object>()));
+ }
return;
}
diff --git a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
index 0847a49e07..cb145aac88 100644
--- a/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
+++ b/qpid/java/broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQProtocolEngine.java
@@ -1544,7 +1544,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
virtualHostStr = virtualHostName == null ? null : virtualHostName.toString();
}
- VirtualHostImpl virtualHost = ((AmqpPort)getPort()).getVirtualHost(virtualHostStr);
+ VirtualHostImpl<?,?,?> virtualHost = ((AmqpPort)getPort()).getVirtualHost(virtualHostStr);
if (virtualHost == null)
{
@@ -1557,8 +1557,16 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
// Check virtualhost access
if (virtualHost.getState() != State.ACTIVE)
{
- closeConnection(AMQConstant.CONNECTION_FORCED,
- "Virtual host '" + virtualHost.getName() + "' is not active",0);
+ String redirectHost = virtualHost.getRedirectHost(getPort());
+ if(redirectHost != null)
+ {
+ closeConnection(0, new AMQFrame(0,new ConnectionRedirectBody(getProtocolVersion(),AMQShortString.valueOf(redirectHost), null)));
+ }
+ else
+ {
+ closeConnection(AMQConstant.CONNECTION_FORCED,
+ "Virtual host '" + virtualHost.getName() + "' is not active", 0);
+ }
}
else
@@ -1754,7 +1762,7 @@ public class AMQProtocolEngine implements ServerProtocolEngine,
_logger.info("Locale selected: " + locale);
SubjectCreator subjectCreator = getSubjectCreator();
- SaslServer ss = null;
+ SaslServer ss;
try
{
ss = subjectCreator.createSaslServer(String.valueOf(mechanism),