protected void extendOutgoing(ServerSession sender, ServerSession session, Mutable message, Promise<Boolean> promise) { List<Extension> extensions = new ArrayList<>(_extensions); Collections.reverse(extensions); AsyncFoldLeft.run(extensions, true, (result, extension, loop) -> { if (result) { try { extension.outgoing(sender, session, message, Promise.from(r -> loop.proceed(r == null ? true : r), failure -> { _logger.info("Exception reported by extension " + extension, failure); loop.proceed(true); })); } catch (Exception x) { _logger.info("Exception thrown by extension " + extension, x); loop.proceed(true); } } else { loop.leave(false); } }, promise); }