Java Code Examples for io.vertx.proton.ProtonReceiver#close()
The following examples show how to use
io.vertx.proton.ProtonReceiver#close() .
You can vote up the ones you like or vote down the ones you don't like,
and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: AmqpServiceBase.java From hono with Eclipse Public License 2.0 | 5 votes |
/** * Handles a request from a client to establish a link for sending messages to this server. * The already established connection must have an authenticated user as principal for doing the authorization check. * * @param con the connection to the client. * @param receiver the receiver created for the link. */ protected void handleReceiverOpen(final ProtonConnection con, final ProtonReceiver receiver) { if (receiver.getRemoteTarget().getAddress() == null) { log.debug("client [container: {}] wants to open an anonymous link for sending messages to arbitrary addresses, closing link ...", con.getRemoteContainer()); receiver.setCondition(ProtonHelper.condition(AmqpError.NOT_ALLOWED, "anonymous relay not supported")); receiver.close(); } else { log.debug("client [container: {}] wants to open a link [address: {}] for sending messages", con.getRemoteContainer(), receiver.getRemoteTarget()); try { final ResourceIdentifier targetResource = getResourceIdentifier(receiver.getRemoteTarget().getAddress()); final AmqpEndpoint endpoint = getEndpoint(targetResource); if (endpoint == null) { handleUnknownEndpoint(con, receiver, targetResource); } else { final HonoUser user = Constants.getClientPrincipal(con); getAuthorizationService().isAuthorized(user, targetResource, Activity.WRITE).onComplete(authAttempt -> { if (authAttempt.succeeded() && authAttempt.result()) { Constants.copyProperties(con, receiver); receiver.setSource(receiver.getRemoteSource()); receiver.setTarget(receiver.getRemoteTarget()); endpoint.onLinkAttach(con, receiver, targetResource); } else { log.debug("subject [{}] is not authorized to WRITE to [{}]", user.getName(), targetResource); receiver.setCondition(ProtonHelper.condition(AmqpError.UNAUTHORIZED_ACCESS.toString(), "unauthorized")); receiver.close(); } }); } } catch (final IllegalArgumentException e) { log.debug("client has provided invalid resource identifier as target address", e); receiver.setCondition(ProtonHelper.condition(AmqpError.NOT_FOUND, "no such address")); receiver.close(); } } }
Example 2
Source File: RequestResponseEndpoint.java From hono with Eclipse Public License 2.0 | 5 votes |
/** * Handles a client's request to establish a link for sending service invocation requests. * <p> * Configure and check the receiver link of the endpoint. * The remote link of the receiver must not demand the AT_MOST_ONCE QoS (not supported). * The receiver link itself is configured with the AT_LEAST_ONCE QoS and grants the configured credits * ({@link ServiceConfigProperties#getReceiverLinkCredit()}) with autoAcknowledge. * <p> * Handling of request messages is delegated to * {@link #handleRequestMessage(ProtonConnection, ProtonReceiver, ResourceIdentifier, ProtonDelivery, Message)}. * * @param con The AMQP connection that the link is part of. * @param receiver The ProtonReceiver that has already been created for this endpoint. * @param targetAddress The resource identifier for this endpoint (see {@link ResourceIdentifier} for details). */ @Override public final void onLinkAttach(final ProtonConnection con, final ProtonReceiver receiver, final ResourceIdentifier targetAddress) { if (ProtonQoS.AT_MOST_ONCE.equals(receiver.getRemoteQoS())) { logger.debug("client wants to use unsupported AT MOST ONCE delivery mode for endpoint [{}], closing link ...", getName()); receiver.setCondition(ProtonHelper.condition(AmqpError.PRECONDITION_FAILED.toString(), "endpoint requires AT_LEAST_ONCE QoS")); receiver.close(); } else { logger.debug("establishing link for receiving request messages from client [{}]", receiver.getName()); receiver.setQoS(ProtonQoS.AT_LEAST_ONCE); receiver.setAutoAccept(true); // settle received messages if the handler succeeds receiver.setTarget(receiver.getRemoteTarget()); receiver.setSource(receiver.getRemoteSource()); // We do manual flow control, credits are replenished after responses have been sent. receiver.setPrefetch(0); // set up handlers receiver.handler((delivery, message) -> { try { handleRequestMessage(con, receiver, targetAddress, delivery, message); } catch (final Exception ex) { logger.warn("error handling message", ex); ProtonHelper.released(delivery, true); } }); HonoProtonHelper.setCloseHandler(receiver, remoteClose -> onLinkDetach(receiver)); HonoProtonHelper.setDetachHandler(receiver, remoteDetach -> onLinkDetach(receiver)); // acknowledge the remote open receiver.open(); // send out initial credits, after opening logger.debug("flowing {} credits to client", config.getReceiverLinkCredit()); receiver.flow(config.getReceiverLinkCredit()); } }
Example 3
Source File: AbstractRequestResponseEndpoint.java From hono with Eclipse Public License 2.0 | 5 votes |
/** * Handles a client's request to establish a link for sending service invocation requests. * <p> * Configure and check the receiver link of the endpoint. * The remote link of the receiver must not demand the AT_MOST_ONCE QoS (not supported). * The receiver link itself is configured with the AT_LEAST_ONCE QoS and grants the configured credits * ({@link ServiceConfigProperties#getReceiverLinkCredit()}) with autoAcknowledge. * <p> * Handling of request messages is delegated to * {@link #handleRequestMessage(ProtonConnection, ProtonReceiver, ResourceIdentifier, ProtonDelivery, Message)}. * * @param con The AMQP connection that the link is part of. * @param receiver The ProtonReceiver that has already been created for this endpoint. * @param targetAddress The resource identifier for this endpoint (see {@link ResourceIdentifier} for details). */ @Override public final void onLinkAttach(final ProtonConnection con, final ProtonReceiver receiver, final ResourceIdentifier targetAddress) { if (ProtonQoS.AT_MOST_ONCE.equals(receiver.getRemoteQoS())) { logger.debug("client wants to use unsupported AT MOST ONCE delivery mode for endpoint [{}], closing link ...", getName()); receiver.setCondition(ProtonHelper.condition(AmqpError.PRECONDITION_FAILED.toString(), "endpoint requires AT_LEAST_ONCE QoS")); receiver.close(); } else { logger.debug("establishing link for receiving request messages from client [{}]", receiver.getName()); receiver.setQoS(ProtonQoS.AT_LEAST_ONCE); receiver.setAutoAccept(true); // settle received messages if the handler succeeds receiver.setTarget(receiver.getRemoteTarget()); receiver.setSource(receiver.getRemoteSource()); // We do manual flow control, credits are replenished after responses have been sent. receiver.setPrefetch(0); // set up handlers receiver.handler((delivery, message) -> { try { handleRequestMessage(con, receiver, targetAddress, delivery, message); } catch (final Exception ex) { logger.warn("error handling message", ex); ProtonHelper.released(delivery, true); } }); HonoProtonHelper.setCloseHandler(receiver, remoteClose -> onLinkDetach(receiver)); HonoProtonHelper.setDetachHandler(receiver, remoteDetach -> onLinkDetach(receiver)); // acknowledge the remote open receiver.open(); // send out initial credits, after opening logger.debug("flowing {} credits to client", config.getReceiverLinkCredit()); receiver.flow(config.getReceiverLinkCredit()); } }
Example 4
Source File: AmqpSourceBridgeEndpoint.java From strimzi-kafka-bridge with Apache License 2.0 | 5 votes |
/** * Handle for detached link by the remote sender * @param receiver Proton receiver instance */ private void processCloseReceiver(ProtonReceiver receiver) { log.info("Remote AMQP sender detached"); // close and remove the receiver link receiver.close(); this.receivers.remove(receiver.getName()); // if the source endpoint has no receiver links, it can be closed if (this.receivers.isEmpty()) { this.close(); } }
Example 5
Source File: SimpleAuthenticationServer.java From hono with Eclipse Public License 2.0 | 4 votes |
@Override protected void handleReceiverOpen(final ProtonConnection con, final ProtonReceiver receiver) { receiver.setCondition(ProtonHelper.condition(AmqpError.NOT_ALLOWED, "cannot write to node")); receiver.close(); }
Example 6
Source File: AbstractAmqpEndpoint.java From hono with Eclipse Public License 2.0 | 4 votes |
@Override public void onLinkAttach(final ProtonConnection con, final ProtonReceiver receiver, final ResourceIdentifier targetResource) { logger.info("Endpoint [{}] does not support data upload, closing link.", getName()); receiver.setCondition(ProtonHelper.condition(AmqpError.NOT_IMPLEMENTED, "resource cannot be written to")); receiver.close(); }