Author: ehuelsmann
Date: Sun Apr 22 04:12:22 2007
New Revision: 189
Modified:
trunk/protocol.lisp
trunk/utility.lisp
Log:
Move 2 utility routines.
Modified: trunk/protocol.lisp
==============================================================================
--- trunk/protocol.lisp (original)
+++ trunk/protocol.lisp Sun Apr 22 04:12:22 2007
@@ -334,46 +334,6 @@
(defun read-message-loop (connection)
(loop while (read-message connection)))
-(defun try-decode-line (line external-formats)
- (loop for external-format in external-formats
- for decoded = nil
- for error = nil
- do (multiple-value-setq (decoded error)
- (handler-case
- (flexi-streams:with-input-from-sequence (in line)
- (let* ((ex-fmt (external-format-fixup external-format))
- (flexi (flexi-streams:make-flexi-stream
- in
- ;; :element-type 'character
- :external-format ex-fmt)))
- (read-line flexi nil nil)))
- (flexi-streams:flexi-stream-encoding-error ()
- nil)))
- if decoded
- do (return decoded)))
-
-(defun read-protocol-line (connection)
- "Reads a line from the input network stream, returning a
-character array with the input read."
- (multiple-value-bind
- (buf buf-len)
- ;; Note: we cannot use read-line here (or any other
- ;; character based functions), since they may cause
- ;; (at this time unwanted) character conversion
- (read-sequence-until (network-stream connection)
- (make-array 1024
- :element-type '(unsigned-byte 8)
- :fill-pointer t)
- '(10))
- (when (< 0 buf-len)
- (setf (fill-pointer buf)
- ;; remove all trailing CR and LF characters
- ;; (This allows non-conforming clients to send CRCRLF
- ;; as a line separator too).
- (or (position-if #'(lambda (x) (member x '(10 13)))
- buf :from-end t :end buf-len)
- buf-len))
- (try-decode-line buf *default-incoming-external-formats*))))
(defmethod read-irc-message ((connection connection))
"Read and parse an IRC-message from the `connection'."
Modified: trunk/utility.lisp
==============================================================================
--- trunk/utility.lisp (original)
+++ trunk/utility.lisp Sun Apr 22 04:12:22 2007
@@ -106,6 +106,24 @@
(setf (getf (cdr new-format) :eol-style) :crlf)
new-format))
+(defun try-decode-line (line external-formats)
+ (loop for external-format in external-formats
+ for decoded = nil
+ for error = nil
+ do (multiple-value-setq (decoded error)
+ (handler-case
+ (flexi-streams:with-input-from-sequence (in line)
+ (let* ((ex-fmt (external-format-fixup external-format))
+ (flexi (flexi-streams:make-flexi-stream
+ in
+ ;; :element-type 'character
+ :external-format ex-fmt)))
+ (read-line flexi nil nil)))
+ (flexi-streams:flexi-stream-encoding-error ()
+ nil)))
+ if decoded
+ do (return decoded)))
+
(defun read-byte-no-hang (stream &optional eof-error-p eof-value)
(declare (optimize (speed 3) (debug 0) (safety 0)))
(when (listen stream)
@@ -140,6 +158,30 @@
(= limit-cur limit-max))
do (return (values target (1+ targ-cur) nil)))))
+(defun read-protocol-line (connection)
+ "Reads a line from the input network stream, returning a
+character array with the input read."
+ (multiple-value-bind
+ (buf buf-len)
+ ;; Note: we cannot use read-line here (or any other
+ ;; character based functions), since they may cause
+ ;; (at this time unwanted) character conversion
+ (read-sequence-until (network-stream connection)
+ (make-array 1024
+ :element-type '(unsigned-byte 8)
+ :fill-pointer t)
+ '(10))
+ (when (< 0 buf-len)
+ (setf (fill-pointer buf)
+ ;; remove all trailing CR and LF characters
+ ;; (This allows non-conforming clients to send CRCRLF
+ ;; as a line separator too).
+ (or (position-if #'(lambda (x) (member x '(10 13)))
+ buf :from-end t :end buf-len)
+ buf-len))
+ (try-decode-line buf *default-incoming-external-formats*))))
+
+
(defun substring (string start &optional end)
(let* ((end-index (if end end (length string)))
(seq-len (- end-index start)))