Search in sources :

Example 1 with CloseMode

use of org.apache.hc.core5.io.CloseMode in project httpcomponents-core by apache.

the class InternalDataChannel method close.

@Override
public void close(final CloseMode closeMode) {
    final IOSession currentSession = currentSessionRef.get();
    if (closeMode == CloseMode.IMMEDIATE) {
        closed.set(true);
        currentSession.close(closeMode);
    } else {
        if (closed.compareAndSet(false, true)) {
            try {
                currentSession.close(closeMode);
            } finally {
                closedSessions.add(this);
            }
        }
    }
}
Also used : SSLIOSession(org.apache.hc.core5.reactor.ssl.SSLIOSession)

Example 2 with CloseMode

use of org.apache.hc.core5.io.CloseMode in project commons-vfs by apache.

the class NHttpFileServer method close.

public void close() {
    if (server.getStatus() == IOReactorStatus.ACTIVE) {
        final CloseMode closeMode = CloseMode.GRACEFUL;
        println("HTTP server shutting down (closeMode=" + closeMode + ")...");
        server.close(closeMode);
        println("HTTP server shut down.");
    }
}
Also used : CloseMode(org.apache.hc.core5.io.CloseMode)

Example 3 with CloseMode

use of org.apache.hc.core5.io.CloseMode in project httpcomponents-core by apache.

the class DefaultDisposalCallback method execute.

@Override
public void execute(final SocketModalCloseable closeable, final CloseMode closeMode) {
    final Timeout socketTimeout = closeable.getSocketTimeout();
    if (socketTimeout == null || socketTimeout.compareTo(TimeValue.ZERO_MILLISECONDS) <= 0 || socketTimeout.compareTo(DEFAULT_CLOSE_TIMEOUT) > 0) {
        closeable.setSocketTimeout(DEFAULT_CLOSE_TIMEOUT);
    }
    closeable.close(closeMode);
}
Also used : Timeout(org.apache.hc.core5.util.Timeout)

Example 4 with CloseMode

use of org.apache.hc.core5.io.CloseMode in project httpcomponents-core by apache.

the class HttpBenchmark method execute.

