X-Git-Url: http://cgit.sxemacs.org/?p=riece;a=blobdiff_plain;f=lisp%2Friece-rdcc.el;h=977e3b3ac1ae8b55ed1a7cb1e4095c7086ce4a59;hp=cd51ab0608e1711e94dc14f0b869c91f36014bc3;hb=01406a40be08016de1ee09f6618f06a78dcacaed;hpb=5e2fdd0f7a3c4bf800559eed84b2428bc580851a diff --git a/lisp/riece-rdcc.el b/lisp/riece-rdcc.el index cd51ab0..977e3b3 100644 --- a/lisp/riece-rdcc.el +++ b/lisp/riece-rdcc.el @@ -1,4 +1,4 @@ -;;; riece-rdcc.el --- ruby implementation of DCC add-on +;;; riece-rdcc.el --- DCC file sending protocol support (written in Ruby) ;; Copyright (C) 1998-2003 Daiki Ueno ;; Author: Daiki Ueno @@ -18,8 +18,12 @@ ;; 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. +;; Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, +;; Boston, MA 02110-1301, USA. + +;;; Commentary: + +;; NOTE: This is an add-on module for Riece. ;;; Code: @@ -29,9 +33,10 @@ (require 'riece-identity) (require 'riece-ctcp) ;for riece-ctcp-additional-clientinfo (require 'riece-ruby) +(require 'riece-mcat) (defgroup riece-rdcc nil - "DCC implementation using ruby" + "DCC written in Ruby." :prefix "riece-" :group 'riece) @@ -41,16 +46,23 @@ Only used for sending files." :type 'string :group 'riece-rdcc) +(defcustom riece-rdcc-server-port nil + "Local port of the DCC server. +Only used for sending files." + :type 'integer + :group 'riece-rdcc) + (defcustom riece-rdcc-send-program '("\ require 'socket' address = " address " +port = " port " unless address sock = UDPSocket.new sock.connect('164.46.176.4', 7) # www.unixuser.org/echo address = sock.getsockname[4 .. 7].unpack('CCCC').join('.') end -server = TCPServer.new(address, 0) +server = TCPServer.new(address, port) output(\"#{server.addr[3].split(/\\./).collect{|c| c.to_i}.pack('CCCC').unpack('N')[0]} #{server.addr[1]}\") session = server.accept if session @@ -69,14 +81,14 @@ if session end ") "Ruby program to send file with DCC." - :type 'list + :type 'sexp :group 'riece-rdcc) (defcustom riece-rdcc-decode-address-program '("\"#{" address " >> 24 & 0xFF}.#{" address " >> 16 & 0xFF}.#{" address " >> 8 & 0xFF}.#{" address " & 0xFF}\"") "Ruby program to numeric IP address." - :type 'list + :type 'sexp :group 'riece-rdcc) (defcustom riece-rdcc-save-directory nil @@ -98,10 +110,8 @@ end (defvar riece-rdcc-temp-file nil) (defvar riece-rdcc-received-size nil) -(defvar riece-rdcc-enabled nil) - (defconst riece-rdcc-description - "DCC file sending extension implemented in Ruby") + "DCC file sending protocol support (written in Ruby.)") (defvar temporary-file-directory) (defvar jka-compr-compression-info-list) @@ -122,30 +132,34 @@ end (riece-ruby-set-output-handler name #'riece-rdcc-output-handler-2)) (defun riece-rdcc-output-handler-2 (name output time) - (message "Sending %s...(%s/%d)" + (message (riece-mcat "Sending %s...(%s/%d)") (riece-ruby-property name 'riece-rdcc-request-file) (string-to-number output) (riece-ruby-property name 'riece-rdcc-request-size))) (defun riece-rdcc-exit-handler (name) - (message "Sending %s...done" + (message (riece-mcat "Sending %s...done") (riece-ruby-property name 'riece-rdcc-request-file))) (defun riece-command-dcc-send (user file) (interactive (let ((completion-ignore-case t)) (list (riece-completing-read-identity - "User: " + (riece-mcat "User: ") (riece-get-users-on-server (riece-current-server-name))) - (expand-file-name (read-file-name "File: "))))) + (expand-file-name (read-file-name (riece-mcat "File: ")))))) (let ((name (riece-ruby-execute (riece-ruby-substitute-variables riece-rdcc-send-program (list (cons 'address (if riece-rdcc-server-address (concat "'" riece-rdcc-server-address - "'") + "'") "nil")) + (cons 'port + (if riece-rdcc-server-port + (number-to-string riece-rdcc-server-port) + "0")) (cons 'file (concat "'" file "'")) (cons 'block-size @@ -174,7 +188,7 @@ end (logand (lsh riece-rdcc-received-size -16) 255) (logand (lsh riece-rdcc-received-size -8) 255) (logand riece-rdcc-received-size 255))) - (message "Receiving %s from %s...(%s/%s)" + (message (riece-mcat "Receiving %s from %s...(%s/%s)") (file-name-nondirectory riece-rdcc-request-file) riece-rdcc-request-user (riece-rdcc-format-size riece-rdcc-received-size) @@ -187,7 +201,7 @@ end (set-buffer (process-buffer process)) (unless (= riece-rdcc-received-size riece-rdcc-request-size) (error "Premature end of file")) - (message "Receiving %s from %s...done" + (message (riece-mcat "Receiving %s from %s...done") (file-name-nondirectory riece-rdcc-request-file) riece-rdcc-request-user) (condition-case nil @@ -222,7 +236,7 @@ end (let ((requests riece-rdcc-requests) (index 1)) (while requests - (princ (format "%2d: %s %s (%d bytes)\n" + (princ (format (riece-mcat "%2d: %s %s (%d bytes)\n") index (car (car requests)) (nth 1 (car requests)) @@ -244,8 +258,8 @@ end (list request (expand-file-name (read-file-name - (concat "Save as (default " - (file-name-nondirectory default-name) ") ") + (format (riece-mcat "Save as (default %s) ") + (file-name-nondirectory default-name)) (file-name-directory default-name) default-name)))))) (let* ((temp-file (expand-file-name @@ -301,7 +315,7 @@ end (defun riece-handle-dcc-request (prefix target message) (let ((case-fold-search t)) - (when (and riece-rdcc-enabled + (when (and (get 'riece-rdcc 'riece-addon-enabled) (string-match "SEND \\(\\([^ ]+\\)\\|\"\\(.+\\)\"\\) \\([^ ]+\\) \\([^ ]+\\) \\([^ ]+\\)" message)) @@ -321,7 +335,8 @@ end (with-current-buffer (window-buffer (selected-window)) (substitute-command-keys (format - "Type \\[riece-command-dcc-receive] to receive" + (riece-mcat + "Type \\[riece-command-dcc-receive] to receive") user)))) (riece-insert-change buffer (format "DCC SEND from %s: %s (%s)\n" user file @@ -351,15 +366,18 @@ end (add-to-list 'riece-ctcp-additional-clientinfo "DCC") (add-hook 'riece-ctcp-dcc-request-hook 'riece-handle-dcc-request)) +(defun riece-rdcc-uninstall () + (setq riece-ctcp-additional-clientinfo + (delete "DCC" riece-ctcp-additional-clientinfo)) + (remove-hook 'riece-ctcp-dcc-request-hook 'riece-handle-dcc-request)) + (defun riece-rdcc-enable () (define-key riece-dialogue-mode-map "\C-ds" 'riece-command-dcc-send) - (define-key riece-dialogue-mode-map "\C-dr" 'riece-command-dcc-receive) - (setq riece-rdcc-enabled t)) + (define-key riece-dialogue-mode-map "\C-dr" 'riece-command-dcc-receive)) (defun riece-rdcc-disable () (define-key riece-dialogue-mode-map "\C-ds" nil) - (define-key riece-dialogue-mode-map "\C-dr" nil) - (setq riece-rdcc-enabled nil)) + (define-key riece-dialogue-mode-map "\C-dr" nil)) (provide 'riece-rdcc)