@NotNull
  private Response sendBlockingStunRequest(Request request) {
    try {
      CompletableFuture<Response> responseFuture = new CompletableFuture<>();
      stunStack.sendRequest(
          request, serverAddress, localAddress, blockingResponseCollector(responseFuture));
      Response response = responseFuture.get();

      if (response.isErrorResponse()) {
        logger.warn(
            "STUN error: {}",
            ((ErrorCodeAttribute) response.getAttribute(ERROR_CODE)).getReasonPhrase());
      }
      return response;
    } catch (IOException | InterruptedException | ExecutionException e) {
      throw new RuntimeException(e);
    }
  }