X-Git-Url: http://dolda2000.com/gitweb/?a=blobdiff_plain;f=lib%2Fguile%2Fdolcon%2Fui.scm;h=f5a27fbe14284b477819295d78f27f1d931a99f6;hb=9cbeb60c78389bde5a290e263335cffffbb5ced6;hp=d6b435499f77529a644dd6640855998315889c68;hpb=691f0a7044ab55e180db5620aa28ff6d8268273c;p=doldaconnect.git diff --git a/lib/guile/dolcon/ui.scm b/lib/guile/dolcon/ui.scm index d6b4354..f5a27fb 100644 --- a/lib/guile/dolcon/ui.scm +++ b/lib/guile/dolcon/ui.scm @@ -1,6 +1,6 @@ (define-module (dolcon ui)) -(export dc-connect dc-disconnect dc-connected dc-select dc-getresp dc-extract dc-intresp dc-qcmd dc-loginasync dc-lexsexpr) +(export dc-connect dc-disconnect dc-connected dc-select dc-getresp dc-extract dc-intresp dc-qcmd dc-loginasync dc-lexsexpr dc-checkproto) (load-extension "libdolcon-guile" "init_guiledc") @@ -16,15 +16,19 @@ errsym))) (define-public dc-must-connect - (lambda args - (let* ((fd (apply dc-connect args)) (resp (dc-extract (do ((resp (dc-getresp) (dc-getresp))) - ((and resp - (equal? (cdr (assoc 'cmd (dc-extract resp))) ".connect")) - resp) - (dc-select))))) - (if (= (cdr (assoc 'code resp)) 200) - fd + (lambda (host . version) + (let* ((fd (dc-connect host)) + (ores (do ((resp (dc-getresp) (dc-getresp))) + ((and resp + (equal? (cdr (assoc 'cmd (dc-extract resp))) ".connect")) + resp) + (dc-select))) + (resp (dc-extract ores))) + (if (not (= (cdr (assoc 'code resp)) 201)) (throw 'bad-return (cdr (assoc 'code resp)) (cadr (assoc 'resp resp))) + (if (dc-checkproto ores (if (pair? version) (car version) dc-latest)) + fd + (throw 'bad-protocol ores)) ) ) )