-"))
- (process-send-eof process)
- (save-excursion
- (set-buffer (process-buffer process))
- (while (and (eq (process-status process) 'run)
- (progn
- (goto-char (point-min))
- (not (looking-at "\\([0-9]+\\) \\([0-9]+\\)"))))
- (accept-process-output))
- (if (eq (process-status process) 'run)
- (let ((address (match-string 1))
- (port (match-string 2)))
- (erase-buffer)
- (make-local-variable 'riece-rdcc-request-size)
- (setq riece-rdcc-request-file file
- riece-rdcc-request-size (nth 7 (file-attributes file)))
- (set-buffer-modified-p nil)
- (set-process-filter process #'riece-rdcc-server-filter)
- (set-process-sentinel process #'riece-rdcc-server-sentinel)
- (riece-send-string
- (format "PRIVMSG %s :\1DCC SEND %s %s %s %d\1\r\n"
- user (file-name-nondirectory file)
- address port
- riece-rdcc-request-size)))))))
+")
+ "Ruby program to send file with DCC."
+ :type 'list
+ :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
+ :group 'riece-rdcc)
+
+(defcustom riece-rdcc-save-directory nil
+ "Default directory where received files are saved in."
+ :type 'directory
+ :group 'riece-rdcc)
+
+(defcustom riece-rdcc-block-size 1024
+ "Number of bytes sent as a block."
+ :type 'integer
+ :group 'riece-rdcc)
+
+(defvar riece-rdcc-requests nil)
+
+(defvar riece-rdcc-request-user nil)
+(defvar riece-rdcc-request-file nil)
+(defvar riece-rdcc-request-size nil)
+
+(defvar riece-rdcc-temp-file nil)
+(defvar riece-rdcc-received-size nil)
+
+(defconst riece-rdcc-description
+ "DCC file sending protocol support (written in Ruby.)")
+
+(defvar temporary-file-directory)
+(defvar jka-compr-compression-info-list)
+(defvar jam-zcat-filename-list)
+
+(defun riece-rdcc-output-handler (name output time)
+ (if (string-match "\\([0-9]+\\) \\([0-9]+\\)" output)
+ (let ((address (match-string 1 output))
+ (port (match-string 2 output)))
+ (riece-send-string
+ (format "PRIVMSG %s :\1DCC SEND %s %s %s %d\1\r\n"
+ (riece-identity-prefix
+ (riece-ruby-property name 'riece-rdcc-request-user))
+ (file-name-nondirectory
+ (riece-ruby-property name 'riece-rdcc-request-file))
+ address port
+ (riece-ruby-property name 'riece-rdcc-request-size)))))
+ (riece-ruby-set-output-handler name #'riece-rdcc-output-handler-2))
+
+(defun riece-rdcc-output-handler-2 (name output time)
+ (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 (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
+ (riece-mcat "User: ")
+ (riece-get-users-on-server (riece-current-server-name)))
+ (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
+ (number-to-string
+ riece-rdcc-block-size)))))))
+ (riece-ruby-set-property name 'riece-rdcc-request-user user)
+ (riece-ruby-set-property name 'riece-rdcc-request-file file)
+ (riece-ruby-set-property name 'riece-rdcc-request-size
+ (nth 7 (file-attributes file)))
+ (riece-ruby-set-output-handler name #'riece-rdcc-output-handler)
+ (riece-ruby-set-exit-handler name #'riece-rdcc-exit-handler)))