From 6edea0a595d292c4d3f1a7e862195be07c874e40 Mon Sep 17 00:00:00 2001 From: Lars Magne Ingebrigtsen Date: Sun, 11 Aug 2013 22:52:50 +0200 Subject: [PATCH] Add Content-Transfer gzip support to url * url-http.el (url-handle-content-transfer-encoding): Support decompressing gzipped content. * url-vars.el (url-mime-encoding-string): If we have built-in gzip support, say that we accept gzipped content. --- lisp/url/ChangeLog | 8 ++++++++ lisp/url/url-http.el | 14 +++++++++++++- lisp/url/url-vars.el | 4 ++-- 3 files changed, 23 insertions(+), 3 deletions(-) diff --git a/lisp/url/ChangeLog b/lisp/url/ChangeLog index 120d00002e4..9bdaff6f51a 100644 --- a/lisp/url/ChangeLog +++ b/lisp/url/ChangeLog @@ -1,3 +1,11 @@ +2013-08-11 Lars Magne Ingebrigtsen + + * url-vars.el (url-mime-encoding-string): If we have built-in gzip + support, say that we accept gzipped content. + + * url-http.el (url-handle-content-transfer-encoding): Support + decompressing gzipped content. + 2013-07-31 Stefan Monnier * url-handlers.el (url-file-name-completion) diff --git a/lisp/url/url-http.el b/lisp/url/url-http.el index 7f21a38c535..beffbe1f79b 100644 --- a/lisp/url/url-http.el +++ b/lisp/url/url-http.el @@ -851,11 +851,23 @@ should be shown to the user." (error "Unknown class of HTTP response code: %d (%d)" class url-http-response-status))) (if (not success) - (url-mark-buffer-as-dead buffer)) + (url-mark-buffer-as-dead buffer) + (url-handle-content-transfer-encoding)) (url-http-debug "Finished parsing HTTP headers: %S" success) (widen) success)) +(defun url-handle-content-transfer-encoding () + (let ((encoding (mail-fetch-field "content-encoding"))) + (when (and encoding + (fboundp 'decompress-gzipped-region) + (equal (downcase encoding) "gzip")) + (save-restriction + (widen) + (goto-char (point-min)) + (when (search-forward "\n\n") + (decompress-gzipped-region (point) (point-max))))))) + ;; Miscellaneous (defun url-http-activate-callback () "Activate callback specified when this buffer was created." diff --git a/lisp/url/url-vars.el b/lisp/url/url-vars.el index 6cd0e9aec3c..a59667b57b0 100644 --- a/lisp/url/url-vars.el +++ b/lisp/url/url-vars.el @@ -210,8 +210,8 @@ Should be an assoc list of headers/contents.") (defvar url-request-method nil "The method to use for the next request.") -;; FIXME!! (RFC 2616 gives examples like `compress, gzip'.) -(defvar url-mime-encoding-string nil +(defvar url-mime-encoding-string (and (fboundp 'decompress-gzipped-region) + "gzip") "String to send in the Accept-encoding: field in HTTP requests.") (defvar mm-mime-mule-charset-alist) -- 2.11.4.GIT