Mercurial > emacs
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 |
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 | 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 | 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 |