diff options
| -rw-r--r-- | lisp/url/url-http.el | 51 |
1 files changed, 44 insertions, 7 deletions
diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index eb5d5c13722..a230a37e9ff 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el | |||
| @@ -56,6 +56,7 @@ | |||
| 56 | (defvar url-http-transfer-encoding) | 56 | (defvar url-http-transfer-encoding) |
| 57 | (defvar url-show-status) | 57 | (defvar url-show-status) |
| 58 | (defvar url-http-referer) | 58 | (defvar url-http-referer) |
| 59 | (defvar url-http-extensions-header) | ||
| 59 | 60 | ||
| 60 | (require 'url-gw) | 61 | (require 'url-gw) |
| 61 | (require 'url-parse) | 62 | (require 'url-parse) |
| @@ -374,9 +375,9 @@ Use `url-http-referer' as the Referer-header (subject to `url-privacy-level')." | |||
| 374 | "close" "keep-alive") | 375 | "close" "keep-alive") |
| 375 | "\r\n" | 376 | "\r\n" |
| 376 | ;; HTTP extensions we support | 377 | ;; HTTP extensions we support |
| 377 | (if url-extensions-header | 378 | (if url-http-extensions-header |
| 378 | (format | 379 | (format |
| 379 | "Extension: %s\r\n" url-extensions-header)) | 380 | "Extension: %s\r\n" url-http-extensions-header)) |
| 380 | ;; Who we want to talk to | 381 | ;; Who we want to talk to |
| 381 | (if (/= (url-port url-http-target-url) | 382 | (if (/= (url-port url-http-target-url) |
| 382 | (url-scheme-get-property | 383 | (url-scheme-get-property |
| @@ -1020,8 +1021,9 @@ should be shown to the user." | |||
| 1020 | ;; ) | 1021 | ;; ) |
| 1021 | 1022 | ||
| 1022 | ;; These unfortunately cannot be macros... please ignore them! | 1023 | ;; These unfortunately cannot be macros... please ignore them! |
| 1023 | (defun url-http-idle-sentinel (proc _why) | 1024 | (defun url-http-idle-sentinel (proc why) |
| 1024 | "Remove (now defunct) process PROC from the list of open connections." | 1025 | "Remove (now defunct) process PROC from the list of open connections." |
| 1026 | (url-http-debug "url-http-idle-sentinel for process %S: %s" proc (string-trim why)) | ||
| 1025 | (maphash (lambda (key val) | 1027 | (maphash (lambda (key val) |
| 1026 | (if (memq proc val) | 1028 | (if (memq proc val) |
| 1027 | (puthash key (delq proc val) url-http-open-connections))) | 1029 | (puthash key (delq proc val) url-http-open-connections))) |
| @@ -1340,9 +1342,19 @@ overriding the value of `url-gateway-method'. | |||
| 1340 | 1342 | ||
| 1341 | The return value of this function is the retrieval buffer." | 1343 | The return value of this function is the retrieval buffer." |
| 1342 | (cl-check-type url url "Need a pre-parsed URL.") | 1344 | (cl-check-type url url "Need a pre-parsed URL.") |
| 1345 | ;; The request is handled by asynchronous processes, which are outside | ||
| 1346 | ;; the dynamic scope of the caller of url-http (sometimes, sometimes | ||
| 1347 | ;; not). The caller may still desire to bind variables controlling | ||
| 1348 | ;; aspects of the request for the duration of this one http request. | ||
| 1349 | ;; The async processes operate on a buffer created in this function, | ||
| 1350 | ;; so the way to accomplish this goal is to set buffer local copies of | ||
| 1351 | ;; the relevant variables to the dynamic values in scope as we create | ||
| 1352 | ;; the buffer. When new variables are added that influence behaviour | ||
| 1353 | ;; of requests, they should be added to the handling in this function | ||
| 1354 | ;; to make them work reliably without changing their global values. | ||
| 1343 | (let* (;; (host (url-host (or url-using-proxy url))) | 1355 | (let* (;; (host (url-host (or url-using-proxy url))) |
| 1344 | ;; (port (url-port (or url-using-proxy url))) | 1356 | ;; (port (url-port (or url-using-proxy url))) |
| 1345 | (nsm-noninteractive (not (url-interactive-p))) | 1357 | (noninteractive-p (not (url-interactive-p))) |
| 1346 | ;; The following binding is needed in url-open-stream, which | 1358 | ;; The following binding is needed in url-open-stream, which |
| 1347 | ;; is called from url-http-find-free-connection. | 1359 | ;; is called from url-http-find-free-connection. |
| 1348 | (url-current-object url) | 1360 | (url-current-object url) |
| @@ -1350,10 +1362,17 @@ The return value of this function is the retrieval buffer." | |||
| 1350 | (url-port url) | 1362 | (url-port url) |
| 1351 | gateway-method)) | 1363 | gateway-method)) |
| 1352 | (mime-accept-string url-mime-accept-string) | 1364 | (mime-accept-string url-mime-accept-string) |
| 1365 | (mime-encoding-string url-mime-encoding-string) | ||
| 1366 | (mime-charset-string url-mime-charset-string) | ||
| 1367 | (mime-language-string url-mime-language-string) | ||
| 1353 | (buffer (or retry-buffer | 1368 | (buffer (or retry-buffer |
| 1354 | (generate-new-buffer | 1369 | (generate-new-buffer |
| 1355 | (format " *http %s:%d*" (url-host url) (url-port url))))) | 1370 | (format " *http %s:%d*" (url-host url) (url-port url))))) |
| 1356 | (referer (url-http--encode-string (url-http--get-referer url)))) | 1371 | (referer (url-http--encode-string (url-http--get-referer url))) |
| 1372 | (httpver url-http-version) | ||
| 1373 | (httpkeepalive url-http-attempt-keepalives) | ||
| 1374 | (user-agent url-user-agent) | ||
| 1375 | (privacy-level url-privacy-level)) | ||
| 1357 | (if (not connection) | 1376 | (if (not connection) |
| 1358 | ;; Failed to open the connection for some reason | 1377 | ;; Failed to open the connection for some reason |
| 1359 | (progn | 1378 | (progn |
| @@ -1389,8 +1408,17 @@ The return value of this function is the retrieval buffer." | |||
| 1389 | url-http-no-retry | 1408 | url-http-no-retry |
| 1390 | url-http-connection-opened | 1409 | url-http-connection-opened |
| 1391 | url-mime-accept-string | 1410 | url-mime-accept-string |
| 1411 | url-mime-encoding-string | ||
| 1412 | url-mime-charset-string | ||
| 1413 | url-mime-language-string | ||
| 1392 | url-http-proxy | 1414 | url-http-proxy |
| 1393 | url-http-referer)) | 1415 | url-http-referer |
| 1416 | url-http-version | ||
| 1417 | url-http-attempt-keepalives | ||
| 1418 | url-http-extensions-header | ||
| 1419 | url-user-agent | ||
| 1420 | url-privacy-level | ||
| 1421 | nsm-noninteractive)) | ||
| 1394 | (set (make-local-variable var) nil)) | 1422 | (set (make-local-variable var) nil)) |
| 1395 | 1423 | ||
| 1396 | (setq url-http-method (or url-request-method "GET") | 1424 | (setq url-http-method (or url-request-method "GET") |
| @@ -1409,8 +1437,17 @@ The return value of this function is the retrieval buffer." | |||
| 1409 | url-http-no-retry retry-buffer | 1437 | url-http-no-retry retry-buffer |
| 1410 | url-http-connection-opened nil | 1438 | url-http-connection-opened nil |
| 1411 | url-mime-accept-string mime-accept-string | 1439 | url-mime-accept-string mime-accept-string |
| 1440 | url-mime-encoding-string mime-encoding-string | ||
| 1441 | url-mime-charset-string mime-charset-string | ||
| 1442 | url-mime-language-string mime-language-string | ||
| 1412 | url-http-proxy url-using-proxy | 1443 | url-http-proxy url-using-proxy |
| 1413 | url-http-referer referer) | 1444 | url-http-referer referer |
| 1445 | url-http-version httpver | ||
| 1446 | url-http-attempt-keepalives httpkeepalive | ||
| 1447 | url-http-extensions-header url-extensions-header | ||
| 1448 | url-user-agent user-agent | ||
| 1449 | url-privacy-level privacy-level | ||
| 1450 | nsm-noninteractive noninteractive-p) | ||
| 1414 | 1451 | ||
| 1415 | (set-process-buffer connection buffer) | 1452 | (set-process-buffer connection buffer) |
| 1416 | (set-process-filter connection #'url-http-generic-filter) | 1453 | (set-process-filter connection #'url-http-generic-filter) |