public Results execute() throws Exception {
    final HttpProcessorBuilder builder = HttpProcessorBuilder.create().addAll(new H2RequestContent(), new H2RequestTargetHost(), new H2RequestConnControl(), new RequestUserAgent("HttpCore-AB/5.0"));
    if (this.config.isUseExpectContinue()) {
        builder.add(new RequestExpectContinue());
    }
    final SSLContext sslContext;
    if ("https".equals(config.getUri().getScheme())) {
        final SSLContextBuilder sslContextBuilder = new SSLContextBuilder();
        sslContextBuilder.setProtocol("SSL");
        if (config.isDisableSSLVerification()) {
            sslContextBuilder.loadTrustMaterial(null, (chain, authType) -> true);
        } else if (config.getTrustStorePath() != null) {
            sslContextBuilder.loadTrustMaterial(new File(config.getTrustStorePath()), config.getTrustStorePassword() != null ? config.getTrustStorePassword().toCharArray() : null);
        }
        if (config.getIdentityStorePath() != null) {
            sslContextBuilder.loadKeyMaterial(Paths.get(config.getIdentityStorePath()), config.getIdentityStorePassword() != null ? config.getIdentityStorePassword().toCharArray() : null, config.getIdentityStorePassword() != null ? config.getIdentityStorePassword().toCharArray() : null);
        }
        sslContext = sslContextBuilder.build();
    } else {
        sslContext = SSLContexts.createSystemDefault();
    }
    final HttpVersionPolicy versionPolicy;
    if (config.isForceHttp2()) {
        versionPolicy = HttpVersionPolicy.FORCE_HTTP_2;
    } else {
        if (sslContext != null) {
            versionPolicy = HttpVersionPolicy.NEGOTIATE;
        } else {
            versionPolicy = HttpVersionPolicy.FORCE_HTTP_1;
        }
    }
    final Stats stats = new Stats();
    try (final HttpAsyncRequester requester = H2RequesterBootstrap.bootstrap().setHttpProcessor(builder.build()).setTlsStrategy(new BasicClientTlsStrategy(sslContext)).setVersionPolicy(versionPolicy).setH2Config(H2Config.custom().setPushEnabled(false).build()).setIOSessionDecorator(ioSession -> new IOSession() {

        @Override
        public String getId() {
            return ioSession.getId();
        }

        @Override
        public Lock getLock() {
            return ioSession.getLock();
        }

        @Override
        public void enqueue(final Command command, final Command.Priority priority) {
            ioSession.enqueue(command, priority);
        }

        @Override
        public boolean hasCommands() {
            return ioSession.hasCommands();
        }

        @Override
        public Command poll() {
            return ioSession.poll();
        }

        @Override
        public ByteChannel channel() {
            return ioSession.channel();
        }

        @Override
        public SocketAddress getRemoteAddress() {
            return ioSession.getRemoteAddress();
        }

        @Override
        public SocketAddress getLocalAddress() {
            return ioSession.getLocalAddress();
        }

        @Override
        public int getEventMask() {
            return ioSession.getEventMask();
        }

        @Override
        public void setEventMask(final int ops) {
            ioSession.setEventMask(ops);
        }

        @Override
        public void setEvent(final int op) {
            ioSession.setEvent(op);
        }

        @Override
        public void clearEvent(final int op) {
            ioSession.clearEvent(op);
        }

        @Override
        public void close() {
            ioSession.close();
        }

        @Override
        public Status getStatus() {
            return ioSession.getStatus();
        }

        @Override
        public int read(final ByteBuffer dst) throws IOException {
            final int bytesRead = ioSession.read(dst);
            if (bytesRead > 0) {
                stats.incTotalBytesRecv(bytesRead);
            }
            return bytesRead;
        }

        @Override
        public int write(final ByteBuffer src) throws IOException {
            final int bytesWritten = ioSession.write(src);
            if (bytesWritten > 0) {
                stats.incTotalBytesSent(bytesWritten);
            }
            return bytesWritten;
        }

        @Override
        public boolean isOpen() {
            return ioSession.isOpen();
        }

        @Override
        public Timeout getSocketTimeout() {
            return ioSession.getSocketTimeout();
        }

        @Override
        public void setSocketTimeout(final Timeout timeout) {
            ioSession.setSocketTimeout(timeout);
        }

        @Override
        public long getLastReadTime() {
            return ioSession.getLastReadTime();
        }

        @Override
        public long getLastWriteTime() {
            return ioSession.getLastWriteTime();
        }

        @Override
        public long getLastEventTime() {
            return ioSession.getLastEventTime();
        }

        @Override
        public void updateReadTime() {
            ioSession.updateReadTime();
        }

        @Override
        public void updateWriteTime() {
            ioSession.updateWriteTime();
        }

        @Override
        public void close(final CloseMode closeMode) {
            ioSession.close(closeMode);
        }

        @Override
        public IOEventHandler getHandler() {
            return ioSession.getHandler();
        }

        @Override
        public void upgrade(final IOEventHandler handler) {
            ioSession.upgrade(handler);
        }
    }).setStreamListener(new Http1StreamListener() {

        @Override
        public void onRequestHead(final HttpConnection connection, final HttpRequest request) {
            if (config.getVerbosity() >= 3) {
                System.out.println(">> " + request.getMethod() + " " + request.getRequestUri());
                final Header[] headers = request.getHeaders();
                for (final Header header : headers) {
                    System.out.println(">> " + header);
                }
                System.out.println();
            }
        }

        @Override
        public void onResponseHead(final HttpConnection connection, final HttpResponse response) {
            if (config.getVerbosity() >= 3) {
                System.out.println("<< " + response.getCode() + " " + response.getReasonPhrase());
                final Header[] headers = response.getHeaders();
                for (final Header header : headers) {
                    System.out.println("<< " + header);
                }
                System.out.println();
            }
        }

        @Override
        public void onExchangeComplete(final HttpConnection connection, final boolean keepAlive) {
        }
    }).setStreamListener(new H2StreamListener() {

        private final FramePrinter framePrinter = new FramePrinter();

        @Override
        public void onHeaderInput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
            if (config.getVerbosity() >= 3) {
                for (final Header header : headers) {
                    System.out.println("<< " + header);
                }
                System.out.println();
            }
        }

        @Override
        public void onHeaderOutput(final HttpConnection connection, final int streamId, final List<? extends Header> headers) {
            if (config.getVerbosity() >= 3) {
                for (final Header header : headers) {
                    System.out.println(">> " + header);
                }
                System.out.println();
            }
        }

        @Override
        public void onFrameInput(final HttpConnection connection, final int streamId, final RawFrame frame) {
            if (config.getVerbosity() >= 4) {
                System.out.print("<< ");
                try {
                    framePrinter.printFrameInfo(frame, System.out);
                    System.out.println();
                    if (!frame.isType(FrameType.DATA)) {
                        framePrinter.printPayload(frame, System.out);
                        System.out.println();
                    }
                } catch (final IOException ignore) {
                }
            }
        }

        @Override
        public void onFrameOutput(final HttpConnection connection, final int streamId, final RawFrame frame) {
            if (config.getVerbosity() >= 4) {
                System.out.print(">> ");
                try {
                    framePrinter.printFrameInfo(frame, System.out);
                    System.out.println();
                    if (!frame.isType(FrameType.DATA)) {
                        framePrinter.printPayload(frame, System.out);
                        System.out.println();
                    }
                } catch (final IOException ignore) {
                }
            }
        }

        @Override
        public void onInputFlowControl(final HttpConnection connection, final int streamId, final int delta, final int actualSize) {
            if (config.getVerbosity() >= 5) {
                System.out.println("<< stream " + streamId + ": " + actualSize + " " + delta);
            }
        }

        @Override
        public void onOutputFlowControl(final HttpConnection connection, final int streamId, final int delta, final int actualSize) {
            if (config.getVerbosity() >= 5) {
                System.out.println(">> stream " + streamId + ": " + actualSize + " " + delta);
            }
        }
    }).setIOReactorConfig(IOReactorConfig.custom().setSoTimeout(config.getSocketTimeout()).build()).create()) {
        requester.setDefaultMaxPerRoute(config.getConcurrencyLevel());
        requester.setMaxTotal(config.getConcurrencyLevel() * 2);
        requester.start();
        return doExecute(requester, stats);
    }
}
Also used : HttpConnection(org.apache.hc.core5.http.HttpConnection) Http1StreamListener(org.apache.hc.core5.http.impl.Http1StreamListener) H2RequestContent(org.apache.hc.core5.http2.protocol.H2RequestContent) H2RequestConnControl(org.apache.hc.core5.http2.protocol.H2RequestConnControl) H2StreamListener(org.apache.hc.core5.http2.impl.nio.H2StreamListener) HttpVersionPolicy(org.apache.hc.core5.http2.HttpVersionPolicy) IOSession(org.apache.hc.core5.reactor.IOSession) HttpAsyncRequester(org.apache.hc.core5.http.impl.bootstrap.HttpAsyncRequester) SocketAddress(java.net.SocketAddress) SSLContextBuilder(org.apache.hc.core5.ssl.SSLContextBuilder) HttpRequest(org.apache.hc.core5.http.HttpRequest) FramePrinter(org.apache.hc.core5.http2.frame.FramePrinter) RequestExpectContinue(org.apache.hc.core5.http.protocol.RequestExpectContinue) RequestUserAgent(org.apache.hc.core5.http.protocol.RequestUserAgent) Timeout(org.apache.hc.core5.util.Timeout) HttpResponse(org.apache.hc.core5.http.HttpResponse) SSLContext(javax.net.ssl.SSLContext) IOException(java.io.IOException) ByteBuffer(java.nio.ByteBuffer) Lock(java.util.concurrent.locks.Lock) IOEventHandler(org.apache.hc.core5.reactor.IOEventHandler) HttpProcessorBuilder(org.apache.hc.core5.http.protocol.HttpProcessorBuilder) ByteChannel(java.nio.channels.ByteChannel) BasicClientTlsStrategy(org.apache.hc.core5.http.nio.ssl.BasicClientTlsStrategy) Header(org.apache.hc.core5.http.Header) Command(org.apache.hc.core5.reactor.Command) CloseMode(org.apache.hc.core5.io.CloseMode) RawFrame(org.apache.hc.core5.http2.frame.RawFrame) H2RequestTargetHost(org.apache.hc.core5.http2.protocol.H2RequestTargetHost) File(java.io.File)

