AMQShortString exchangeName = body.getExchange();
AMQShortString queueName = body.getQueue();
AMQShortString routingKey = body.getRoutingKey();
ExchangeBoundOkBody response;
if(isDefaultExchange(exchangeName))
{
if(routingKey == null)
{
if(queueName == null)
{
response = methodRegistry.createExchangeBoundOkBody(virtualHost.getQueues().isEmpty() ? NO_BINDINGS : OK, null);
}
else
{
AMQQueue queue = virtualHost.getQueue(queueName.toString());
if (queue == null)
{
response = methodRegistry.createExchangeBoundOkBody(QUEUE_NOT_FOUND, // replyCode
AMQShortString.validValueOf("Queue '" + queueName + "' not found")); // replyText
}
else
{
response = methodRegistry.createExchangeBoundOkBody(OK, null);
}
}
}
else
{
if(queueName == null)
{
response = methodRegistry.createExchangeBoundOkBody(virtualHost.getQueue(routingKey.toString()) == null ? NO_QUEUE_BOUND_WITH_RK : OK, null);
}
else
{
AMQQueue queue = virtualHost.getQueue(queueName.toString());
if (queue == null)
{
response = methodRegistry.createExchangeBoundOkBody(QUEUE_NOT_FOUND, // replyCode
AMQShortString.validValueOf("Queue '" + queueName + "' not found")); // replyText
}
else
{
response = methodRegistry.createExchangeBoundOkBody(queueName.equals(routingKey) ? OK : SPECIFIC_QUEUE_NOT_BOUND_WITH_RK, null);
}
}
}
}
else
{
ExchangeImpl exchange = virtualHost.getExchange(exchangeName.toString());
if (exchange == null)
{
response = methodRegistry.createExchangeBoundOkBody(EXCHANGE_NOT_FOUND,
AMQShortString.validValueOf("Exchange '" + exchangeName + "' not found"));
}
else if (routingKey == null)
{
if (queueName == null)
{
if (exchange.hasBindings())
{
response = methodRegistry.createExchangeBoundOkBody(OK, null);
}
else
{
response = methodRegistry.createExchangeBoundOkBody(NO_BINDINGS, // replyCode
null); // replyText
}
}
else
{
AMQQueue queue = virtualHost.getQueue(queueName.toString());
if (queue == null)
{
response = methodRegistry.createExchangeBoundOkBody(QUEUE_NOT_FOUND, // replyCode
AMQShortString.validValueOf("Queue '" + queueName + "' not found")); // replyText
}
else
{
if (exchange.isBound(queue))
{
response = methodRegistry.createExchangeBoundOkBody(OK, // replyCode
null); // replyText
}
else
{
response = methodRegistry.createExchangeBoundOkBody(QUEUE_NOT_BOUND, // replyCode
AMQShortString.validValueOf("Queue '" + queueName + "' not bound to exchange '" + exchangeName + "'")); // replyText
}
}
}
}
else if (queueName != null)
{
AMQQueue queue = virtualHost.getQueue(queueName.toString());
if (queue == null)
{
response = methodRegistry.createExchangeBoundOkBody(QUEUE_NOT_FOUND, // replyCode
AMQShortString.validValueOf("Queue '" + queueName + "' not found")); // replyText
}
else
{
String bindingKey = body.getRoutingKey() == null ? null : body.getRoutingKey().asString();
if (exchange.isBound(bindingKey, queue))
{
response = methodRegistry.createExchangeBoundOkBody(OK, // replyCode
null); // replyText
}
else
{
String message = "Queue '" + queueName + "' not bound with routing key '" +
body.getRoutingKey() + "' to exchange '" + exchangeName + "'";
response = methodRegistry.createExchangeBoundOkBody(SPECIFIC_QUEUE_NOT_BOUND_WITH_RK, // replyCode
AMQShortString.validValueOf(message)); // replyText
}
}
}
else
{
if (exchange.isBound(body.getRoutingKey() == null ? "" : body.getRoutingKey().asString()))
{
response = methodRegistry.createExchangeBoundOkBody(OK, // replyCode
null); // replyText
}
else
{
response = methodRegistry.createExchangeBoundOkBody(NO_QUEUE_BOUND_WITH_RK, // replyCode
AMQShortString.validValueOf("No queue bound with routing key '" + body.getRoutingKey() +
"' to exchange '" + exchangeName + "'")); // replyText
}
}
}
session.writeFrame(response.generateFrame(channelId));
}