From 90247189d5fe90619f00ef3319012df0f6f6688e Mon Sep 17 00:00:00 2001 From: "F. Jason Park" Date: Tue, 1 Mar 2022 02:12:02 -0800 Subject: [PATCH 1/5] Simplify network-stream opener in socks.el * lisp/net/socks.el (socks-override-functions, socks-open-stream-function): Make first variable obsolete and remove uses. Replace somewhat with the second, which holds a network stream opener that defaults to `open-network-stream'. (socks-open-connection): Accept additional `make-network-process' params passed on to opener. (socks-open-network-stream): Likewise with the additional params. Call `open-network-stream' as a fallback when a route cannot be found. (socks--open-network-stream): Reduce role to merely issuing the first command using an existing process. This may warrant a renaming. Change signature accordingly. --- lisp/net/socks.el | 50 +++++++++++++++++++++++------------------------ 1 file changed, 25 insertions(+), 25 deletions(-) diff --git a/lisp/net/socks.el b/lisp/net/socks.el index 8df0773e1d..5b78eb6e84 100644 --- a/lisp/net/socks.el +++ b/lisp/net/socks.el @@ -323,19 +323,23 @@ socks-filter (defvar socks-override-functions nil "If non-nil, overwrite `open-network-stream' function with SOCKSified version.") +(make-obsolete-variable 'socks-override-functions + "use custom opener with `socks-open-stream-function'." + "29.1") -(when socks-override-functions - (advice-add 'open-network-stream :around #'socks--open-network-stream)) +(defvar socks-open-stream-function #'open-network-stream + "Function called to open a network stream connection.") -(defun socks-open-connection (server-info) +(defun socks-open-connection (server-info &rest params) + "Create and initialize a SOCKS process. +Perform authentication if needed. SERVER-INFO should resemble +`socks-server'. PARAMS are those accepted by `make-network-process'." (interactive) + (unless (plist-member params :coding) + (setf (plist-get params :coding) '(binary . binary))) (save-excursion - (let ((proc - (let ((socks-override-functions nil)) - (open-network-stream "socks" - nil - (nth 1 server-info) - (nth 2 server-info)))) + (let ((proc (apply socks-open-stream-function "socks" nil + (nth 1 server-info) (nth 2 server-info) params)) (authtype nil) version) @@ -508,22 +512,18 @@ socks-find-services-entry (gethash (downcase service) (if udp socks-udp-services socks-tcp-services))) -(defun socks-open-network-stream (name buffer host service) - (let ((socks-override-functions t)) - (socks--open-network-stream - (lambda (&rest args) - (let ((socks-override-functions nil)) - (apply #'open-network-stream args))) - name buffer host service))) - -(defun socks--open-network-stream (orig-fun name buffer host service &rest params) - (let ((route (and socks-override-functions - (socks-find-route host service)))) - (if (not route) - (apply orig-fun name buffer host service params) - ;; FIXME: Obey `params'! - (let* ((proc (socks-open-connection route)) - (version (process-get proc 'socks-server-protocol)) +(defun socks-open-network-stream (name buffer host service &rest params) + (if-let* ((route (socks-find-route host service)) + (proc (apply #'socks-open-connection route params))) + (socks--open-network-stream proc buffer host service) + (message "Warning: no SOCKS route found for %s:%s" host service) + ;; Support legacy behavior (likely undesirable in most cases) + (apply socks-open-stream-function name buffer host service params))) + +(defun socks--open-network-stream (proc buffer host service) + (progn ; temporarily preserve git blame for easier reviewing + (progn ; could rename to something like `socks--initiate-command-sequence' + (let* ((version (process-get proc 'socks-server-protocol)) (atype (cond ((equal version 4) -- 2.35.1