diff options
author | Christopher Baines <mail@cbaines.net> | 2023-07-24 13:38:14 +0100 |
---|---|---|
committer | Christopher Baines <mail@cbaines.net> | 2023-07-24 13:38:14 +0100 |
commit | 668f25c05984f5e468d378554059cfe4703f931f (patch) | |
tree | fbfb4603d21315d8836f957a6f899e51ec331d0a /guix-build-coordinator/utils.scm | |
parent | 72129411f25da821b82ed1fe694d0fbd8cc23fa1 (diff) | |
download | build-coordinator-668f25c05984f5e468d378554059cfe4703f931f.tar build-coordinator-668f25c05984f5e468d378554059cfe4703f931f.tar.gz |
Make client requests mostly suspendable
Diffstat (limited to 'guix-build-coordinator/utils.scm')
-rw-r--r-- | guix-build-coordinator/utils.scm | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/guix-build-coordinator/utils.scm b/guix-build-coordinator/utils.scm index a98121b..06c22c6 100644 --- a/guix-build-coordinator/utils.scm +++ b/guix-build-coordinator/utils.scm @@ -98,6 +98,8 @@ get-port-metrics-updater get-guix-memory-metrics-updater + open-socket-for-uri* + check-locale! core-guile-sleep)) @@ -1339,6 +1341,36 @@ again." proc))))) %memoization-tables))) +;; Returns the port as well as the raw socket +(define* (open-socket-for-uri* uri + #:key (verify-certificate? #t) + (non-blocking? #t)) + (define tls-wrap + (@@ (web client) tls-wrap)) + + (define https? + (eq? 'https (uri-scheme uri))) + + (define plain-uri + (if https? + (build-uri + 'http + #:userinfo (uri-userinfo uri) + #:host (uri-host uri) + #:port (or (uri-port uri) 443) + #:path (uri-path uri) + #:query (uri-query uri) + #:fragment (uri-fragment uri)) + uri)) + + (let ((s (open-socket-for-uri plain-uri))) + (values + (if https? + (tls-wrap s (uri-host uri) + #:verify-certificate? verify-certificate?) + s) + s))) + (define (check-locale!) (with-exception-handler (lambda (exn) |