annotate lisp/net/socks.el @ 110410:f2e111723c3a

Merge changes made in Gnus trunk. Reimplement nnimap, and do tweaks to the rest of the code to support that. * gnus-int.el (gnus-finish-retrieve-group-infos) (gnus-retrieve-group-data-early): New functions. * gnus-range.el (gnus-range-nconcat): New function. * gnus-start.el (gnus-get-unread-articles): Support early retrieval of data. (gnus-read-active-for-groups): Support finishing the early retrieval of data. * gnus-sum.el (gnus-summary-move-article): Pass the move-to group name if the move is internal, so that nnimap can do fast internal moves. * gnus.el (gnus-article-special-mark-lists): Add uid/active tuples, for nnimap usage. * nnimap.el: Rewritten. * nnmail.el (nnmail-inhibit-default-split-group): New internal variable to allow the mail splitting to not return a default group. This is useful for nnimap, which will leave unmatched mail in the inbox. * utf7.el (utf7-encode): Autoload. Implement shell connection. * nnimap.el (nnimap-open-shell-stream): New function. (nnimap-open-connection): Use it. Get the number of lines by using BODYSTRUCTURE. (nnimap-transform-headers): Get the number of lines in each message. (nnimap-retrieve-headers): Query for BODYSTRUCTURE so that we get the number of lines. Not all servers return UIDNEXT. Work past this problem. Remove junk from end of file. Fix typo in "bogus" section. Make capabilties be case-insensitive. Require cl when compiling. Don't bug out if the LIST command doesn't have any parameters. 2010-09-17 Knut Anders Hatlen <kahatlen@gmail.com> (tiny change) * nnimap.el (nnimap-get-groups): Don't bug out if the LIST command doesn't have any parameters. (mm-text-html-renderer): Document gnus-article-html. 2010-09-17 Julien Danjou <julien@danjou.info> (tiny fix) * mm-decode.el (mm-text-html-renderer): Document gnus-article-html. * dgnushack.el: Define netrc-credentials. If the user doesn't have a /etc/services, supply some sensible port defaults. Have `unseen-or-unread' select an unread unseen article first. (nntp-open-server): Return whether the open was successful or not. Throughout all files, replace (save-excursion (set-buffer ...)) with (with-current-buffer ... ). Save result so that it doesn't say "failed" all the time. Add ~/.authinfo to the default, since that's probably most useful for users. Don't use the "finish" method when we're reading from the agent. Add some more nnimap-relevant agent stuff to nnagent.el. * nnimap.el (nnimap-with-process-buffer): Removed. Revert one line that was changed by mistake in the last checkin. (nnimap-open-connection): Don't error out when we can't make a connection nnimap-related changes to avoid bugging out if we can't contact a server. * gnus-start.el (gnus-get-unread-articles): Don't try to scan groups from methods that are denied. * nnimap.el (nnimap-possibly-change-group): Return nil if we can't log in. (nnimap-finish-retrieve-group-infos): Make sure we're not waiting for nothing. * gnus-sum.el (gnus-select-newsgroup): Indent.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Sat, 18 Sep 2010 10:02:19 +0000
parents 1d1d5d9bd884
children 376148b31b5e
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
1 ;;; socks.el --- A Socks v5 Client for Emacs
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
2
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
3 ;; Copyright (C) 1996, 1997, 1998, 1999, 2000, 2002,
106815
1d1d5d9bd884 Add 2010 to copyright years.
Glenn Morris <rgm@gnu.org>
parents: 106284
diff changeset
4 ;; 2007, 2008, 2009, 2010 Free Software Foundation, Inc.
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
5
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
6 ;; Author: William M. Perry <wmperry@gnu.org>
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
7 ;; Dave Love <fx@gnu.org>
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
8 ;; Keywords: comm, firewalls
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
9
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
10 ;; This file is part of GNU Emacs.
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
11
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92692
diff changeset
12 ;; GNU Emacs is free software: you can redistribute it and/or modify
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
13 ;; it under the terms of the GNU General Public License as published by
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92692
diff changeset
14 ;; the Free Software Foundation, either version 3 of the License, or
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92692
diff changeset
15 ;; (at your option) any later version.
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
16
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
17 ;; GNU Emacs is distributed in the hope that it will be useful,
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
18 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
19 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
20 ;; GNU General Public License for more details.
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
21
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
22 ;; You should have received a copy of the GNU General Public License
94677
91e5880a36c1 Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents: 92692
diff changeset
23 ;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
24
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
25 ;;; Commentary:
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
26
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
27 ;; This is an implementation of the SOCKS v5 protocol as defined in
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
28 ;; RFC 1928.
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
29
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
30 ;; TODO
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
31 ;; - Finish the redirection rules stuff
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
32 ;; - Implement composition of servers. Recursively evaluate the
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
33 ;; redirection rules and do SOCKS-over-HTTP and SOCKS-in-SOCKS
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
34
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
35 (eval-when-compile
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
36 (require 'wid-edit))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
37 (require 'custom)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
38
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
39 (if (not (fboundp 'split-string))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
40 (defun split-string (string &optional pattern)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
41 "Return a list of substrings of STRING which are separated by PATTERN.
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
42 If PATTERN is omitted, it defaults to \"[ \\f\\t\\n\\r\\v]+\"."
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
43 (or pattern
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
44 (setq pattern "[ \f\t\n\r\v]+"))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
45 (let (parts (start 0))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
46 (while (string-match pattern string start)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
47 (setq parts (cons (substring string start (match-beginning 0)) parts)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
48 start (match-end 0)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
49 (nreverse (cons (substring string start) parts)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
50 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
51 ;;; Custom widgets
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
52 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
53 (define-widget 'dynamic-choice 'menu-choice
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
54 "A pretty simple dynamic dropdown list"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
55 :format "%[%t%]: %v"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
56 :tag "Network"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
57 :case-fold t
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
58 :void '(item :format "invalid (%t)\n")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
59 :value-create 's5-widget-value-create
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
60 :value-delete 'widget-children-value-delete
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
61 :value-get 'widget-choice-value-get
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
62 :value-inline 'widget-choice-value-inline
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
63 :mouse-down-action 'widget-choice-mouse-down-action
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
64 :action 'widget-choice-action
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
65 :error "Make a choice"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
66 :validate 'widget-choice-validate
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
67 :match 's5-dynamic-choice-match
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
68 :match-inline 's5-dynamic-choice-match-inline)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
69
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
70 (defun s5-dynamic-choice-match (widget value)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
71 (let ((choices (funcall (widget-get widget :choice-function)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
72 current found)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
73 (while (and choices (not found))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
74 (setq current (car choices)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
75 choices (cdr choices)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
76 found (widget-apply current :match value)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
77 found))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
78
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
79 (defun s5-dynamic-choice-match-inline (widget value)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
80 (let ((choices (funcall (widget-get widget :choice-function)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
81 current found)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
82 (while (and choices (not found))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
83 (setq current (car choices)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
84 choices (cdr choices)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
85 found (widget-match-inline current value)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
86 found))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
87
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
88 (defun s5-widget-value-create (widget)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
89 (let ((choices (funcall (widget-get widget :choice-function)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
90 (value (widget-get widget :value)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
91 (if (not value)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
92 (widget-put widget :value (widget-value (car choices))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
93 (widget-put widget :args choices)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
94 (widget-choice-value-create widget)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
95
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
96 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
97 ;;; Customization support
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
98 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
99 (defgroup socks nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
100 "SOCKS Support"
80261
4af0bb174714 * textmodes/css-mode.el (css-indent-offset, css-electric-keys):
Dan Nicolaescu <dann@ics.uci.edu>
parents: 79714
diff changeset
101 :version "22.2"
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
102 :prefix "socks-"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
103 :group 'processes)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
104
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
105 '(defcustom socks-server-aliases nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
106 "A list of server aliases for use in access control and filtering rules."
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
107 :group 'socks
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
108 :type '(repeat (list :format "%v"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
109 :value ("" "" 1080 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
110 (string :tag "Alias")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
111 (string :tag "Hostname/IP Address")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
112 (integer :tag "Port #")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
113 (choice :tag "SOCKS Version"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
114 (integer :tag "SOCKS v4" :value 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
115 (integer :tag "SOCKS v5" :value 5)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
116
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
117 '(defcustom socks-network-aliases
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
118 '(("Anywhere" (netmask "0.0.0.0" "0.0.0.0")))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
119 "A list of network aliases for use in subsequent rules."
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
120 :group 'socks
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
121 :type '(repeat (list :format "%v"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
122 :value (netmask "" "255.255.255.0")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
123 (string :tag "Alias")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
124 (radio-button-choice
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
125 :format "%v"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
126 (list :tag "IP address range"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
127 (const :format "" :value range)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
128 (string :tag "From")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
129 (string :tag "To"))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
130 (list :tag "IP address/netmask"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
131 (const :format "" :value netmask)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
132 (string :tag "IP Address")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
133 (string :tag "Netmask"))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
134 (list :tag "Domain Name"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
135 (const :format "" :value domain)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
136 (string :tag "Domain name"))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
137 (list :tag "Unique hostname/IP address"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
138 (const :format "" :value exact)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
139 (string :tag "Hostname/IP Address"))))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
140
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
141 '(defun s5-servers-filter ()
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
142 (if socks-server-aliases
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
143 (mapcar (lambda (x) (list 'const :tag (car x) :value (car x))) s5-server-aliases)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
144 '((const :tag "No aliases defined" :value nil))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
145
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
146 '(defun s5-network-aliases-filter ()
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
147 (mapcar (lambda (x) (list 'const :tag (car x) :value (car x)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
148 socks-network-aliases))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
149
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
150 '(defcustom socks-redirection-rules
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
151 nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
152 "A list of redirection rules."
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
153 :group 'socks
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
154 :type '(repeat (list :format "%v"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
155 :value ("Anywhere" nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
156 (dynamic-choice :choice-function s5-network-aliases-filter
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
157 :tag "Destination network")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
158 (radio-button-choice
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
159 :tag "Connection type"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
160 (const :tag "Direct connection" :value nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
161 (dynamic-choice :format "%t: %[%v%]"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
162 :choice-function s5-servers-filter
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
163 :tag "Proxy chain via")))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
164
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
165 (defcustom socks-server
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
166 (list "Default server" "socks" 1080 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
167 ""
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
168 :group 'socks
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
169 :type '(list
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
170 (string :format "" :value "Default server")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
171 (string :tag "Server")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
172 (integer :tag "Port")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
173 (radio-button-choice :tag "SOCKS Version"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
174 :format "%t: %v"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
175 (const :tag "SOCKS v4 " :format "%t" :value 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
176 (const :tag "SOCKS v5" :format "%t" :value 5))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
177
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
178
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
179 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
180 ;;; Get down to the nitty gritty
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
181 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
182 (defconst socks-version 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
183 (defvar socks-debug nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
184
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
185 ;; Common socks v5 commands
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
186 (defconst socks-connect-command 1)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
187 (defconst socks-bind-command 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
188 (defconst socks-udp-associate-command 3)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
189
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
190 ;; Miscellaneous other socks constants
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
191 (defconst socks-authentication-null 0)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
192 (defconst socks-authentication-failure 255)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
193
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
194 ;; Response codes
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
195 (defconst socks-response-success 0)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
196 (defconst socks-response-general-failure 1)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
197 (defconst socks-response-access-denied 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
198 (defconst socks-response-network-unreachable 3)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
199 (defconst socks-response-host-unreachable 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
200 (defconst socks-response-connection-refused 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
201 (defconst socks-response-ttl-expired 6)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
202 (defconst socks-response-cmd-not-supported 7)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
203 (defconst socks-response-address-not-supported 8)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
204
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
205 (defvar socks-errors
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
206 '("Succeeded"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
207 "General SOCKS server failure"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
208 "Connection not allowed by ruleset"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
209 "Network unreachable"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
210 "Host unreachable"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
211 "Connection refused"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
212 "Time-to-live expired"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
213 "Command not supported"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
214 "Address type not supported"))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
215
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
216 ;; The socks v5 address types
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
217 (defconst socks-address-type-v4 1)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
218 (defconst socks-address-type-name 3)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
219 (defconst socks-address-type-v6 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
220
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
221 ;; Base variables
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
222 (defvar socks-timeout 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
223 (defvar socks-connections (make-hash-table :size 13))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
224
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
225 ;; Miscellaneous stuff for authentication
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
226 (defvar socks-authentication-methods nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
227 (defvar socks-username (user-login-name))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
228 (defvar socks-password nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
229
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
230 (defun socks-register-authentication-method (id desc callback)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
231 (let ((old (assq id socks-authentication-methods)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
232 (if old
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
233 (setcdr old (cons desc callback))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
234 (setq socks-authentication-methods
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
235 (cons (cons id (cons desc callback))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
236 socks-authentication-methods)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
237
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
238 (defun socks-unregister-authentication-method (id)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
239 (let ((old (assq id socks-authentication-methods)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
240 (if old
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
241 (setq socks-authentication-methods
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
242 (delq old socks-authentication-methods)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
243
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
244 (socks-register-authentication-method 0 "No authentication" 'identity)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
245
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
246 (defun socks-build-auth-list ()
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
247 (let ((num 0)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
248 (retval ""))
85226
716b4c75ab5f (socks-build-auth-list): Use mapc rather than mapcar.
Glenn Morris <rgm@gnu.org>
parents: 84644
diff changeset
249 (mapc
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
250 (function
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
251 (lambda (x)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
252 (if (fboundp (cdr (cdr x)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
253 (setq retval (format "%s%c" retval (car x))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
254 num (1+ num)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
255 (reverse socks-authentication-methods))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
256 (format "%c%s" num retval)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
257
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
258 (defconst socks-state-waiting-for-auth 0)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
259 (defconst socks-state-submethod-negotiation 1)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
260 (defconst socks-state-authenticated 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
261 (defconst socks-state-waiting 3)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
262 (defconst socks-state-connected 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
263
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
264 (defmacro socks-wait-for-state-change (proc htable cur-state)
78635
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
265 `(while (and (= (gethash 'state ,htable) ,cur-state)
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
266 (memq (process-status ,proc) '(run open)))
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
267 (accept-process-output ,proc socks-timeout)))
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
268
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
269 (defun socks-filter (proc string)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
270 (let ((info (gethash proc socks-connections))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
271 state version desired-len)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
272 (or info (error "socks-filter called on non-SOCKS connection %S" proc))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
273 (setq state (gethash 'state info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
274 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
275 ((= state socks-state-waiting-for-auth)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
276 (puthash 'scratch (concat string (gethash 'scratch info)) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
277 (setq string (gethash 'scratch info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
278 (if (< (length string) 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
279 nil ; We need to spin some more
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
280 (puthash 'authtype (aref string 1) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
281 (puthash 'scratch (substring string 2 nil) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
282 (puthash 'state socks-state-submethod-negotiation info)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
283 ((= state socks-state-submethod-negotiation)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
284 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
285 ((= state socks-state-authenticated)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
286 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
287 ((= state socks-state-waiting)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
288 (puthash 'scratch (concat string (gethash 'scratch info)) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
289 (setq string (gethash 'scratch info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
290 (setq version (gethash 'server-protocol info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
291 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
292 ((equal version 'http)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
293 (if (not (string-match "\r\n\r\n" string))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
294 nil ; Need to spin some more
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
295 (puthash 'state socks-state-connected info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
296 (puthash 'reply 0 info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
297 (puthash 'response string info)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
298 ((equal version 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
299 (if (< (length string) 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
300 nil ; Can't know how much to read yet
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
301 (setq desired-len
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
302 (+ 4 ; address length
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
303 2 ; port
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
304 2 ; initial data
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
305 ))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
306 (if (< (length string) desired-len)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
307 nil ; need to spin some more
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
308 (let ((response (aref string 1)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
309 (if (= response 90)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
310 (setq response 0))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
311 (puthash 'state socks-state-connected info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
312 (puthash 'reply response info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
313 (puthash 'response string info)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
314 ((equal version 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
315 (if (< (length string) 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
316 nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
317 (setq desired-len
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
318 (+ 6 ; Standard socks header
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
319 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
320 ((= (aref string 3) socks-address-type-v4) 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
321 ((= (aref string 3) socks-address-type-v6) 16)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
322 ((= (aref string 3) socks-address-type-name)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
323 (if (< (length string) 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
324 255
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
325 (+ 1 (aref string 4)))))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
326 (if (< (length string) desired-len)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
327 nil ; Need to spin some more
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
328 (puthash 'state socks-state-connected info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
329 (puthash 'reply (aref string 1) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
330 (puthash 'response string info))))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
331 ((= state socks-state-connected)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
332 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
333 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
334 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
335 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
336
86534
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
337 (declare-function socks-original-open-network-stream "socks") ; fset
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
338
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
339 (defvar socks-override-functions nil
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
340 "*Whether to overwrite the open-network-stream function with the SOCKSified
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
341 version.")
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
342
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
343 (if (fboundp 'socks-original-open-network-stream)
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
344 nil ; Do nothing, we've been here already
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
345 (defalias 'socks-original-open-network-stream
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
346 (symbol-function 'open-network-stream))
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
347 (if socks-override-functions
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
348 (defalias 'open-network-stream 'socks-open-network-stream)))
1863c4982b31 (socks-original-open-network-stream): Declare as function. Move
Glenn Morris <rgm@gnu.org>
parents: 85226
diff changeset
349
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
350 (defun socks-open-connection (server-info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
351 (interactive)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
352 (save-excursion
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
353 (let ((proc (socks-original-open-network-stream "socks"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
354 nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
355 (nth 1 server-info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
356 (nth 2 server-info)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
357 (info (make-hash-table :size 13))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
358 (authtype nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
359 version)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
360
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
361 ;; Initialize process and info about the process
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
362 (set-process-filter proc 'socks-filter)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
363 (set-process-query-on-exit-flag proc nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
364 (puthash proc info socks-connections)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
365 (puthash 'state socks-state-waiting-for-auth info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
366 (puthash 'authtype socks-authentication-failure info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
367 (puthash 'server-protocol (nth 3 server-info) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
368 (puthash 'server-name (nth 1 server-info) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
369 (setq version (nth 3 server-info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
370 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
371 ((equal version 'http)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
372 ;; Don't really have to do any connection setup under http
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
373 nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
374 ((equal version 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
375 ;; Don't really have to do any connection setup under v4
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
376 nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
377 ((equal version 5)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
378 ;; Need to handle all the authentication crap under v5
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
379 ;; Send what we think we can handle for authentication types
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
380 (process-send-string proc (format "%c%s" socks-version
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
381 (socks-build-auth-list)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
382
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
383 ;; Basically just do a select() until we change states.
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
384 (socks-wait-for-state-change proc info socks-state-waiting-for-auth)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
385 (setq authtype (gethash 'authtype info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
386 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
387 ((= authtype socks-authentication-null)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
388 (and socks-debug (message "No authentication necessary")))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
389 ((= authtype socks-authentication-failure)
105170
f8ba8d6fd250 Fix typos.
Juanma Barranquero <lekktu@gmail.com>
parents: 100908
diff changeset
390 (error "No acceptable authentication methods found"))
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
391 (t
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
392 (let* ((auth-type (gethash 'authtype info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
393 (auth-handler (assoc auth-type socks-authentication-methods))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
394 (auth-func (and auth-handler (cdr (cdr auth-handler))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
395 (auth-desc (and auth-handler (car (cdr auth-handler)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
396 (set-process-filter proc nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
397 (if (and auth-func (fboundp auth-func)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
398 (funcall auth-func proc))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
399 nil ; We succeeded!
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
400 (delete-process proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
401 (error "Failed to use auth method: %s (%d)"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
402 (or auth-desc "Unknown") auth-type))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
403 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
404 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
405 )
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
406 (puthash 'state socks-state-authenticated info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
407 (set-process-filter proc 'socks-filter)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
408 proc)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
409
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
410 (defun socks-send-command (proc command atype address port)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
411 (let ((addr (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
412 ((or (= atype socks-address-type-v4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
413 (= atype socks-address-type-v6))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
414 address)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
415 ((= atype socks-address-type-name)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
416 (format "%c%s" (length address) address))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
417 (t
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
418 (error "Unkown address type: %d" atype))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
419 (info (gethash proc socks-connections))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
420 request version)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
421 (or info (error "socks-send-command called on non-SOCKS connection %S"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
422 proc))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
423 (puthash 'state socks-state-waiting info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
424 (setq version (gethash 'server-protocol info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
425 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
426 ((equal version 'http)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
427 (setq request (format (eval-when-compile
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
428 (concat
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
429 "CONNECT %s:%d HTTP/1.0\r\n"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
430 "User-Agent: Emacs/SOCKS v1.0\r\n"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
431 "\r\n"))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
432 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
433 ((equal atype socks-address-type-name) address)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
434 (t
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
435 (error "Unsupported address type for HTTP: %d" atype)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
436 port)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
437 ((equal version 4)
106284
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
438 (setq request (string-make-unibyte
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
439 (format
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
440 "%c%c%c%c%s%s%c"
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
441 version ; version
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
442 command ; command
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
443 (lsh port -8) ; port, high byte
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
444 (- port (lsh (lsh port -8) 8)) ; port, low byte
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
445 addr ; address
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
446 (user-full-name) ; username
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
447 0 ; terminate username
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
448 ))))
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
449 ((equal version 5)
106284
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
450 (setq request (string-make-unibyte
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
451 (format
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
452 "%c%c%c%c%s%c%c"
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
453 version ; version
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
454 command ; command
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
455 0 ; reserved
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
456 atype ; address type
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
457 addr ; address
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
458 (lsh port -8) ; port, high byte
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
459 (- port (lsh (lsh port -8) 8)) ; port, low byte
894b96ba4f65 (socks-send-command): Convert binary request to
Daiki Ueno <ueno@unixuser.org>
parents: 105170
diff changeset
460 ))))
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
461 (t
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
462 (error "Unknown protocol version: %d" version)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
463 (process-send-string proc request)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
464 (socks-wait-for-state-change proc info socks-state-waiting)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
465 (process-status proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
466 (if (= (or (gethash 'reply info) 1) socks-response-success)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
467 nil ; Sweet sweet success!
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
468 (delete-process proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
469 (error "SOCKS: %s" (nth (or (gethash 'reply info) 1) socks-errors)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
470 proc))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
471
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
472
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
473 ;; Replacement functions for open-network-stream, etc.
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
474 (defvar socks-noproxy nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
475 "*List of regexps matching hosts that we should not socksify connections to")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
476
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
477 (defun socks-find-route (host service)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
478 (let ((route socks-server)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
479 (noproxy socks-noproxy))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
480 (while noproxy
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
481 (if (eq ?! (aref (car noproxy) 0))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
482 (if (string-match (substring (car noproxy) 1) host)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
483 (setq noproxy nil))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
484 (if (string-match (car noproxy) host)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
485 (setq route nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
486 noproxy nil)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
487 (setq noproxy (cdr noproxy)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
488 route))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
489
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
490 (defvar socks-services-file "/etc/services")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
491 (defvar socks-tcp-services (make-hash-table :size 13 :test 'equal))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
492 (defvar socks-udp-services (make-hash-table :size 13 :test 'equal))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
493
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
494 (defun socks-parse-services ()
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
495 (if (not (and (file-exists-p socks-services-file)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
496 (file-readable-p socks-services-file)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
497 (error "Could not find services file: %s" socks-services-file))
78635
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
498 (clrhash socks-tcp-services)
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
499 (clrhash socks-udp-services)
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
500 (with-current-buffer (get-buffer-create " *socks-tmp*")
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
501 (erase-buffer)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
502 (insert-file-contents socks-services-file)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
503 ;; Nuke comments
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
504 (goto-char (point-min))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
505 (while (re-search-forward "#.*" nil t)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
506 (replace-match ""))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
507 ;; Nuke empty lines
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
508 (goto-char (point-min))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
509 (while (re-search-forward "^[ \t\n]+" nil t)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
510 (replace-match ""))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
511 ;; Now find all the lines
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
512 (goto-char (point-min))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
513 (let (name port type)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
514 (while (re-search-forward "^\\([^ \t]+\\)[ \t]+\\([0-9]+\\)/\\([a-z]+\\)"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
515 nil t)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
516 (setq name (downcase (match-string 1))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
517 port (string-to-number (match-string 2))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
518 type (downcase (match-string 3)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
519 (puthash name port (if (equal type "udp")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
520 socks-udp-services
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
521 socks-tcp-services))))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
522
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
523 (defun socks-find-services-entry (service &optional udp)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
524 "Return the port # associated with SERVICE"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
525 (if (= (hash-table-count socks-tcp-services) 0)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
526 (socks-parse-services))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
527 (gethash (downcase service)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
528 (if udp socks-udp-services socks-tcp-services)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
529
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
530 (defun socks-open-network-stream (name buffer host service)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
531 (let* ((route (socks-find-route host service))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
532 proc info version atype)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
533 (if (not route)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
534 (socks-original-open-network-stream name buffer host service)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
535 (setq proc (socks-open-connection route)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
536 info (gethash proc socks-connections)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
537 version (gethash 'server-protocol info))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
538 (cond
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
539 ((equal version 4)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
540 (setq host (socks-nslookup-host host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
541 (if (not (listp host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
542 (error "Could not get IP address for: %s" host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
543 (setq host (apply 'format "%c%c%c%c" host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
544 (setq atype socks-address-type-v4))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
545 (t
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
546 (setq atype socks-address-type-name)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
547 (socks-send-command proc
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
548 socks-connect-command
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
549 atype
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
550 host
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
551 (if (stringp service)
84643
9cf2bf22d7ee (socks-open-network-stream): Signal an explicit error if the port
Glenn Morris <rgm@gnu.org>
parents: 82907
diff changeset
552 (or
9cf2bf22d7ee (socks-open-network-stream): Signal an explicit error if the port
Glenn Morris <rgm@gnu.org>
parents: 82907
diff changeset
553 (socks-find-services-entry service)
84644
630c599116d6 (socks-open-network-stream): Standardize error message from previous
Glenn Morris <rgm@gnu.org>
parents: 84643
diff changeset
554 (error "Unknown service: %s" service))
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
555 service))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
556 (puthash 'buffer buffer info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
557 (puthash 'host host info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
558 (puthash 'service host info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
559 (set-process-filter proc nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
560 (set-process-buffer proc (if buffer (get-buffer-create buffer)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
561 proc)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
562
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
563 ;; Authentication modules go here
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
564
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
565 ;; Basic username/password authentication, ala RFC 1929
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
566 (socks-register-authentication-method 2 "Username/Password"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
567 'socks-username/password-auth)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
568
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
569 (defconst socks-username/password-auth-version 1)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
570
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
571 (defun socks-username/password-auth-filter (proc str)
78635
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
572 (let ((info (gethash proc socks-connections)))
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
573 (or info (error "socks-filter called on non-SOCKS connection %S" proc))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
574 (puthash 'scratch (concat (gethash 'scratch info) str) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
575 (if (< (length (gethash 'scratch info)) 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
576 nil
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
577 (puthash 'password-auth-status (aref (gethash 'scratch info) 1) info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
578 (puthash 'state socks-state-authenticated info))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
579
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
580 (defun socks-username/password-auth (proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
581 (let* ((info (gethash proc socks-connections))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
582 (state (gethash 'state info)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
583 (if (not socks-password)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
584 (setq socks-password (read-passwd
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
585 (format "Password for %s@%s: "
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
586 socks-username
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
587 (gethash 'server-name info)))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
588 (puthash 'scratch "" info)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
589 (set-process-filter proc 'socks-username/password-auth-filter)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
590 (process-send-string proc
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
591 (format "%c%c%s%c%s"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
592 socks-username/password-auth-version
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
593 (length socks-username)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
594 socks-username
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
595 (length socks-password)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
596 socks-password))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
597 (socks-wait-for-state-change proc info state)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
598 (= (gethash 'password-auth-status info) 0)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
599
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
600
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
601 ;; More advanced GSS/API stuff, not yet implemented - volunteers?
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
602 ;; (socks-register-authentication-method 1 "GSS/API" 'socks-gssapi-auth)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
603
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
604 (defun socks-gssapi-auth (proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
605 nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
606
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
607
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
608 ;; CHAP stuff
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
609 ;; (socks-register-authentication-method 3 "CHAP" 'socks-chap-auth)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
610 (defun socks-chap-auth (proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
611 nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
612
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
613
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
614 ;; CRAM stuff
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
615 ;; (socks-register-authentication-method 5 "CRAM" 'socks-cram-auth)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
616 (defun socks-cram-auth (proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
617 nil)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
618
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
619
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
620 (defcustom socks-nslookup-program "nslookup"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
621 "*If non-NIL then a string naming the nslookup program."
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
622 :type '(choice (const :tag "None" :value nil) string)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
623 :group 'socks)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
624
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
625 (defun socks-nslookup-host (host)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
626 "Attempt to resolve the given HOSTNAME using nslookup if possible."
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
627 (interactive "sHost: ")
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
628 (if socks-nslookup-program
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
629 (let ((proc (start-process " *nslookup*" " *nslookup*"
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
630 socks-nslookup-program host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
631 (res host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
632 (set-process-query-on-exit-flag proc nil)
78635
65b448298f0c (socks-username/password-auth-filter):
Stefan Monnier <monnier@iro.umontreal.ca>
parents: 78230
diff changeset
633 (with-current-buffer (process-buffer proc)
77921
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
634 (while (progn
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
635 (accept-process-output proc)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
636 (memq (process-status proc) '(run open))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
637 (goto-char (point-min))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
638 (if (re-search-forward "Name:.*\nAddress\\(es\\)?: *\\([0-9.]+\\)$" nil t)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
639 (progn
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
640 (setq res (buffer-substring (match-beginning 2)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
641 (match-end 2))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
642 res (mapcar 'string-to-int (split-string res "\\.")))))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
643 (kill-buffer (current-buffer)))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
644 res)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
645 host))
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
646
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
647 (provide 'socks)
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
648
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
649 ;; arch-tag: 67aef0d9-f4f7-4056-89c3-b4c9bf93ce7f
9a33ca5607a2 New file, taken from w3 repository.
Chong Yidong <cyd@stupidchicken.com>
parents:
diff changeset
650 ;;; socks.el ends here