Remove Gnus, making way for new subtree Gnus pkg
[packages] / xemacs-packages / liece / lisp / liece-200.el
1 ;;; liece-200.el --- Handler routines for 200 numeric reply.
2 ;; Copyright (C) 1998-2000 Daiki Ueno
3
4 ;; Author: Daiki Ueno <ueno@unixuser.org>
5 ;; Created: 1998-09-28
6 ;; Revised: 1998-11-25
7 ;; Keywords: IRC, liece
8
9 ;; This file is part of Liece.
10
11 ;; This program is free software; you can redistribute it and/or modify
12 ;; it under the terms of the GNU General Public License as published by
13 ;; the Free Software Foundation; either version 2, or (at your option)
14 ;; any later version.
15
16 ;; This program is distributed in the hope that it will be useful,
17 ;; but WITHOUT ANY WARRANTY; without even the implied warranty of
18 ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19 ;; GNU General Public License for more details.
20
21 ;; You should have received a copy of the GNU General Public License
22 ;; along with GNU Emacs; see the file COPYING.  If not, write to the
23 ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
24 ;; Boston, MA 02111-1307, USA.
25
26
27 ;;; Commentary:
28 ;; 
29
30 ;;; Code:
31
32 (eval-when-compile
33   (require 'liece-inlines)
34   (require 'liece-intl)
35   (require 'liece-misc)
36   (require 'liece-commands))
37
38 (defun* liece-handle-200-messages (number prefix rest)
39   "200 replies"
40   (or (string-match "[^ ]* \\([^ ]*\\) *\\([^ ]*\\) *:\\(.*\\)" rest)
41       (return-from liece-handle-200-messages))
42   (let ((target1 (match-string 1 rest)) (target2 (match-string 2 rest))
43         (msg (match-string 3 rest)))
44     (setq target1 (liece-channel-virtual target1)
45           target2 (liece-channel-virtual target2))
46     (cond ((string-equal target1 "")
47            (liece-insert-info liece-200-buffer (concat msg "\n")))
48           ((string-equal target2 "")
49            (liece-insert-info
50             liece-200-buffer (concat target1 " " msg "\n")))
51           (t
52            (liece-insert-info
53             liece-200-buffer (concat target1 " " msg " (" target2 ")\n"))))))
54
55 (defun* liece-handle-200-message (prefix rest)
56   "RPL_TRACELINK \"Link <version & debug level> <destination> <next server>\""
57   (or (string-match "Link \\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\(.*\\)" rest)
58       (return-from liece-handle-200-message))
59   (let ((version (match-string 1 rest)) (dest (match-string 2 rest))
60         (next (match-string 3 rest)) (ver (match-string 4 rest))
61         (sec (match-string 5 rest))
62         (q1 (match-string 6 rest)) (q2 (match-string 7 rest)))
63     (liece-insert-info liece-200-buffer
64                         (concat prefix
65                                 " ("
66                                 version (if ver (concat " " ver) "")
67                                 ") --- " dest "\n"))
68     (liece-insert-info liece-200-buffer
69                         (concat "\t[" (liece-convert-seconds sec) "]"
70                                 (if (not (string= q1 "")) (concat " " q1) "")
71                                 (if (not (string= q2 "")) (concat "/" q2) "")
72                                 " (next " next ")\n"))))
73     
74 (defun* liece-handle-201-message (prefix rest)
75   "RPL_TRACECONNECTING \"Try. <class> <server>\""
76   (or (string-match "[^ ]* [^ ]* \\([0-9]*\\)[ :]*\\(.*\\)" rest)
77       (return-from liece-handle-201-message))
78   (let ((class (match-string 1 rest))
79         (server (match-string 2 rest)))
80     (liece-insert-info liece-200-buffer
81                         (format (_ "%s Trying to connect to %s (class %s)\n")
82                                 prefix server class))))
83
84 (defun* liece-handle-202-message (prefix rest)
85   "RPL_TRACEHANDSHAKE \"H.S. <class> <server>\""
86   (or (string-match "[^ ]* [^ ]* \\([0-9]*\\)[ :]*\\(.*\\)" rest)
87       (return-from liece-handle-202-message))
88   (let ((class (match-string 1 rest)) (server (match-string 2 rest)))
89     (liece-insert-info liece-200-buffer
90                         (format (_ "%s Handshaking with %s (class: %s)\n")
91                                 prefix server class))))
92
93 (defun* liece-handle-203-message (prefix rest)
94   "RPL_TRACEUNKNOWN \"???? <class> [<client IP address in dot form>]\""
95   (or (string-match "[^ ]* [^ ]* \\([^ ]*\\)[ :]+\\(.*\\)" rest)
96       (return-from liece-handle-203-message))
97   (let ((class (match-string 1 rest)) (who (match-string 2 rest)))
98     (liece-insert-info liece-200-buffer
99                         (concat "Class " class ": unknown " who "\n"))))
100
101 (defun* liece-handle-204-message (prefix rest)
102   "RPL_TRACEOPERATOR \"Oper <class> <nick>\""
103   (or (string-match "[^ ]* [^ ]* \\([^ ]*\\)[ :]+\\(.*\\)" rest)
104       (return-from liece-handle-204-message))
105   (let ((class (match-string 1 rest)) (who (match-string 2 rest)))
106     (liece-insert-info liece-200-buffer
107                         (concat "Class " class ": operator " who "\n"))))
108
109 (defun* liece-handle-205-message (prefix rest)
110   "RPL_TRACEUSER \"User <class> <nick>\""
111   (or (string-match "[^ ]* [^ ]* \\([0-9]*\\)[ :]*\\(.*\\)" rest)
112       (return-from liece-handle-205-message))
113   (let ((hops (match-string 1 rest)) (where (match-string 2 rest)))
114     (liece-insert-info liece-200-buffer
115                         (concat "Class " hops ": user " where "\n"))))
116
117 (defun* liece-handle-206-message (prefix rest)
118   "RPL_TRACESERVER \"Serv <class> <int>S <int>C <server> <nick!user|*!*>@<host|server>\""
119   (or (string-match "Serv \\([^ ]*\\) \\(.*\\)" rest)
120       (return-from liece-handle-206-message))
121   (let ((class (match-string 1 rest)) (pars (match-string 2 rest)))
122     (cond
123      ((string-match "\\([0-9]*\\)S *\\([0-9]*\\)C *\\([^ ]*\\) *\\([^ ]*\\)[ :]*\\(.*\\)" pars)
124       (let ((servers (match-string 1 pars)) (clients (match-string 2 pars))
125             (next (match-string 3 pars)) (by (match-string 4 pars))
126             (type (match-string 5 pars)))
127         
128         ;; This is automatic connection line
129         (setq by (if (string-match "^AutoConn\\.!" by)
130                      "auto connection"
131                    (concat "by " by)))
132         
133         (liece-insert-info liece-200-buffer
134                             (concat prefix " --- " next "\n"))
135         (liece-insert-info liece-200-buffer
136                             (concat "\t[" clients " clients, "
137                                     servers " servers]"
138                                     " Class " class ", Type " type " " by
139                                     "\n"))))
140      (t
141       (liece-insert-info liece-200-buffer
142                           (format "Class %s: server %s --- %s\n"
143                                   class prefix pars))))))
144
145 (defun* liece-handle-207-message (prefix rest)
146   "RPL_TRACESERVICE \"Service <class> <name> <type> <wants>\""
147   (or (string-match "[^ ]* Service \\([0-9]*\\) \\(.*\\)" rest)
148       (return-from liece-handle-207-message))
149   (let ((class (match-string 1 rest)) (service (match-string 2 rest)))
150     (liece-insert-info liece-200-buffer
151                         (concat "Class " class ": service " service "\n"))))
152
153 (defun liece-handle-208-message (prefix rest)
154   "RPL_TRACENEWTYPE \"<newtype> 0 <client name>\"."
155   (liece-insert-info liece-200-buffer
156                       (format "%s: RPL_TRACENEWTYPE: Why this?\n" prefix)))
157
158 (defun* liece-handle-209-message (prefix rest)
159   "RPL_TRACECLASS \"Class <class> <links>\""
160   (or (string-match "[^ ]* Class \\([0-9]*\\) \\([0-9]*\\)" rest)
161       (return-from liece-handle-209-message))
162   (let ((class (match-string 1 rest)) (entries (match-string 2 rest)))
163     (liece-insert-info liece-200-buffer
164                        (concat "Class " class ": " entries
165                                "entries linked\n"))))
166
167 (defun* liece-handle-211-message (prefix rest)
168   "RPL_STATSLINKINF \"<linkname> <sendq> <sent messages> <sent bytes> <received messages> <received bytes> <time open>\""
169   (or (string-match "\\([^ ]*\\) \\([^ ]*\\) \\([^ ]*\\) \\([^ ]*\\) \\([^ ]*\\) \\([^ ]*\\) \\([^ ]*\\)[ :]+\\(.*\\)" rest)
170       (return-from liece-handle-211-message))
171   (let ((link (match-string 2 rest)) (sendq (match-string 3 rest))
172         (sendm (match-string 4 rest)) (sendb (match-string 5 rest))
173         (rcvem (match-string 6 rest)) (rcveb (match-string 7 rest))
174         (open (match-string 8 rest)))
175     (liece-insert-info liece-200-buffer
176                         (format "%-35s %s: %5s%7s%10s%7s%10s %s\n"
177                                 link prefix sendq sendm sendb
178                                 rcvem rcveb open))))
179
180 (defun* liece-handle-212-message (prefix rest)
181   "RPL_STATSCOMMANDS \"<command> <count>\""
182   (or (string-match "[^ ]* \\([^ ]*\\) \\([0-9]*\\)" rest)
183       (return-from liece-handle-212-message))
184   (let ((cmd (match-string 1 rest)) (times (match-string 2 rest)))
185     (liece-insert-info liece-200-buffer
186                         (format "%s has been used %s times after startup\n"
187                                 cmd times))))
188
189 (defun* liece-handle-213-message (prefix rest)
190   "RPL_STATSCLINE \"C <host> * <name> <port> <class>\""
191   (or (string-match "[^ ]* C \\([^ ]*\\) \\* \\([^ ]*\\) \\([0-9]*\\) \\([0-9]*\\)" rest)
192       (return-from liece-handle-213-message))
193   (let ((canon (match-string 1 rest)) (name (match-string 2 rest))
194         (port (match-string 3 rest)) (class (match-string 4 rest)))
195     (liece-insert-info liece-200-buffer
196                         (concat "Connect to " canon ":" port
197                                 (if (not (string= class ""))
198                                     " (Class " class ")" "")
199                                 "\n"))
200     (liece-insert-info liece-200-buffer
201                         (concat "\t[" name "]\n"))))
202
203 (defun* liece-handle-214-message (prefix rest)
204   "RPL_STATSNLINE \"N <host> * <name> <port> <class>\""
205   (or (string-match "[^ ]* N \\([^ ]*\\) \\* \\([^ ]*\\) \\([0-9]*\\) \\([0-9]*\\)" rest)
206       (return-from liece-handle-214-message))
207   (let ((canon (match-string 1 rest)) (name (match-string 2 rest))
208         (port (match-string 3 rest)) (class (match-string 4 rest)))
209     (liece-insert-info liece-200-buffer
210                         (concat "Accept " canon ":" port
211                                 (if (not (string= class ""))
212                                     " (Class " class ")" "")
213                                 "\n"))
214     (liece-insert-info liece-200-buffer
215                         (concat "\t[" name "]\n"))))
216
217 (defun* liece-handle-215-message (prefix rest)
218   "RPL_STATSILINE \"I <host> * <host> <port> <class>\""
219   (or (string-match "[^ ]* I \\([^ ]*\\) \\(.*\\) \\([^ ]*\\)" rest)
220       (return-from liece-handle-215-message))
221   (let ((domain (match-string 1 rest)) (passwd (match-string 2 rest))
222         (redomain (match-string 3 rest)))
223     (liece-insert-info liece-200-buffer
224                         (format "I:%s:%s:%s\n" domain passwd redomain))))
225
226 (defun* liece-handle-216-message (prefix rest)
227   "RPL_STATSKLINE \"K <host> * <username> <port> <class>\""
228   (or (or (string-match
229            "[^ ]* K \\([^ ]*\\) \\(.\\) \\([^ ]*\\) 0 -1" rest)
230           (string-match
231            "[^ ]* K \\([^ ]*\\) \\([^ ]*\\) \\([^ ]*\\) 0 [:]*-1" rest))
232       (return-from liece-handle-216-message))
233   (let ((host (match-string 1 rest)) (pass (match-string 2 rest))
234         (user (match-string 3 rest)))
235     (liece-insert-info liece-200-buffer
236                         (format "K:%s:%s:%s\n" host pass user))))
237
238 (defun* liece-handle-217-message (prefix rest)
239   "RPL_STATSQLINE \"Q %s %s %s %d %d\""
240   (or (string-match
241        "[^ ]* Q \\([^ ]*\\) \\(.\\) \\([^ ]*\\) \\(.*\\)" rest)
242       (return-from liece-handle-217-message))
243   (let ((reason (match-string 1 rest)) (star (match-string 2 rest))
244         (host (match-string 3 rest)) (stuff (match-string 4 rest)))
245     (liece-insert-info liece-200-buffer
246                         (format "Q:%s:%s:%s:%s\n" reason star host stuff))))
247
248 (defun* liece-handle-218-message (prefix rest)
249   "RPL_STATSYLINE \"Y <class> <ping frequency> <connect  frequency> <max sendq>\""
250   (or (string-match "[^ ]* Y " rest)
251       (return-from liece-handle-218-message))
252   (let* ((args (split-string (substring rest (match-end 0))))
253          (class (pop args)) (pingfreq (pop args)) (confreq (pop args))
254          (maxlinks (pop args)) (qlen (pop args)))
255     (liece-insert-info liece-200-buffer
256                         (concat "Class " class ": \n"))
257     (liece-insert-info liece-200-buffer
258                         (concat "\tPing frequency " pingfreq " (sec)\n"))
259     (liece-insert-info liece-200-buffer
260                         (concat "\tConnection frequency " confreq " (sec)\n"))
261     (liece-insert-info liece-200-buffer
262                         (concat "\tMaximum links " maxlinks "\n"))
263     (when qlen
264       (liece-insert-info liece-200-buffer
265                           (concat "\tMaximum amount of send buffer "
266                                   qlen " (bytes)\n")))))
267
268 (defun liece-handle-219-message (prefix rest)
269   "RPL_ENDOFSTATS \"<stats letter> :End of /STATS report\"."
270   nil)
271
272 (defun liece-handle-221-message (prefix rest)
273   "RPL_UMODEIS \"<user mode string>\"."
274   (if (string-match "[^ ]* \\(.*\\)" rest)
275       (liece-insert-info liece-200-buffer
276                           (format (_ "Mode for you is %s\n")
277                                   (match-string 1 rest)))))
278
279 ;;;
280 ;;; 230 series not implemented as 7/94
281 ;;;
282 (defun liece-handle-231-message (prefix rest)
283   nil)
284
285 (defun liece-handle-232-message (prefix rest)
286   nil)
287
288 (defun liece-handle-233-message (prefix rest)
289   nil)
290
291 (defun liece-handle-234-message (prefix rest)
292   nil)
293
294 (defun liece-handle-235-message (prefix rest)
295   nil)
296
297 (defun liece-handle-241-message (prefix rest)
298   "RPL_STATSLLINE \"L <hostmask> * <servername> <maxdepth>\"."
299   (if (string-match "[^ ]* \\(.*\\)" rest)
300       (liece-insert-info liece-200-buffer
301                           (concat (match-string 1 rest) "\n"))))
302
303 (defun liece-handle-242-message (prefix rest)
304   "RPL_STATSUPTIME \":Server Up %d days %d:%02d:%02d\"."
305   (if (string-match "[^ ]* :\\(.*\\)" rest)
306       (liece-insert-info liece-200-buffer
307                           (concat (match-string 1 rest) "\n"))))
308
309 (defun liece-handle-243-message (prefix rest)
310   "RPL_STATSOLINE \"O <hostmask> * <name>\"."
311   (if (string-match "[^ ]* \\(.*\\)" rest)
312       (liece-insert-info liece-200-buffer
313                           (concat (match-string 1 rest) "\n"))))
314
315 (defun liece-handle-244-message (prefix rest)
316   "RPL_STATSHLINE \"H <hostmask> * <servername>\"."
317   (if (string-match "[^ ]* \\(.*\\)" rest)
318       (liece-insert-info liece-200-buffer
319                           (concat (match-string 1 rest) "\n"))))
320
321 (defun liece-handle-245-message (prefix rest)
322   "RPL_STATSSLINE \"S <hostmask> * <servicename> <servicetype> <class>\"."
323   (if (string-match "[^ ]* \\(.*\\)" rest)
324       (liece-insert-info liece-200-buffer
325                           (concat (match-string 1 rest) "\n"))))
326
327 (defun liece-handle-262-message (prefix rest)
328   "RPL_ENDOFTRACE \"<nickname> <target> <version> :End of TRACE\"."
329   nil)
330
331 \f
332 ;;; @ register message handlers
333 ;;;
334
335 (eval-when-compile (require 'liece-handler))
336
337 (liece-handler-define-backend "200")
338
339 (defmacro liece-register-200-handler (num)
340   `(progn
341      (liece-handler-define-function
342       ,(number-to-string num) '(prefix rest "200")
343       ',(intern (format "liece-handle-%03d-message" num)))
344      (defvar ,(intern (format "liece-%03d-hook" num)) nil)
345      (defvar ,(intern (format "liece-after-%03d-hook" num)) nil)))
346
347 (liece-register-200-handler 200)
348 (liece-register-200-handler 201)
349 (liece-register-200-handler 202)
350 (liece-register-200-handler 203)
351 (liece-register-200-handler 204)
352 (liece-register-200-handler 205)
353 (liece-register-200-handler 206)
354 (liece-register-200-handler 207)
355 (liece-register-200-handler 208)
356 (liece-register-200-handler 209)
357
358 (liece-register-200-handler 211)
359 (liece-register-200-handler 212)
360 (liece-register-200-handler 213)
361 (liece-register-200-handler 214)
362 (liece-register-200-handler 215)
363 (liece-register-200-handler 216)
364 (liece-register-200-handler 217)
365 (liece-register-200-handler 218)
366 (liece-register-200-handler 219)
367
368 (liece-register-200-handler 221)
369
370 (liece-register-200-handler 231)
371 (liece-register-200-handler 232)
372 (liece-register-200-handler 233)
373 (liece-register-200-handler 234)
374 (liece-register-200-handler 235)
375
376 (liece-register-200-handler 241)
377 (liece-register-200-handler 242)
378 (liece-register-200-handler 243)
379 (liece-register-200-handler 244)
380 (liece-register-200-handler 245)
381 (liece-register-200-handler 262)
382
383 (provide 'liece-200)
384
385 ;;; liece-200.el ends here