annotate lightstring.js @ 51:63c1c8bc8c19

Add plugin namespaces to Lightstring.stanzas and Lightstring.Connection methodes.
author Sonny Piers <sonny.piers@gmail.com>
date Wed, 01 Feb 2012 03:16:41 +0100
parents 770bb8460df8
children 0b7dd59e264a
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
1 'use strict';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
2
2
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
3 /**
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
4 Copyright (c) 2011, Sonny Piers <sonny at fastmail dot net>
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
5
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
6 Permission to use, copy, modify, and/or distribute this software for any
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
7 purpose with or without fee is hereby granted, provided that the above
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
8 copyright notice and this permission notice appear in all copies.
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
9
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
10 THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
11 WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
12 MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
13 ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
14 WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
15 ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
16 OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
17 */
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
18
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
19
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
20 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
21 * @namespace No code from lightstring should be callable outside this namespace/scope.
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
22 */
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
23 var Lightstring = {
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
24 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
25 * @namespace Holds XMPP namespaces.
50
770bb8460df8 Some improvements on namespaces.
Sonny Piers <sonny.piers@gmail.com>
parents: 44
diff changeset
26 * @description http://xmpp.org/xmpp-protocols/protocol-namespaces
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
27 */
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
28 ns: {
50
770bb8460df8 Some improvements on namespaces.
Sonny Piers <sonny.piers@gmail.com>
parents: 44
diff changeset
29 streams: 'http://etherx.jabber.org/streams',
770bb8460df8 Some improvements on namespaces.
Sonny Piers <sonny.piers@gmail.com>
parents: 44
diff changeset
30 jabber_client: 'jabber:client'
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
31 },
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
32 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
33 * @namespace Holds XMPP stanza builders.
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
34 */
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
35 stanzas: {
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
36 stream: {
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
37 open: function(aService) {
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
38 //FIXME no ending "/" - node-xmpp-bosh bug
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
39 return "<stream:stream to='" + aService + "'" +
50
770bb8460df8 Some improvements on namespaces.
Sonny Piers <sonny.piers@gmail.com>
parents: 44
diff changeset
40 " xmlns='" + Lightstring.ns['jabber_client'] + "'" +
770bb8460df8 Some improvements on namespaces.
Sonny Piers <sonny.piers@gmail.com>
parents: 44
diff changeset
41 " xmlns:stream='" + Lightstring.ns.['streams'] + "'" +
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
42 " version='1.0'/>";
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
43 },
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
44 close: function() {
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
45 return "</stream:stream>";
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
46 }
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
47 }
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
48 },
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
49 plugins: {},
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
50 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
51 * @private
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
52 */
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
53 parser: new DOMParser(),
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
54 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
55 * @private
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
56 */
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
57 serializer: new XMLSerializer(),
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
58 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
59 * @function Transforms a XML string to a DOM object.
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
60 * @param {String} aString XML string.
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
61 * @return {Object} Domified XML.
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
62 */
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
63 XML2DOM: function(aString) {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
64 var DOM = null;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
65 try {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
66 DOM = this.parser.parseFromString(aString, 'text/xml').documentElement;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
67 }
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
68 catch (e) {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
69 alert(e);
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
70 }
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
71 finally {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
72 return DOM;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
73 };
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
74 },
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
75 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
76 * @function Transforms a DOM object to a XML string.
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
77 * @param {Object} aString DOM object.
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
78 * @return {String} Stringified DOM.
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
79 */
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
80 DOM2XML: function(aElement) {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
81 var XML = null;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
82 try {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
83 XML = this.serializer.serializeToString(aElement);
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
84 }
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
85 catch (e) {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
86 alert(e);
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
87 }
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
88 finally {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
89 return XML;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
90 };
33
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
91 },
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
92 /**
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
93 * @function Get an unique identifier.
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
94 * @param {String} [aString] Prefix to put before the identifier.
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
95 * @return {String} Identifier.
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
96 */
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
97 newId: (function() {
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
98 var id = 1024;
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
99 return function(prefix) {
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
100 if (typeof prefix === 'string')
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
101 return prefix + id++;
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
102 return '' + id++;
88d24231bf24 Better newId function.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 28
diff changeset
103 };
34
6ce66fba0242 Merging.
Sonny Piers <sonny.piers@gmail.com>
parents: 29 33
diff changeset
104 })()
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
105 };
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
106
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
107 /**
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
108 * @constructor Creates a new Lightstring connection
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
109 * @param {String} [aService] The Websocket service URL.
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
110 * @memberOf Lightstring
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
111 */
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
112 Lightstring.Connection = function(aService) {
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
113 if (aService)
12
9fbd0e3678b5 add comments, jsdoc syntax + move the parser and the serializer to the Lightstring namespace so they don't get recreated at every new Lightstring.Connection
Sonny Piers <sonny.piers@gmail.com>
parents: 9
diff changeset
114 this.service = aService;
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
115 this.handlers = {};
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
116 this.on('stream:features', function(stanza) {
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
117 var nodes = stanza.DOM.querySelectorAll('mechanism');
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
118 //SASL/Auth features
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
119 if (nodes.length > 0) {
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
120 this.emit('mechanisms', stanza);
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
121 var mechanisms = {};
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
122 for (var i = 0; i < nodes.length; i++)
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
123 mechanisms[nodes[i].textContent] = true;
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
124
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
125
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
126 //FIXME support SCRAM-SHA1 && allow specify method preferences
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
127 if ('DIGEST-MD5' in mechanisms)
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
128 this.send(
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
129 "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'" +
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
130 " mechanism='DIGEST-MD5'/>"
2
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
131 );
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
132 else if ('PLAIN' in mechanisms) {
2
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
133 var token = btoa(
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
134 this.jid +
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
135 '\u0000' +
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
136 this.jid.node +
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
137 '\u0000' +
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
138 this.password
2
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
139 );
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
140 this.send(
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
141 "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'" +
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
142 " mechanism='PLAIN'>" + token + "</auth>"
2
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
143 );
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
144 }
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
145 }
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
146 //XMPP features
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
147 else {
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
148 this.emit('features', stanza);
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
149 //Bind http://xmpp.org/rfcs/rfc3920.html#bind
24
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
150 var bind =
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
151 "<iq type='set' xmlns='jabber:client'>" +
24
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
152 "<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'>" +
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
153 (this.jid.resource? "<resource>" + this.jid.resource + "</resource>": "") +
24
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
154 "</bind>" +
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
155 "</iq>";
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
156
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
157 this.send(
24
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
158 bind,
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
159 function(stanza) {
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
160 //Session http://xmpp.org/rfcs/rfc3921.html#session
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
161 this.jid = new Lightstring.JID(stanza.DOM.textContent);
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
162 this.send(
24
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
163 "<iq type='set' xmlns='jabber:client'>" +
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
164 "<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>" +
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
165 "</iq>",
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
166 function() {
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
167 this.emit('connected');
24
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
168 }
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
169 );
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
170 }
119ceb121908 Bind the correct JID received.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 23
diff changeset
171 );
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
172 }
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
173 });
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
174 this.on('success', function(stanza) {
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
175 this.send(
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
176 "<stream:stream to='" + this.jid.domain + "'" +
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
177 " xmlns='jabber:client'" +
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
178 " xmlns:stream='http://etherx.jabber.org/streams'" +
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
179 " version='1.0'/>"
2
f31a75c3b6c8 code cleaning
Sonny Piers <sonny.piers@gmail.com>
parents: 1
diff changeset
180 );
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
181 });
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
182 this.on('failure', function(stanza) {
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
183 this.emit('conn-error', stanza.DOM.firstChild.tagName);
3
029c12b8f048 various bug fixes and improvements
Sonny Piers <sonny.piers@gmail.com>
parents: 2
diff changeset
184 });
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
185 this.on('challenge', function(stanza) {
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
186 //FIXME this is mostly Strophe code
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
187
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
188 function _quote(str) {
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
189 return '"' + str.replace(/\\/g, '\\\\').replace(/"/g, '\\"') + '"';
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
190 };
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
191
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
192 var challenge = atob(stanza.DOM.textContent);
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
193
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
194 var attribMatch = /([a-z]+)=("[^"]+"|[^,"]+)(?:,|$)/;
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
195
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
196 var cnonce = MD5.hexdigest(Math.random() * 1234567890);
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
197 var realm = '';
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
198 var host = null;
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
199 var nonce = '';
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
200 var qop = '';
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
201 var matches;
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
202
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
203 while (challenge.match(attribMatch)) {
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
204 matches = challenge.match(attribMatch);
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
205 challenge = challenge.replace(matches[0], '');
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
206 matches[2] = matches[2].replace(/^"(.+)"$/, '$1');
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
207 switch (matches[1]) {
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
208 case 'realm':
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
209 realm = matches[2];
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
210 break;
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
211 case 'nonce':
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
212 nonce = matches[2];
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
213 break;
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
214 case 'qop':
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
215 qop = matches[2];
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
216 break;
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
217 case 'host':
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
218 host = matches[2];
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
219 break;
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
220 }
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
221 }
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
222
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
223 var digest_uri = 'xmpp/' + this.jid.domain;
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
224 if (host !== null)
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
225 digest_uri = digest_uri + '/' + host;
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
226 var A1 = MD5.hash(this.jid.node +
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
227 ':' + realm + ':' + this.password) +
22
6a6bb8ded046 Add a JID object, and use it in Lightstring.Connection.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 21
diff changeset
228 ':' + nonce + ':' + cnonce;
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
229 var A2 = 'AUTHENTICATE:' + digest_uri;
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
230
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
231 var responseText = '';
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
232 responseText += 'username=' + _quote(this.jid.node) + ',';
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
233 responseText += 'realm=' + _quote(realm) + ',';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
234 responseText += 'nonce=' + _quote(nonce) + ',';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
235 responseText += 'cnonce=' + _quote(cnonce) + ',';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
236 responseText += 'nc="00000001",';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
237 responseText += 'qop="auth",';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
238 responseText += 'digest-uri=' + _quote(digest_uri) + ',';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
239 responseText += 'response=' + _quote(
13
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
240 MD5.hexdigest(MD5.hexdigest(A1) + ':' +
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
241 nonce + ':00000001:' +
9aeb0750b9d1 fix an error with the stream builder
Sonny Piers <sonny.piers@gmail.com>
parents: 12
diff changeset
242 cnonce + ':auth:' +
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
243 MD5.hexdigest(A2))) + ',';
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
244 responseText += 'charset="utf-8"';
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
245 this.send(
21
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
246 "<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>" +
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
247 btoa(responseText) +
b7d52bf259e0 Coding style: always use "" for XML strings.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 18
diff changeset
248 "</response>");
1
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
249 });
96087680669f Delete base64.js since I don't care about IE support for the moment.
Sonny Piers <sonny.piers@gmail.com>
parents:
diff changeset
250 };
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
251 Lightstring.Connection.prototype = {
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
252 /**
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
253 * @function Create and open a websocket then go though the XMPP authentification process.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
254 * @param {String} [aJid] The JID (Jabber id) to use.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
255 * @param {String} [aPassword] The associated password.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
256 */
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
257 connect: function(aJid, aPassword) {
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
258 this.emit('connecting');
22
6a6bb8ded046 Add a JID object, and use it in Lightstring.Connection.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 21
diff changeset
259 this.jid = new Lightstring.JID(aJid);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
260 if (aPassword)
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
261 this.password = aPassword;
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
262
22
6a6bb8ded046 Add a JID object, and use it in Lightstring.Connection.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 21
diff changeset
263 if (!this.jid.bare)
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
264 throw 'Lightstring: Connection.jid is undefined.';
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
265 if (!this.password)
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
266 throw 'Lightstring: Connection.password is undefined.';
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
267 if (!this.service)
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
268 throw 'Lightstring: Connection.service is undefined.';
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
269
40
e02bfcb78428 priority to WebSocket
Sonny Piers <sonny.piers@gmail.com>
parents: 39
diff changeset
270 if(typeof(WebSocket) === "function") {
e02bfcb78428 priority to WebSocket
Sonny Piers <sonny.piers@gmail.com>
parents: 39
diff changeset
271 this.socket = new WebSocket(this.service, 'xmpp');
e02bfcb78428 priority to WebSocket
Sonny Piers <sonny.piers@gmail.com>
parents: 39
diff changeset
272 }
e02bfcb78428 priority to WebSocket
Sonny Piers <sonny.piers@gmail.com>
parents: 39
diff changeset
273 else if(typeof(MozWebSocket) === "function") {
39
5e32481b8a92 Better WebSocket feature discovering and Opera support
Sonny Piers <sonny.piers@gmail.com>
parents: 37
diff changeset
274 this.socket = new MozWebSocket(this.service, 'xmpp');
5e32481b8a92 Better WebSocket feature discovering and Opera support
Sonny Piers <sonny.piers@gmail.com>
parents: 37
diff changeset
275 }
5e32481b8a92 Better WebSocket feature discovering and Opera support
Sonny Piers <sonny.piers@gmail.com>
parents: 37
diff changeset
276 else {
5e32481b8a92 Better WebSocket feature discovering and Opera support
Sonny Piers <sonny.piers@gmail.com>
parents: 37
diff changeset
277 throw new Error('WebSocket not available.');
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
278 }
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
279
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
280 var that = this;
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
281 this.socket.addEventListener('open', function() {
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
282 //TODO: if (this.protocol !== 'xmpp')
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
283
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
284 var stream = Lightstring.stanzas.stream.open(that.jid.domain);
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
285 //TODO: Use Lightstring.Connection.send (problem with parsing steam);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
286 that.socket.send(stream);
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
287 var stanza = {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
288 XML: stream
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
289 };
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
290 that.emit('output', stanza);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
291 });
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
292 this.socket.addEventListener('error', function(e) {
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
293 that.emit('error', e.data);
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
294 console.log(e.data);
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
295 });
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
296 this.socket.addEventListener('close', function(e) {
18
48bc65a0e0f1 add pubsub config
Sonny Piers <sonny.piers@gmail.com>
parents: 17
diff changeset
297 that.emit('disconnected', e.data);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
298 });
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
299 this.socket.addEventListener('message', function(e) {
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
300 var stanza = new Lightstring.Stanza(e.data);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
301
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
302 //TODO node-xmpp-bosh sends a self-closing stream:stream tag; it is wrong!
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
303 that.emit('input', stanza);
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
304
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
305 if(!stanza.DOM)
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
306 return;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
307
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
308 that.emit(stanza.DOM.tagName, stanza);
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
309
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
310 if (stanza.DOM.tagName === 'iq') {
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
311 var payload = stanza.DOM.firstChild;
23
99bf2bdcfd96 Emit an iq/namespace:tag event for each iq containing a payload.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 22
diff changeset
312 if (payload)
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
313 that.emit('iq/' + payload.namespaceURI + ':' + payload.localName, stanza);
43
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
314
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
315 var id = stanza.DOM.getAttributeNS(null, 'id');
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
316 if (!(id && id in that.callbacks))
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
317 return;
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
318
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
319 var type = stanza.DOM.getAttributeNS(null, 'type');
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
320 if (type !== 'result' || type !== 'error')
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
321 return; //TODO: emit an warning, perhaps.
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
322
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
323 var callback = that.callbacks[id];
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
324 if (type === 'result' && callback.result)
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
325 callback.result(stanza);
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
326 else if (type === 'error' && callback.error)
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
327 callback.error(stanza);
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
328
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
329 delete that.callbacks[id];
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
330
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
331 //TODO: really needed?
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
332 } else if (stanza.DOM.tagName === 'message') {
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
333 var payloads = stanza.DOM.children;
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
334 for (var i = 0; i < payloads.length; i++)
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
335 that.emit('message/' + payloads[i].namespaceURI + ':' + payloads[i].localName, stanza);
23
99bf2bdcfd96 Emit an iq/namespace:tag event for each iq containing a payload.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 22
diff changeset
336 }
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
337 });
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
338 },
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
339 /**
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
340 * @function Send a message.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
341 * @param {String|Object} aStanza The message to send.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
342 * @param {Function} [aCallback] Executed on answer. (stanza must be iq)
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
343 */
43
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
344 send: function(aStanza, aResult, aError) {
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
345 if (!(aStanza instanceof Lightstring.Stanza))
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
346 var stanza = new Lightstring.Stanza(aStanza);
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
347 else
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
348 var stanza = aStanza;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
349
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
350 if(!stanza)
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
351 return;
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
352
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
353 if (stanza.DOM.tagName === 'iq') {
42
ee874d064650 Check iq sending.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 41
diff changeset
354 var type = stanza.DOM.getAttributeNS(null, 'type');
ee874d064650 Check iq sending.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 41
diff changeset
355 if (type !== 'get' || type !== 'set')
ee874d064650 Check iq sending.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 41
diff changeset
356 ; //TODO: emit an error.
ee874d064650 Check iq sending.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 41
diff changeset
357
43
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
358 var callback = {result: aResult, error: aError};
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
359
42
ee874d064650 Check iq sending.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 41
diff changeset
360 var id = stanza.DOM.getAttributeNS(null, 'id');
43
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
361 if (!id)
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
362 ; //TODO: emit an warning.
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
363 else
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
364 this.callback[id] = callback;
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
365
136df1708856 Better iq callbacks. (breaks everything)
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 42
diff changeset
366 } else if (aResult || aError)
42
ee874d064650 Check iq sending.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 41
diff changeset
367 ; //TODO: callback can’t be called with non-iq stanza.
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
368
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
369
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
370 //TODO this.socket.send(stanza.XML); (need some work on Lightstring.Stanza)
37
6773e5bc2ca0 several fixes
Sonny Piers <sonny.piers@gmail.com>
parents: 34
diff changeset
371 var fixme = Lightstring.DOM2XML(stanza.DOM);
6773e5bc2ca0 several fixes
Sonny Piers <sonny.piers@gmail.com>
parents: 34
diff changeset
372 stanza.XML = fixme;
6773e5bc2ca0 several fixes
Sonny Piers <sonny.piers@gmail.com>
parents: 34
diff changeset
373 this.socket.send(fixme);
29
1e6d2ca2daae Adds a Lightstring.Stanza object and use it.
Sonny Piers <sonny.piers@gmail.com>
parents: 28
diff changeset
374 this.emit('output', stanza);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
375 },
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
376 /**
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
377 * @function Closes the XMPP stream and the socket.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
378 */
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
379 disconnect: function() {
18
48bc65a0e0f1 add pubsub config
Sonny Piers <sonny.piers@gmail.com>
parents: 17
diff changeset
380 this.emit('disconnecting');
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
381 var stream = Lightstring.stanzas.stream.close();
18
48bc65a0e0f1 add pubsub config
Sonny Piers <sonny.piers@gmail.com>
parents: 17
diff changeset
382 this.send(stream);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
383 this.emit('XMLOutput', stream);
18
48bc65a0e0f1 add pubsub config
Sonny Piers <sonny.piers@gmail.com>
parents: 17
diff changeset
384 this.socket.close();
48bc65a0e0f1 add pubsub config
Sonny Piers <sonny.piers@gmail.com>
parents: 17
diff changeset
385 },
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
386 load: function() {
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
387 for (var i = 0; i < arguments.length; i++) {
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
388 var name = arguments[i];
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
389 if (!(name in Lightstring.plugins))
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
390 continue; //TODO: throw an error?
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
391
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
392 var plugin = Lightstring.plugins[name];
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
393
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
394 for (var ns in plugin.namespaces)
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
395 Lightstring.ns[ns] = plugin.namespaces[ns];
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
396
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
397 for (var stanza in plugin.stanzas)
51
63c1c8bc8c19 Add plugin namespaces to Lightstring.stanzas and Lightstring.Connection methodes.
Sonny Piers <sonny.piers@gmail.com>
parents: 50
diff changeset
398 Lightstring.stanzas[name][stanza] = plugin.stanzas[stanza];
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
399
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
400 for (var handler in plugin.handlers)
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
401 this.on(handler, plugin.handlers[handler]);
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
402
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
403 for (var method in plugin.methods)
51
63c1c8bc8c19 Add plugin namespaces to Lightstring.stanzas and Lightstring.Connection methodes.
Sonny Piers <sonny.piers@gmail.com>
parents: 50
diff changeset
404 this[name][method] = plugin.methods[method];
44
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
405 }
3dfb596cf669 Add a plugin loader.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 43
diff changeset
406 },
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
407 /**
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
408 * @function Emits an event.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
409 * @param {String} aName The event name.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
410 * @param {Function|Array|Object} [aData] Data about the event.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
411 */
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
412 emit: function(aName, aData) {
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
413 var handlers = this.handlers[aName];
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
414 if (!handlers)
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
415 return;
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
416
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
417 for (var i = 0; i < handlers.length; i++)
41
2895891f19bb s/that/this/ in handlers.
Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
parents: 40
diff changeset
418 handlers[i].call(this, aData);
17
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
419 },
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
420 /**
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
421 * @function Register an event handler.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
422 * @param {String} aName The event name.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
423 * @param {Function} aCallback The callback to call when the event is emitted.
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
424 */
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
425 on: function(aName, callback) {
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
426 if (!this.handlers[aName])
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
427 this.handlers[aName] = [];
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
428 this.handlers[aName].push(callback);
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
429 }
b7bd814333eb Move methods to the prototype.
Sonny Piers <sonny.piers@gmail.com>
parents: 16
diff changeset
430 };