Update of /project/cl-xmpp/cvsroot/cl-xmpp In directory common-lisp.net:/tmp/cvs-serv27903
Modified Files: LICENSE TODO cl-xmpp.lisp cxml.lisp package.lisp variable.lisp Log Message:
Date: Fri Nov 18 22:43:52 2005 Author: eenge
Index: cl-xmpp/LICENSE diff -u cl-xmpp/LICENSE:1.1.1.1 cl-xmpp/LICENSE:1.2 --- cl-xmpp/LICENSE:1.1.1.1 Fri Oct 28 15:16:02 2005 +++ cl-xmpp/LICENSE Fri Nov 18 22:43:51 2005 @@ -1,23 +1,23 @@ Copyright (c) 2005 Erik Enge
-Redistribution and use in source and binary forms, with or without -modification, are permitted provided that the following conditions -are met: +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions:
-1. Redistributions of source code must retain the above copyright - notice, this list of conditions and the following disclaimer. +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software.
-2. Redistributions in binary form must reproduce the above copyright - notice, this list of conditions and the following disclaimer in the - documentation and/or other materials provided with the distribution. - -THIS SOFTWARE IS PROVIDED "AS IS" AND THERE ARE NEITHER EXPRESSED NOR -IMPLIED WARRANTIES - THIS INCLUDES, BUT IS NOT LIMITED TO, THE IMPLIED -WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.IN -NO WAY ARE THE AUTHORS LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, -SPECIAL, EXEMPLARY OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT -LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES ; LOSS OF USE, -DATA, OR PROFITS ; OR BUSINESS INTERRUPTION) +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
For further details contact the author of this software.
Index: cl-xmpp/TODO diff -u cl-xmpp/TODO:1.10 cl-xmpp/TODO:1.11 --- cl-xmpp/TODO:1.10 Thu Nov 17 20:41:40 2005 +++ cl-xmpp/TODO Fri Nov 18 22:43:52 2005 @@ -7,3 +7,6 @@ - create a connect-test which makes a "fake" connection but still writes into a stream. prerequisite for writing a test suite (which i should do). + +- havent found a good use for IDs yet so right now they are + just what happen to be in the specs \ No newline at end of file
Index: cl-xmpp/cl-xmpp.lisp diff -u cl-xmpp/cl-xmpp.lisp:1.19 cl-xmpp/cl-xmpp.lisp:1.20 --- cl-xmpp/cl-xmpp.lisp:1.19 Thu Nov 17 22:51:15 2005 +++ cl-xmpp/cl-xmpp.lisp Fri Nov 18 22:43:52 2005 @@ -1,4 +1,4 @@ -;;;; $Id: cl-xmpp.lisp,v 1.19 2005/11/17 21:51:15 eenge Exp $ +;;;; $Id: cl-xmpp.lisp,v 1.20 2005/11/18 21:43:52 eenge Exp $ ;;;; $Source: /project/cl-xmpp/cvsroot/cl-xmpp/cl-xmpp.lisp,v $
;;;; See the LICENSE file for licensing information. @@ -202,6 +202,7 @@ (:change1 :password-changed-succesfully) (:auth2 :authentication-successful) (:bind_2 :bind-successful) + (:session_1 :session-initiated) (t (cond ((member id '(info1 info2 info3)) (make-disco-info (get-element object :query))) @@ -328,7 +329,7 @@ "Write string to stream as a sequence of bytes and not characters." (let ((sequence (ironclad:ascii-string-to-byte-array string))) (write-sequence sequence stream) - (finish-output stream) + (force-output stream) (when *debug-stream* (write-string string *debug-stream*) (force-output *debug-stream*)))) @@ -356,26 +357,25 @@ "Macro to make it easier to write IQ stanzas." (let ((stream (gensym))) `(let ((,stream (server-stream ,connection))) - (cxml:with-xml-output (make-octet+character-debug-stream-sink ,stream) - (cxml:with-element "iq" - (cxml:attribute "id" ,id) - (when ,to - (cxml:attribute "to" ,to)) - (cxml:attribute "type" ,type) - ,@body)) - (force-output ,stream) - ,connection))) + (prog1 + (cxml:with-xml-output (make-octet+character-debug-stream-sink ,stream) + (cxml:with-element "iq" + (when ,id + (cxml:attribute "id" ,id)) + (when ,to + (cxml:attribute "to" ,to)) + (cxml:attribute "type" ,type) + ,@body)) + (force-output ,stream)))))
(defmacro with-iq-query ((connection &key xmlns id to node (type "get")) &body body) "Macro to make it easier to write QUERYs." - `(progn - (with-iq (connection :id ,id :type ,type :to ,to) - (cxml:with-element "query" + `(with-iq (connection :id ,id :type ,type :to ,to) + (cxml:with-element "query" (cxml:attribute "xmlns" ,xmlns) - (when ,node - (cxml:attribute "node" ,node)) - ,@body)) - ,connection)) + (when ,node + (cxml:attribute "node" ,node)) + ,@body)))
;; ;; Discovery @@ -418,8 +418,10 @@ (with-iq-query (connection :id "auth1" :xmlns "jabber:iq:auth") (cxml:with-element "username" (cxml:text username))))
-(defmethod auth ((connection connection) username password - resource &optional (mechanism :plain) (bind-et-al t)) +(defmethod auth ((connection connection) username password resource &key + (mechanism :plain) + (bind-et-al t) + (send-presence t)) "If bind-et-al is T this operator will bind, create a session and call presence on your behalf if the authentication was successful." (setf (username connection) username) @@ -427,10 +429,14 @@ (if (and (eq result :authentication-successful) bind-et-al) (progn - (bind connection username resource) - (receive-stanza connection) - (session connection) - (receive-stanza connection)) + (when (feature-p connection :bind) + (bind connection resource) + (receive-stanza connection)) + (when (feature-p connection :session) + (session connection) + (receive-stanza connection)) + (when send-presence + (presence connection))) result)))
(defmethod %plain-auth% ((connection connection) username password resource) @@ -472,7 +478,7 @@ (cxml:with-element "body" (cxml:text body)))) connection)
-(defmethod bind ((connection connection) jid resource) +(defmethod bind ((connection connection) resource) (with-iq (connection :id "bind_2" :type "set") (cxml:with-element "bind" (cxml:attribute "xmlns" "urn:ietf:params:xml:ns:xmpp-bind")
Index: cl-xmpp/cxml.lisp diff -u cl-xmpp/cxml.lisp:1.6 cl-xmpp/cxml.lisp:1.7 --- cl-xmpp/cxml.lisp:1.6 Mon Nov 14 20:42:29 2005 +++ cl-xmpp/cxml.lisp Fri Nov 18 22:43:52 2005 @@ -75,21 +75,21 @@ ;; To facilitate writing to both an octet and a character stream ;; using CXML.
-(defclass octet+character-debug-stream-sink (cxml::octet-stream-sink) - ((target-stream - :accessor target-stream - :initarg :target-stream))) +(defclass octet+character-debug-stream-sink (cxml::octet-stream-sink) ())
(defun make-octet+character-debug-stream-sink (octet-stream &rest initargs) - (apply #'make-instance 'octet+character-debug-stream-sink - :target-stream octet-stream - initargs)) + (apply #'make-instance 'octet+character-debug-stream-sink + :target-stream octet-stream + initargs))
(defmethod cxml::write-octet (octet (sink octet+character-debug-stream-sink)) - (write-byte octet (target-stream sink)) - (when *debug-stream* - (write-char (code-char octet) *debug-stream*) - (force-output *debug-stream*))) + (write-byte octet (slot-value sink 'cxml::target-stream)) + (when *debug-stream* + (write-char (code-char octet) *debug-stream*) + (force-output *debug-stream*))) + +;(defmethod write-octet-sequence (sequence (sink octet+character-debug-stream-sink)) +; (write-sequence sequence (slot-value sink 'cxml::target-stream)))
;; I'd like to see what CXML is reading from the stream ;; and this code helps us in that regard by printing it
Index: cl-xmpp/package.lisp diff -u cl-xmpp/package.lisp:1.11 cl-xmpp/package.lisp:1.12 --- cl-xmpp/package.lisp:1.11 Thu Nov 17 22:51:16 2005 +++ cl-xmpp/package.lisp Fri Nov 18 22:43:52 2005 @@ -1,4 +1,4 @@ -;;;; $Id: package.lisp,v 1.11 2005/11/17 21:51:16 eenge Exp $ +;;;; $Id: package.lisp,v 1.12 2005/11/18 21:43:52 eenge Exp $ ;;;; $Source: /project/cl-xmpp/cvsroot/cl-xmpp/package.lisp,v $
;;;; See the LICENSE file for licensing information. @@ -17,6 +17,7 @@ :receive-stanza-loop :begin-xml-stream :end-xml-stream :with-iq :with-iq-query :connection :username :mechanisms :features :feature-p :feature-required-p :mechanism-p :receive-stanza + :server-stream ;; only available if you've loaded cl-xmpp-tls :connect-tls :connect-tls2 ;; xmpp commands @@ -52,4 +53,4 @@ ;; user-hooks for handling events :handle ;; variables - :*default-port :*default-hostname* :*errors*))) + :*default-port :*default-hostname* :*errors* :*debug-stream*)))
Index: cl-xmpp/variable.lisp diff -u cl-xmpp/variable.lisp:1.4 cl-xmpp/variable.lisp:1.5 --- cl-xmpp/variable.lisp:1.4 Fri Nov 11 22:20:20 2005 +++ cl-xmpp/variable.lisp Fri Nov 18 22:43:52 2005 @@ -1,4 +1,4 @@ -;;;; $Id: variable.lisp,v 1.4 2005/11/11 21:20:20 eenge Exp $ +;;;; $Id: variable.lisp,v 1.5 2005/11/18 21:43:52 eenge Exp $ ;;;; $Source: /project/cl-xmpp/cvsroot/cl-xmpp/variable.lisp,v $
;;;; See the LICENSE file for licensing information. @@ -12,7 +12,7 @@ (defvar *default-hostname* "localhost")
(defvar *errors* - '((:bad-request :modiy 400) + '((:bad-request :modify 400) (:conflict :cancel 409) (:feature-not-implemented :cancel 501) (:forbidden :auth 403)