in broker-plugins/amqp-0-8-protocol/src/main/java/org/apache/qpid/server/protocol/v0_8/AMQChannel.java [2351:2527]
public void receiveExchangeBound(final AMQShortString exchangeName,
final AMQShortString routingKey,
final AMQShortString queueName)
{
if(LOGGER.isDebugEnabled())
{
LOGGER.debug("RECV[" + _channelId + "] ExchangeBound[" +" exchange: " + exchangeName + " routingKey: " +
routingKey + " queue: " + queueName + " ]");
}
NamedAddressSpace virtualHost = _connection.getAddressSpace();
MethodRegistry methodRegistry = _connection.getMethodRegistry();
sync();
int replyCode;
String replyText;
if (isDefaultExchange(exchangeName))
{
if (routingKey == null)
{
if (queueName == null)
{
replyCode = virtualHost.hasMessageSources()
? ExchangeBoundOkBody.OK
: ExchangeBoundOkBody.NO_BINDINGS;
replyText = null;
}
else
{
MessageSource queue = virtualHost.getAttainedMessageSource(queueName.toString());
if (queue == null)
{
replyCode = ExchangeBoundOkBody.QUEUE_NOT_FOUND;
replyText = "Queue '" + queueName + "' not found";
}
else
{
replyCode = ExchangeBoundOkBody.OK;
replyText = null;
}
}
}
else
{
if (queueName == null)
{
replyCode = virtualHost.getAttainedMessageDestination(routingKey.toString(), false) instanceof Queue
? ExchangeBoundOkBody.OK
: ExchangeBoundOkBody.NO_QUEUE_BOUND_WITH_RK;
replyText = null;
}
else
{
MessageDestination destination = virtualHost.getAttainedMessageDestination(queueName.toString(), false);
Queue<?> queue = destination instanceof Queue ? (Queue) destination : null;
if (queue == null)
{
replyCode = ExchangeBoundOkBody.QUEUE_NOT_FOUND;
replyText = "Queue '" + queueName + "' not found";
}
else
{
replyCode = queueName.equals(routingKey)
? ExchangeBoundOkBody.OK
: ExchangeBoundOkBody.SPECIFIC_QUEUE_NOT_BOUND_WITH_RK;
replyText = null;
}
}
}
}
else
{
MessageDestination destination =
getAddressSpace().getAttainedMessageDestination(exchangeName.toString(), true);
if (!(destination instanceof Exchange))
{
replyCode = ExchangeBoundOkBody.EXCHANGE_NOT_FOUND;
replyText = "Exchange '" + exchangeName + "' not found";
}
else if (routingKey == null)
{
Exchange<?> exchange = (Exchange<?>) destination;
if (queueName == null)
{
if (exchange.hasBindings())
{
replyCode = ExchangeBoundOkBody.OK;
replyText = null;
}
else
{
replyCode = ExchangeBoundOkBody.NO_BINDINGS;
replyText = null;
}
}
else
{
Queue<?> queue = getQueue(queueName.toString());
if (queue == null)
{
replyCode = ExchangeBoundOkBody.QUEUE_NOT_FOUND;
replyText = "Queue '" + queueName + "' not found";
}
else
{
if (exchange.isBound(queue))
{
replyCode = ExchangeBoundOkBody.OK;
replyText = null;
}
else
{
replyCode = ExchangeBoundOkBody.QUEUE_NOT_BOUND;
replyText = "Queue '"
+ queueName
+ "' not bound to exchange '"
+ exchangeName
+ "'";
}
}
}
}
else if (queueName != null)
{
Exchange<?> exchange = (Exchange<?>) destination;
Queue<?> queue = getQueue(queueName.toString());
if (queue == null)
{
replyCode = ExchangeBoundOkBody.QUEUE_NOT_FOUND;
replyText = "Queue '" + queueName + "' not found";
}
else
{
String bindingKey = routingKey == null ? null : routingKey.toString();
if (exchange.isBound(bindingKey, queue))
{
replyCode = ExchangeBoundOkBody.OK;
replyText = null;
}
else
{
replyCode = ExchangeBoundOkBody.SPECIFIC_QUEUE_NOT_BOUND_WITH_RK;
replyText = "Queue '" + queueName + "' not bound with routing key '" +
routingKey + "' to exchange '" + exchangeName + "'";
}
}
}
else
{
Exchange<?> exchange = (Exchange<?>) destination;
if (exchange.isBound(routingKey == null ? "" : routingKey.toString()))
{
replyCode = ExchangeBoundOkBody.OK;
replyText = null;
}
else
{
replyCode = ExchangeBoundOkBody.NO_QUEUE_BOUND_WITH_RK;
replyText =
"No queue bound with routing key '" + routingKey + "' to exchange '" + exchangeName + "'";
}
}
}
ExchangeBoundOkBody exchangeBoundOkBody =
methodRegistry.createExchangeBoundOkBody(replyCode, AMQShortString.validValueOf(replyText));
_connection.writeFrame(exchangeBoundOkBody.generateFrame(getChannelId()));
}