- (if (elmo-nntp-read-response buffer process)
- (elmo-nntp-read-contents buffer process))
- (set-buffer buffer)
- (std11-field-body "Newsgroups"))))
-
-(defun elmo-nntp-open-connection (server user portnum ssl)
- "Open NNTP connection and returns
-the list of (process session-buffer current-working-folder).
-Return nil if connection failed."
- (let ((process nil)
- (host server)
- (port (or portnum
- elmo-default-nntp-port))
- (user-at-host (format "%s@%s" user server))
- process-buffer)
- (as-binary-process
- (catch 'done
- (setq process-buffer
- (get-buffer-create (format " *NNTP session to %s:%d" host port)))
- (save-excursion
- (set-buffer process-buffer)
- (elmo-set-buffer-multibyte nil)
- (erase-buffer))
- (setq process
- (elmo-open-network-stream "NNTP" process-buffer host port ssl))
- (and (null process) (throw 'done nil))
- (set-process-filter process 'elmo-nntp-process-filter)
- ;; flush connections when exiting...?
- ;; (add-hook 'kill-emacs-hook 'elmo-nntp-flush-connection)
- (save-excursion
- (set-buffer process-buffer)
- (elmo-set-buffer-multibyte nil)
- (make-local-variable 'elmo-nntp-read-point)
- (setq elmo-nntp-read-point (point-min))
- (if (null (elmo-nntp-read-response process-buffer process t))
- (throw 'done nil))
- (if elmo-nntp-send-mode-reader
- (elmo-nntp-send-mode-reader process-buffer process))
- ;; starttls
- (if (eq ssl 'starttls)
- (if (progn
- (elmo-nntp-send-command process-buffer process "starttls")
- (elmo-nntp-read-response process-buffer process))
- (starttls-negotiate process)
- (error "STARTTLS aborted")))
- (if user
- (progn
- (elmo-nntp-send-command process-buffer process
- (format "authinfo user %s" user))
- (if (null (elmo-nntp-read-response process-buffer process))
- (error "Authinfo failed"))
- (elmo-nntp-send-command process-buffer process
- (format "authinfo pass %s"
- (elmo-get-passwd user-at-host)))
- (if (null (elmo-nntp-read-response process-buffer process))
- (progn
- (elmo-remove-passwd user-at-host)
- (error "Authinfo failed")))))
- (run-hooks 'elmo-nntp-opened-hook)) ; XXX
- (cons process-buffer process)))))
-
-(defun elmo-nntp-send-mode-reader (buffer process)
- (elmo-nntp-send-command buffer
- process
- "mode reader")
- (if (null (elmo-nntp-read-response buffer process t))
- (error "mode reader failed")))
-
-(defun elmo-nntp-send-command (buffer process command &optional noerase)
- "Send COMMAND string to server with sequence number."
- (save-excursion
- (set-buffer buffer)
- (when (not noerase)
- (erase-buffer)
- (goto-char (point-min)))
- (setq elmo-nntp-read-point (point))
- (process-send-string process command)
- (process-send-string process "\r\n")))
-
-(defun elmo-nntp-read-msg (spec msg outbuf)
- (elmo-nntp-get-message (elmo-nntp-spec-hostname spec)
- (elmo-nntp-spec-username spec)
- msg
- (elmo-nntp-spec-group spec)
- outbuf
- (elmo-nntp-spec-port spec)
- (elmo-nntp-spec-ssl spec)))
+ (if (elmo-nntp-read-response session)
+ (elmo-nntp-read-contents session))
+ (with-current-buffer (elmo-network-session-buffer session)
+ (std11-field-body "Newsgroups")))))
+
+(defun elmo-nntp-read-msg (spec number outbuf &optional msgdb unread)
+ (let ((session (elmo-nntp-get-session spec)))
+ (with-current-buffer (elmo-network-session-buffer session)
+ (elmo-nntp-select-group session (elmo-nntp-spec-group spec))
+ (elmo-nntp-send-command session (format "article %s" number))
+ (if (null (elmo-nntp-read-response session t))
+ (progn
+ (with-current-buffer outbuf (erase-buffer))
+ (message "Fetching message failed")
+ nil)
+ (prog1 (elmo-nntp-read-body session outbuf)
+ (with-current-buffer outbuf
+ (goto-char (point-min))
+ (while (re-search-forward "^\\." nil t)
+ (replace-match "")
+ (forward-line))))))))