int count = protonTransport.input(frame, read, frame.length - read);
read += count;
}
catch (Exception e)
{
protonTransport.setCondition(new ErrorCondition(AmqpError.DECODE_ERROR, HornetQAMQPProtocolMessageBundle.BUNDLE.decodeError()));
write();
protonConnection.close();
return;
}
}
if (sasl != null)
{
if (sasl.getRemoteMechanisms().length > 0)
{
if ("PLAIN".equals(sasl.getRemoteMechanisms()[0]))
{
byte[] data = new byte[sasl.pending()];
sasl.recv(data, 0, data.length);
setUserPass(data);
sasl.done(Sasl.SaslOutcome.PN_SASL_OK);
sasl = null;
}
else if ("ANONYMOUS".equals(sasl.getRemoteMechanisms()[0]))
{
sasl.done(Sasl.SaslOutcome.PN_SASL_OK);
sasl = null;
}
}
}
//handle opening of connection
if (protonConnection.getLocalState() == EndpointState.UNINITIALIZED && protonConnection.getRemoteState() != EndpointState.UNINITIALIZED)
{
clientId = protonConnection.getRemoteContainer();
protonConnection.open();
write();
}
//handle any new sessions
Session session = protonConnection.sessionHead(ProtonProtocolManager.UNINITIALIZED, ProtonProtocolManager.INITIALIZED);
while (session != null)
{
try
{
ProtonSession protonSession = getSession(session);
session.setContext(protonSession);
session.open();
}
catch (HornetQAMQPException e)
{
protonConnection.setCondition(new ErrorCondition(e.getAmqpError(), e.getMessage()));
session.close();
}
write();
session = protonConnection.sessionHead(ProtonProtocolManager.UNINITIALIZED, ProtonProtocolManager.INITIALIZED);
}
//handle new link (producer or consumer
LinkImpl link = (LinkImpl) protonConnection.linkHead(ProtonProtocolManager.UNINITIALIZED, ProtonProtocolManager.INITIALIZED);
while (link != null)
{
try
{
protonProtocolManager.handleNewLink(link, getSession(link.getSession()));
}
catch (HornetQAMQPException e)
{
link.setCondition(new ErrorCondition(e.getAmqpError(), e.getMessage()));
link.close();
}
link = (LinkImpl) protonConnection.linkHead(ProtonProtocolManager.UNINITIALIZED, ProtonProtocolManager.INITIALIZED);
}
//handle any deliveries
DeliveryImpl delivery;
Iterator<DeliveryImpl> iterator = protonConnection.getWorkSequence();
while (iterator.hasNext())
{
delivery = iterator.next();
ProtonDeliveryHandler handler = (ProtonDeliveryHandler) delivery.getLink().getContext();
try
{
handler.onMessage(delivery);
}
catch (HornetQAMQPException e)
{
delivery.getLink().setCondition(new ErrorCondition(e.getAmqpError(), e.getMessage()));
}
}
link = (LinkImpl) protonConnection.linkHead(ProtonProtocolManager.ACTIVE, ProtonProtocolManager.ANY_ENDPOINT_STATE);
while (link != null)
{
try
{
protonProtocolManager.handleActiveLink(link);
}
catch (HornetQAMQPException e)
{
link.setCondition(new ErrorCondition(e.getAmqpError(), e.getMessage()));
}
link = (LinkImpl) link.next(ProtonProtocolManager.ACTIVE, ProtonProtocolManager.ANY_ENDPOINT_STATE);
}
link = (LinkImpl) protonConnection.linkHead(ProtonProtocolManager.ACTIVE, ProtonProtocolManager.CLOSED);
while (link != null)
{
try
{
((ProtonDeliveryHandler) link.getContext()).close();
}
catch (HornetQAMQPException e)
{
link.setCondition(new ErrorCondition(e.getAmqpError(), e.getMessage()));
}
link.close();
link = (LinkImpl) link.next(ProtonProtocolManager.ACTIVE, ProtonProtocolManager.CLOSED);
}