1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2024-11-22 07:09:54 +00:00

(url-http-wait-for-headers-change-function): Use `when' instead of

`if' when possible.
This commit is contained in:
Magnus Henoch 2006-11-26 12:50:15 +00:00
parent 947ebc5fc5
commit 57babe1716
2 changed files with 115 additions and 112 deletions

View File

@ -1,3 +1,8 @@
2006-11-26 Magnus Henoch <mange@freemail.hu>
* url-http.el (url-http-wait-for-headers-change-function): Use
`when' instead of `if' when possible.
2006-11-23 Diane Murray <disumu@x3y2z1.net>
* url-http.el (url-http-content-length-after-change-function): Use

View File

@ -928,123 +928,121 @@ the end of the document."
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)))
(if 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)))
(when 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..."))