X-Git-Url: http://git.chise.org/gitweb/?a=blobdiff_plain;f=lisp%2Fliece-tcp.el;h=837c903bcea106e9f3b5dea77678a79b81c2d024;hb=abc7ac8a17edfea96946f48fb8f5e89125367855;hp=b264f39b4fb793b9a7d6ffb0fc0ab4b9376b958f;hpb=79bd78bd701bbc2d9b449d40d451c58987e4a607;p=elisp%2Fliece.git diff --git a/lisp/liece-tcp.el b/lisp/liece-tcp.el index b264f39..837c903 100644 --- a/lisp/liece-tcp.el +++ b/lisp/liece-tcp.el @@ -69,8 +69,11 @@ (const :tag "rlogin" rlogin)) :group 'liece-tcp) -(autoload 'open-ssl-stream "ssl") -(defvar ssl-program-arguments) +(defvar liece-tcp-connection-type liece-tcp-default-connection-type) + +(eval-and-compile + (autoload 'open-ssl-stream "ssl") + (defvar ssl-program-arguments)) (defcustom liece-tcp-ssl-protocol-version "3" "SSL protocol version." @@ -93,7 +96,7 @@ The default is \"rsh\", but \"ssh\" is a popular alternative." :type 'file :group 'liece-tcp) -(defcustom liece-tcp-rlogin-parameters '("telnet" "-8") +(defcustom liece-tcp-rlogin-parameters '("socket" "-q") "Parameters to `liece-tcp-open-rlogin'." :type 'list :group 'liece-tcp) @@ -103,42 +106,22 @@ The default is \"rsh\", but \"ssh\" is a popular alternative." :type 'string :group 'liece-tcp) - -;;;###liece-autoload -(defun liece-open-network-stream-as-binary - (name buffer host service &optional type) - (let* ((type (or type liece-tcp-default-connection-type)) - (method - (cond ((eq type 'network) - 'open-network-stream-as-binary) - ((eq type 'program) - 'liece-tcp-open-program-stream-as-binary) - ((eq type 'ssl) - 'liece-tcp-open-ssl-stream-as-binary) - ((eq type 'rlogin) - 'liece-tcp-open-rlogin-stream-as-binary)))) - (funcall method name buffer host service))) +(defvar liece-tcp-stream-alist + '((network open-network-stream) + (program liece-tcp-open-program-stream) + (ssl liece-tcp-open-ssl-stream) + (rlogin liece-tcp-open-rlogin-stream))) + ;;;###liece-autoload -(defun liece-open-network-stream - (name buffer host service &optional type) - (let* ((type (or type liece-tcp-default-connection-type)) - (method - (cond ((eq type 'network) - 'open-network-stream) - ((eq type 'program) - 'liece-tcp-open-program-stream) - ((eq type 'ssl) - 'liece-tcp-open-ssl-stream) - ((eq type 'rlogin) - 'liece-tcp-open-rlogin-stream-as-binary)))) +(defun liece-open-network-stream (name buffer host service) + (let ((method + (nth 1 (assq liece-tcp-connection-type + liece-tcp-stream-alist)))) + (or method + (error "Invalid stream")) (funcall method name buffer host service))) -(defun liece-tcp-open-program-stream-as-binary (name buffer host service) - (as-binary-process - (liece-tcp-open-program-stream - name buffer host service))) - (defun liece-tcp-open-program-stream (name buffer host service) "Open a TCP connection for a service to a host. Returns a subprocess-object to represent the connection. @@ -163,11 +146,6 @@ Fourth arg SERVICE is name of the service desired, or an integer ;; Return process proc)) -(defun liece-tcp-open-ssl-stream-as-binary (name buffer server service) - (as-binary-process - (liece-tcp-open-ssl-stream - name buffer server service))) - (defun liece-tcp-open-ssl-stream-1 (name buffer server service extra-arg) (let* ((service (or service liece-tcp-ssl-default-service)) (ssl-program-arguments (list extra-arg "-connect" @@ -185,54 +163,18 @@ Fourth arg SERVICE is name of the service desired, or an integer (liece-tcp-open-ssl-stream-1 name buffer server service "-ssl2")))) -(defun liece-tcp-wait-for-string (proc regexp) - "Wait until string arrives in the buffer." - (let ((buffer (current-buffer))) - (goto-char (point-min)) - (while (not (re-search-forward regexp nil t)) - (accept-process-output proc) - (set-buffer buffer) - (goto-char (point-min))))) - (defun liece-tcp-open-rlogin-stream (name buffer server service) "Open a connection to SERVER using rsh." (let* ((service (if (stringp service) service - (int-to-string service))) - (args `(,name - ,buffer - ,liece-tcp-rlogin-program - ,@(if liece-tcp-rlogin-user-name - (list "-l" liece-tcp-rlogin-user-name)) - ,liece-tcp-relay-host - ,@liece-tcp-rlogin-parameters ,server ,service)) - (proc (apply #'start-process args))) - (save-excursion - (set-buffer buffer) - (liece-tcp-wait-for-string proc "^Escape") ;; XXX - (beginning-of-line 2) - (delete-region (point-min) (point)) - proc))) - -(defun liece-tcp-open-rlogin-stream-as-binary (name buffer server service) - "Open a connection to SERVER using rsh." - (let* ((service (if (stringp service) - service (int-to-string service))) - (args `(,name - ,buffer - ,liece-tcp-rlogin-program + (args `(,liece-tcp-rlogin-program ,@(if liece-tcp-rlogin-user-name (list "-l" liece-tcp-rlogin-user-name)) ,liece-tcp-relay-host ,@liece-tcp-rlogin-parameters ,server ,service)) - (proc (as-binary-process (apply #'start-process args)))) - (save-excursion - (set-buffer buffer) - (liece-tcp-wait-for-string proc "^Escape") ;; XXX - (beginning-of-line 2) - (delete-region (point-min) (point)) - proc))) + (process-connection-type nil)) + (apply #'start-process-shell-command name buffer args))) (provide 'liece-tcp)