Function: url-scheme-register-proxy

url-scheme-register-proxy is a byte-compiled function defined in url-methods.el.gz.

Signature

(url-scheme-register-proxy SCHEME)

Documentation

Automatically find a proxy for SCHEME and put it in url-proxy-services.

Source Code

;; Defined in /usr/src/emacs/lisp/url/url-methods.el.gz
(defun url-scheme-register-proxy (scheme)
  "Automatically find a proxy for SCHEME and put it in `url-proxy-services'."
  (let* ((env-var (concat scheme "_proxy"))
	 (env-proxy (or (getenv (upcase env-var))
			(getenv (downcase env-var))))
	 (cur-proxy (assoc scheme url-proxy-services))
	 (urlobj nil)
	 (url-scheme--registering-proxy t))

    ;; If env-proxy is an empty string, treat it as if it were nil
    (when (and (stringp env-proxy)
	       (string= env-proxy ""))
      (setq env-proxy nil))

    ;; Store any proxying information - this will not overwrite an old
    ;; entry, so that people can still set this information in their
    ;; init file
    (cond
     (cur-proxy nil)			; Keep their old settings
     ((null env-proxy) nil)		; No proxy setup
     ;; First check if its something like hostname:port
     ((string-match "^\\([^:]+\\):\\([0-9]+\\)$" env-proxy)
      (setq urlobj (url-generic-parse-url nil)) ; Get a blank object
      (setf (url-type urlobj) "http")
      (setf (url-host urlobj) (match-string 1 env-proxy))
      (setf (url-port urlobj) (string-to-number (match-string 2 env-proxy))))
     ;; Then check if its a fully specified URL
     ((string-match url-nonrelative-link env-proxy)
      (setq urlobj (url-generic-parse-url env-proxy))
      (setf (url-type urlobj) "http")
      (setf (url-target urlobj) nil))
     ;; Finally, fall back on the assumption that its just a hostname
     (t
      (setq urlobj (url-generic-parse-url nil)) ; Get a blank object
      (setf (url-type urlobj) "http")
      (setf (url-host urlobj) env-proxy)))

     (if (and (not cur-proxy) urlobj)
	 (progn
	   (setq url-proxy-services
		 (cons (cons scheme (format "%s:%d" (url-host urlobj)
					    (url-port urlobj)))
		       url-proxy-services))
	   (message "Using a proxy for %s..." scheme)))))