From dc59d100d8bfb20e4bf283078762fe32d37e3067 Mon Sep 17 00:00:00 2001 From: Spencer Baugh Date: Tue, 1 Sep 2020 14:12:59 -0400 Subject: [PATCH] HACK: add support for using a proxy for wss connections --- websocket.el | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/websocket.el b/websocket.el index 56f7688..00cd683 100644 --- a/websocket.el +++ b/websocket.el @@ -693,14 +693,27 @@ to the websocket protocol. (port (if (= 0 (url-port url-struct)) (if (eq type 'tls) 443 80) (url-port url-struct))) - (host (url-host url-struct))) + (host (url-host url-struct)) + (url-as-http (let ((url-as-http (copy-sequence url-struct))) + (setf (url-type url-as-http) (if (eq type 'plain) "http" "https")) + url-as-http)) + (proxy (url-generic-parse-url (url-find-proxy-for-url url-as-http (url-host url-as-http))))) (if (eq type 'plain) (make-network-process :name name :buffer nil :host host :service port :nowait nowait) + (if proxy + (let ((plain-conn (make-network-process + :name name :buffer nil :host (url-host proxy) + :service (url-port proxy)))) + (let ((url-http-after-change-function) + (url-current-object url-as-http)) + (url-https-proxy-connect plain-conn)) + (sleep-for 0.5) + (gnutls-negotiate :process plain-conn :hostname host)) (condition-case-unless-debug nil (open-network-stream name nil host port :type type :nowait nowait) (wrong-number-of-arguments - (signal 'websocket-wss-needs-emacs-24 (list "wss")))))) + (signal 'websocket-wss-needs-emacs-24 (list "wss"))))))) (signal 'websocket-unsupported-protocol (list (url-type url-struct))))) (websocket (websocket-inner-create :conn conn