;;; liece-200.el --- Handler routines for 200 numeric reply. ;; Copyright (C) 1998-2000 Daiki Ueno ;; Author: Daiki Ueno ;; Created: 1998-09-28 ;; Revised: 1998-11-25 ;; Keywords: IRC, liece ;; This file is part of Liece. ;; This program is free software; you can redistribute it and/or modify ;; it under the terms of the GNU General Public License as published by ;; the Free Software Foundation; either version 2, or (at your option) ;; any later version. ;; This program is distributed in the hope that it will be useful, ;; but WITHOUT ANY WARRANTY; without even the implied warranty of ;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;; GNU General Public License for more details. ;; You should have received a copy of the GNU General Public License ;; along with GNU Emacs; see the file COPYING. If not, write to the ;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, ;; Boston, MA 02111-1307, USA. ;;; Commentary: ;; ;;; Code: (eval-when-compile (require 'liece-inlines) (require 'liece-intl) (require 'liece-misc) (require 'liece-commands)) (defun* liece-handle-200-messages (number prefix rest) "200 replies" (or (string-match "[^ ]* \\([^ ]*\\) *\\([^ ]*\\) *:\\(.*\\)" rest) (return-from liece-handle-200-messages)) (let ((target1 (match-string 1 rest)) (target2 (match-string 2 rest)) (msg (match-string 3 rest))) (setq target1 (liece-channel-virtual target1) target2 (liece-channel-virtual target2)) (cond ((string-equal target1 "") (liece-insert-info liece-200-buffer (concat msg "\n"))) ((string-equal target2 "") (liece-insert-info liece-200-buffer (concat target1 " " msg "\n"))) (t (liece-insert-info liece-200-buffer (concat target1 " " msg " (" target2 ")\n")))))) (defun* liece-handle-200-message (prefix rest) "RPL_TRACELINK \"Link \"" (or (string-match "Link \\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\([^ ]*\\)[ :]*\\(.*\\)" rest) (return-from liece-handle-200-message)) (let ((version (match-string 1 rest)) (dest (match-string 2 rest)) (next (match-string 3 rest)) (ver (match-string 4 rest)) (sec (match-string 5 rest)) (q1 (match-string 6 rest)) (q2 (match-string 7 rest))) (liece-insert-info liece-200-buffer (concat prefix " (" version (if ver (concat " " ver) "") ") --- " dest "\n")) (liece-insert-info liece-200-buffer (concat "\t[" (liece-convert-seconds sec) "]" (if (not (string= q1 "")) (concat " " q1) "") (if (not (string= q2 "")) (concat "/" q2) "") " (next " next ")\n")))) (defun* liece-handle-201-message (prefix rest) "RPL_TRACECONNECTING \"Try. \"" (or (string-match "[^ ]* [^ ]* \\([0-9]*\\)[ :]*\\(.*\\)" rest) (return-from liece-handle-201-message)) (let ((class (match-string 1 rest)) (server (match-string 2 rest))) (liece-insert-info liece-200-buffer (format (_ "%s Trying to connect to %s (class %s)\n") prefix server class)))) (defun* liece-handle-202-message (prefix rest) "RPL_TRACEHANDSHAKE \"H.S. \"" (or (string-match "[^ ]* [^ ]* \\([0-9]*\\)[ :]*\\(.*\\)" rest) (return-from liece-handle-202-message)) (let ((class (match-string 1 rest)) (server (match-string 2 rest))) (liece-insert-info liece-200-buffer (format (_ "%s Handshaking with %s (class: %s)\n") prefix server class)))) (defun* liece-handle-203-message (prefix rest) "RPL_TRACEUNKNOWN \"???? []\"" (or (string-match "[^ ]* [^ ]* \\([^ ]*\\)[ :]+\\(.*\\)" rest) (return-from liece-handle-203-message)) (let ((class (match-string 1 rest)) (who (match-string 2 rest))) (liece-insert-info liece-200-buffer (concat "Class " class ": unknown " who "\n")))) (defun* liece-handle-204-message (prefix rest) "RPL_TRACEOPERATOR \"Oper \"" (or (string-match "[^ ]* [^ ]* \\([^ ]*\\)[ :]+\\(.*\\)" rest) (return-from liece-handle-204-message)) (let ((class (match-string 1 rest)) (who (match-string 2 rest))) (liece-insert-info liece-200-buffer (concat "Class " class ": operator " who "\n")))) (defun* liece-handle-205-message (prefix rest) "RPL_TRACEUSER \"User \"" (or (string-match "[^ ]* [^ ]* \\([0-9]*\\)[ :]*\\(.*\\)" rest) (return-from liece-handle-205-message)) (let ((hops (match-string 1 rest)) (where (match-string 2 rest))) (liece-insert-info liece-200-buffer (concat "Class " hops ": user " where "\n")))) (defun* liece-handle-206-message (prefix rest) "RPL_TRACESERVER \"Serv S C @\"" (or (string-match "Serv \\([^ ]*\\) \\(.*\\)" rest) (return-from liece-handle-206-message)) (let ((class (match-string 1 rest)) (pars (match-string 2 rest))) (cond ((string-match "\\([0-9]*\\)S *\\([0-9]*\\)C *\\([^ ]*\\) *\\([^ ]*\\)[ :]*\\(.*\\)" pars) (let ((servers (match-string 1 pars)) (clients (match-string 2 pars)) (next (match-string 3 pars)) (by (match-string 4 pars)) (type (match-string 5 pars))) ;; This is automatic connection line (setq by (if (string-match "^AutoConn\\.!" by) "auto connection" (concat "by " by))) (liece-insert-info liece-200-buffer (concat prefix " --- " next "\n")) (liece-insert-info liece-200-buffer (concat "\t[" clients " clients, " servers " servers]" " Class " class ", Type " type " " by "\n")))) (t (liece-insert-info liece-200-buffer (format "Class %s: server %s --- %s\n" class prefix pars)))))) (defun* liece-handle-207-message (prefix rest) "RPL_TRACESERVICE \"Service \"" (or (string-match "[^ ]* Service \\([0-9]*\\) \\(.*\\)" rest) (return-from liece-handle-207-message)) (let ((class (match-string 1 rest)) (service (match-string 2 rest))) (liece-insert-info liece-200-buffer (concat "Class " class ": service " service "\n")))) (defun liece-handle-208-message (prefix rest) "RPL_TRACENEWTYPE \" 0 \"." (liece-insert-info liece-200-buffer (format "%s: RPL_TRACENEWTYPE: Why this?\n" prefix))) (defun* liece-handle-209-message (prefix rest) "RPL_TRACECLASS \"Class \"" (or (string-match "[^ ]* Class \\([0-9]*\\) \\([0-9]*\\)" rest) (return-from liece-handle-209-message)) (let ((class (match-string 1 rest)) (entries (match-string 2 rest))) (liece-insert-info liece-200-buffer (concat "Class " class ": " entries "entries linked\n")))) (defun* liece-handle-211-message (prefix rest) "RPL_STATSLINKINF \"