Changeset 143


Ignore:
Timestamp:
02/22/06 18:59:13 (19 years ago)
Author:
Erik Huelsmann
Message:

Prevent ctcp request loops: NOTICE messages are responses. By Andreas Fuchs.

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/event.lisp

    r141 r143  
    290290            (remove-user channel user)))))))
    291291
    292 (defmethod default-hook ((message ctcp-time-message))
    293   (multiple-value-bind
    294       (second minute hour date month year day)
    295       (get-decoded-time)
    296     (send-irc-message
    297      (connection message)
    298      :notice (source message)
    299      (make-ctcp-message
    300       (format nil "TIME ~A"
    301               (make-time-message second minute hour date month year day))))))
    302 
    303 (defmethod default-hook ((message ctcp-source-message))
    304   (send-irc-message
    305    (connection message)
    306    :notice
    307    (source message)
    308    (make-ctcp-message
    309     (format nil "SOURCE ~A:~A:~A"
    310             *download-host*
    311             *download-directory*
    312             *download-file*))))
    313 
    314 (defmethod default-hook ((message ctcp-finger-message))
    315   (let* ((user (user (connection message)))
    316          (finger-info (if (not (zerop (length (realname user))))
    317                           (realname user)
    318                           (nickname user))))
    319     (send-irc-message
    320      (connection message)
    321      :notice (source message)
    322      (make-ctcp-message
    323       (format nil "FINGER ~A" finger-info)))))
    324 
    325 (defmethod default-hook ((message ctcp-version-message))
    326   (send-irc-message
    327    (connection message)
    328    :notice (source message)
    329    (make-ctcp-message
    330     (format nil "VERSION ~A" *ctcp-version*))))
    331 
    332 (defmethod default-hook ((message ctcp-ping-message))
    333   (send-irc-message
    334    (connection message)
    335    :notice (source message)
    336    (make-ctcp-message
    337     (format nil "PING ~A" (car (last (arguments message)))))))
     292(macrolet ((define-ctcp-reply-hook ((message-var message-type) &body body)
     293               `(defmethod default-hook ((,message-var ,message-type))
     294                  (when (ctcp-request-p ,message-var)
     295                    ,@body))))
     296  (define-ctcp-reply-hook (message ctcp-time-message)
     297      (multiple-value-bind
     298          (second minute hour date month year day)
     299          (get-decoded-time)
     300        (send-irc-message
     301         (connection message)
     302         :notice (source message)
     303         (make-ctcp-message
     304          (format nil "TIME ~A"
     305                  (make-time-message second minute hour date month year day))))))
     306  (define-ctcp-reply-hook (message ctcp-source-message)
     307      (send-irc-message
     308       (connection message)
     309       :notice
     310       (source message)
     311       (make-ctcp-message
     312        (format nil "SOURCE ~A:~A:~A"
     313                *download-host*
     314                *download-directory*
     315                *download-file*))))
     316  (define-ctcp-reply-hook (message ctcp-finger-message)
     317      (let* ((user (user (connection message)))
     318             (finger-info (if (not (zerop (length (realname user))))
     319                              (realname user)
     320                              (nickname user))))
     321        (send-irc-message
     322         (connection message)
     323         :notice (source message)
     324         (make-ctcp-message
     325          (format nil "FINGER ~A" finger-info)))))
     326  (define-ctcp-reply-hook (message ctcp-version-message)
     327      (send-irc-message
     328       (connection message)
     329       :notice (source message)
     330       (make-ctcp-message
     331        (format nil "VERSION ~A" *ctcp-version*))))
     332  (define-ctcp-reply-hook (message ctcp-ping-message)
     333      (send-irc-message
     334       (connection message)
     335       :notice (source message)
     336       (make-ctcp-message
     337        (format nil "PING ~A" (car (last (arguments message))))))))
    338338
    339339(defmethod irc-message-event (connection (message ctcp-dcc-chat-request-message))
  • TabularUnified trunk/protocol.lisp

    r142 r143  
    933933  (find-class 'standard-ctcp-message))
    934934
     935(defmethod ctcp-request-p ((message ctcp-mixin))
     936  (string= (command message) :privmsg))
     937
     938(defmethod ctcp-reply-p ((message ctcp-mixin))
     939  (string= (command message) :notice))
     940
    935941(defmethod client-log ((connection connection) (message ctcp-mixin) &optional (prefix ""))
    936942  (let ((stream (client-stream connection)))
Note: See TracChangeset for help on using the changeset viewer.