public RecordingTransferListener getRecordingTransferListener() {
   if (session.getTransferListener() instanceof RecordingTransferListener) {
     return (RecordingTransferListener) session.getTransferListener();
   } else {
     return new RecordingTransferListener(session.getTransferListener());
   }
 }
  private Set<Artifact> processTransientDependencies(
      List<org.apache.maven.model.Dependency> dependencies, boolean sharedLibraries)
      throws MojoExecutionException {

    Set<Artifact> transientArtifacts = new LinkedHashSet<Artifact>();
    for (org.apache.maven.model.Dependency dependency : dependencies) {
      if (!"provided".equals(dependency.getScope()) && !dependency.isOptional()) {
        transientArtifacts.addAll(
            processTransientDependencies(
                toDependency(dependency, repoSession.getArtifactTypeRegistry()), sharedLibraries));
      }
    }

    return transientArtifacts;
  }
  /**
   * Create an {@link org.sonatype.aether.connector.async.AsyncRepositoryConnector} instance which
   * connect to the {@link RemoteRepository}
   *
   * @param repository the remote repository
   * @param session the {@link RepositorySystemSession}
   * @param logger the logger.
   * @throws NoRepositoryConnectorException
   */
  public AsyncRepositoryConnector(
      RemoteRepository repository,
      RepositorySystemSession session,
      FileProcessor fileProcessor,
      Logger logger)
      throws NoRepositoryConnectorException {
    this.logger = logger;
    this.repository = repository;
    this.listener = session.getTransferListener();
    this.fileProcessor = fileProcessor;
    this.session = session;

    if (!"default".equals(repository.getContentType())) {
      throw new NoRepositoryConnectorException(repository);
    }

    if (!repository.getProtocol().regionMatches(true, 0, "http", 0, "http".length())
        && !repository.getProtocol().regionMatches(true, 0, "dav", 0, "dav".length())) {
      throw new NoRepositoryConnectorException(repository);
    }

    AsyncHttpClientConfig config = createConfig(session, repository, true);
    httpClient = new AsyncHttpClient(new NettyAsyncHttpProvider(config));

    checksumAlgos = new LinkedHashMap<String, String>();
    checksumAlgos.put("SHA-1", ".sha1");
    checksumAlgos.put("MD5", ".md5");

    disableResumeSupport =
        ConfigUtils.getBoolean(session, false, "aether.connector.ahc.disableResumable");
    maxIOExceptionRetry = ConfigUtils.getInteger(session, 3, "aether.connector.ahc.resumeRetry");

    this.headers = new FluentCaseInsensitiveStringsMap();
    Map<?, ?> headers =
        ConfigUtils.getMap(
            session,
            null,
            ConfigurationProperties.HTTP_HEADERS + "." + repository.getId(),
            ConfigurationProperties.HTTP_HEADERS);
    if (headers != null) {
      for (Map.Entry<?, ?> entry : headers.entrySet()) {
        if (entry.getKey() instanceof String && entry.getValue() instanceof String) {
          this.headers.add(entry.getKey().toString(), entry.getValue().toString());
        }
      }
    }
  }