Mercurial > eldonilo > barbecue
changeset 7:853dcbe8f06f
Make barbecue work with latest Lightstring.
author | Emmanuel Gil Peyrot <linkmauve@linkmauve.fr> |
---|---|
date | Thu, 02 Feb 2012 12:11:33 +0100 |
parents | 24aa8dccb170 |
children | 7b2ca4d5af6d |
files | index.xhtml script2.js |
diffstat | 2 files changed, 56 insertions(+), 46 deletions(-) [+] |
line wrap: on
line diff
--- a/index.xhtml +++ b/index.xhtml @@ -9,9 +9,9 @@ <script type="text/javascript" src="lightstring/lightstring.js"></script> <script type="text/javascript" src="lightstring/stanza.js"></script> <script type="text/javascript" src="lightstring/jid.js"></script> + <script type="text/javascript" src="lightstring/plugins/DIGEST-MD5.js"></script> <script type="text/javascript" src="lightstring/plugins/presence.js"></script> <script type="text/javascript" src="lightstring/plugins/disco.js"></script> - <script type="text/javascript" src="lightstring/plugins/feature-not-implemented.js"></script> <script type="text/javascript" src="record.js"></script> <script type="text/javascript" src="sxe-document.js"></script> <script type="text/javascript" src="config.js"></script>
--- a/script2.js +++ b/script2.js @@ -25,18 +25,16 @@ var conn = new Lightstring.Connection(SE var roster = {}; var documents = {}; -Lightstring.NS.sxe = 'urn:xmpp:sxe:0'; -Lightstring.NS.jingle = { - main: 'urn:xmpp:jingle:1', - transports: { - sxe: 'urn:xmpp:jingle:transports:sxe' - }, - apps: { - xhtml: 'urn:xmpp:jingle:apps:xhtml' +Lightstring.plugins['jingle'] = { + namespaces: { + jingle: 'urn:xmpp:jingle:1', + jingle_transports_sxe: 'urn:xmpp:jingle:transports:sxe', + jingle_apps_xhtml: 'urn:xmpp:jingle:apps:xhtml' } }; +Lightstring.ns['sxe'] = 'urn:xmpp:sxe:0'; -conn.on('iq/' + Lightstring.NS['disco#info'] + ':query', function(stanza) { +conn.on('iq/' + Lightstring.ns['disco#info'] + ':query', function(stanza) { if (stanza.DOM.getAttributeNS(null, 'type') !== 'get') return; @@ -49,12 +47,12 @@ conn.on('iq/' + Lightstring.NS['disco#in return; } - var features = [Lightstring.NS.sxe, Lightstring.NS.jingle.transports.sxe]; //TODO: put that elsewhere. + var features = [Lightstring.ns['sxe'], Lightstring.ns['jingle_transports_sxe']]; //TODO: put that elsewhere. var response = "<iq to='" + stanza.DOM.getAttributeNS(null, 'from') + "'" + " id='" + stanza.DOM.getAttributeNS(null, 'id') + "'" + " type='result'>" + - "<query xmlns='" + Lightstring.NS['disco#info'] + "'>" + + "<query xmlns='" + Lightstring.ns['disco#info'] + "'>" + "<identity category='client' type='browser'/>"; features.forEach(function(f) { response += "<feature var='" + f + "'/>"; @@ -70,8 +68,11 @@ conn.on('presence', function(stanza) { if (!from.equals(conn.jid)) { var type = stanza.DOM.getAttributeNS(null, 'type'); if (!type) - Lightstring.discoInfo(conn, from, undefined, function(aData) { - roster[from.full] = aData; + conn.disco.info(from, undefined, function(stanza) { + roster[from.full] = {identities: stanza.identities, features: stanza.features}; + }, function(stanza) { + console.log(from + ' doesn’t handle disco#info.'); + roster[from.full] = {}; }); else if (type === 'unavailable') delete roster[from.full]; @@ -86,20 +87,20 @@ var host = function(sid, name) { for (var jid in roster) { var contact = roster[jid]; - if ((contact.features.indexOf(Lightstring.NS.sxe) !== -1) && (contact.features.indexOf(Lightstring.NS.jingle.transports.sxe) !== -1)) + if ((contact.features.indexOf(Lightstring.ns['sxe']) !== -1) && (contact.features.indexOf(Lightstring.ns['jingle_transports_sxe']) !== -1)) initiate(jid, sid); } } var initiate = function(jid, sid) { var initiate = "<iq to='" + jid + "' type='set'>" + - "<jingle xmlns='" + Lightstring.NS.jingle.main + "'" + + "<jingle xmlns='" + Lightstring.ns.jingle.main + "'" + " action='session-initiate'" + " initiator='" + documents[sid].initiator + "'" + " sid='" + sid + "'>" + "<content creator='initiator' name='" + documents[sid].name + "'>" + - "<description xmlns='" + Lightstring.NS.jingle.apps.xhtml + "'/>" + - "<transport xmlns='" + Lightstring.NS.jingle.transports.sxe + "'>" + + "<description xmlns='" + Lightstring.ns['jingle_apps_xhtml'] + "'/>" + + "<transport xmlns='" + Lightstring.ns['jingle_transports_sxe'] + "'>" + "<host>" + documents[sid].host + "</host>" + "</transport>" + "</content>" + @@ -112,13 +113,13 @@ var accept = function(sid) { var doc = documents[sid]; doc.empty(); var accept = "<iq to='" + doc.initiator + "' type='set'>" + - "<jingle xmlns='" + Lightstring.NS.jingle.main + "'" + + "<jingle xmlns='" + Lightstring.ns.jingle.main + "'" + " action='session-accept'" + " initiator='" + doc.initiator + "'" + " sid='" + sid + "'>" + "<content creator='initiator' name='" + documents[sid].name + "'>" + - "<description xmlns='" + Lightstring.NS.jingle.apps.xhtml + "'/>" + - "<transport xmlns='" + Lightstring.NS.jingle.transports.sxe + "'>" + + "<description xmlns='" + Lightstring.ns['jingle_apps_xhtml'] + "'/>" + + "<transport xmlns='" + Lightstring.ns['jingle_transports_sxe'] + "'>" + "<host>" + doc.host + "</host>" + "</transport>" + "</content>" + @@ -137,7 +138,7 @@ var terminate = function(sid, reason) { return console.log('BIG WARNING!!!'); var terminate = "<iq to='" + documents[sid].initiator + "' type='set'>" + - "<jingle xmlns='" + Lightstring.NS.jingle.main + "'" + + "<jingle xmlns='" + Lightstring.ns.jingle.main + "'" + " action='session-terminate'" + " host='" + documents[sid].host + "'" + " initiator='" + documents[sid].initiator + "'" + @@ -151,7 +152,7 @@ var terminate = function(sid, reason) { conn.send(terminate); }; -conn.on('iq/' + Lightstring.NS.jingle.main + ':jingle', function(stanza) { +conn.on('iq/' + Lightstring.ns.jingle + ':jingle', function(stanza) { conn.send("<iq to='" + stanza.DOM.getAttributeNS(null, 'from') + "'" + " id='" + stanza.DOM.getAttributeNS(null, 'id') + "'" + " type='result'/>"); @@ -174,11 +175,11 @@ conn.on('iq/' + Lightstring.NS.jingle.ma return terminate(sid, 'alternative-session'); //TODO: The XEP: “and wishes to use that [previous] session instead” var description = content.getElementsByTagName('description')[0]; //TODO: supporte multiple applications. - if (description.namespaceURI !== Lightstring.NS.jingle.apps.xhtml) + if (description.namespaceURI !== Lightstring.ns['jingle_apps_xhtml']) return terminate(sid, 'unsupported-applications'); var transport = content.getElementsByTagName('transport')[0]; //TODO: supporte multiple transports. - if (transport.namespaceURI !== Lightstring.NS.jingle.transports.sxe) + if (transport.namespaceURI !== Lightstring.ns['jingle_transports_sxe']) return terminate(sid, 'unsupported-transports'); var host = transport.textContent; //TODO: verify the presence of the host element. @@ -198,11 +199,11 @@ conn.on('iq/' + Lightstring.NS.jingle.ma alert('Accepted! \\o/'); var description = content.getElementsByTagName('description')[0]; //TODO: supporte multiple applications. - if (description.namespaceURI !== Lightstring.NS.jingle.apps.xhtml) + if (description.namespaceURI !== Lightstring.ns['jingle_apps_xhtml']) return terminate(sid, 'unsupported-applications'); var transport = content.getElementsByTagName('transport')[0]; //TODO: supporte multiple transports. - if (transport.namespaceURI !== Lightstring.NS.jingle.transports.sxe) + if (transport.namespaceURI !== Lightstring.ns['jingle_transports_sxe']) return terminate(sid, 'unsupported-transports'); var host = transport.textContent; //TODO: verify the presence of the host element. @@ -236,7 +237,7 @@ var connect = function(sid) { }); var message = "<message to='" + host + "'" + " type='" + type + "'>" + - "<sxe xmlns='" + Lightstring.NS.sxe + "'" + + "<sxe xmlns='" + Lightstring.ns['sxe'] + "'" + " id='" + Lightstring.newId('sxe') + "'" + " session='" + sid + "'>" + "<connect/>" + @@ -245,7 +246,7 @@ var connect = function(sid) { conn.send(message); }; -conn.on('message/' + Lightstring.NS.sxe + ':sxe', function(stanza) { +conn.on('message/' + Lightstring.ns['sxe'] + ':sxe', function(stanza) { var from = stanza.DOM.getAttributeNS(null, 'from'); var type = 'chat'; //TODO: always? var sxe = stanza.DOM.firstChild; //TODO: there can be multiple payloads. @@ -263,11 +264,11 @@ conn.on('message/' + Lightstring.NS.sxe case 'connect': var message = "<message to='" + from + "'" + " type='" + type + "'>" + - "<sxe xmlns='" + Lightstring.NS.sxe + "'" + + "<sxe xmlns='" + Lightstring.ns['sxe'] + "'" + " id='" + Lightstring.newId('sxe') + "'" + " session='" + sid + "'>" + "<state-offer>" + - "<description xmlns='" + Lightstring.NS.jingle.apps.xhtml + "'/>" + + "<description xmlns='" + Lightstring.ns['jingle_apps_xhtml'] + "'/>" + "</state-offer>" + "</sxe>" + "</message>"; @@ -275,7 +276,7 @@ conn.on('message/' + Lightstring.NS.sxe break; case 'state-offer': var description = payload.firstChild; - if (description.namespaceURI !== Lightstring.NS.jingle.apps.xhtml) + if (description.namespaceURI !== Lightstring.ns['jingle_apps_xhtml']) return terminate(sid, 'unsupported-applications'); var accept = false; @@ -286,7 +287,7 @@ conn.on('message/' + Lightstring.NS.sxe var message = "<message to='" + from + "'" + " type='" + type + "'>" + - "<sxe xmlns='" + Lightstring.NS.sxe + "'" + + "<sxe xmlns='" + Lightstring.ns['sxe'] + "'" + " id='" + Lightstring.newId('sxe') + "'" + " session='" + sid + "'>" + "<" + (accept? 'accept': 'refuse') + "-state/>" + @@ -295,12 +296,16 @@ conn.on('message/' + Lightstring.NS.sxe conn.send(message); break; case 'accept-state': - var initialState = doc.createState([]).map(function(element) { + console.log(doc); + var initialState = doc.createState([]); + console.log(initialState); + initialState = initialState.map(function(element) { return Lightstring.DOM2XML(element); }).join(''); + console.log(initialState); var message = "<message to='" + from + "'" + " type='" + type + "'>" + - "<sxe xmlns='" + Lightstring.NS.sxe + "'" + + "<sxe xmlns='" + Lightstring.ns['sxe'] + "'" + " id='" + Lightstring.newId('sxe') + "'" + " session='" + sid + "'>" + "<state>" + @@ -331,6 +336,7 @@ conn.on('message/' + Lightstring.NS.sxe events.forEach(function(e) { conn.on(e, function() { state.innerHTML = e; + return false; }); }); })(); @@ -343,17 +349,21 @@ document.getElementById('host').addEvent host(Lightstring.newId('sess'), 'My First XHTML Document'); }, false); -conn.on('connected', function() { - conn.on('output', function(stanza) { - console.log('out:', stanza.DOM); - }); - conn.on('input', function(stanza) { - console.log('in:', stanza.DOM); - }); - - Lightstring.presence(conn); +conn.on('output', function(stanza) { + console.log('out:', stanza.DOM || stanza.XML); +}); +conn.on('input', function(stanza) { + console.log('in:', stanza.DOM || stanza.XML); }); -conn.connect(JID + '/' + prompt('Resource?'), PASSWORD); +conn.on('connected', function() { + conn.presence.send(conn); + return true; +}); -register_feature_not_implemented.call(conn); +conn.load('DIGEST-MD5'); +conn.load('presence'); +conn.load('disco'); +conn.load('jingle'); +conn.disco.addFeatures(Lightstring.ns['jingle_transports_sxe'], Lightstring.ns['sxe']); +conn.connect(JID + '/' + prompt('Resource?'), PASSWORD);