Support non-standard IRC port numbers
[irc-logger.git] / logger.lisp
index 72ad502823d87590cb292d4e48435d26d1e23644..8910479a4d0f374a82a2cebabfb82ee0554ac09e 100644 (file)
@@ -29,6 +29,8 @@
              :documentation "Nickname's nickserver password.")
    (server :initarg :server :reader server
            :documentation "Connected IRC server.")
+   (port :initarg :port :reader port
+        :documentation "Connected IRC server's port.")
    (channel-names :initarg :channel-names :accessor channel-names
                   :documentation "List of channel names.")
    (realname :initarg :realname :reader l-realname
   "Returns T if output is setup for a single channel directory structure."
   (and (pathnamep user-output) (null (pathname-name user-output))))
 
-(defun do-connect-and-join (nick server username realname logging-stream channels)
-  (let ((conn (connect :nickname nick :server server
+(defun do-connect-and-join (nick server port username realname logging-stream channels)
+  (let ((conn (connect :nickname nick :server server :port port
                        :username username :realname realname
                        :logging-stream logging-stream)))
     (mapc #'(lambda (channel) (join conn channel)) channels)
         (raw-message-string msg))))
     result))
 
-(defun create-logger (nick server &key channels output password
+(defun create-logger (nick server &key port channels output password
                       realname username async
                       private-log unknown-log
                       (logging-stream t) (formats '(:text)))
       (setq formats (list formats)))
   (if (stringp output)
       (setq output (parse-namestring output)))
-  (let* ((conn (do-connect-and-join nick server username realname logging-stream channels))
+  (let* ((conn (do-connect-and-join nick server port username realname logging-stream channels))
          (logger (make-instance
                   'logger
                   :connection conn
                   :nick nick
                   :password password
                   :server server
+                 :port port
                   :channels (make-channels channels formats output)
                   :channel-names channels
                   :username username
              (delete nick *loggers*  :test #'string-equal :key #'l-nickname))
        t))))
 
-(defun add-logger (nick server &key channels output (password "")
+(defun add-logger (nick server &key port channels output (password "")
                                     realname username private-log unknown-log
                                     (logging-stream t) (async t)
                                     (formats '(:sexp)))
          (do ((new-logger
                (#-sbcl mp:with-timeout #-sbcl (*timeout* nil)
                 #+sbcl sb-ext:with-timeout #+sbcl *timeout*
-                 (create-logger nick server :channels channels :output output
+                 (create-logger nick server :port port :channels channels :output output
                                 :logging-stream logging-stream :password password
                                 :realname realname :username username
                                 :private-log private-log
                                 :async async))
                (#-sbcl mp:with-timeout #-sbcl (*timeout* nil)
                 #+sbcl sb-ext:with-timeout #+sbcl *timeout*
-                 (create-logger nick server :channels channels :output output
+                 (create-logger nick server :port port :channels channels :output output
                                 :logging-stream logging-stream :password password
                                 :realname realname :username username
                                 :private-log private-log
       (daemon-sleep 1))))
 
 
-(let (*recon-nick* *recon-server* *recon-username* *recon-realname*
+(let (*recon-nick* *recon-server* *recon-port* *recon-username* *recon-realname*
       *recon-user-output* *recon-private-log* *recon-unknown-log*
       *recon-formats* *recon-async* *recon-logging-stream* *recon-channel-names*)
-  (declare (special *recon-nick* *recon-server* *recon-username* *recon-realname*
+  (declare (special *recon-nick* *recon-server* *recon-port* *recon-username* *recon-realname*
                     *recon-formats* *recon-password* *recon-async*
                     *recon-user-output* *recon-private-log* *recon-unknown-log*
                     *recon-logging-stream* *recon-channel-names*))
       (ignore-errors (quit-with-timeout (connection logger) "Client terminated by server"))
       (setf *recon-nick* (l-nickname logger)
             *recon-server* (server logger)
+           *recon-port* (port logger)
             *recon-username* (l-username logger)
             *recon-realname* (l-realname logger)
             *recon-password* (password logger)
       (setq new-logger
             (ignore-errors
               (add-logger *recon-nick* *recon-server*
+                          :port *recon-port*
                           :channels *recon-channel-names*
                           :output *recon-user-output*
                           :password *recon-password*