use of org.apache.qpid.server.protocol.v1_0.type.transport.Error in project qpid-broker-j by apache.
the class Session_1_0 method receiveEnd.
public void receiveEnd(final End end) {
receivedComplete();
switch(_sessionState) {
case END_SENT:
remoteEnd(end);
_sessionState = SessionState.ENDED;
break;
case ACTIVE:
_sessionState = SessionState.END_RECVD;
detachLinks();
remoteEnd(end);
_connection.sendEnd(_sendingChannel, new End(), true);
_sessionState = SessionState.ENDED;
break;
default:
End reply = new End();
Error error = new Error();
error.setCondition(AmqpError.ILLEGAL_STATE);
error.setDescription("END called on Session which has not been opened");
reply.setError(error);
_connection.sendEnd(_sendingChannel, reply, true);
break;
}
}
use of org.apache.qpid.server.protocol.v1_0.type.transport.Error in project qpid-broker-j by apache.
the class Session_1_0 method close.
public void close(ErrorCondition condition, String message) {
performCloseTasks();
final End end = new End();
final Error theError = new Error();
theError.setDescription(message);
theError.setCondition(condition);
end.setError(theError);
end(end);
}
use of org.apache.qpid.server.protocol.v1_0.type.transport.Error in project qpid-broker-j by apache.
the class Session_1_0 method receiveFlow.
public void receiveFlow(final Flow flow) {
receivedComplete();
final SequenceNumber flowNextIncomingId = new SequenceNumber(flow.getNextIncomingId() == null ? _initialOutgoingId.intValue() : flow.getNextIncomingId().intValue());
if (flowNextIncomingId.compareTo(_nextOutgoingId) > 0) {
final End end = new End();
end.setError(new Error(SessionError.WINDOW_VIOLATION, String.format("Next incoming id '%d' exceeds next outgoing id '%d'", flowNextIncomingId.longValue(), _nextOutgoingId.longValue())));
end(end);
} else {
_remoteIncomingWindow = flowNextIncomingId.longValue() + flow.getIncomingWindow().longValue() - _nextOutgoingId.longValue();
_nextIncomingId = new SequenceNumber(flow.getNextOutgoingId().intValue());
_remoteOutgoingWindow = flow.getOutgoingWindow();
UnsignedInteger handle = flow.getHandle();
if (handle != null) {
final LinkEndpoint<? extends BaseSource, ? extends BaseTarget> endpoint = _inputHandleToEndpoint.get(handle);
if (endpoint == null) {
End end = new End();
end.setError(new Error(SessionError.UNATTACHED_HANDLE, String.format("Received Flow with unknown handle %d", handle.intValue())));
end(end);
} else {
endpoint.receiveFlow(flow);
}
} else {
final Collection<LinkEndpoint<? extends BaseSource, ? extends BaseTarget>> allLinkEndpoints = _inputHandleToEndpoint.values();
for (LinkEndpoint<? extends BaseSource, ? extends BaseTarget> le : allLinkEndpoints) {
le.flowStateChanged();
}
if (Boolean.TRUE.equals(flow.getEcho())) {
sendFlow();
}
}
}
}
use of org.apache.qpid.server.protocol.v1_0.type.transport.Error in project qpid-broker-j by apache.
the class Session_1_0 method createExchangeDestination.
private ExchangeSendingDestination createExchangeDestination(final String exchangeName, final String bindingKey, final String linkName, final Source source) throws AmqpErrorException {
ExchangeSendingDestination exchangeDestination = null;
Exchange<?> exchange = getExchange(exchangeName);
if (exchange != null) {
if (!Boolean.TRUE.equals(source.getDynamic())) {
String remoteContainerId = getConnection().getRemoteContainerId();
exchangeDestination = new ExchangeSendingDestination(exchange, linkName, bindingKey, remoteContainerId, source);
source.setFilter(exchangeDestination.getFilters());
source.setDistributionMode(StdDistMode.COPY);
} else {
// TODO
throw new AmqpErrorException(new Error(AmqpError.NOT_IMPLEMENTED, "Temporary subscription is not implemented"));
}
}
return exchangeDestination;
}
use of org.apache.qpid.server.protocol.v1_0.type.transport.Error in project qpid-broker-j by apache.
the class TxnCoordinatorReceivingLinkEndpoint method discharge.
private Error discharge(Binary transactionIdAsBinary, boolean fail) {
Error error = null;
Integer transactionId = null;
ServerTransaction txn = null;
try {
transactionId = Session_1_0.transactionIdToInteger(transactionIdAsBinary);
txn = _createdTransactions.get(transactionId);
} catch (UnknownTransactionException | IllegalArgumentException e) {
// handle error below
}
if (txn != null) {
AMQPConnection_1_0<?> connection = getSession().getConnection();
if (fail) {
txn.rollback();
connection.incrementTransactionRollbackCounter();
} else if (!(txn instanceof LocalTransaction && ((LocalTransaction) txn).isRollbackOnly())) {
txn.commit();
} else {
txn.rollback();
connection.incrementTransactionRollbackCounter();
error = new Error();
error.setCondition(TransactionError.TRANSACTION_ROLLBACK);
error.setDescription("The transaction was marked as rollback only due to an earlier issue (e.g. a published message was sent settled but could not be enqueued)");
}
_createdTransactions.remove(transactionId);
connection.unregisterTransactionTickers(txn);
connection.removeTransaction(transactionId);
connection.decrementTransactionOpenCounter();
} else {
error = new Error();
error.setCondition(TransactionError.UNKNOWN_ID);
error.setDescription("Unknown transactionId " + transactionIdAsBinary.toString());
}
return error;
}
Aggregations