private void extendIncoming(ServerSessionImpl session, ServerMessage.Mutable message, Promise<Boolean> promise) { AsyncFoldLeft.run(_extensions, true, (result, extension, loop) -> { if (result) { try { extension.incoming(session, message, Promise.from(r -> { if (_logger.isDebugEnabled()) { _logger.debug("Extension {}: result {} for incoming message {}", extension, r, message); } loop.proceed(r == null ? true : r); }, failure -> { _logger.info("Exception reported by extension " + extension, failure); loop.proceed(true); })); } catch (Throwable x) { _logger.info("Exception thrown by extension " + extension, x); loop.proceed(true); } } else { loop.leave(false); } }, promise); }