X-Git-Url: https://cgit.sxemacs.org/?a=blobdiff_plain;f=lisp%2Fspam-report.el;h=efd6778ba6aba0baf4971872c32a07107b055ea4;hb=10edaa5f14988a7802cada508ab0b60aba35faed;hp=0d4c3e28936cd3550abb8ec9abbcc56d8339bebe;hpb=e0e9b84e183810aa9aa263cd70ca99a5e915b991;p=gnus diff --git a/lisp/spam-report.el b/lisp/spam-report.el index 0d4c3e289..efd6778ba 100644 --- a/lisp/spam-report.el +++ b/lisp/spam-report.el @@ -1,5 +1,5 @@ ;;; spam-report.el --- Reporting spam -;; Copyright (C) 2002, 2003 Free Software Foundation, Inc. +;; Copyright (C) 2002, 2003, 2004 Free Software Foundation, Inc. ;; Author: Teodor Zlatanov ;; Keywords: network @@ -31,18 +31,22 @@ (require 'gnus) (require 'gnus-sum) +(eval-and-compile + (autoload 'mm-url-insert "mm-url")) + (defgroup spam-report nil "Spam reporting configuration.") (defcustom spam-report-gmane-regex nil "Regexp matching Gmane newsgroups, e.g. \"^nntp\\+.*:gmane\\.\" -If you are using spam.el, consider setting gnus-spam-process-newsgroups -or the gnus-group-spam-exit-processor-report-gmane group/topic parameter +If you are using spam.el, consider setting gnus-spam-process-newsgroups +or the gnus-group-spam-exit-processor-report-gmane group/topic parameter instead." - :type 'regexp + :type '(radio (const nil) + (regexp :format "%t: %v\n" :size 0 :value "^nntp\+.*:gmane\.")) :group 'spam-report) -(defcustom spam-report-gmane-spam-header +(defcustom spam-report-gmane-spam-header "^X-Report-Spam: http://\\([^/]+\\)\\(.*\\)$" "String matching Gmane spam-reporting header. Two match groups are needed." :type 'regexp @@ -53,18 +57,28 @@ instead." :type 'boolean :group 'spam-report) -(defun spam-report-gmane (article) +(defcustom spam-report-url-ping-function + 'spam-report-url-ping-plain + "Function to use for url ping spam reporting." + :type '(choice + (const :tag "Connect directly" + spam-report-url-ping-plain) + (const :tag "Use the external program specified in `mm-url-program'" + spam-report-url-ping-mm-url)) + :group 'spam-report) + +(defun spam-report-gmane (&rest articles) "Report an article as spam through Gmane" - (interactive "nEnter the article number: ") - (when (and gnus-newsgroup-name - (or (null spam-report-gmane-regex) - (string-match spam-report-gmane-regex gnus-newsgroup-name))) - (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article) + (dolist (article articles) + (when (and gnus-newsgroup-name + (or (null spam-report-gmane-regex) + (string-match spam-report-gmane-regex gnus-newsgroup-name))) + (gnus-message 6 "Reporting spam article %d to spam.gmane.org..." article) (if spam-report-gmane-use-article-number - (spam-report-url-ping "spam.gmane.org" - (format "/%s:%d" - (gnus-group-real-name gnus-newsgroup-name) - article)) + (spam-report-url-ping "spam.gmane.org" + (format "/%s:%d" + (gnus-group-real-name gnus-newsgroup-name) + article)) (with-current-buffer nntp-server-buffer (gnus-request-head article gnus-newsgroup-name) (goto-char (point-min)) @@ -72,27 +86,40 @@ instead." (let* ((host (match-string 1)) (report (match-string 2)) (url (format "http://%s%s" host report))) - (gnus-message 10 "Reporting spam through URL %s..." url) + (gnus-message 7 "Reporting spam through URL %s..." url) (spam-report-url-ping host report)) - (gnus-message 10 "Could not find X-Report-Spam in article %d..." - article)))))) - + (gnus-message 3 "Could not find X-Report-Spam in article %d..." + article))))))) (defun spam-report-url-ping (host report) - "Ping a host through HTTP, addressing a specific GET resource" + "Ping a host through HTTP, addressing a specific GET resource using +the function specified by `spam-report-url-ping-function'." + (funcall spam-report-url-ping-function host report)) + +(defun spam-report-url-ping-plain (host report) + "Ping a host through HTTP, addressing a specific GET resource." (let ((tcp-connection)) (with-temp-buffer (or (setq tcp-connection - (open-network-stream + (open-network-stream "URL ping" (buffer-name) host 80)) (error "Could not open connection to %s" host)) (set-marker (process-mark tcp-connection) (point-min)) - (process-send-string tcp-connection - (format "GET %s HTTP/1.1\nHost: %s\n\n" - report host))))) + (process-send-string + tcp-connection + (format "GET %s HTTP/1.1\nUser-Agent: %s (spam-report.el)\nHost: %s\n\n" + report (gnus-emacs-version) host))))) + +(defun spam-report-url-ping-mm-url (host report) + "Ping a host through HTTP, addressing a specific GET resource. Use +the external program specified in `mm-url-program' to connect to +server." + (with-temp-buffer + (let ((url (concat "http://" host "/" report))) + (mm-url-insert url t)))) (provide 'spam-report)