- (make-network-process
- :name "elpher-process"
- :host (elpher-address-host address)
- :service (elpher-address-port address)
- :filter (lambda (proc string)
- (setq elpher-selector-string (concat elpher-selector-string string)))
- :sentinel after)
- (process-send-string "elpher-process"
- (concat (elpher-address-selector address) "\n")))
+ (when (elpher-address-use-tls-p address)
+ (if (gnutls-available-p)
+ (when (not elpher-use-tls)
+ (setq elpher-use-tls t)
+ (message "Engaging TLS mode."))
+ (error "Cannot retrieve TLS selector: GnuTLS not available")))
+ (condition-case the-error
+ (let* ((kill-buffer-query-functions nil)
+ (proc (open-network-stream "elpher-process"
+ nil
+ (elpher-address-host address)
+ (elpher-address-port address)
+ :type (if elpher-use-tls 'tls 'plain))))
+ (set-process-coding-system proc 'binary)
+ (set-process-filter proc
+ (lambda (proc string)
+ (setq elpher-selector-string
+ (concat elpher-selector-string string))))
+ (set-process-sentinel proc after)
+ (process-send-string proc
+ (concat (elpher-address-selector address) "\n")))
+ (error
+ (if (and (consp the-error)
+ (eq (car the-error) 'gnutls-error)
+ (not (elpher-address-use-tls-p address))
+ (or elpher-auto-disengage-TLS
+ (yes-or-no-p "Could not establish encrypted connection. Disable TLS mode? ")))
+ (progn
+ (message "Disengaging TLS mode.")
+ (setq elpher-use-tls nil)
+ (elpher-get-selector address after))
+ (elpher-process-cleanup)
+ (if propagate-error
+ (error the-error)
+ (elpher-with-clean-buffer
+ (insert (propertize "\n---- ERROR -----\n\n" 'face 'error)
+ "Failed to connect to " (elpher-get-address-url address) ".\n"
+ (propertize "\n----------------\n\n" 'face 'error)
+ "Press 'u' to return to the previous page.")))))))