• Anatol Pomozov's avatar
    Move signature payload creation to download engine · f078c2d3
    Anatol Pomozov authored and Allan McRae's avatar Allan McRae committed
    Until now callee of ALPM download functionality has been in charge of
    payload creation both for the main file (e.g. *.pkg) and for the accompanied
    *.sig file. One advantage of such solution is that all payloads are
    independent and can be fetched in parallel thus exploiting the maximum
    level of download parallelism.
    To build *.sig file url we've been using a simple string concatenation:
    $requested_url + ".sig". Unfortunately there are cases when it does not
    work. For example an archlinux.org "Download From Mirror" link looks like
    this https://www.archlinux.org/packages/core/x86_64/bash/download/
    it gets redirected to some mirror. But if we append ".sig" to the end of
    the link url and try to download it then archlinux.org returns 404 error.
    To overcome this issue we need to follow redirects for the main payload
    first, find the final url and only then append '.sig' suffix.
    This implies 2 things:
     - the signature payload initialization need to be moved to dload.c
     as it is the place where we have access to the resolved url
     - *.sig is downloaded serially with the main payload and this reduces
     level of parallelism
    Move *.sig payload creation to dload.c. Once the main payload is fetched
    successfully we check if the callee asked to download the accompanied
    signature. If yes - create a new payload and add it to mcurl.
    *.sig payload does not use server list of the main payload and thus does
    not support mirror failover. *.sig file comes from the same server as
    the main payload.
    Refactor event loop in curl_multi_download_internal() a bit. Instead of
    relying on curl_multi_check_finished_download() to return number of new
    payloads we simply rerun the loop iteration one more time to check if
    there are any active downloads left.
    Signed-off-by: Anatol Pomozov's avatarAnatol Pomozov <anatol.pomozov@gmail.com>
    Signed-off-by: Allan McRae's avatarAllan McRae <allan@archlinux.org>