annotate lisp/code-process.el @ 5885:c8bbb32fe124

Always return a string, #'current-message. lisp/ChangeLog addition: 2015-04-04 Aidan Kehoe <kehoea@parhasard.net> * gutter-items.el (append-progress-feedback): * gutter-items.el (abort-progress-feedback): Correct comments in both these functions, it's the progress stack being adjusted, not the message stack. * simple.el (message-stack): Describe my recent change in the structure of this. * simple.el (current-message): Adjust the implementation of this to always return the string displayed.
author Aidan Kehoe <kehoea@parhasard.net>
date Sat, 04 Apr 2015 13:49:30 +0100
parents a216b3c2b09e
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 ;;; code-process.el --- Process coding functions for XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 ;; Copyright (C) 1985-1987, 1993, 1994, 1997 Free Software Foundation, Inc.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
4 ;; Copyright (C) 1995, 2000, 2002 Ben Wing
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5 ;; Copyright (C) 1997 MORIOKA Tomohiko
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7 ;; Author: Ben Wing
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 ;; MORIOKA Tomohiko
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 ;; Maintainer: XEmacs Development Team
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 ;; Keywords: mule, multilingual, coding system, process
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12 ;; This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ;; This file is very similar to code-process.el
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15
5404
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
16 ;; XEmacs is free software: you can redistribute it and/or modify it
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
17 ;; under the terms of the GNU General Public License as published by the
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
18 ;; Free Software Foundation, either version 3 of the License, or (at your
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
19 ;; option) any later version.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20
5404
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
21 ;; XEmacs is distributed in the hope that it will be useful, but WITHOUT
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
22 ;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
23 ;; FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
24 ;; for more details.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
25
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
26 ;; You should have received a copy of the GNU General Public License
5404
91b3aa59f49b Convert lisp/ to GPLv3.
Mike Sperber <sperber@deinprogramm.de>
parents: 2356
diff changeset
27 ;; along with XEmacs. If not, see <http://www.gnu.org/licenses/>.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
28
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
29 ;;; Code:
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
30
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
31 (defvar process-coding-system-alist nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
32 "Alist to decide a coding system to use for a process I/O operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
33 The format is ((PATTERN . VAL) ...),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
34 where PATTERN is a regular expression matching a program name,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
35 VAL is a coding system, a cons of coding systems, or a function symbol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
36 If VAL is a coding system, it is used for both decoding what received
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
37 from the program and encoding what sent to the program.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
38 If VAL is a cons of coding systems, the car part is used for decoding,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
39 and the cdr part is used for encoding.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
40 If VAL is a function symbol, it is called with two arguments, a symbol
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
41 indicating the operation being performed (one of `start-process',
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
42 `call-process', `open-network-stream', or `open-multicast-group') and the
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
43 program name. The function must return a coding system or a cons of
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
44 coding systems which are used as above.")
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
45
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
46 (defun call-process (program &optional infile buffer displayp &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
47 "Call PROGRAM synchronously in separate process.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
48
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
49 The program's input comes from file INFILE (nil means `/dev/null').
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
50 XEmacs feature: INFILE can also be a list of (BUFFER [START [END]]), i.e.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
51 a list of one to three elements, consisting of a buffer and optionally
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
52 a start position or start and end position. In this case, input comes
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
53 from the buffer, starting from START (defaults to the beginning of the
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
54 buffer) and ending at END (defaults to the end of the buffer).
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
55
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 Insert output in BUFFER before point; t means current buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 nil for BUFFER means discard it; 0 means discard and don't wait.
837
0490271de7d8 [xemacs-hg @ 2002-05-14 05:30:30 by adrian]
adrian
parents: 771
diff changeset
58 If BUFFER is a string, then find or create a buffer with that name,
0490271de7d8 [xemacs-hg @ 2002-05-14 05:30:30 by adrian]
adrian
parents: 771
diff changeset
59 then insert the output in that buffer, before point.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
60 BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
61 REAL-BUFFER says what to do with standard output, as above,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
62 while STDERR-FILE says what to do with standard error in the child.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
63 STDERR-FILE may be nil (discard standard error output),
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
64 t (mix it with ordinary output), a file name string, or (XEmacs feature)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
65 a buffer object. If STDERR-FILE is a buffer object (but not the name of
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
66 a buffer, since that would be interpreted as a file), the standard error
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
67 output will be inserted into the buffer before point.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
68
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
69 Fourth arg DISPLAY non-nil means redisplay buffer as output is inserted.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
70 Remaining arguments are strings passed as command arguments to PROGRAM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
71
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
72 If BUFFER is 0, returns immediately with value nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
73 Otherwise waits for PROGRAM to terminate and returns a numeric exit status
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
74 or a signal description string. If you quit, the process is first killed
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
75 with SIGINT, then with SIGKILL if you quit again before the process exits.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
76
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
77 If INFILE is a file, we transfer its exact contents to the process without
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
78 any encoding/decoding. (#### This policy might change.)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
79
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
80 Otherwise, the read/write coding systems used for process I/O on the
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
81 process are determined as follows:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
82
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
83 1. `coding-system-for-read', `coding-system-for-write', if non-nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
84 (Intended as a temporary overriding mechanism for use by Lisp
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
85 code.)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
86 2. The matching value for the process name from `process-coding-system-alist',
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
87 if any, and if non-nil. The value may be either a single coding
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
88 system, used for both read and write; or a cons of read/write; or a
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
89 function, called to get one of the other two values.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
90 3. For writing: If a buffer was given in INFILE, the value of
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
91 `buffer-file-coding-system' in that buffer.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
92 For reading: if a buffer was given in BUFFER, the value of
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
93 `buffer-file-coding-system-for-read' in that buffer.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
94 4. The value of `default-process-coding-system', which should be a cons
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
95 of read/write coding systems, if the values are non-nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
96 5. The coding system `undecided' for read, and `raw-text' for write.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
97
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
98 Note that the processes of determining the read and write coding systems
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
99 proceed essentially independently one from the other, as in `start-process'."
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
100 (let (cs-r cs-w)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
101 (let (ret)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
102 (catch 'found
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
103 (let ((alist process-coding-system-alist)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
104 (case-fold-search nil))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
105 (while alist
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
106 (if (string-match (car (car alist)) program)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
107 (throw 'found (setq ret (cdr (car alist)))))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
108 (setq alist (cdr alist))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
109 )))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
110 (if (functionp ret)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
111 (setq ret (funcall ret 'call-process program)))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
112 (cond ((consp ret)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
113 (setq cs-r (car ret)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
114 cs-w (cdr ret)))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
115 ((and ret (find-coding-system ret))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
116 (setq cs-r ret
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
117 cs-w ret))))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
118 (let ((coding-system-for-read
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
119 (or coding-system-for-read cs-r
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
120 (let ((thebuf (if (consp buffer) (car buffer) buffer)))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
121 (and (or (bufferp thebuf) (stringp thebuf))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
122 (get-buffer thebuf)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
123 (symbol-value-in-buffer
857
b5278486690c [xemacs-hg @ 2002-05-31 07:14:51 by michaels]
michaels
parents: 853
diff changeset
124 'buffer-file-coding-system-for-read (get-buffer thebuf))))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
125 (car default-process-coding-system)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
126 'undecided))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
127 (coding-system-for-write
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
128 (or coding-system-for-write cs-w
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
129 (and (consp infile)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
130 (symbol-value-in-buffer
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
131 'buffer-file-coding-system
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
132 (get-buffer (car infile))))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
133 (cdr default-process-coding-system)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
134 'raw-text)))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
135 (apply 'call-process-internal program infile buffer displayp args))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
136
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
137 (defun call-process-region (start end program
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
138 &optional deletep buffer displayp
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
139 &rest args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
140 "Send text from START to END to a synchronous process running PROGRAM.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
141 Delete the text if fourth arg DELETEP is non-nil.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
142
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
143 Insert output in BUFFER before point; t means current buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
144 nil for BUFFER means discard it; 0 means discard and don't wait.
837
0490271de7d8 [xemacs-hg @ 2002-05-14 05:30:30 by adrian]
adrian
parents: 771
diff changeset
145 If BUFFER is a string, then find or create a buffer with that name,
0490271de7d8 [xemacs-hg @ 2002-05-14 05:30:30 by adrian]
adrian
parents: 771
diff changeset
146 then insert the output in that buffer, before point.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
147 BUFFER can also have the form (REAL-BUFFER STDERR-FILE); in that case,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
148 REAL-BUFFER says what to do with standard output, as above,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
149 while STDERR-FILE says what to do with standard error in the child.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
150 STDERR-FILE may be nil (discard standard error output),
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
151 t (mix it with ordinary output), a file name string, or (XEmacs feature)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
152 a buffer object. If STDERR-FILE is a buffer object (but not the name of
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
153 a buffer, since that would be interpreted as a file), the standard error
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
154 output will be inserted into the buffer before point.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
155
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
156 Sixth arg DISPLAYP non-nil means redisplay buffer as output is inserted.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
157 Remaining args are passed to PROGRAM at startup as command args.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
158
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
159 If BUFFER is 0, returns immediately with value nil.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
160 Otherwise waits for PROGRAM to terminate and returns a numeric exit status
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
161 or a signal description string. If you quit, the process is first killed
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
162 with SIGINT, then with SIGKILL if you quit again before the process exits.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
163
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
164 The read/write coding systems used for process I/O on the process are
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
165 the same as for `call-process'."
2356
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
166
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
167 ;; We can't delete the region before feeding it to `call-process', so we
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
168 ;; take care not to delete the insertion when we delete the region. START
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
169 ;; and END may not be markers; copy them. (point) will end up after the
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
170 ;; insertion. A copy of (point) tracks the beginning of the insertion.
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
171
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
172 (let ((s (and deletep (copy-marker start))) ; Only YOU can
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
173 (e (and deletep (copy-marker end t))) ; prevent
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
174 (p (and deletep (copy-marker (point)))) ; excess consing!
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
175 (retval
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
176 (apply #'call-process program (list (current-buffer) start end)
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
177 buffer displayp args)))
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
178 (when deletep
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
179 (if (<= s p e)
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
180 ;; region was split by insertion
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
181 ;; the order checks are gilt lilies
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
182 (progn (when (< (point) e) (delete-region (point) e))
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
183 (when (< s p) (delete-region s p)))
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
184 ;; insertion was outside of region
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
185 (delete-region s e)))
0b060ef35789 [xemacs-hg @ 2004-10-28 11:31:09 by stephent]
stephent
parents: 1978
diff changeset
186 retval))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
187
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
188 (defun start-process (name buffer program &rest program-args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
189 "Start a program in a subprocess. Return the process object for it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
190 NAME is name for process. It is modified if necessary to make it unique.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
191 BUFFER is the buffer or (buffer-name) to associate with the process.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
192 Process output goes at end of that buffer, unless you specify
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
193 an output stream or filter function to handle the output.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
194 BUFFER may be also nil, meaning that this process is not associated
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
195 with any buffer.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
196 BUFFER can also have the form (REAL-BUFFER STDERR-BUFFER); in that case,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
197 REAL-BUFFER says what to do with standard output, as above,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
198 while STDERR-BUFFER says what to do with standard error in the child.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
199 STDERR-BUFFER may be nil (discard standard error output, unless a stderr
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
200 filter is set). Note that if you do not use this form at process creation,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
201 stdout and stderr will be mixed in the output buffer, and this cannot be
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
202 changed, even by setting a stderr filter.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
203 Third arg is program file name. It is searched for as in the shell.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
204 Remaining arguments are strings to give program as arguments.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
205
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
206 The read/write coding systems used for process I/O on the process are
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
207 determined as follows:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
208
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
209 1. `coding-system-for-read', `coding-system-for-write', if non-nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
210 (Intended as a temporary overriding mechanism for use by Lisp
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
211 code.)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
212 2. The matching value for the process name from `process-coding-system-alist',
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
213 if any, and if non-nil. The value may be either a single coding
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
214 system, used for both read and write; or a cons of read/write; or a
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
215 function, called to get one of the other two values.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
216 3. The value of `default-process-coding-system', which should be a cons
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
217 of read/write coding systems, if the values are non-nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
218 4. The coding system `undecided' for read, and `raw-text' for write.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
219
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
220 Note that the processes of determining the read and write coding systems
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
221 proceed essentially independently one from the other. For example, a value
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
222 determined from `process-coding-system-alist' might specify a read coding
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
223 system but not a write coding system, in which the read coding system is as
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
224 specified and the write coding system comes from proceeding to step 3 (and
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
225 looking in `default-process-coding-system').
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
226
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
227 You can change the coding systems later on using
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
228 `set-process-coding-system', `set-process-input-coding-system', or
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
229 `set-process-output-coding-system'.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
230
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
231 See also `set-process-filter' and `set-process-stderr-filter'."
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
232 (let (cs-r cs-w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
233 (let (ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
234 (catch 'found
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
235 (let ((alist process-coding-system-alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
236 (case-fold-search nil))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
237 (while alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
238 (if (string-match (car (car alist)) program)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
239 (throw 'found (setq ret (cdr (car alist)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
240 (setq alist (cdr alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
241 )))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
242 (if (functionp ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
243 (setq ret (funcall ret 'start-process program)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
244 (cond ((consp ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
245 (setq cs-r (car ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
246 cs-w (cdr ret)))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
247 ((and ret (find-coding-system ret))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
248 (setq cs-r ret
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
249 cs-w ret))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
250 (let ((coding-system-for-read
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
251 (or coding-system-for-read cs-r
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
252 (car default-process-coding-system) 'undecided))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
253 (coding-system-for-write
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
254 (or coding-system-for-write cs-w
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
255 (cdr default-process-coding-system) 'raw-text)))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
256 (apply 'start-process-internal name buffer program program-args)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
257 )))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
258
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
259 (defvar network-coding-system-alist nil
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
260 "Alist to decide a coding system to use for a network I/O operation.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
261 The format is ((PATTERN . VAL) ...),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
262 where PATTERN is a regular expression matching a network service name
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
263 or is a port number to connect to,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
264 VAL is a coding system, a cons of coding systems, or a function symbol.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
265 If VAL is a coding system, it is used for both decoding what received
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
266 from the network stream and encoding what sent to the network stream.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
267 If VAL is a cons of coding systems, the car part is used for decoding,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
268 and the cdr part is used for encoding.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
269 If VAL is a function symbol, the function must return a coding system
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
270 or a cons of coding systems which are used as above.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
271
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
272 See also the function `find-operation-coding-system'.")
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
273
5814
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
274 (defun network-stream-get-response (stream start end-of-command)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
275 (when end-of-command
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
276 (with-current-buffer (process-buffer stream)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
277 (save-excursion
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
278 (goto-char start)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
279 (while (and (memq (process-status stream) '(open run))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
280 (not (re-search-forward end-of-command nil t)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
281 (accept-process-output stream 0 50)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
282 (goto-char start))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
283 ;; Return the data we got back, or nil if the process died.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
284 (unless (= start (point))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
285 (buffer-substring start (point)))))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
286
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
287 (defun network-stream-command (stream command eoc)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
288 (when command
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
289 (let ((start (point-max (process-buffer stream))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
290 (process-send-string stream command)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
291 (network-stream-get-response stream start eoc))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
292
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
293 (defun network-stream-open-plain (name buffer host service parameters)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
294 (let ((start (point buffer))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
295 (stream
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
296 (open-network-stream-internal name buffer host service
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
297 (plist-get parameters :protocol))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
298 (list stream
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
299 (network-stream-get-response stream start
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
300 (plist-get parameters :end-of-command))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
301 nil
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
302 'plain)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
303
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
304 (defun network-stream-open-tls (name buffer host service parameters)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
305 (with-current-buffer buffer
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
306 (let* ((start (point-max))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
307 (stream
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
308 (open-network-stream-internal name buffer host service
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
309 (plist-get parameters :protocol) t)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
310 (if (null stream)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
311 (list nil nil nil 'plain)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
312 (let ((eoc (plist-get parameters :end-of-command))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
313 (capability-command (plist-get parameters :capability-command)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
314 (list stream
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
315 (network-stream-get-response stream start eoc)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
316 (network-stream-command stream capability-command eoc)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
317 'tls))))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
318
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
319 (defun network-stream-certificate (host service parameters)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
320 (let ((spec (plist-get :client-certificate parameters)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
321 (cond
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
322 ((listp spec)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
323 ;; Either nil or a list with a key/certificate pair.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
324 spec)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
325 ((eq spec t)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
326 (when (fboundp 'auth-source-search)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
327 (let* ((auth-info
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
328 (car (auth-source-search :max 1
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
329 :host host
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
330 :port service)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
331 (key (plist-get auth-info :key))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
332 (cert (plist-get auth-info :cert)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
333 (and key cert
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
334 (list key cert))))))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
335
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
336 (defun network-stream-open-starttls (name buffer host service parameters)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
337 (let* ((start (point buffer))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
338 (require-tls (eq (plist-get parameters :type) 'starttls))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
339 (starttls-function (plist-get parameters :starttls-function))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
340 (success-string (plist-get parameters :success))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
341 (capability-command (plist-get parameters :capability-command))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
342 (eoc (plist-get parameters :end-of-command))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
343 (eo-capa (or (plist-get parameters :end-of-capability) eoc))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
344 (protocol (plist-get parameters :protocol))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
345 ;; Return (STREAM GREETING CAPABILITIES RESULTING-TYPE)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
346 (stream (open-network-stream-internal name buffer host service
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
347 protocol))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
348 (greeting (and (not (plist-get parameters :nogreeting))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
349 (network-stream-get-response stream start eoc)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
350 (capabilities (network-stream-command stream capability-command
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
351 eo-capa))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
352 (resulting-type 'plain)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
353 starttls-available starttls-command error)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
354
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
355 ;; First check whether the server supports STARTTLS at all.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
356 (when (and capabilities success-string starttls-function)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
357 (setq starttls-command
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
358 (funcall starttls-function capabilities)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
359 ;; If we have built-in STARTTLS support, try to upgrade the
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
360 ;; connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
361 (when (and starttls-command
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
362 (setq starttls-available t)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
363 (not (eq (plist-get parameters :type) 'plain)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
364 (when (let ((response
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
365 (network-stream-command stream starttls-command eoc)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
366 (and response (string-match success-string response)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
367 ;; The server said it was OK to begin STARTTLS negotiations.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
368 (let ((cert (network-stream-certificate host service parameters)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
369 (condition-case nil
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
370 (tls-negotiate stream host (and cert (list cert)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
371 ;; If we get a tls-specific error (for instance if the
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
372 ;; certificate the server gives us is completely syntactically
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
373 ;; invalid), then close the connection and possibly (further
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
374 ;; down) try to create a non-encrypted connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
375 (gnutls-error (delete-process stream))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
376 (if (memq (process-status stream) '(open run))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
377 (setq resulting-type 'tls)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
378 ;; We didn't successfully negotiate STARTTLS; if TLS
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
379 ;; isn't demanded, reopen an unencrypted connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
380 (unless require-tls
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
381 (setq stream
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
382 (make-network-process :name name :buffer buffer
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
383 :host host :service service))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
384 (network-stream-get-response stream start eoc)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
385 ;; Re-get the capabilities, which may have now changed.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
386 (setq capabilities
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
387 (network-stream-command stream capability-command eo-capa))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
388
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
389 ;; If TLS is mandatory, close the connection if it's unencrypted.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
390 (when (and require-tls
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
391 ;; ... but Emacs wasn't able to -- either no built-in
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
392 ;; support, or no gnutls-cli installed.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
393 (eq resulting-type 'plain))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
394 (setq error
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
395 (if (or (null starttls-command)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
396 starttls-available)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
397 "Server does not support TLS"
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
398 ;; See `starttls-available-p'. If this predicate
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
399 ;; changes to allow running under Windows, the error
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
400 ;; message below should be amended.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
401 (if (memq system-type '(windows-nt ms-dos))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
402 (concat "Emacs does not support TLS")
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
403 (concat "Emacs does not support TLS, and no external `"
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
404 (if starttls-use-gnutls
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
405 starttls-gnutls-program
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
406 starttls-program)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
407 "' program was found"))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
408 (delete-process stream)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
409 (setq stream nil))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
410 ;; Return value:
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
411 (list stream greeting capabilities resulting-type error)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
412
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
413 ;; Requires that format-spec.el from gnus be loaded
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
414 (defun network-stream-open-shell (name buffer host service parameters)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
415 (require 'format-spec)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
416 (let* ((capability-command (plist-get parameters :capability-command))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
417 (eo-capa (plist-get parameters :end-of-capability))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
418 (eoc (plist-get parameters :end-of-command))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
419 (start (point buffer))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
420 (stream (let ((process-connection-type nil))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
421 (start-process name buffer shell-file-name
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
422 shell-command-switch
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
423 (format-spec
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
424 (plist-get parameters :shell-command)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
425 (format-spec-make
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
426 ?s host
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
427 ?p service))))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
428 (list stream
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
429 (network-stream-get-response stream start eoc)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
430 (network-stream-command stream capability-command (or eo-capa eoc))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
431 'plain)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
432
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
433 (defun open-network-stream (name buffer host service &rest parameters)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
434 "Open a TCP connection for a service to a host.
5814
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
435 Normally, return a process object to represent the connection. If the
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
436 :return-list parameter is non-NIL, instead return a list; see below.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
437 Input and output work as for subprocesses; `delete-process' closes it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
438 NAME is name for process. It is modified if necessary to make it unique.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
439 BUFFER is the buffer (or buffer-name) to associate with the process.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
440 Process output goes at end of that buffer, unless you specify
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
441 an output stream or filter function to handle the output.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
442 BUFFER may be also nil, meaning that this process is not associated
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
443 with any buffer.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
444 Third arg is name of the host to connect to, or its IP address.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
445 Fourth arg SERVICE is name of the service desired, or an integer
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
446 specifying a port number to connect to.
5814
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
447
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
448 The remaining PARAMETERS should be a sequence of keywords and values:
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
449 - :protocol is a network protocol. Currently 'tcp (Transmission Control
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
450 Protocol) and 'udp (User Datagram Protocol) are supported. When
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
451 omitted, 'tcp is assumed.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
452 - :type specifies the connection type; it is one of the following:
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
453 nil or `network': begin with an ordinary network connection, and if
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
454 the parameters :success and :capability-command are also
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
455 supplied, try to upgrade to an encrypted connection via
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
456 STARTTLS. If that fails (e.g., HOST does not support TLS),
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
457 retain an unencrypted connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
458 `plain': an ordinary, unencrypted network connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
459 `starttls': begin with an ordinary network connection and try to
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
460 upgrade via STARTTLS. If that fails, drop the connection
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
461 and return a killed process object.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
462 `tls': a TLS connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
463 `ssl': a synonym for `tls'.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
464 `shell': a shell connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
465 - :return-list specifies this function's return value.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
466 If omitted or nil, return a process object as usual. Otherwise, return
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
467 (PROC . PROPS), where PROC is a process object and PROPS is a plist of
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
468 connection properties, with these keywords:
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
469 :greeting: the greeting returned by HOST (a string), or nil.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
470 :capabilities: a string representing HOST's capabilities, or nil if none
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
471 could be found.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
472 :type: the resulting connection type, `plain' (unencrypted) or `tls'
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
473 (encrypted).
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
474 - :end-of-command specifies a regexp matching the end of a command.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
475 - :end-of-capability specifies a regexp matching the end of the response
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
476 to the command specified for :capability-command. It defaults to the
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
477 regexp specified for :end-of-command.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
478 - :success specifies a regexp matching a message indicating a successful
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
479 STARTTLS negotiation. For example, the default should be \"^3\" for an
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
480 NNTP connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
481 - :capability-command specifies a command used to query HOST for its
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
482 capabilities. For example, this should be \"1 CAPABILITY\\r\\n\" for
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
483 IMAP.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
484 - :starttls-function specifies a function for handling STARTTLS. This
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
485 function should take one parameter, the response to the capability
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
486 command, and should return the command to switch on STARTTLS if the
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
487 server supports it, or nil otherwise.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
488 - :always-query-capabilities, if non-nil, indicates that the server should
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
489 be queried for capabilities even if constructing a `plain' network
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
490 connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
491 - :client-certificate is either a list (certificate-key-filename
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
492 certificate-filename), or `t', meaning that `auth-source' will be
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
493 queried for the key and certificate. This parameter is used only when
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
494 constructing a TLS or STARTTLS connection.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
495 - :use-starttls-if-possible, if non-nil, indicates that STARTTLS should
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
496 be used even if TLS support is not compiled in to XEmacs.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
497 - :nogreeting, if non-nil, indicates that we should not wait for a
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
498 greeting from the server.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
499 - :nowait, if non-nil, indicates that an asynchronous connection should be
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
500 made, if possible. NOTE: this is currently unimplemented.
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
501
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
502 For backwards compatibility, if exactly five arguments are given, the fifth
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
503 must be one of nil, 'tcp, or 'udp. Both nil and 'tcp select TCP (Transmission
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
504 Control Protocol) and 'udp selects UDP (User Datagram Protocol).
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
505
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
506 Output via `process-send-string' and input via buffer or filter (see
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
507 `set-process-filter') are stream-oriented. That means UDP datagrams are
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
508 not guaranteed to be sent and received in discrete packets. (But small
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
509 datagrams around 500 bytes that are not truncated by `process-send-string'
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
510 are usually fine.) Note further that UDP protocol does not guard against
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
511 lost packets.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
512
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
513 The read/write coding systems used for process I/O on the process are
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
514 determined as follows:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
515
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
516 1. `coding-system-for-read', `coding-system-for-write', if non-nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
517 (Intended as a temporary overriding mechanism for use by Lisp
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
518 code.)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
519 2. The matching value for the service from `network-coding-system-alist',
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
520 if any, and if non-nil. The value may be either a single coding
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
521 system, used for both read and write; or a cons of read/write; or a
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
522 function, called to get one of the other two values.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
523 3. The value of `default-network-coding-system', which should be a cons
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
524 of read/write coding systems, if the values are non-nil.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
525 4. The coding system `undecided' for read, and `raw-text' for write.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
526
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
527 Note that the processes of determining the read and write coding systems
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
528 proceed essentially independently one from the other, as in `start-process'.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
529
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
530 You can change the coding systems later on using
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
531 `set-process-coding-system', `set-process-input-coding-system', or
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
532 `set-process-output-coding-system'."
5814
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
533 (when (and (car parameters) (not (cdr parameters)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
534 (setq parameters (list :protocol (car parameters))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
535 (let (cs-r cs-w)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
536 (let (ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
537 (catch 'found
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
538 (let ((alist network-coding-system-alist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
539 (case-fold-search nil)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
540 pattern)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
541 (while alist
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
542 (setq pattern (car (car alist)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
543 (and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
544 (cond ((numberp pattern)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
545 (and (numberp service)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
546 (eq pattern service)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
547 ((stringp pattern)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
548 (or (and (stringp service)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
549 (string-match pattern service))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
550 (and (numberp service)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
551 (string-match pattern
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
552 (number-to-string service))))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
553 (throw 'found (setq ret (cdr (car alist)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
554 (setq alist (cdr alist))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
555 )))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
556 (if (functionp ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
557 (setq ret (funcall ret 'open-network-stream service)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
558 (cond ((consp ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
559 (setq cs-r (car ret)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
560 cs-w (cdr ret)))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
561 ((and ret (find-coding-system ret))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
562 (setq cs-r ret
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
563 cs-w ret))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
564 (let ((coding-system-for-read
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
565 (or coding-system-for-read cs-r
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
566 (car default-network-coding-system)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
567 'undecided))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
568 (coding-system-for-write
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
569 (or coding-system-for-write cs-w
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
570 (cdr default-network-coding-system)
5814
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
571 'raw-text))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
572 (type (plist-get parameters :type))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
573 (return-list (plist-get parameters :return-list))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
574 (capability-command (plist-get parameters :capability-command)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
575 (if (and (not return-list)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
576 (or (eq type 'plain)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
577 (and (or (null type) (eq type 'network))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
578 (not (and (plist-get parameters :success)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
579 capability-command)))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
580 ;; The simplest case: a plain connection
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
581 (open-network-stream-internal name buffer host service
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
582 (plist-get parameters :protocol))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
583 (let ((work-buffer (or buffer
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
584 (generate-new-buffer " *stream buffer*")))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
585 (fun (cond ((and (eq type 'plain)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
586 (not (plist-get parameters
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
587 :always-query-capabilities)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
588 #'network-stream-open-plain)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
589 ((memq type '(nil network starttls plain))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
590 #'network-stream-open-starttls)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
591 ((memq type '(tls ssl)) #'network-stream-open-tls)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
592 ((eq type 'shell) 'network-stream-open-shell)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
593 (t (error "Invalid connection type" type))))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
594 result)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
595 (unwind-protect
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
596 (setq result
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
597 (funcall fun name work-buffer host service parameters))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
598 (unless buffer
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
599 (and (processp (car result))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
600 (set-process-buffer (car result) nil))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
601 (kill-buffer work-buffer)))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
602 (if return-list
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
603 (list (car result)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
604 :greeting (nth 1 result)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
605 :capabilities (nth 2 result)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
606 :type (nth 3 result)
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
607 :error (nth 4 result))
a216b3c2b09e Add TLS support. See xemacs-patches message with ID
Jerry James <james@xemacs.org>
parents: 5404
diff changeset
608 (car result)))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
609
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
610 (defun set-buffer-process-coding-system (decoding encoding)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
611 "Set coding systems for the process associated with the current buffer.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
612 DECODING is the coding system to be used to decode input from the process,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
613 ENCODING is the coding system to be used to encode output to the process.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
614
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 837
diff changeset
615 For a list of possible values of CODING-SYSTEM, use \\[coding-system-list]."
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
616 (interactive
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
617 "zCoding-system for process input: \nzCoding-system for process output: ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
618 (let ((proc (get-buffer-process (current-buffer))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
619 (if (null proc)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
620 (error "no process")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
621 (get-coding-system decoding)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
622 (get-coding-system encoding)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
623 (set-process-coding-system proc decoding encoding)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
624 (force-mode-line-update))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 444
diff changeset
625
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 428
diff changeset
626 ;;; code-process.el ends here