annotate lisp/=nntp.el @ 24419:30e478cd167e

(shell-command-default-error-buffer): Renamed from shell-command-on-region-default-error-buffer. (shell-command-on-region): Mention in echo area when there is some error output. Mention success or failure, too. Accumulate multiple error outputs going forward, with formfeed in between. Display the error buffer when we have put something in it. (shell-command): Add the ERROR-BUFFER argument feature.
author Karl Heuer <kwzh@gnu.org>
date Mon, 01 Mar 1999 03:19:32 +0000
parents a9a40def9903
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
1 ;;; nntp.el --- NNTP (RFC977) Interface for GNU Emacs
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
2
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
3 ;; Copyright (C) 1987, 1988, 1989, 1990, 1992, 1993 Free Software Foundation, Inc.
846
20674ae6bf52 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 814
diff changeset
4
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
5 ;; Author: Masanobu UMEDA <umerin@flab.flab.fujitsu.junet>
814
38b2499cb3e9 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 790
diff changeset
6 ;; Keywords: news
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
7
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
8 ;; This file is part of GNU Emacs.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
9
882
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
10 ;; GNU Emacs is free software; you can redistribute it and/or modify
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
11 ;; it under the terms of the GNU General Public License as published by
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
12 ;; the Free Software Foundation; either version 2, or (at your option)
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
13 ;; any later version.
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
14
882
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
15 ;; GNU Emacs is distributed in the hope that it will be useful,
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
16 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
17 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
18 ;; GNU General Public License for more details.
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
19
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
20 ;; You should have received a copy of the GNU General Public License
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
21 ;; along with GNU Emacs; see the file COPYING. If not, write to
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
22 ;; the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA.
bff32d8ecc5e entered into RCS
Richard M. Stallman <rms@gnu.org>
parents: 853
diff changeset
23
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
24
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
25 ;;; Commentary:
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
26
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
27 ;; This implementation is tested on both 1.2a and 1.5 version of the
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
28 ;; NNTP package.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
29
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
30 ;; Troubleshooting of NNTP
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
31 ;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
32 ;; (1) Select routine may signal an error or fall into infinite loop
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
33 ;; while waiting for the server response. In this case, you'd better
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
34 ;; not use byte-compiled codes but original source. If you still have
10127
45dc21b49023 (nntp-buggy-select): Delete usg-unix-v from list.
Richard M. Stallman <rms@gnu.org>
parents: 9582
diff changeset
35 ;; a problems with it, set the variable `nntp-buggy-select' to t.
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
36 ;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
37 ;; (2) Emacs may hang up while retrieving headers since too many
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
38 ;; requests have been sent to the NNTP server without reading their
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
39 ;; replies. In this case, reduce the number of the requests sent to
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
40 ;; the server at one time by setting the variable
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
41 ;; `nntp-maximum-request' to a lower value.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
42 ;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
43 ;; (3) If the TCP/IP stream (open-network-stream) is not supported by
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
44 ;; emacs, compile and install `tcp.el' and `tcp.c' which is an
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
45 ;; emulation program of the stream. If you modified `tcp.c' for your
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
46 ;; system, please send me the diffs. I'll include some of them in the
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
47 ;; future releases.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
48
790
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
49 ;;; Code:
47ec7c4c42bc *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 659
diff changeset
50
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
51 (defvar nntp-server-hook nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
52 "*Hooks for the NNTP server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
53 If the kanji code of the NNTP server is different from the local kanji
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
54 code, the correct kanji code of the buffer associated with the NNTP
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
55 server must be specified as follows:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
56
7639
67b7d1ea7b2e Doc fix.
Richard M. Stallman <rms@gnu.org>
parents: 5042
diff changeset
57 \(setq nntp-server-hook
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
58 (function
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
59 (lambda ()
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
60 ;; Server's Kanji code is EUC (NEmacs hack).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
61 (make-local-variable 'kanji-fileio-code)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
62 (setq kanji-fileio-code 0))))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
63
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
64 If you'd like to change something depending on the server in this
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
65 hook, use the variable `nntp-server-name'.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
66
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
67 (defvar nntp-large-newsgroup 50
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
68 "*The number of the articles which indicates a large newsgroup.
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
69 If the number of the articles is greater than the value, verbose
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
70 messages will be shown to indicate the current status.")
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
71
10127
45dc21b49023 (nntp-buggy-select): Delete usg-unix-v from list.
Richard M. Stallman <rms@gnu.org>
parents: 9582
diff changeset
72
45dc21b49023 (nntp-buggy-select): Delete usg-unix-v from list.
Richard M. Stallman <rms@gnu.org>
parents: 9582
diff changeset
73 (defvar nntp-buggy-select (memq system-type '(fujitsu-uts))
45dc21b49023 (nntp-buggy-select): Delete usg-unix-v from list.
Richard M. Stallman <rms@gnu.org>
parents: 9582
diff changeset
74 "*Non-nil if your select routine is buggy.
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
75 If the select routine signals error or fall into infinite loop while
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
76 waiting for the server response, the variable must be set to t. In
10127
45dc21b49023 (nntp-buggy-select): Delete usg-unix-v from list.
Richard M. Stallman <rms@gnu.org>
parents: 9582
diff changeset
77 case of Fujitsu UTS, it is set to t since `accept-process-output'
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
78 doesn't work properly.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
79
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
80 (defvar nntp-maximum-request 400
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
81 "*The maximum number of the requests sent to the NNTP server at one time.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
82 If Emacs hangs up while retrieving headers, set the variable to a
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
83 lower value.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
84
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
85 (defvar nntp-debug-read 10000
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
86 "*Display '...' every 10Kbytes of a message being received if it is non-nil.
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
87 If it is a number, dots are displayed per the number.")
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
88
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
89
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
90 (defconst nntp-version "NNTP 3.12"
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
91 "Version numbers of this version of NNTP.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
92
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
93 (defvar nntp-server-name nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
94 "The name of the host running NNTP server.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
95
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
96 (defvar nntp-server-buffer nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
97 "Buffer associated with NNTP server process.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
98
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
99 (defvar nntp-server-process nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
100 "The NNTP server process.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
101 You'd better not use this variable in NNTP front-end program but
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
102 instead use `nntp-server-buffer'.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
103
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
104 (defvar nntp-status-string nil
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
105 "Save the server response message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
106 You'd better not use this variable in NNTP front-end program but
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
107 instead call function `nntp-status-message' to get status message.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
108
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
109 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
110 ;;; Extended Command for retrieving many headers.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
111 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
112 ;; Retrieving lots of headers by sending command asynchronously.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
113 ;; Access functions to headers are defined as macro.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
114
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
115 (defmacro nntp-header-number (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
116 "Return article number in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
117 (` (aref (, header) 0)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
118
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
119 (defmacro nntp-set-header-number (header number)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
120 "Set article number of HEADER to NUMBER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
121 (` (aset (, header) 0 (, number))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
122
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
123 (defmacro nntp-header-subject (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
124 "Return subject string in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
125 (` (aref (, header) 1)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
126
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
127 (defmacro nntp-set-header-subject (header subject)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
128 "Set article subject of HEADER to SUBJECT."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
129 (` (aset (, header) 1 (, subject))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
130
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
131 (defmacro nntp-header-from (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
132 "Return author string in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
133 (` (aref (, header) 2)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
134
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
135 (defmacro nntp-set-header-from (header from)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
136 "Set article author of HEADER to FROM."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
137 (` (aset (, header) 2 (, from))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
138
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
139 (defmacro nntp-header-xref (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
140 "Return xref string in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
141 (` (aref (, header) 3)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
142
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
143 (defmacro nntp-set-header-xref (header xref)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
144 "Set article xref of HEADER to xref."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
145 (` (aset (, header) 3 (, xref))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
146
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
147 (defmacro nntp-header-lines (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
148 "Return lines in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
149 (` (aref (, header) 4)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
150
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
151 (defmacro nntp-set-header-lines (header lines)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
152 "Set article lines of HEADER to LINES."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
153 (` (aset (, header) 4 (, lines))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
154
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
155 (defmacro nntp-header-date (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
156 "Return date in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
157 (` (aref (, header) 5)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
158
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
159 (defmacro nntp-set-header-date (header date)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
160 "Set article date of HEADER to DATE."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
161 (` (aset (, header) 5 (, date))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
162
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
163 (defmacro nntp-header-id (header)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
164 "Return Id in HEADER."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
165 (` (aref (, header) 6)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
166
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
167 (defmacro nntp-set-header-id (header id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
168 "Set article Id of HEADER to ID."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
169 (` (aset (, header) 6 (, id))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
170
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
171 (defmacro nntp-header-references (header)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
172 "Return references (or in-reply-to) in HEADER."
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
173 (` (aref (, header) 7)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
174
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
175 (defmacro nntp-set-header-references (header ref)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
176 "Set article references of HEADER to REF."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
177 (` (aset (, header) 7 (, ref))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
178
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
179 (defun nntp-retrieve-headers (sequence)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
180 "Return list of article headers specified by SEQUENCE of article id.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
181 The format of list is
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
182 `([NUMBER SUBJECT FROM XREF LINES DATE MESSAGE-ID REFERENCES] ...)'.
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
183 If there is no References: field, In-Reply-To: field is used instead.
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
184 Reader macros for the vector are defined as `nntp-header-FIELD'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
185 Writer macros for the vector are defined as `nntp-set-header-FIELD'.
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
186 Newsgroup must be selected before calling this."
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
187 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
188 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
189 (erase-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
190 (let ((number (length sequence))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
191 (last-point (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
192 (received 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
193 (count 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
194 (headers nil) ;Result list.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
195 (article 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
196 (subject nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
197 (message-id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
198 (from nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
199 (xref nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
200 (lines 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
201 (date nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
202 (references nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
203 ;; Send HEAD command.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
204 (while sequence
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
205 (nntp-send-strings-to-server "HEAD" (car sequence))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
206 (setq sequence (cdr sequence))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
207 (setq count (1+ count))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
208 ;; Every 400 header requests we have to read stream in order
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
209 ;; to avoid deadlock.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
210 (if (or (null sequence) ;All requests have been sent.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
211 (zerop (% count nntp-maximum-request)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
212 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
213 (accept-process-output)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
214 (while (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
215 (goto-char last-point)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
216 ;; Count replies.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
217 (while (re-search-forward "^[0-9]" nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
218 (setq received (1+ received)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
219 (setq last-point (point))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
220 (< received count))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
221 ;; If number of headers is greater than 100, give
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
222 ;; informative messages.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
223 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
224 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
225 (zerop (% received 20))
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
226 (message "NNTP: Receiving headers... %d%%"
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
227 (/ (* received 100) number)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
228 (nntp-accept-response))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
229 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
230 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
231 ;; Wait for text of last command.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
232 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
233 (re-search-backward "^[0-9]" nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
234 (if (looking-at "^[23]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
235 (while (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
236 (goto-char (- (point-max) 3))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
237 (not (looking-at "^\\.\r$")))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
238 (nntp-accept-response)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
239 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
240 (> number nntp-large-newsgroup)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
241 (message "NNTP: Receiving headers... done"))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
242 ;; Now all of replies are received.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
243 (setq received number)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
244 ;; First, fold continuation lines.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
245 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
246 (while (re-search-forward "\\(\r?\n[ \t]+\\)+" nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
247 (replace-match " " t t))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
248 ;;(delete-non-matching-lines
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
249 ;; "^Subject:\\|^Xref:\\|^From:\\|^Lines:\\|^Date:\\|^References:\\|^[23]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
250 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
251 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
252 (message "NNTP: Parsing headers..."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
253 ;; Then examines replies.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
254 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
255 (while (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
256 (cond ((looking-at "^[23][0-9][0-9][ \t]+\\([0-9]+\\)[ \t]+\\(<[^>]+>\\)")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
257 (setq article
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
258 (string-to-int
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
259 (buffer-substring (match-beginning 1) (match-end 1))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
260 (setq message-id
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
261 (buffer-substring (match-beginning 2) (match-end 2)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
262 (forward-line 1)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
263 ;; Set default value.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
264 (setq subject nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
265 (setq xref nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
266 (setq from nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
267 (setq lines 0)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
268 (setq date nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
269 (setq references nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
270 ;; Thanks go to mly@AI.MIT.EDU (Richard Mlynarik)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
271 (while (and (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
272 (not (memq (following-char) '(?2 ?3))))
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
273 (if (looking-at "\\(From\\|Subject\\|Date\\|Lines\\|Xref\\|References\\|In-Reply-To\\):[ \t]+\\([^ \t\n]+.*\\)\r$")
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
274 (let ((s (buffer-substring
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
275 (match-beginning 2) (match-end 2)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
276 (c (char-after (match-beginning 0))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
277 ;; We don't have to worry about letter case.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
278 (cond ((char-equal c ?F) ;From:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
279 (setq from s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
280 ((char-equal c ?S) ;Subject:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
281 (setq subject s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
282 ((char-equal c ?D) ;Date:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
283 (setq date s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
284 ((char-equal c ?L) ;Lines:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
285 (setq lines (string-to-int s)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
286 ((char-equal c ?X) ;Xref:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
287 (setq xref s))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
288 ((char-equal c ?R) ;References:
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
289 (setq references s))
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
290 ;; In-Reply-To: should be used only when
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
291 ;; there is no References: field.
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
292 ((and (char-equal c ?I) ;In-Reply-To:
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
293 (null references))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
294 (setq references s))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
295 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
296 (forward-line 1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
297 ;; Finished to parse one header.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
298 (if (null subject)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
299 (setq subject "(None)"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
300 (if (null from)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
301 (setq from "(Unknown User)"))
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
302 ;; Collect valid article only.
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
303 (and article
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
304 message-id
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
305 (setq headers
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
306 (cons (vector article subject from
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
307 xref lines date
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
308 message-id references) headers)))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
309 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
310 (t (forward-line 1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
311 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
312 (setq received (1- received))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
313 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
314 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
315 (zerop (% received 20))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
316 (message "NNTP: Parsing headers... %d%%"
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
317 (/ (* received 100) number)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
318 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
319 (and (numberp nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
320 (> number nntp-large-newsgroup)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
321 (message "NNTP: Parsing headers... done"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
322 (nreverse headers)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
323 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
324
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
325
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
326 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
327 ;;; Raw Interface to Network News Transfer Protocol (RFC977).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
328 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
329
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
330 (defun nntp-open-server (host &optional service)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
331 "Open news server on HOST.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
332 If HOST is nil, use value of environment variable `NNTPSERVER'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
333 If optional argument SERVICE is non-nil, open by the service name."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
334 (let ((host (or host (getenv "NNTPSERVER")))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
335 (status nil))
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
336 (setq nntp-status-string "")
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
337 (cond ((and host (nntp-open-server-internal host service))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
338 (setq status (nntp-wait-for-response "^[23].*\r$"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
339 ;; Do check unexpected close of connection.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
340 ;; Suggested by feldmark@hanako.stars.flab.fujitsu.junet.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
341 (if status
9582
5005fc6f6c6f (nntp-open-server): Send MODE READER command to server.
Richard M. Stallman <rms@gnu.org>
parents: 9066
diff changeset
342 (progn (set-process-sentinel nntp-server-process
5005fc6f6c6f (nntp-open-server): Send MODE READER command to server.
Richard M. Stallman <rms@gnu.org>
parents: 9066
diff changeset
343 'nntp-default-sentinel)
5005fc6f6c6f (nntp-open-server): Send MODE READER command to server.
Richard M. Stallman <rms@gnu.org>
parents: 9066
diff changeset
344 (nntp-send-command "^[25].*\r$" "MODE" "READER"))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
345 ;; We have to close connection here, since function
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
346 ;; `nntp-server-opened' may return incorrect status.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
347 (nntp-close-server-internal)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
348 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
349 ((null host)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
350 (setq nntp-status-string "NNTP server is not specified."))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
351 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
352 status
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
353 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
354
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
355 (defun nntp-close-server ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
356 "Close news server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
357 (unwind-protect
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
358 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
359 ;; Un-set default sentinel function before closing connection.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
360 (and nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
361 (eq 'nntp-default-sentinel
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
362 (process-sentinel nntp-server-process))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
363 (set-process-sentinel nntp-server-process nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
364 ;; We cannot send QUIT command unless the process is running.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
365 (if (nntp-server-opened)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
366 (nntp-send-command nil "QUIT"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
367 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
368 (nntp-close-server-internal)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
369 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
370
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
371 (fset 'nntp-request-quit (symbol-function 'nntp-close-server))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
372
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
373 (defun nntp-server-opened ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
374 "Return server process status, T or NIL.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
375 If the stream is opened, return T, otherwise return NIL."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
376 (and nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
377 (memq (process-status nntp-server-process) '(open run))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
378
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
379 (defun nntp-status-message ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
380 "Return server status response as string."
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
381 (if (and nntp-status-string
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
382 ;; NNN MESSAGE
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
383 (string-match "[0-9][0-9][0-9][ \t]+\\([^\r]*\\).*$"
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
384 nntp-status-string))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
385 (substring nntp-status-string (match-beginning 1) (match-end 1))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
386 ;; Empty message if nothing.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
387 ""
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
388 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
389
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
390 (defun nntp-request-article (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
391 "Select article by message ID (or number)."
11143
a9a40def9903 (nntp-request-article): If ID is integer, convert to string.
Richard M. Stallman <rms@gnu.org>
parents: 10127
diff changeset
392 (if (numberp id)
a9a40def9903 (nntp-request-article): If ID is integer, convert to string.
Richard M. Stallman <rms@gnu.org>
parents: 10127
diff changeset
393 (setq id (number-to-string id)))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
394 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
395 ;; If NEmacs, end of message may look like: "\256\215" (".^M")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
396 (nntp-send-command "^\\.\r$" "ARTICLE" id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
397 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
398 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
399
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
400 (defun nntp-request-body (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
401 "Select article body by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
402 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
403 ;; If NEmacs, end of message may look like: "\256\215" (".^M")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
404 (nntp-send-command "^\\.\r$" "BODY" id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
405 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
406 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
407
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
408 (defun nntp-request-head (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
409 "Select article head by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
410 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
411 (nntp-send-command "^\\.\r$" "HEAD" id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
412 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
413 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
414
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
415 (defun nntp-request-stat (id)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
416 "Select article by message ID (or number)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
417 (nntp-send-command "^[23].*\r$" "STAT" id))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
418
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
419 (defun nntp-request-group (group)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
420 "Select news GROUP."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
421 ;; 1.2a NNTP's group command is buggy. "^M" (\r) is not appended to
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
422 ;; end of the status message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
423 (nntp-send-command "^[23].*$" "GROUP" group))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
424
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
425 (defun nntp-request-list ()
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
426 "List active newsgroups."
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
427 (prog1
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
428 (nntp-send-command "^\\.\r$" "LIST")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
429 (nntp-decode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
430 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
431
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
432 (defun nntp-request-list-newsgroups ()
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
433 "List newsgroups (defined in NNTP2)."
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
434 (prog1
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
435 (nntp-send-command "^\\.\r$" "LIST NEWSGROUPS")
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
436 (nntp-decode-text)
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
437 ))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
438
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
439 (defun nntp-request-list-distributions ()
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
440 "List distributions (defined in NNTP2)."
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
441 (prog1
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
442 (nntp-send-command "^\\.\r$" "LIST DISTRIBUTIONS")
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
443 (nntp-decode-text)
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
444 ))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
445
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
446 (defun nntp-request-last ()
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
447 "Set current article pointer to the previous article
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
448 in the current news group."
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
449 (nntp-send-command "^[23].*\r$" "LAST"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
450
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
451 (defun nntp-request-next ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
452 "Advance current article pointer."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
453 (nntp-send-command "^[23].*\r$" "NEXT"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
454
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
455 (defun nntp-request-post ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
456 "Post a new news in current buffer."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
457 (if (nntp-send-command "^[23].*\r$" "POST")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
458 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
459 (nntp-encode-text)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
460 (nntp-send-region-to-server (point-min) (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
461 ;; 1.2a NNTP's post command is buggy. "^M" (\r) is not
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
462 ;; appended to end of the status message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
463 (nntp-wait-for-response "^[23].*$")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
464 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
465
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
466 (defun nntp-default-sentinel (proc status)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
467 "Default sentinel function for NNTP server process."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
468 (if (and nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
469 (not (nntp-server-opened)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
470 (error "NNTP: Connection closed.")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
471 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
472
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
473 ;; Encoding and decoding of NNTP text.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
474
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
475 (defun nntp-decode-text ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
476 "Decode text transmitted by NNTP.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
477 0. Delete status line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
478 1. Delete `^M' at end of line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
479 2. Delete `.' at end of buffer (end of text mark).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
480 3. Delete `.' at beginning of line."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
481 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
482 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
483 ;; Insert newline at end of buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
484 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
485 (if (not (bolp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
486 (insert "\n"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
487 ;; Delete status line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
488 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
489 (delete-region (point) (progn (forward-line 1) (point)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
490 ;; Delete `^M' at end of line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
491 ;; (replace-regexp "\r$" "")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
492 (while (not (eobp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
493 (end-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
494 (if (= (preceding-char) ?\r)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
495 (delete-char -1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
496 (forward-line 1)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
497 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
498 ;; Delete `.' at end of buffer (end of text mark).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
499 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
500 (forward-line -1) ;(beginning-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
501 (if (looking-at "^\\.$")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
502 (delete-region (point) (progn (forward-line 1) (point))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
503 ;; Replace `..' at beginning of line with `.'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
504 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
505 ;; (replace-regexp "^\\.\\." ".")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
506 (while (search-forward "\n.." nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
507 (delete-char -1))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
508 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
509
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
510 (defun nntp-encode-text ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
511 "Encode text in current buffer for NNTP transmission.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
512 1. Insert `.' at beginning of line.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
513 2. Insert `.' at end of buffer (end of text mark)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
514 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
515 ;; Insert newline at end of buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
516 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
517 (if (not (bolp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
518 (insert "\n"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
519 ;; Replace `.' at beginning of line with `..'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
520 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
521 ;; (replace-regexp "^\\." "..")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
522 (while (search-forward "\n." nil t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
523 (insert "."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
524 ;; Insert `.' at end of buffer (end of text mark).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
525 (goto-char (point-max))
5042
6cc0a08212aa (nntp-encode-text): Insert a CR before the newline.
Richard M. Stallman <rms@gnu.org>
parents: 3591
diff changeset
526 (insert ".\r\n")
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
527 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
528
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
529
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
530 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
531 ;;; Synchronous Communication with NNTP Server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
532 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
533
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
534 (defun nntp-send-command (response cmd &rest args)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
535 "Wait for server RESPONSE after sending CMD and optional ARGS to server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
536 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
537 ;; Clear communication buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
538 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
539 (erase-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
540 (apply 'nntp-send-strings-to-server cmd args)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
541 (if response
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
542 (nntp-wait-for-response response)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
543 t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
544 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
545
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
546 (defun nntp-wait-for-response (regexp)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
547 "Wait for server response which matches REGEXP."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
548 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
549 (let ((status t)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
550 (wait t)
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
551 (dotnum 0) ;Number of "." being displayed.
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
552 (dotsize ;How often "." displayed.
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
553 (if (numberp nntp-debug-read) nntp-debug-read 10000)))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
554 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
555 ;; Wait for status response (RFC977).
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
556 ;; 1xx - Informative message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
557 ;; 2xx - Command ok.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
558 ;; 3xx - Command ok so far, send the rest of it.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
559 ;; 4xx - Command was correct, but couldn't be performed for some
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
560 ;; reason.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
561 ;; 5xx - Command unimplemented, or incorrect, or a serious
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
562 ;; program error occurred.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
563 (nntp-accept-response)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
564 (while wait
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
565 (goto-char (point-min))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
566 (cond ((looking-at "[23]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
567 (setq wait nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
568 ((looking-at "[45]")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
569 (setq status nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
570 (setq wait nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
571 (t (nntp-accept-response))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
572 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
573 ;; Save status message.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
574 (end-of-line)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
575 (setq nntp-status-string
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
576 (buffer-substring (point-min) (point)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
577 (if status
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
578 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
579 (setq wait t)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
580 (while wait
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
581 (goto-char (point-max))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
582 (forward-line -1) ;(beginning-of-line)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
583 ;;(message (buffer-substring
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
584 ;; (point)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
585 ;; (save-excursion (end-of-line) (point))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
586 (if (looking-at regexp)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
587 (setq wait nil)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
588 (if nntp-debug-read
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
589 (let ((newnum (/ (buffer-size) dotsize)))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
590 (if (not (= dotnum newnum))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
591 (progn
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
592 (setq dotnum newnum)
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
593 (message "NNTP: Reading %s"
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
594 (make-string dotnum ?.))))))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
595 (nntp-accept-response)
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
596 ;;(if nntp-debug-read (message ""))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
597 ))
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
598 ;; Remove "...".
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
599 (if (and nntp-debug-read (> dotnum 0))
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
600 (message ""))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
601 ;; Successfully received server response.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
602 t
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
603 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
604 )))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
605
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
606
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
607 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
608 ;;; Low-Level Interface to NNTP Server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
609 ;;;
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
610
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
611 (defun nntp-send-strings-to-server (&rest strings)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
612 "Send list of STRINGS to news server as command and its arguments."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
613 (let ((cmd (car strings))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
614 (strings (cdr strings)))
3591
507f64624555 Apply typo patches from Paul Eggert.
Jim Blandy <jimb@redhat.com>
parents: 2843
diff changeset
615 ;; Command and each argument must be separated by one or more spaces.
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
616 (while strings
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
617 (setq cmd (concat cmd " " (car strings)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
618 (setq strings (cdr strings)))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
619 ;; Command line must be terminated by a CR-LF.
2843
cd90d49526ae Version 3.15 from Umeda.
Richard M. Stallman <rms@gnu.org>
parents: 882
diff changeset
620 (process-send-string nntp-server-process (concat cmd "\r\n"))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
621 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
622
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
623 (defun nntp-send-region-to-server (begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
624 "Send current buffer region (from BEGIN to END) to news server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
625 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
626 ;; We have to work in the buffer associated with NNTP server
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
627 ;; process because of NEmacs hack.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
628 (copy-to-buffer nntp-server-buffer begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
629 (set-buffer nntp-server-buffer)
9066
f211cea65063 (nntp-send-region-to-server): Call process-send-region
Richard M. Stallman <rms@gnu.org>
parents: 7639
diff changeset
630 (process-send-region nntp-server-process (point-min) (point-max))
87
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
631 ;; We cannot erase buffer, because reply may be received.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
632 (delete-region begin end)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
633 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
634
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
635 (defun nntp-open-server-internal (host &optional service)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
636 "Open connection to news server on HOST by SERVICE (default is nntp)."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
637 (save-excursion
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
638 ;; Use TCP/IP stream emulation package if needed.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
639 (or (fboundp 'open-network-stream)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
640 (require 'tcp))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
641 ;; Initialize communication buffer.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
642 (setq nntp-server-buffer (get-buffer-create " *nntpd*"))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
643 (set-buffer nntp-server-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
644 (buffer-flush-undo (current-buffer))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
645 (erase-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
646 (kill-all-local-variables)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
647 (setq case-fold-search t) ;Should ignore case.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
648 (setq nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
649 (open-network-stream "nntpd" (current-buffer)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
650 host (or service "nntp")))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
651 (setq nntp-server-name host)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
652 ;; It is possible to change kanji-fileio-code in this hook.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
653 (run-hooks 'nntp-server-hook)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
654 ;; Return the server process.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
655 nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
656 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
657
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
658 (defun nntp-close-server-internal ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
659 "Close connection to news server."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
660 (if nntp-server-process
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
661 (delete-process nntp-server-process))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
662 (if nntp-server-buffer
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
663 (kill-buffer nntp-server-buffer))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
664 (setq nntp-server-buffer nil)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
665 (setq nntp-server-process nil))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
666
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
667 (defun nntp-accept-response ()
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
668 "Read response of server.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
669 It is well-known that the communication speed will be much improved by
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
670 defining this function as macro."
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
671 ;; To deal with server process exiting before
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
672 ;; accept-process-output is called.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
673 ;; Suggested by Jason Venner <jason@violet.berkeley.edu>.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
674 ;; This is a copy of `nntp-default-sentinel'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
675 (or (memq (process-status nntp-server-process) '(open run))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
676 (error "NNTP: Connection closed."))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
677 (if nntp-buggy-select
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
678 (progn
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
679 ;; We cannot use `accept-process-output'.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
680 ;; Fujitsu UTS requires messages during sleep-for. I don't know why.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
681 (message "NNTP: Reading...")
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
682 (sleep-for 1)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
683 (message ""))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
684 (condition-case errorcode
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
685 (accept-process-output nntp-server-process)
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
686 (error
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
687 (cond ((string-equal "select error: Invalid argument" (nth 1 errorcode))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
688 ;; Ignore select error.
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
689 nil
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
690 )
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
691 (t
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
692 (signal (car errorcode) (cdr errorcode))))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
693 ))
d39407c00c09 Initial revision
root <root>
parents:
diff changeset
694 ))
584
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 232
diff changeset
695
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 232
diff changeset
696 (provide 'nntp)
4cd7543be581 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 232
diff changeset
697
659
505130d1ddf8 *** empty log message ***
Eric S. Raymond <esr@snark.thyrsus.com>
parents: 584
diff changeset
698 ;;; nntp.el ends here