Example 5 with CloseMode

use of org.apache.hc.core5.io.CloseMode in project httpcomponents-core by apache.

the class AbstractH2StreamMultiplexer method onException.

public final void onException(final Exception cause) {
    try {
        for (; ; ) {
            final AsyncPingHandler pingHandler = pingHandlers.poll();
            if (pingHandler != null) {
                pingHandler.failed(cause);
            } else {
                break;
            }
        }
        for (; ; ) {
            final Command command = ioSession.poll();
            if (command != null) {
                if (command instanceof ExecutableCommand) {
                    ((ExecutableCommand) command).failed(new ConnectionClosedException());
                } else {
                    command.cancel();
                }
            } else {
                break;
            }
        }
        for (final Iterator<Map.Entry<Integer, H2Stream>> it = streamMap.entrySet().iterator(); it.hasNext(); ) {
            final Map.Entry<Integer, H2Stream> entry = it.next();
            final H2Stream stream = entry.getValue();
            stream.reset(cause);
        }
        streamMap.clear();
        if (!(cause instanceof ConnectionClosedException)) {
            if (connState.compareTo(ConnectionHandshake.GRACEFUL_SHUTDOWN) <= 0) {
                final H2Error errorCode;
                if (cause instanceof H2ConnectionException) {
                    errorCode = H2Error.getByCode(((H2ConnectionException) cause).getCode());
                } else if (cause instanceof ProtocolException) {
                    errorCode = H2Error.PROTOCOL_ERROR;
                } else {
                    errorCode = H2Error.INTERNAL_ERROR;
                }
                final RawFrame goAway = frameFactory.createGoAway(processedRemoteStreamId, errorCode, cause.getMessage());
                commitFrame(goAway);
            }
        }
    } catch (final IOException ignore) {
    } finally {
        connState = ConnectionHandshake.SHUTDOWN;
        final CloseMode closeMode;
        if (cause instanceof ConnectionClosedException) {
            closeMode = CloseMode.GRACEFUL;
        } else if (cause instanceof IOException) {
            closeMode = CloseMode.IMMEDIATE;
        } else {
            closeMode = CloseMode.GRACEFUL;
        }
        ioSession.close(closeMode);
    }
}
Also used : ProtocolException(org.apache.hc.core5.http.ProtocolException) H2ConnectionException(org.apache.hc.core5.http2.H2ConnectionException) ConnectionClosedException(org.apache.hc.core5.http.ConnectionClosedException) H2Error(org.apache.hc.core5.http2.H2Error) IOException(java.io.IOException) AtomicInteger(java.util.concurrent.atomic.AtomicInteger) PingCommand(org.apache.hc.core5.http2.nio.command.PingCommand) ExecutableCommand(org.apache.hc.core5.http.nio.command.ExecutableCommand) Command(org.apache.hc.core5.reactor.Command) ShutdownCommand(org.apache.hc.core5.http.nio.command.ShutdownCommand) AsyncPingHandler(org.apache.hc.core5.http2.nio.AsyncPingHandler) CloseMode(org.apache.hc.core5.io.CloseMode) RawFrame(org.apache.hc.core5.http2.frame.RawFrame) ExecutableCommand(org.apache.hc.core5.http.nio.command.ExecutableCommand) Map(java.util.Map) ConcurrentHashMap(java.util.concurrent.ConcurrentHashMap)

Aggregations

CloseMode (org.apache.hc.core5.io.CloseMode)4 IOException (java.io.IOException)3 ConnectionClosedException (org.apache.hc.core5.http.ConnectionClosedException)2 RawFrame (org.apache.hc.core5.http2.frame.RawFrame)2 Command (org.apache.hc.core5.reactor.Command)2 Timeout (org.apache.hc.core5.util.Timeout)2 File (java.io.File)1 SocketAddress (java.net.SocketAddress)1 ByteBuffer (java.nio.ByteBuffer)1 ByteChannel (java.nio.channels.ByteChannel)1 Map (java.util.Map)1 ConcurrentHashMap (java.util.concurrent.ConcurrentHashMap)1 AtomicInteger (java.util.concurrent.atomic.AtomicInteger)1 Lock (java.util.concurrent.locks.Lock)1 SSLContext (javax.net.ssl.SSLContext)1 Header (org.apache.hc.core5.http.Header)1 HttpConnection (org.apache.hc.core5.http.HttpConnection)1 HttpRequest (org.apache.hc.core5.http.HttpRequest)1 HttpResponse (org.apache.hc.core5.http.HttpResponse)1 ProtocolException (org.apache.hc.core5.http.ProtocolException)1