changeset 74198:f99159d8c860

(url-http-wait-for-headers-change-function): Use `when' instead of `if' when possible.
author Magnus Henoch <mange@freemail.hu>
date Sun, 26 Nov 2006 12:50:07 +0000
parents a6d2e4685692
children 96790717f62a
files lisp/url/url-http.el
diffstat 1 files changed, 111 insertions(+), 113 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/url/url-http.el	Sun Nov 26 12:13:30 2006 +0000
+++ b/lisp/url/url-http.el	Sun Nov 26 12:50:07 2006 +0000
@@ -928,123 +928,121 @@
 		    url-http-response-status))
   (url-http-debug "url-http-wait-for-headers-change-function (%s)"
 		  (buffer-name))
-  (if (not (bobp))
-      (let ((end-of-headers nil)
-	    (old-http nil)
-	    (content-length nil))
-	(goto-char (point-min))
-	(if (and (looking-at ".*\n")	; have one line at least
-		 (not (looking-at "^HTTP/[1-9]\\.[0-9]")))
-	    ;; Not HTTP/x.y data, must be 0.9
-	    ;; God, I wish this could die.
-	    (setq end-of-headers t
-		  url-http-end-of-headers 0
-		  old-http t)
-	  (if (re-search-forward "^\r*$" nil t)
-	      ;; Saw the end of the headers
-	      (progn
-		(url-http-debug "Saw end of headers... (%s)" (buffer-name))
-		(setq url-http-end-of-headers (set-marker (make-marker)
-							  (point))
-		      end-of-headers t)
-		(url-http-clean-headers))))
+  (when (not (bobp))
+    (let ((end-of-headers nil)
+	  (old-http nil)
+	  (content-length nil))
+      (goto-char (point-min))
+      (if (and (looking-at ".*\n")	; have one line at least
+	       (not (looking-at "^HTTP/[1-9]\\.[0-9]")))
+	  ;; Not HTTP/x.y data, must be 0.9
+	  ;; God, I wish this could die.
+	  (setq end-of-headers t
+		url-http-end-of-headers 0
+		old-http t)
+	(when (re-search-forward "^\r*$" nil t)
+	  ;; Saw the end of the headers
+	  (url-http-debug "Saw end of headers... (%s)" (buffer-name))
+	  (setq url-http-end-of-headers (set-marker (make-marker)
+						    (point))
+		end-of-headers t)
+	  (url-http-clean-headers)))
+
+      (if (not end-of-headers)
+	  ;; Haven't seen the end of the headers yet, need to wait
+	  ;; for more data to arrive.
+	  nil
+	(if old-http
+	    (message "HTTP/0.9 How I hate thee!")
+	  (progn
+	    (url-http-parse-response)
+	    (mail-narrow-to-head)
+	    ;;(narrow-to-region (point-min) url-http-end-of-headers)
+	    (setq url-http-transfer-encoding (mail-fetch-field
+					      "transfer-encoding")
+		  url-http-content-type (mail-fetch-field "content-type"))
+	    (if (mail-fetch-field "content-length")
+		(setq url-http-content-length
+		      (string-to-number (mail-fetch-field "content-length"))))
+	    (widen)))
+	(when url-http-transfer-encoding
+	  (setq url-http-transfer-encoding
+		(downcase url-http-transfer-encoding)))
 
-	(if (not end-of-headers)
-	    ;; Haven't seen the end of the headers yet, need to wait
-	    ;; for more data to arrive.
-	    nil
-	  (if old-http
-	      (message "HTTP/0.9 How I hate thee!")
-	    (progn
-	      (url-http-parse-response)
-	      (mail-narrow-to-head)
-	      ;;(narrow-to-region (point-min) url-http-end-of-headers)
-	      (setq url-http-transfer-encoding (mail-fetch-field
-						"transfer-encoding")
-		    url-http-content-type (mail-fetch-field "content-type"))
-	      (if (mail-fetch-field "content-length")
-		  (setq url-http-content-length
-			(string-to-number (mail-fetch-field "content-length"))))
-	      (widen)))
-	  (if url-http-transfer-encoding
-	      (setq url-http-transfer-encoding
-		    (downcase url-http-transfer-encoding)))
-
+	(cond
+	 ((or (= url-http-response-status 204)
+	      (= url-http-response-status 205))
+	  (url-http-debug "%d response must have headers only (%s)."
+			  url-http-response-status (buffer-name))
+	  (when (url-http-parse-headers)
+	    (url-http-activate-callback)))
+	 ((string= "HEAD" url-http-method)
+	  ;; A HEAD request is _ALWAYS_ terminated by the header
+	  ;; information, regardless of any entity headers,
+	  ;; according to section 4.4 of the HTTP/1.1 draft.
+	  (url-http-debug "HEAD request must have headers only (%s)."
+			  (buffer-name))
+	  (when (url-http-parse-headers)
+	    (url-http-activate-callback)))
+	 ((string= "CONNECT" url-http-method)
+	  ;; A CONNECT request is finished, but we cannot stick this
+	  ;; back on the free connectin list
+	  (url-http-debug "CONNECT request must have headers only.")
+	  (when (url-http-parse-headers)
+	    (url-http-activate-callback)))
+	 ((equal url-http-response-status 304)
+	  ;; Only allowed to have a header section.  We have to handle
+	  ;; this here instead of in url-http-parse-headers because if
+	  ;; you have a cached copy of something without a known
+	  ;; content-length, and try to retrieve it from the cache, we'd
+	  ;; fall into the 'being dumb' section and wait for the
+	  ;; connection to terminate, which means we'd wait for 10
+	  ;; seconds for the keep-alives to time out on some servers.
+	  (when (url-http-parse-headers)
+	    (url-http-activate-callback)))
+	 (old-http
+	  ;; HTTP/0.9 always signaled end-of-connection by closing the
+	  ;; connection.
+	  (url-http-debug
+	   "Saw HTTP/0.9 response, connection closed means end of document.")
+	  (setq url-http-after-change-function
+		'url-http-simple-after-change-function))
+	 ((equal url-http-transfer-encoding "chunked")
+	  (url-http-debug "Saw chunked encoding.")
+	  (setq url-http-after-change-function
+		'url-http-chunked-encoding-after-change-function)
+	  (when (> nd url-http-end-of-headers)
+	    (url-http-debug
+	     "Calling initial chunked-encoding for extra data at end of headers")
+	    (url-http-chunked-encoding-after-change-function
+	     (marker-position url-http-end-of-headers) nd
+	     (- nd url-http-end-of-headers))))
+	 ((integerp url-http-content-length)
+	  (url-http-debug
+	   "Got a content-length, being smart about document end.")
+	  (setq url-http-after-change-function
+		'url-http-content-length-after-change-function)
 	  (cond
-	   ((or (= url-http-response-status 204)
-		(= url-http-response-status 205))
-	    (url-http-debug "%d response must have headers only (%s)."
-			    url-http-response-status (buffer-name))
-	    (if (url-http-parse-headers)
-		(url-http-activate-callback)))
-	   ((string= "HEAD" url-http-method)
-	    ;; A HEAD request is _ALWAYS_ terminated by the header
-	    ;; information, regardless of any entity headers,
-	    ;; according to section 4.4 of the HTTP/1.1 draft.
-	    (url-http-debug "HEAD request must have headers only (%s)."
-			    (buffer-name))
-	    (if (url-http-parse-headers)
-		(url-http-activate-callback)))
-	   ((string= "CONNECT" url-http-method)
-	    ;; A CONNECT request is finished, but we cannot stick this
-	    ;; back on the free connectin list
-	    (url-http-debug "CONNECT request must have headers only.")
-	    (if (url-http-parse-headers)
-		(url-http-activate-callback)))
-	   ((equal url-http-response-status 304)
-	    ;; Only allowed to have a header section.  We have to handle
-	    ;; this here instead of in url-http-parse-headers because if
-	    ;; you have a cached copy of something without a known
-	    ;; content-length, and try to retrieve it from the cache, we'd
-	    ;; fall into the 'being dumb' section and wait for the
-	    ;; connection to terminate, which means we'd wait for 10
-	    ;; seconds for the keep-alives to time out on some servers.
-	    (if (url-http-parse-headers)
-		(url-http-activate-callback)))
-	   (old-http
-	    ;; HTTP/0.9 always signaled end-of-connection by closing the
-	    ;; connection.
+	   ((= 0 url-http-content-length)
+	    ;; We got a NULL body!  Activate the callback
+	    ;; immediately!
 	    (url-http-debug
-	     "Saw HTTP/0.9 response, connection closed means end of document.")
-	    (setq url-http-after-change-function
-		  'url-http-simple-after-change-function))
-	   ((equal url-http-transfer-encoding "chunked")
-	    (url-http-debug "Saw chunked encoding.")
-	    (setq url-http-after-change-function
-		  'url-http-chunked-encoding-after-change-function)
-	    (if (> nd url-http-end-of-headers)
-		(progn
-		  (url-http-debug
-		   "Calling initial chunked-encoding for extra data at end of headers")
-		  (url-http-chunked-encoding-after-change-function
-		   (marker-position url-http-end-of-headers) nd
-		   (- nd url-http-end-of-headers)))))
-	   ((integerp url-http-content-length)
-	    (url-http-debug
-	     "Got a content-length, being smart about document end.")
-	    (setq url-http-after-change-function
-		  'url-http-content-length-after-change-function)
-	    (cond
-	     ((= 0 url-http-content-length)
-	      ;; We got a NULL body!  Activate the callback
-	      ;; immediately!
-	      (url-http-debug
-	       "Got 0-length content-length, activating callback immediately.")
-	      (if (url-http-parse-headers)
-		  (url-http-activate-callback)))
-	     ((> nd url-http-end-of-headers)
-	      ;; Have some leftover data
-	      (url-http-debug "Calling initial content-length for extra data at end of headers")
-	      (url-http-content-length-after-change-function
-	       (marker-position url-http-end-of-headers)
-	       nd
-	       (- nd url-http-end-of-headers)))
-	     (t
-	      nil)))
+	     "Got 0-length content-length, activating callback immediately.")
+	    (when (url-http-parse-headers)
+	      (url-http-activate-callback)))
+	   ((> nd url-http-end-of-headers)
+	    ;; Have some leftover data
+	    (url-http-debug "Calling initial content-length for extra data at end of headers")
+	    (url-http-content-length-after-change-function
+	     (marker-position url-http-end-of-headers)
+	     nd
+	     (- nd url-http-end-of-headers)))
 	   (t
-	    (url-http-debug "No content-length, being dumb.")
-	    (setq url-http-after-change-function
-		  'url-http-simple-after-change-function)))))
+	    nil)))
+	 (t
+	  (url-http-debug "No content-length, being dumb.")
+	  (setq url-http-after-change-function
+		'url-http-simple-after-change-function)))))
     ;; We are still at the beginning of the buffer... must just be
     ;; waiting for a response.
     (url-http-debug "Spinning waiting for headers..."))