/** * */ private void stopServer() { HttpClient client = new HttpClient(); try { final HttpExchange exchange = new HttpExchange(); exchange.setMethod("POST"); exchange.setURL(String.format("http://127.0.0.1:%s/shutdown?secret=%s", port, secret)); client.send(exchange); log.info("LOG00010: shutdown status {}", exchange.getStatus()); } catch (IOException e) { log.error("LOG00020: Can't stop server gracefully", e); } }
@Override public void send(Request request, Response.CompleteListener listener) { HttpRequest httpRequest = (HttpRequest)request; ArrayList<Response.ResponseListener> listeners = new ArrayList<>(httpRequest.getResponseListeners()); httpRequest.sent(); if (listener != null) listeners.add(listener); HttpExchange exchange = new HttpExchange(getHttpDestination(), httpRequest, listeners); SendFailure result = send(exchange); if (result != null) httpRequest.abort(result.failure); }
protected void send(HttpRequest request, List<Response.ResponseListener> listeners) { if (!getScheme().equalsIgnoreCase(request.getScheme())) throw new IllegalArgumentException("Invalid request scheme " + request.getScheme() + " for destination " + this); if (!getHost().equalsIgnoreCase(request.getHost())) throw new IllegalArgumentException("Invalid request host " + request.getHost() + " for destination " + this); int port = request.getPort(); if (port >= 0 && getPort() != port) throw new IllegalArgumentException("Invalid request port " + port + " for destination " + this); send(new HttpExchange(this, request, listeners)); }
@Override public void send(Request request, Response.CompleteListener listener) { ArrayList<Response.ResponseListener> listeners = new ArrayList<>(2); if (request.getTimeout() > 0) { TimeoutCompleteListener timeoutListener = new TimeoutCompleteListener(request); timeoutListener.schedule(client.getScheduler()); listeners.add(timeoutListener); } if (listener != null) listeners.add(listener); HttpConversation conversation = client.getConversation(request.getConversationID(), true); HttpExchange exchange = new HttpExchange(conversation, getDestination(), request, listeners); send(exchange); }
@Override public void send(Request request, Response.CompleteListener listener) { ArrayList<Response.ResponseListener> listeners = new ArrayList<>(2); if (request.getTimeout() > 0) { TimeoutCompleteListener timeoutListener = new TimeoutCompleteListener(request); timeoutListener.schedule(client.getScheduler()); listeners.add(timeoutListener); } if (listener != null) listeners.add(listener); HttpConversation conversation = client.getConversation(request.getConversationID(), true); HttpExchange exchange = new HttpExchange(conversation, getDestination(), request, listeners); send(exchange); }
HttpExchange exchange = new HttpExchange(conversation, this, request, listeners);
HttpExchange exchange = new HttpExchange(conversation, this, request, listeners);
@Override public Stream.Listener onPush(Stream stream, PushPromiseFrame frame) { HttpExchange exchange = getHttpExchange(); if (exchange == null) return null; HttpRequest request = exchange.getRequest(); MetaData.Request metaData = (MetaData.Request)frame.getMetaData(); HttpRequest pushRequest = (HttpRequest)getHttpDestination().getHttpClient().newRequest(metaData.getURIString()); // TODO: copy PUSH_PROMISE headers into pushRequest. BiFunction<Request, Request, Response.CompleteListener> pushListener = request.getPushListener(); if (pushListener != null) { Response.CompleteListener listener = pushListener.apply(request, pushRequest); if (listener != null) { HttpChannelOverHTTP2 pushChannel = getHttpChannel().getHttpConnection().acquireHttpChannel(); List<Response.ResponseListener> listeners = Collections.singletonList(listener); HttpExchange pushExchange = new HttpExchange(getHttpDestination(), pushRequest, listeners); pushChannel.associate(pushExchange); pushChannel.setStream(stream); // TODO: idle timeout ? pushExchange.requestComplete(null); pushExchange.terminateRequest(); return pushChannel.getStreamListener(); } } stream.reset(new ResetFrame(stream.getId(), ErrorCode.REFUSED_STREAM_ERROR.code), Callback.NOOP); return null; }