protected boolean abort(Throwable failure) { HttpExchange exchange = channel.getHttpExchange(); return exchange != null && exchange.getRequest().abort(failure); }
@Override public void onFailure(Response response, Throwable failure) { HttpConversation conversation = client.getConversation(response.getConversationID(), false); // Mark the 100 Continue response as handled conversation.setAttribute(ATTRIBUTE, Boolean.TRUE); // Reset the conversation listeners to allow the conversation to be completed conversation.updateResponseListeners(null); HttpExchange exchange = conversation.getExchanges().peekLast(); assert exchange.getResponse() == response; List<Response.ResponseListener> listeners = exchange.getResponseListeners(); HttpContentResponse contentResponse = new HttpContentResponse(response, getContent(), getEncoding()); notifier.forwardFailureComplete(listeners, exchange.getRequest(), exchange.getRequestFailure(), contentResponse, failure); }
@Override public void onReset(Stream stream, ResetFrame frame) { HttpExchange exchange = getHttpExchange(); if (exchange == null) return; int error = frame.getError(); exchange.getRequest().abort(new IOException(ErrorCode.toString(error, "reset_code_" + error))); }
@Override public void onFailure(Response response, Throwable failure) { HttpConversation conversation = client.getConversation(response.getConversationID(), false); // Mark the 100 Continue response as handled conversation.setAttribute(ATTRIBUTE, Boolean.TRUE); // Reset the conversation listeners to allow the conversation to be completed conversation.updateResponseListeners(null); HttpExchange exchange = conversation.getExchanges().peekLast(); assert exchange.getResponse() == response; List<Response.ResponseListener> listeners = exchange.getResponseListeners(); HttpContentResponse contentResponse = new HttpContentResponse(response, getContent(), getEncoding()); notifier.forwardFailureComplete(listeners, exchange.getRequest(), exchange.getRequestFailure(), contentResponse, failure); }
private void terminateRequest(HttpExchange exchange) { // In abort(), the state is updated before the failure is recorded // to avoid to overwrite it, so here we may read a null failure. Throwable failure = this.failure; if (failure == null) failure = new HttpRequestException("Concurrent failure", exchange.getRequest()); Result result = exchange.terminateRequest(); terminateRequest(exchange, failure, result); }
@Override public void onFailure(Response response, Throwable failure) { HttpConversation conversation = ((HttpRequest)response.getRequest()).getConversation(); // Mark the 100 Continue response as handled conversation.setAttribute(ATTRIBUTE, Boolean.TRUE); // Reset the conversation listeners to allow the conversation to be completed conversation.updateResponseListeners(null); HttpExchange exchange = conversation.getExchanges().peekLast(); assert exchange.getResponse() == response; List<Response.ResponseListener> listeners = exchange.getResponseListeners(); HttpContentResponse contentResponse = new HttpContentResponse(response, getContent(), getMediaType(), getEncoding()); notifier.forwardFailureComplete(listeners, exchange.getRequest(), exchange.getRequestFailure(), contentResponse, failure); }
private void shutdownOutput() { if (LOG.isDebugEnabled()) LOG.debug("Request shutdown output {}", getHttpExchange().getRequest()); shutdown = true; }
@Override protected SendFailure send(HttpExchange exchange) { HttpRequest request = exchange.getRequest(); request.version(HttpVersion.HTTP_2); normalizeRequest(request); // One connection maps to N channels, so one channel for each exchange. HttpChannelOverHTTP2 channel = acquireHttpChannel(); activeChannels.add(channel); return send(channel, exchange); }
public void send() { HttpExchange exchange = getHttpExchange(); if (exchange != null) { HttpRequest request = exchange.getRequest(); long timeoutAt = request.getTimeoutAt(); if (timeoutAt != -1) { exchange.getResponseListeners().add(_totalTimeout); _totalTimeout.schedule(request, timeoutAt); } send(exchange); } }
public Result terminateResponse() { Result result = null; synchronized (this) { if (responseState == State.COMPLETED) responseState = State.TERMINATED; if (requestState == State.TERMINATED && responseState == State.TERMINATED) result = new Result(getRequest(), requestFailure, getResponse(), responseFailure); } if (LOG.isDebugEnabled()) LOG.debug("Terminated response for {}, result: {}", this, result); return result; }
public Result terminateRequest() { Result result = null; synchronized (this) { if (requestState == State.COMPLETED) requestState = State.TERMINATED; if (requestState == State.TERMINATED && responseState == State.TERMINATED) result = new Result(getRequest(), requestFailure, getResponse(), responseFailure); } if (LOG.isDebugEnabled()) LOG.debug("Terminated request for {}, result: {}", this, result); return result; }
@Override protected void sendTrailers(HttpExchange exchange, Callback callback) { Supplier<HttpFields> trailers = exchange.getRequest().getTrailers(); MetaData metaData = new MetaData(HttpVersion.HTTP_2, trailers.get()); Stream stream = getHttpChannel().getStream(); HeadersFrame trailersFrame = new HeadersFrame(stream.getId(), metaData, null, true); stream.headers(trailersFrame, callback); } }
@Override protected SendFailure send(HttpExchange exchange) { Request request = exchange.getRequest(); normalizeRequest(request); // Save the old idle timeout to restore it. EndPoint endPoint = getEndPoint(); idleTimeout = endPoint.getIdleTimeout(); long requestIdleTimeout = request.getIdleTimeout(); if (requestIdleTimeout >= 0) endPoint.setIdleTimeout(requestIdleTimeout); // One channel per connection, just delegate the send. return send(channel, exchange); }
protected boolean beginToHeaders(HttpExchange exchange) { if (!updateRequestState(RequestState.BEGIN, RequestState.TRANSIENT)) return false; Request request = exchange.getRequest(); if (LOG.isDebugEnabled()) LOG.debug("Request headers {}{}{}", request, System.lineSeparator(), request.getHeaders().toString().trim()); RequestNotifier notifier = getHttpChannel().getHttpDestination().getRequestNotifier(); notifier.notifyHeaders(request); if (updateRequestState(RequestState.TRANSIENT, RequestState.HEADERS)) return true; terminateRequest(exchange); return false; }
public void send(HttpExchange exchange) { Request request = exchange.getRequest(); normalizeRequest(request); // Save the old idle timeout to restore it EndPoint endPoint = getEndPoint(); idleTimeout = endPoint.getIdleTimeout(); endPoint.setIdleTimeout(request.getIdleTimeout()); // Associate the exchange to the connection associate(exchange); sender.send(exchange); }
public void send(HttpExchange exchange) { Request request = exchange.getRequest(); normalizeRequest(request); // Save the old idle timeout to restore it EndPoint endPoint = getEndPoint(); idleTimeout = endPoint.getIdleTimeout(); endPoint.setIdleTimeout(request.getIdleTimeout()); // Associate the exchange to the connection associate(exchange); sender.send(exchange); }
protected boolean headersToCommit(HttpExchange exchange) { if (!updateRequestState(RequestState.HEADERS, RequestState.TRANSIENT)) return false; Request request = exchange.getRequest(); if (LOG.isDebugEnabled()) LOG.debug("Request committed {}", request); RequestNotifier notifier = getHttpChannel().getHttpDestination().getRequestNotifier(); notifier.notifyCommit(request); if (updateRequestState(RequestState.TRANSIENT, RequestState.COMMIT)) return true; terminateRequest(exchange); return false; }
@Override public boolean startResponse(HttpVersion version, int status, String reason) { HttpExchange exchange = getHttpExchange(); if (exchange == null) return false; String method = exchange.getRequest().getMethod(); parser.setHeadResponse(HttpMethod.HEAD.is(method) || (HttpMethod.CONNECT.is(method) && status == HttpStatus.OK_200)); exchange.getResponse().version(version).status(status).reason(reason); return !responseBegin(exchange); }
protected void abort(HttpExchange exchange, Throwable cause) { Request request = exchange.getRequest(); HttpResponse response = exchange.getResponse(); getRequestNotifier().notifyFailure(request, cause); List<Response.ResponseListener> listeners = exchange.getConversation().getResponseListeners(); getResponseNotifier().notifyFailure(listeners, response, cause); getResponseNotifier().notifyComplete(listeners, new Result(request, cause, response, cause)); }
protected void abort(HttpExchange exchange, Throwable cause) { Request request = exchange.getRequest(); HttpResponse response = exchange.getResponse(); getRequestNotifier().notifyFailure(request, cause); List<Response.ResponseListener> listeners = exchange.getConversation().getResponseListeners(); getResponseNotifier().notifyFailure(listeners, response, cause); getResponseNotifier().notifyComplete(listeners, new Result(request, cause, response, cause)); }