emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/url-scgi 3686dad2bd 04/48: Cleanups in url-scgi.el


From: ELPA Syncer
Subject: [elpa] externals/url-scgi 3686dad2bd 04/48: Cleanups in url-scgi.el
Date: Fri, 28 Oct 2022 22:58:28 -0400 (EDT)

branch: externals/url-scgi
commit 3686dad2bdb72a619381dd1349174c9889b45e31
Author: Stefan Kangas <skangas@skangas.se>
Commit: Stefan Kangas <skangas@skangas.se>

    Cleanups in url-scgi.el
---
 url-scgi.el | 79 +++++++++++++++++++------------------------------------------
 1 file changed, 24 insertions(+), 55 deletions(-)

diff --git a/url-scgi.el b/url-scgi.el
index 27c2e00f7b..09dc501d09 100644
--- a/url-scgi.el
+++ b/url-scgi.el
@@ -37,33 +37,26 @@
 
 (eval-when-compile (require 'cl))
 
-(defvar url-scgi-content-length)
-(defvar url-scgi-content-type)
 (defvar url-scgi-connection-opened)
-
 (defconst url-scgi-asynchronous-p t "SCGI retrievals are asynchronous.")
 
 (defun scgi-string-to-netstring (str)
-  "Converts a string into a netstring as defined by the SCGI
-specification."
-  (let ((len (length str)))
-    (concat (number-to-string len)
-            ":" str ",")))
+  "Converts a string into a SCGI protocol netstring."
+  (format "%d:%s," (length str) str))
 
 (defun scgi-add-null-bytes (&rest args)
   (apply 'concat (mapcar (lambda (a) (concat a "\000")) args)))
 
 (defun scgi-make-request-header (data)
-  (scgi-add-null-bytes "CONTENT_LENGTH"
-                       (number-to-string (length data))
-                       "SCGI" "1"))
+  (scgi-string-to-netstring
+   (scgi-add-null-bytes
+    "CONTENT_LENGTH" (number-to-string (length data))
+    "SCGI" "1")))
 
 (defun url-scgi-create-request ()
   (declare (special url-request-data))
-  (concat
-   (scgi-string-to-netstring
-    (scgi-make-request-header url-request-data))
-   url-request-data))
+  (concat (scgi-make-request-header url-request-data)
+          url-request-data))
 
 (defun url-scgi-activate-callback ()
   "Activate callback specified when this buffer was created."
@@ -71,27 +64,8 @@ specification."
                    url-callback-arguments))
   (apply url-callback-function url-callback-arguments))
 
-(defun url-scgi-parse-headers ()
-  (declare (special url-scgi-content-length
-                    url-scgi-content-type))
-  (save-restriction
-    (save-match-data
-      (mail-narrow-to-head)
-      (goto-char (point-min))
-      (while (re-search-forward "\r$" nil t)
-        (replace-match ""))
-      (let ((status (mail-fetch-field "status"))
-            (content-length (mail-fetch-field "content-length"))
-            (content-type (mail-fetch-field "content-type")))
-        (when content-length
-          (setq url-scgi-content-length content-length))
-        (when content-type
-          (setq url-scgi-content-length content-type))
-        (when (and status (not (equal status "200 OK")))
-          (error (message (concat "Got status response: " status)))))))
-  t)
-
 (defun url-scgi-get-connection (host port)
+  "Set up a new connection and return it."
   (let ((buf (generate-new-buffer " *url-scgi-temp*")))
     ;; `url-open-stream' needs a buffer in which to do things
     ;; like authentication.  But we use another buffer afterwards.
@@ -114,7 +88,8 @@ specification."
   (let* ((host (url-host url))
         (port (url-port url))
         (connection (url-scgi-get-connection host port))
-        (buffer (generate-new-buffer (format " *scgi %s:%d*" host port))))
+        (buffer (generate-new-buffer
+                  (format " *scgi %s:%d*" host port))))
     (if (not connection)
        ;; Failed to open the connection for some reason
        (progn
@@ -122,13 +97,10 @@ specification."
          (setq buffer nil)
          (error "Could not create connection to %s:%d" host port))
       (with-current-buffer buffer
-       (mm-disable-multibyte)
        (setq url-current-object url
              mode-line-format "%b [%s]")
 
        (dolist (var '(url-scgi-connection-opened
-                       url-scgi-content-type
-                      url-scgi-content-length
                       url-callback-function
                       url-callback-arguments))
          (set (make-local-variable var) nil))
@@ -138,23 +110,26 @@ specification."
              url-scgi-connection-opened nil)
 
        (set-process-buffer connection buffer)
-       (set-process-filter connection 'url-scgi-filter)
-        (set-process-sentinel connection 'url-scgi-async-sentinel)
-       (let ((status (process-status connection)))
-          (cond ((eq status 'failed)
-                 (error "Could not create connection to %s:%d" host port))  
-                ((eq status 'open)
-                 (process-send-string connection (url-scgi-create-request))
-                 (setq url-scgi-connection-opened t))))))
+       (pcase (process-status connection)
+          (`connect
+           ;; Asynchronous connection
+           (set-process-sentinel connection 'url-scgi-async-sentinel))
+          (`failed
+           ;; Asynchronous connection failed
+           (error "Could not create connection to %s:%d" host port))
+          (_
+           (setq url-scgi-connection-opened t)
+           (process-send-string connection (url-scgi-create-request))))))
     buffer))
 
 (defun url-scgi-async-sentinel (proc why)
+  ;; We are performing an asynchronous connection, and a status change
+  ;; has occurred.
   (declare (special url-callback-arguments))
   (with-current-buffer (process-buffer proc)
     (cond
      (url-scgi-connection-opened
-      (if (url-scgi-parse-headers)
-          (url-scgi-activate-callback)))
+      (url-scgi-activate-callback))
      ((string= (substring why 0 4) "open")
       (setq url-scgi-connection-opened t)
       (process-send-string proc (url-scgi-create-request)))
@@ -166,12 +141,6 @@ specification."
                   (car url-callback-arguments)))
       (url-scgi-activate-callback)))))
 
-(defun url-scgi-filter (proc data)
-  (with-current-buffer (process-buffer proc)
-    (save-excursion
-      (goto-char (point-max))
-      (insert data))))
-
 (provide 'url-scgi)
 
 ;;; url-scgi.el ends here



reply via email to

[Prev in Thread] Current Thread [Next in Thread]