Mercurial > eldonilo > lightstring
comparison lightstring.js @ 21:b7d52bf259e0
Coding style: always use "" for XML strings.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Thu, 26 Jan 2012 16:01:37 +0100 |
parents | 7fcccf59e6ec |
children | 6a6bb8ded046 |
comparison
equal
deleted
inserted
replaced
20:7fcccf59e6ec | 21:b7d52bf259e0 |
---|---|
33 */ | 33 */ |
34 stanza: { | 34 stanza: { |
35 stream: { | 35 stream: { |
36 open: function(aService) { | 36 open: function(aService) { |
37 //FIXME no ending "/" - node-xmpp-bosh bug | 37 //FIXME no ending "/" - node-xmpp-bosh bug |
38 return "<stream:stream to='" + aService + "'\ | 38 return "<stream:stream to='" + aService + "'" + |
39 xmlns='" + Lightstring.NS.jabberClient + "'\ | 39 " xmlns='" + Lightstring.NS.jabberClient + "'" + |
40 xmlns:stream='" + Lightstring.NS.stream + "'\ | 40 " xmlns:stream='" + Lightstring.NS.stream + "'" + |
41 version='1.0'/>"; | 41 " version='1.0'/>"; |
42 }, | 42 }, |
43 close: function() { | 43 close: function() { |
44 return '</stream:stream>'; | 44 return "</stream:stream>"; |
45 } | 45 } |
46 } | 46 } |
47 }, | 47 }, |
48 /** | 48 /** |
49 * @private | 49 * @private |
96 | 96 |
97 | 97 |
98 //FIXME support SCRAM-SHA1 && allow specify method preferences | 98 //FIXME support SCRAM-SHA1 && allow specify method preferences |
99 if ('DIGEST-MD5' in mechanisms) | 99 if ('DIGEST-MD5' in mechanisms) |
100 that.send( | 100 that.send( |
101 "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'\ | 101 "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'" + |
102 mechanism='DIGEST-MD5'/>" | 102 " mechanism='DIGEST-MD5'/>" |
103 ); | 103 ); |
104 else if ('PLAIN' in mechanisms) { | 104 else if ('PLAIN' in mechanisms) { |
105 var token = btoa( | 105 var token = btoa( |
106 that.jid + | 106 that.jid + |
107 '\u0000' + | 107 '\u0000' + |
108 that.jid.node + | 108 that.jid.node + |
109 '\u0000' + | 109 '\u0000' + |
110 that.password | 110 that.password |
111 ); | 111 ); |
112 that.send( | 112 that.send( |
113 "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'\ | 113 "<auth xmlns='urn:ietf:params:xml:ns:xmpp-sasl'" + |
114 mechanism='PLAIN'>" + token + '</auth>' | 114 " mechanism='PLAIN'>" + token + "</auth>" |
115 ); | 115 ); |
116 } | 116 } |
117 } | 117 } |
118 //XMPP features | 118 //XMPP features |
119 else { | 119 else { |
120 that.emit('features', stanza); | 120 that.emit('features', stanza); |
121 //Bind http://xmpp.org/rfcs/rfc3920.html#bind | 121 //Bind http://xmpp.org/rfcs/rfc3920.html#bind |
122 that.send( | 122 that.send( |
123 "<iq type='set' xmlns='jabber:client'>\ | 123 "<iq type='set' xmlns='jabber:client'>" + |
124 <bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>\ | 124 "<bind xmlns='urn:ietf:params:xml:ns:xmpp-bind'/>" + |
125 </iq>", | 125 "</iq>", |
126 function() { | 126 function() { |
127 //Session http://xmpp.org/rfcs/rfc3921.html#session | 127 //Session http://xmpp.org/rfcs/rfc3921.html#session |
128 that.send( | 128 that.send( |
129 "<iq type='set' xmlns='jabber:client'>\ | 129 "<iq type='set' xmlns='jabber:client'>" + |
130 <session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>\ | 130 "<session xmlns='urn:ietf:params:xml:ns:xmpp-session'/>" + |
131 </iq>", | 131 "</iq>", |
132 function() { | 132 function() { |
133 that.emit('connected'); | 133 that.emit('connected'); |
134 } | 134 } |
135 ); | 135 ); |
136 }); | 136 }); |
137 } | 137 } |
138 }); | 138 }); |
139 this.on('success', function(stanza, that) { | 139 this.on('success', function(stanza, that) { |
140 that.send( | 140 that.send( |
141 "<stream:stream to='" + that.host + "'\ | 141 "<stream:stream to='" + that.host + "'" + |
142 xmlns='jabber:client'\ | 142 " xmlns='jabber:client'" + |
143 xmlns:stream='http://etherx.jabber.org/streams'\ | 143 " xmlns:stream='http://etherx.jabber.org/streams'" + |
144 version='1.0' />" | 144 " version='1.0'/>" |
145 ); | 145 ); |
146 }); | 146 }); |
147 this.on('failure', function(stanza, that) { | 147 this.on('failure', function(stanza, that) { |
148 that.emit('conn-error', stanza.firstChild.tagName); | 148 that.emit('conn-error', stanza.firstChild.tagName); |
149 }); | 149 }); |
184 break; | 184 break; |
185 } | 185 } |
186 } | 186 } |
187 | 187 |
188 var digest_uri = 'xmpp/' + that.host; | 188 var digest_uri = 'xmpp/' + that.host; |
189 if (host !== null) { | 189 if (host !== null) |
190 digest_uri = digest_uri + '/' + host; | 190 digest_uri = digest_uri + '/' + host; |
191 } | |
192 var A1 = MD5.hash(that.node + | 191 var A1 = MD5.hash(that.node + |
193 ':' + realm + ':' + that.password) + | 192 ':' + realm + ':' + that.password) + |
194 ':' + nonce + ':' + cnonce; | 193 ':' + nonce + ':' + cnonce; |
195 var A2 = 'AUTHENTICATE:' + digest_uri; | 194 var A2 = 'AUTHENTICATE:' + digest_uri; |
196 | 195 |
207 nonce + ':00000001:' + | 206 nonce + ':00000001:' + |
208 cnonce + ':auth:' + | 207 cnonce + ':auth:' + |
209 MD5.hexdigest(A2))) + ','; | 208 MD5.hexdigest(A2))) + ','; |
210 responseText += 'charset="utf-8"'; | 209 responseText += 'charset="utf-8"'; |
211 that.send( | 210 that.send( |
212 "<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>" | 211 "<response xmlns='urn:ietf:params:xml:ns:xmpp-sasl'>" + |
213 + btoa(responseText) + | 212 btoa(responseText) + |
214 '</response>'); | 213 "</response>"); |
215 }); | 214 }); |
216 }; | 215 }; |
217 Lightstring.Connection.prototype = { | 216 Lightstring.Connection.prototype = { |
218 /** | 217 /** |
219 * @function Create and open a websocket then go though the XMPP authentification process. | 218 * @function Create and open a websocket then go though the XMPP authentification process. |
301 str = Lightstring.dom2xml(elm); | 300 str = Lightstring.dom2xml(elm); |
302 } | 301 } |
303 if (aCallback) | 302 if (aCallback) |
304 this.on(elm.getAttribute('id'), aCallback); | 303 this.on(elm.getAttribute('id'), aCallback); |
305 } | 304 } |
306 else if (aCallback) { | 305 else if (aCallback) |
307 this.emit('warning', 'Callback can\'t be called with non-iq stanza.'); | 306 this.emit('warning', 'Callback can\'t be called with non-iq stanza.'); |
308 } | |
309 | 307 |
310 | 308 |
311 this.socket.send(str); | 309 this.socket.send(str); |
312 this.emit('XMLOutput', str); | 310 this.emit('XMLOutput', str); |
313 this.emit('DOMOutput', elm); | 311 this.emit('DOMOutput', elm); |