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