aboutsummaryrefslogtreecommitdiff
path: root/guix-build-coordinator/utils.scm
diff options
context:
space:
mode:
authorChristopher Baines <mail@cbaines.net>2023-07-24 13:38:14 +0100
committerChristopher Baines <mail@cbaines.net>2023-07-24 13:38:14 +0100
commit668f25c05984f5e468d378554059cfe4703f931f (patch)
treefbfb4603d21315d8836f957a6f899e51ec331d0a /guix-build-coordinator/utils.scm
parent72129411f25da821b82ed1fe694d0fbd8cc23fa1 (diff)
downloadbuild-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.scm32
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)