function interact(from, to, url) { function pubsubActionForFrom() { // create new node // call _interact } function noPubsubActionForFrom() { yesPubsub = pubsubActionForTo; noPubsub = noPubsubActionForTo; var server = JID(from).hostname; XMPP.send(from, _discoStanza(server), pubsubEnabled); } function pubsubActionForTo() { // create new node // call _interact } function noPubsubActionForTo() { var server = JID(from).hostname; XMPP.send(from, _discoStanza(server), pubsubEnabled); } var yesPubsub = pubsubActionForFrom; var noPubsub = noPubsubActionForFrom; function pubsubEnabled(discoReply) { if(reply.stanza.@type == 'result') { var query = reply.stanza.ns_disco_info::query; var supportsInstantNodes = query..feature.(@var == instant_node_feature); if (supportsInstantNodes) { yesPubsub(); } else { noPubsub(); } } } var server = JID(from).hostname; XMPP.send(from, _discoStanza(server), pubsubEnabled); } }