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:
parent
947ebc5fc5
commit
57babe1716
@ -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>
|
2006-11-23 Diane Murray <disumu@x3y2z1.net>
|
||||||
|
|
||||||
* url-http.el (url-http-content-length-after-change-function): Use
|
* url-http.el (url-http-content-length-after-change-function): Use
|
||||||
|
@ -928,123 +928,121 @@ the end of the document."
|
|||||||
url-http-response-status))
|
url-http-response-status))
|
||||||
(url-http-debug "url-http-wait-for-headers-change-function (%s)"
|
(url-http-debug "url-http-wait-for-headers-change-function (%s)"
|
||||||
(buffer-name))
|
(buffer-name))
|
||||||
(if (not (bobp))
|
(when (not (bobp))
|
||||||
(let ((end-of-headers nil)
|
(let ((end-of-headers nil)
|
||||||
(old-http nil)
|
(old-http nil)
|
||||||
(content-length nil))
|
(content-length nil))
|
||||||
(goto-char (point-min))
|
(goto-char (point-min))
|
||||||
(if (and (looking-at ".*\n") ; have one line at least
|
(if (and (looking-at ".*\n") ; have one line at least
|
||||||
(not (looking-at "^HTTP/[1-9]\\.[0-9]")))
|
(not (looking-at "^HTTP/[1-9]\\.[0-9]")))
|
||||||
;; Not HTTP/x.y data, must be 0.9
|
;; Not HTTP/x.y data, must be 0.9
|
||||||
;; God, I wish this could die.
|
;; God, I wish this could die.
|
||||||
(setq end-of-headers t
|
(setq end-of-headers t
|
||||||
url-http-end-of-headers 0
|
url-http-end-of-headers 0
|
||||||
old-http t)
|
old-http t)
|
||||||
(if (re-search-forward "^\r*$" nil t)
|
(when (re-search-forward "^\r*$" nil t)
|
||||||
;; Saw the end of the headers
|
;; Saw the end of the headers
|
||||||
(progn
|
(url-http-debug "Saw end of headers... (%s)" (buffer-name))
|
||||||
(url-http-debug "Saw end of headers... (%s)" (buffer-name))
|
(setq url-http-end-of-headers (set-marker (make-marker)
|
||||||
(setq url-http-end-of-headers (set-marker (make-marker)
|
(point))
|
||||||
(point))
|
end-of-headers t)
|
||||||
end-of-headers t)
|
(url-http-clean-headers)))
|
||||||
(url-http-clean-headers))))
|
|
||||||
|
|
||||||
(if (not end-of-headers)
|
(if (not end-of-headers)
|
||||||
;; Haven't seen the end of the headers yet, need to wait
|
;; Haven't seen the end of the headers yet, need to wait
|
||||||
;; for more data to arrive.
|
;; for more data to arrive.
|
||||||
nil
|
nil
|
||||||
(if old-http
|
(if old-http
|
||||||
(message "HTTP/0.9 How I hate thee!")
|
(message "HTTP/0.9 How I hate thee!")
|
||||||
(progn
|
(progn
|
||||||
(url-http-parse-response)
|
(url-http-parse-response)
|
||||||
(mail-narrow-to-head)
|
(mail-narrow-to-head)
|
||||||
;;(narrow-to-region (point-min) url-http-end-of-headers)
|
;;(narrow-to-region (point-min) url-http-end-of-headers)
|
||||||
(setq url-http-transfer-encoding (mail-fetch-field
|
(setq url-http-transfer-encoding (mail-fetch-field
|
||||||
"transfer-encoding")
|
"transfer-encoding")
|
||||||
url-http-content-type (mail-fetch-field "content-type"))
|
url-http-content-type (mail-fetch-field "content-type"))
|
||||||
(if (mail-fetch-field "content-length")
|
(if (mail-fetch-field "content-length")
|
||||||
(setq url-http-content-length
|
(setq url-http-content-length
|
||||||
(string-to-number (mail-fetch-field "content-length"))))
|
(string-to-number (mail-fetch-field "content-length"))))
|
||||||
(widen)))
|
(widen)))
|
||||||
(if url-http-transfer-encoding
|
(when url-http-transfer-encoding
|
||||||
(setq url-http-transfer-encoding
|
(setq url-http-transfer-encoding
|
||||||
(downcase 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
|
(cond
|
||||||
((or (= url-http-response-status 204)
|
((= 0 url-http-content-length)
|
||||||
(= url-http-response-status 205))
|
;; We got a NULL body! Activate the callback
|
||||||
(url-http-debug "%d response must have headers only (%s)."
|
;; immediately!
|
||||||
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.
|
|
||||||
(url-http-debug
|
(url-http-debug
|
||||||
"Saw HTTP/0.9 response, connection closed means end of document.")
|
"Got 0-length content-length, activating callback immediately.")
|
||||||
(setq url-http-after-change-function
|
(when (url-http-parse-headers)
|
||||||
'url-http-simple-after-change-function))
|
(url-http-activate-callback)))
|
||||||
((equal url-http-transfer-encoding "chunked")
|
((> nd url-http-end-of-headers)
|
||||||
(url-http-debug "Saw chunked encoding.")
|
;; Have some leftover data
|
||||||
(setq url-http-after-change-function
|
(url-http-debug "Calling initial content-length for extra data at end of headers")
|
||||||
'url-http-chunked-encoding-after-change-function)
|
(url-http-content-length-after-change-function
|
||||||
(if (> nd url-http-end-of-headers)
|
(marker-position url-http-end-of-headers)
|
||||||
(progn
|
nd
|
||||||
(url-http-debug
|
(- nd url-http-end-of-headers)))
|
||||||
"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)))
|
|
||||||
(t
|
(t
|
||||||
(url-http-debug "No content-length, being dumb.")
|
nil)))
|
||||||
(setq url-http-after-change-function
|
(t
|
||||||
'url-http-simple-after-change-function)))))
|
(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
|
;; We are still at the beginning of the buffer... must just be
|
||||||
;; waiting for a response.
|
;; waiting for a response.
|
||||||
(url-http-debug "Spinning waiting for headers..."))
|
(url-http-debug "Spinning waiting for headers..."))
|
||||||
|
Loading…
Reference in New Issue
Block a user