* riece-display.el (riece-configure-windows): Use window-buffer
authorueno <ueno>
Sun, 1 Jun 2003 20:39:57 +0000 (20:39 +0000)
committerueno <ueno>
Sun, 1 Jun 2003 20:39:57 +0000 (20:39 +0000)
instead of current-buffer.

* riece-rdcc.el (riece-rdcc-server-address): Default to nil.
(riece-rdcc-ruby-command): New user option.
(riece-rdcc-send-program): New user option.
(riece-rdcc-decode-address-program): New user option.
(riece-rdcc-substitute-variables): New function.
(riece-command-dcc-send): Use it.
(riece-rdcc-decode-address): Use it.

lisp/ChangeLog
lisp/riece-display.el
lisp/riece-rdcc.el

index c4c0e68..b1af093 100644 (file)
@@ -1,6 +1,20 @@
 2003-06-01  Daiki Ueno  <ueno@unixuser.org>
 
+       * riece-display.el (riece-configure-windows): Use window-buffer
+       instead of current-buffer.
+
+       * riece-rdcc.el (riece-rdcc-server-address): Default to nil.
+       (riece-rdcc-ruby-command): New user option.
+       (riece-rdcc-send-program): New user option.
+       (riece-rdcc-decode-address-program): New user option.
+       (riece-rdcc-substitute-variables): New function.
+       (riece-command-dcc-send): Use it.
+       (riece-rdcc-decode-address): Use it.
+
+2003-06-01  Daiki Ueno  <ueno@unixuser.org>
+
        * riece-rdcc.el: New add-on.
+
        * Makefile.am (EXTRA_DIST): Add riece-rdcc.el
 
 2003-06-01  Daiki Ueno  <ueno@unixuser.org>
index f497f5b..bd6f0e2 100644 (file)
@@ -46,7 +46,7 @@
   :group 'riece-looks)
 
 (defun riece-configure-windows ()
-  (let ((buffer (current-buffer))
+  (let ((buffer (window-buffer))
        (show-user-list
         (and riece-user-list-buffer-mode
              riece-current-channel
index d5217f0..f1a5f95 100644 (file)
   :prefix "riece-"
   :group 'riece)
 
-(defcustom riece-rdcc-server-address "127.0.0.1"
+(defcustom riece-rdcc-server-address nil
   "Local address of the DCC server.
 Only used for sending files."
-  :type 'vector
+  :type 'string
+  :group 'riece-rdcc)
+
+(defcustom riece-rdcc-ruby-command "ruby"
+  "Command name for Ruby interpreter."
+  :type 'string
+  :group 'riece-rdcc)
+
+(defcustom riece-rdcc-send-program
+  '("\
+unless " address "
+  sock = UDPSocket.new
+  sock.connect('164.46.176.4', 7)              # www.unixuser.org/echo
+  address = sock.getsockname[4 .. 8].unpack('CCCC').join('.')
+end
+server = TCPServer.new(address, 0)
+puts(\"#{server.addr[3].split(/\\./).collect{|c| c.to_i}.pack('CCCC').unpack('N')[0]} #{server.addr[1]}\")
+session = server.accept
+if session
+  total = 0
+  File.open(" file ") {|file|
+    while (bytes = file.read(4096))
+      total += bytes.length
+      puts(\"#{total}\")
+      session.write(bytes)
+    end
+  }
+  session.close
+end
+")
+  "Ruby program to send file with DCC."
+  :type 'list
+  :group 'riece-rdcc)
+
+(defcustom riece-rdcc-decode-address-program
+  '("\
+puts(\"#{" address " >> 24 & 0xFF}.#{" address " >> 16 & 0xFF}.#{"
+    address " >> 8 & 0xFF}.#{" address " & 0xFF}\")")
+  "Ruby program to numeric IP address."
+  :type 'list
   :group 'riece-rdcc)
 
 (defvar riece-rdcc-requests nil)
@@ -40,6 +79,15 @@ Only used for sending files."
 (defvar riece-rdcc-request-file nil)
 (defvar riece-rdcc-request-size nil)
 
+(defun riece-rdcc-substitute-variables (program variable value)
+  (setq program (copy-sequence program))
+  (let ((pointer program))
+    (while pointer
+      (setq pointer (memq variable program))
+      (if pointer
+         (setcar pointer value)))
+    program))
+
 (defun riece-rdcc-server-filter (process input)
   (save-excursion
     (set-buffer (process-buffer process))
@@ -64,30 +112,24 @@ Only used for sending files."
 (defun riece-command-dcc-send (user file)
   (interactive
    (let ((completion-ignore-case t))
-     (unless riece-rdcc-server-address
-       (error "Set riece-rdcc-server-address to your host"))
      (list (completing-read
            "User: "
            (mapcar #'list (riece-get-users-on-server)))
           (expand-file-name (read-file-name "File: ")))))
   (let ((process
         (start-process "DCC" " *DCC*" "ruby" "-rsocket")))
-    (process-send-string process (concat "\
-server = TCPServer.new('" riece-rdcc-server-address "', 0)
-puts(\"#{server.addr[3].split(/\\./).collect{|c| c.to_i}.pack('cccc').unpack('N')[0]} #{server.addr[1]}\")
-session = server.accept
-if session
-  total = 0
-  File.open('" file "') {|file|
-    while (bytes = file.read(1024))
-      total += bytes.length
-      puts(\"#{total}\")
-      session.write(bytes)
-    end
-  }
-  session.close
-end
-"))
+    (process-send-string process
+                        (apply #'concat
+                               (riece-rdcc-substitute-variables
+                                (riece-rdcc-substitute-variables
+                                 riece-rdcc-send-program
+                                 'address
+                                 (if riece-rdcc-server-address
+                                     (concat "'" riece-rdcc-server-address
+                                             "'")
+                                   "nil"))
+                                'file
+                                (concat "'" file "'"))))
     (process-send-eof process)
     (save-excursion
       (set-buffer (process-buffer process))
@@ -136,8 +178,12 @@ end
 
 (defun riece-rdcc-decode-address (address)
   (with-temp-buffer
-    (call-process "ruby" nil t nil "-e" (concat "\
-puts(\"#{" address " >> 24 & 0xFF}.#{" address " >> 16 & 0xFF}.#{" address " >> 8 & 0xFF}.#{" address " & 0xFF}\")"))
+    (call-process riece-rdcc-ruby-command nil t nil "-e"
+                 (apply #'concat
+                        (riece-rdcc-substitute-variables
+                         riece-rdcc-decode-address-program
+                         'address
+                         address)))
     (buffer-substring (point-min) (1- (point-max)))))
 
 (defun riece-command-dcc-receive (request file)