[Xmpp4js-commit] SF.net SVN: xmpp4js:[755] trunk/src/main/javascript
Status: Beta
Brought to you by:
h-iverson
From: <h-i...@us...> - 2008-07-27 21:43:37
|
Revision: 755 http://xmpp4js.svn.sourceforge.net/xmpp4js/?rev=755&view=rev Author: h-iverson Date: 2008-07-27 21:43:41 +0000 (Sun, 27 Jul 2008) Log Message: ----------- removed unused files Removed Paths: ------------- trunk/src/main/javascript/BayeuxXmppClient.js trunk/src/main/javascript/JabberClient.js Deleted: trunk/src/main/javascript/BayeuxXmppClient.js =================================================================== --- trunk/src/main/javascript/BayeuxXmppClient.js 2008-07-27 20:36:44 UTC (rev 754) +++ trunk/src/main/javascript/BayeuxXmppClient.js 2008-07-27 21:43:41 UTC (rev 755) @@ -1,83 +0,0 @@ -Xmpp4Js.Lang.namespace( "Xmpp4Js" ); - -/** - * This is an experimental Bayeux connection class that is not currently used. - * @constructor - */ -Xmpp4Js.BayeuxXmppClient = function() { - this.addEvents({ - "beforesend" : true, - "recv" : true - }); - this.comet = dojox.cometd; - - this.comet.init( "/CometTest/cometd" ); - this.comet.subscribe( "/service/jabber", this.handlePacket.bind(this) ); -} - -Xmpp4Js.BayeuxXmppClient .prototype = { - connect : function() { - // no need to do anything yet - //this.comet.publish( "/service/jabber", {packet : ""} ); - }, - handlePacket : function(msg) { - var packetXml = msg.data.packet; - - var doc = new DOMParser().parseFromString(packetXml, 'text/xml'); - - var stanza = this.stanzaProvider.fromNode( doc.documentElement ); - this.fireEvent( "recv", stanza ); - }, - send : function(stanza, callback) { - this.fireEvent( "beforesend", stanza ); - var xml = serializeNode( stanza.getNode() ); - - - - // register a temporary listener for the packet ID - if( callback ) { - var id = packet.getId(); - var filter = new Xmpp4Js.PacketFilter.PacketIdFilter( id ); - - var wrappedListener; - var wrappedCallback = function(packet) { - this.removePacketListener( wrappedListener ); - callback(packet); - }.bind(this); - wrappedListener = this.addPacketListener( wrappedCallback, filter ); - } - - this.comet.publish( "/service/jabber", {packet : xml}); - }, - addPacketListener : function(listener, filter) { - var wrappedListener = function(packet) { - if( filter && filter.accept(packet) ) { - listener(packet); - } - }; - this.on( "recv", wrappedListener, this); - - return wrappedListener; - }, - removePacketListener : function( listener ) { - this.un( "recv", listener) - }, - - - - authenticatePlaintext : function( username, password, resource ) { - var iq = this.getPacketHelper().createAuthPlaintext( username, password, resource ); - iq.send( this ); - }, - - getPacketHelper : function() { - if( this.packetHelper == null ) { - this.packetHelper = new Xmpp4Js.Packet.PacketHelper(); - } - - return this.packetHelper; - } - -} - -Xmpp4Js.Lang.extend(Xmpp4Js.BayeuxXmppClient , Xmpp4Js.Event.EventProvider, Xmpp4Js.BayeuxXmppClient .prototype); \ No newline at end of file Deleted: trunk/src/main/javascript/JabberClient.js =================================================================== --- trunk/src/main/javascript/JabberClient.js 2008-07-27 20:36:44 UTC (rev 754) +++ trunk/src/main/javascript/JabberClient.js 2008-07-27 21:43:41 UTC (rev 755) @@ -1,638 +0,0 @@ -// Copyright (C) 2007 Harlan Iverson <h.iverson at gmail.com> -// -// This program is free software; you can redistribute it and/or -// modify it under the terms of the GNU General Public License -// as published by the Free Software Foundation; either version 2 -// of the License, or (at your option) any later version. -// -// This program is distributed in the hope that it will be useful, -// but WITHOUT ANY WARRANTY; without even the implied warranty of -// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -// GNU General Public License for more details. -// -// You should have received a copy of the GNU General Public License -// along with this program; if not, write to the Free Software -// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - - -/** -* @class The main class in establishing a Jabber connection. -* @param {String} server The domain (and hostname) of the Jabber server to connect to. -* @param {String} baseUrl The URL to an XEP-0124 HTTP Binding proxy--bound by same origin policy. -* @constructor -* @deprecated used Xmpp4Js.Connection instead -*/ -Xmpp4Js.JabberConnection = function(server, baseUrl) { - /** @private @type String */ - this.baseUrl = baseUrl; - - /** TODO let domain and server be different, and specify port. @private @type String */ - this.domain = server; - /** @private @type String */ - this.server = server; - /** @private @type int */ - this.port = 5222; - - /** @private @type boolean */ - this.connected = false; - /** @private @type Xmpp4Js.IO.HttpBindingStream */ - this.stream = new Xmpp4Js.IO.HttpBindingStream( baseUrl ); - - /** @private @type Xmpp4Js.Roster.PresenceManager */ - this.presenceManager = new Xmpp4Js.Roster.PresenceManager(); - - this.addPacketListener( this._onTerminalError.bind(this), new Xmpp4Js.PacketFilter.TerminalErrorPacketFilter() ); - this.addPacketListener( this._onRecoverableError.bind(this), new Xmpp4Js.PacketFilter.RecoverableErrorPacketFilter() ); - this.addPacketListener( this.presenceManager.presencePacketListener.bind(this.presenceManager), new Xmpp4Js.PacketFilter.PacketTypeFilter(Xmpp4Js.Packet.Presence) ); - - - this._registerEvents(); -} - -Xmpp4Js.JabberConnection.prototype = { - /** - * @private - */ - _registerEvents : function() { - this.addEvents({ - /** - * @event onconnect - * Fires when connect has completed - */ - "onconnect" : true, - - /** - * @event onauth - * Fires when auth has completed - */ - "onauth" : true, - - /** - * @event beginsession - * Fired when beginsession is finished and authentication / registration - * / normal operation can happen. - */ - "beginsession": true, - - /** - * Fired when a terminal (non-recoverable) error is received from the server. - * - * @event terminate - * @param connection {Xmpp4Js.JabberConnection} - * @param title {String} the reason for termination - * @param message {String} an explanation of the termination - * @param bodyElement {Element} the body element, to access app-specific info. - */ - "terminate" : true, - - /** - * Fired when a recoverable error is received from the server. - * - * @event error - * @param connection {Xmpp4Js.JabberConnection} - * @param bodyElement {Element} the body element, to access app-specific info. - */ - "error" : true, - - /** - * Fired when the connection is closed by the client. - * - * @event error - * @param connection {Xmpp4Js.JabberConnection} - * @todo add unit test - */ - "close" : true, - - "autherror" : true - }); - }, - - /** - * Fire error event. - * @private - */ - _onRecoverableError : function(bodyElement) { - this.fireEvent( "error", this, bodyElement ); - }, - - /** - * Fire terminate event. Automatically invokes endSession. - * @private - */ - _onTerminalError : function(bodyElement) { - var condition = bodyElement.getAttribute( "condition" ); - - var title = Xmpp4Js.PacketFilter.TerminalErrorPacketFilter.conditions[ condition ].title - var message = Xmpp4Js.PacketFilter.TerminalErrorPacketFilter.conditions[ condition ].message; - - this.fireEvent( "terminate", this, title, message, bodyElement ); - this.endSession(); - }, - - /** - * Adds a packet listener and returns its function. See PacketReader. - * @return Function - * @see Xmpp4Js.IO.PacketReader#addPacketListener - */ - addPacketListener : function( listener, filter ) { - return this.stream.getReader().addPacketListener( listener, filter ); - }, - - /** - * Removes a packet listener by function. See PacketReader. - * @param {Function} listener The listener returned by addPacketListener - * @see Xmpp4Js.IO.PacketReader#removePacketListener - */ - removePacketListener : function( listener ) { - return this.stream.getReader().removePacketListener( listener ); - }, - - /** - * Send a packet across the wire, and register a PacketIdListener if a callback - * is supplied - * - * @param {Xmpp4Js.Packet.Base} packet - * @param {function} callback The callback to be invoked when the server sends a response with same ID. - * @see Xmpp4Js.PacketFilter.PacketIdFilter - */ - send : function( packet, callback ) { - - - /* - if( callback ) { - var id = packet.getId(); - - var pf = new Xmpp4Js.PacketFilter.PacketIdFilter(id); - var listener = function(packet) { - callback(packet); - this.removePacketListener( listener ); - }.bind(this); - - this.addPacketListener( listener, pf ); - } - */ - - if( callback ) { - var id = packet.getId(); - - - var pf = new Xmpp4Js.PacketFilter.PacketIdFilter( id ); - var listener = function( stanza ) { - this.removePacketListener( listener ); - - callback( stanza ); - }.bind(this); - - this.addPacketListener( listener, pf ); - } - - - this.stream.pw.write( packet ); - }, - - /** - * The same as send, except it takes an XML string instead of a Packet object. - * - * @param {String} xml - * @param {function} callback The callback to be invoked when the server sends a response with same ID. - * @see #send - */ - sendXml : function( xml, callback ) { - // parse XML string into a packet - var doc = parseXmlToDoc(xml); - - var stanza = this.getStream().getReader().stanzaProvider.fromNode( doc.documentElement ); - - return this.send( stanza, callback ); - }, - - /** - * Sends the initial request to the jabber server. This must be called before any - * other requests can be sent. The 'beginsession' event is fired when packets - * may be sent. - */ - beginSession : function() { - // Only begin a session that is not connected - if (!this.connected) { - var writer = this.stream.getWriter(); - - var packet = this.getPacketHelper().createPacket(); - - packet.setAttribute( "wait", writer.wait ); - packet.setAttribute( "hold", writer.hold ); - packet.setAttribute( "to", this.domain ); - packet.setAttribute( "route", "xmpp:" + this.server + ":" + this.port); - packet.setAttribute( "ver", "1.6"); - packet.setAttribute( "ack", "1"); - packet.setAttribute( "xml:lang", "en"); - packet.setAttribute( "xmlns:xmpp", "urn:xmpp:xbosh"); - packet.setAttribute( "xmpp:version", "1.0" ); - - /* - packet.appendChild( - Builder.node("features", {xmlns:"http://etherx.jabber.org/streams"}, [ - Builder.node("mechanisms", {xmlns: "urn:ietf:params:xml:ns:xmpp-sasl"}, [ - Builder.node( "mechanism", "DIGEST-MD5" ), - Builder.node( "mechanism", "PLAIN" ) - ]) - ] ) - ); - */ - - var listener = function( frame ) { - // ONLY the packets we want contain a sid attribute - if( !frame.hasAttribute( "sid" ) ) { - console.error( "no sid on response" ); - return; - } - - this.removePacketListener( listener ); - - var writer = this.stream.getWriter(); - - // TODO refactor this stuff into HttpBindingStream. - writer.sid = frame.getAttribute( "sid" ); - writer.maxRequests = frame.getAttribute( "requests" ); - writer.hold = writer.maxRequests - 1; - writer.wait = frame.getAttribute("wait"); - - this.connected = true; - - writer.setPolling( true ); - - this.fireEvent( "beginsession", this ); - - //this.stream.setAutoFlush(true); - }.bind(this); - - var pf = new Xmpp4Js.PacketFilter.RawPacketFilter(); - - this.addPacketListener( listener, pf ); - - // write the inital request and stop sending packets until - // we get a response. - //this.stream.setAutoFlush(false); - this.stream.getWriter().writeRaw( packet ); - //this.stream.getWriter().flush(); - - } - }, - - /** - * Sends a request to the server to pause for 120 seconds. I don't believe - * this currently works. - */ - pause : function() { - var packet = this.getPacketHelper().createPacket(); - packet.setAttribute( "pause", 120 ); - this.stream.getWriter().writeRaw( packet ); - - // TODO store stuff in cookie... - // host,port,secure,_rid,_last_rid,_wait,_min_polling,_inactivity,_hold,_last_requests,_pause - - }, - - /** - * Resumes a paused connection. Not currently implemented. - */ - resume : function() { - - }, - - /** - * Send the terminate request to end the session. Fires the "close" event. - */ - endSession : function() { - var writer = this.stream.getWriter(); - - var packet = this.getPacketHelper().createPacket(); - - packet.setAttribute( "type", "terminate" ); - packet.setAttribute( "wait", writer.wait ); - packet.setAttribute( "hold", writer.hold ); - packet.setAttribute( "to", this.domain ); - packet.setAttribute( "route", "xmpp:" + this.domain + ":"+this.port); - packet.setAttribute( "ver", "1.6"); - packet.setAttribute( "ack", "1"); - packet.setAttribute( "xml:lang", "en"); - packet.setAttribute( "xmlns:xmpp", "urn:xmpp:xbosh"); - packet.setAttribute( "xmpp:version", "1.0" ); - - this.stream.getWriter().writeRaw( packet ); - //this.stream.getWriter().flush(); - - // FIXME for some reason terminate isn't sent if this is called... but it stops the flushing. - this.stream.setAutoFlush(false); - - this.connected = false; - - this.fireEvent( "close", this ); - }, - - /** - * Returns the Jid of the currently connected user, if any. - * @type Xmpp4Js.Jid - */ - getJid : function() { - return new Xmpp4Js.Jid(this.jid); - }, - - /** - * Authenticate as anonymous on the jabber server. Currently works by sending - * an empty auth packet which is supported on Openfire, but ideally it would - * use SASL anonymous. - */ - // TODO make this a packet type or something... that means it will need - // a reference to connection in order to register its filter - authenticateAnonymous : function() { - var iq = this.getPacketHelper().createIQ( this.domain, "set", "jabber:iq:auth" ); - iq.setId( "auth1" ); - - this.send( iq, function( responseIq ) { - if( responseIq.getType() == 'error' ) { - console.info( "error doing anonymous auth" ); - } else { - console.info( "anonymous auth success" ); - this.jid = responseIq.getTo(); - - this.fireEvent( "onconnect" ); - this.fireEvent( "onauth" ); - } - }.bind(this) ); - - }, - - /** - * Send a 'plaintext' authentication request. The 'onauth' event is fired upon success. - * Packets not requiring an authenticated session may be exchanged before 'onauth' comes. - * @param {String} username The username, without host part, to authenticate as. - * @param {String} password The plaintext password - * @param {String} resource The resource to use. 'xmpp4js' is the sensible default. - */ - authenticatePlaintext : function( username, password, resource ) { - if( !resource ) { resource = 'xmpp4js'; }; - var iq = this.getPacketHelper().createAuthPlaintext( username, password, resource ); - iq.send( this ); - }, - - /** - * Authenticates using SASL MD5. Currently flawed and hardly works. Fires the 'onauth' event on success. - * - * TODO clean up... messy as crap, but works. - * get rid of sendXml stuff, add comments, etc. tired and its late. - * - * @param {String} username The username, without host part, to authenticate as. - * @param {String} password The plaintext password - * @param {String} resource The resource to use. 'xmpp4js' is the sensible default. - * - * @see #authenticatePlaintext - */ - authenticateMd5 : function( username, password, resource ) { - if( !resource ) { resource = 'xmpp4js'; }; - - var sasl = new Md5Sasl( username, password, this.domain ); - - var saslListener = function(bodyElement) { - var elem = bodyElement.firstChild; - - if( elem.localName == "challenge" ) { - var challenge = elem.textContent; - var fields = sasl.deserializeFields(sasl.decodeChallenge(challenge)); - - - console.dir( fields ); - - var response = ""; - if(fields.qop == "auth") { - response = sasl.computeChallengeResponse( challenge ); - - console.dir( sasl.deserializeFields(sasl.decodeChallenge(response)) ); - } else if( fields.rspauth ) { - if( !sasl.checkResponse( challenge ) ) { - // problem... - throw new Error( "Invalid response from server!" ); - } - } - - - - this.sendXml( '<response xmlns="urn:ietf:params:xml:ns:xmpp-sasl">'+response+'</response>' ); - } else if( elem.localName == "success" ) { - // w00t. - var writer = this.stream.getWriter(); - - var packet = this.getPacketHelper().createPacket(); - packet.setAttribute( "xml:lang", "en"); - packet.setAttribute( "xmlns:xmpp", "urn:xmpp:xbosh"); - packet.setAttribute( "xmpp:restart", "true" ); - - writer.writeRaw( packet ); - - var bindIq = new Xmpp4Js.Packet.IQ( null, "set", "jabber:client" ); - bindIq.setId( "bind_1" ); - - var doc = bindIq.getNode().ownerDocument; - var bindNode = bindIq.getNode().appendChild( createElementNS(doc, "urn:ietf:params:xml:ns:xmpp-bind", "bind" ) ); - var resourceNode = bindNode.appendChild( createElementNS(doc, "urn:ietf:params:xml:ns:xmpp-bind", "resource" ) ); - resourceNode.textContent = resource; - - this.send( bindIq, function(respIq) { - - // FIXME bug that casuses infinite loop right here. For some reason - // this listener is being invoked for sess_1, which means - // that there's a bug in the packet reader stuff somewhere. aside - // from that, sasl auth works. - - - var sessionIq = new Xmpp4Js.Packet.IQ( null, "set", "jabber:client" ); - sessionIq.setId( "sess_1" ); - - var doc = sessionIq.getNode().ownerDocument; - var sessionNode = sessionIq.getNode().appendChild( createElementNS(doc, "urn:ietf:params:xml:ns:xmpp-session", "session" ) ); - - this.send( sessionIq, function(respIq) { - this.jid = respIq.getTo(); - console.info( "authenticated as "+this.jid ); - - this.fireEvent( "onconnect" ); - this.fireEvent( "onauth" ); - }.bind(this)); - - }.bind(this)); - - cleanup(); - } else if( elem.localName == "failure" ) { - cleanup(); - this.close(); - } - }.bind(this); - - var cleanup = function() { - this.removePacketListener(saslListener); - }.bind(this); - - this.addPacketListener( saslListener, new Xmpp4Js.PacketFilter.RawPacketFilter() ); - - this.sendXml( '<auth xmlns="urn:ietf:params:xml:ns:xmpp-sasl" mechanism="DIGEST-MD5"/>' ); - - /* - - var anonAuth = DomHelper.node( - "auth", - { - xmlns: "urn:ietf:params:xml:ns:xmpp-sasl", - mechanism: "ANONYMOUS" - } - ); - - // http://tools.ietf.org/html/draft-saintandre-rfc3920bis-04 - var md5Auth = DomHelper.node( - "auth", - { - xmlns: "urn:ietf:params:xml:ns:xmpp-sasl", - mechanism: "DIGEST-MD5" - } - ); - - var plainAuth = DomHelper.node( - "auth", - { - xmlns: "urn:ietf:params:xml:ns:xmpp-sasl", - mechanism: "PLAIN" - } - , - [ - username+"@"+this.domain+String.fromCharCode(0)+username+String.fromCharCode(0)+password - ] - ); - */ - }, - - /** - * Another implementation of authenticatePlaintext. Dunno. - * @see #authenticatePlaintext - */ - authenticatePlaintext2 : function( username, password, resource ) { - var iq = this.getPacketHelper().createIQ( this.domain, "set", "jabber:iq:auth" ); - iq.setId( "auth1" ); - - var query = iq.getQuery(); - var doc = query.ownerDocument; - - query.appendChild( doc.createElement( "username" ) ).textContent = username; - query.appendChild( doc.createElement( "password" ) ).textContent = password; - query.appendChild( doc.createElement( "resource" ) ).textContent = resource; - query.appendChild( doc.createElement( "plaintext" ) ); - - this.send( iq, function( responseIq ) { - if( responseIq.getType() == 'error' ) { - alert( "error doing plaintext auth" ); - } else { - alert( "plaintext auth success" ); - this.jid = responseIq.getTo(); - } - } ); - }, - - /** - * Register an account on the remote jabber server. This needs to be refactored out of here. - */ - register : function( username, password, callback ) { - var iq = this.getPacketHelper().createIQ( this.domain, "set", "jabber:iq:register" ); - iq.setId( "reg1" ); - - var query = iq.getQuery(); - var doc = query.ownerDocument; - - query.appendChild( doc.createElement( "username" ) ).textContent = username; - query.appendChild( doc.createElement( "password" ) ).textContent = password; - - this.send( iq, function( regIq ) { - if( regIq.getType() == 'error' ) { - alert( "error doing registration" ); - } - if(callback){ callback( regIq ); } - } ); - }, - - /** - * Unregister an account on the remote jabber server. This needs to be refactored out of here. - */ - unregister : function() { - var iq = this.getPacketHelper().createIQ( this.domain, "set", "jabber:iq:register" ); - iq.setId( "unreg1" ); - - var query = iq.getQuery(); - var doc = query.ownerDocument; - - query.appendChild( doc.createElement( "remove" ) ); - - this.send( iq, function( packet ) { - if( iq.getType() == 'error' ) { - alert( "error doing unregistration" ); - } - } ); - }, - - /** - * Gets the presence manager for the current connection. - * - * @return Xmpp4Js.Roster.PresenceManager - */ - getPresenceManager : function() { - return this.presenceManager - }, - - /** - * No idea if this is even used. - * @private - */ - elemToXml : function( elem ) { - var xml = Try.these( - function() { return (new XMLSerializer()).serializeToString(elem); }, - function() { return (new XMLSerializer()).serializeToString(elem.ownerDocument); }, - function() { return elem.xml; } - ); - - return xml; - }, - - - - /** - * @return Xmpp4Js.Packet.PacketHelper - */ - getPacketHelper : function() { - if( this.packetHelper == null ) { - this.packetHelper = new Xmpp4Js.Packet.PacketHelper(); - } - - return this.packetHelper; - }, - - setPacketHelper : function(packetHelper) { - this.packetHelper = packetHelper; - }, - - /** - * @return Xmpp4Js.IO.HttpBindingStream - */ - getStream : function() { - return this.stream; - } -} - -Xmpp4Js.Lang.extend(Xmpp4Js.JabberConnection, Xmpp4Js.Event.EventProvider, Xmpp4Js.JabberConnection.prototype); - -/** - * @constructor - * @extends Xmpp4Js.JabberConnection - * @deprecated Used by tests, but is worthless after refactoring - */ -Xmpp4Js.XmppDummyConnection = function(server, baseUrl) { - Xmpp4Js.XmppDummyConnection.superclass.constructor.call(this, server, baseUrl); -} - -Xmpp4Js.Lang.extend(Xmpp4Js.XmppDummyConnection, Xmpp4Js.JabberConnection, {}); - - This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |