|
|
@ -12,6 +12,7 @@ var Client = function(params, callback) {
|
|
|
|
this.host = (params.host == null) ? this.jid.domain : params.host;
|
|
|
|
this.host = (params.host == null) ? this.jid.domain : params.host;
|
|
|
|
this.rooms = {};
|
|
|
|
this.rooms = {};
|
|
|
|
this._iq = 0;
|
|
|
|
this._iq = 0;
|
|
|
|
|
|
|
|
this._iqHandler = {};
|
|
|
|
this._iqCallback = {};
|
|
|
|
this._iqCallback = {};
|
|
|
|
this.presences = {};
|
|
|
|
this.presences = {};
|
|
|
|
this.roster = {};
|
|
|
|
this.roster = {};
|
|
|
@ -36,6 +37,12 @@ var Client = function(params, callback) {
|
|
|
|
} else {
|
|
|
|
} else {
|
|
|
|
jabber._debug(('IQ: ' + stanza)[jabber.color]);
|
|
|
|
jabber._debug(('IQ: ' + stanza)[jabber.color]);
|
|
|
|
jabber.emit('iq', stanza);
|
|
|
|
jabber.emit('iq', stanza);
|
|
|
|
|
|
|
|
var q = stanza.getChild('query');
|
|
|
|
|
|
|
|
if(q.attrs.xmlns != null && jabber._iqHandler[q.attrs.xmlns] != null) {
|
|
|
|
|
|
|
|
jabber._iqHandler[q.attrs.xmlns].call(jabber, stanza);
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
|
|
jabber.emit('iq:unknow', stanza);
|
|
|
|
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
if(stanza.name == 'presence') {
|
|
|
|
if(stanza.name == 'presence') {
|
|
|
@ -72,10 +79,10 @@ var Client = function(params, callback) {
|
|
|
|
jabber.emit('online');
|
|
|
|
jabber.emit('online');
|
|
|
|
jabber.askForRoster(function(roster) {
|
|
|
|
jabber.askForRoster(function(roster) {
|
|
|
|
jabber._debug("ROSTER : "[jabber.color] + JSON.stringify(roster));
|
|
|
|
jabber._debug("ROSTER : "[jabber.color] + JSON.stringify(roster));
|
|
|
|
|
|
|
|
if(callback != null) {
|
|
|
|
|
|
|
|
callback.call(jabber);
|
|
|
|
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
if(callback != null) {
|
|
|
|
|
|
|
|
callback.call(jabber);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
this.addListener('groupchat', function(from, stanza) {
|
|
|
|
this.addListener('groupchat', function(from, stanza) {
|
|
|
|
fromName = from.split('@')[0];
|
|
|
|
fromName = from.split('@')[0];
|
|
|
@ -95,41 +102,38 @@ var Client = function(params, callback) {
|
|
|
|
jabber.presences[from] = stanza.attrs.type;
|
|
|
|
jabber.presences[from] = stanza.attrs.type;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
this.registerIqHandler('http://jabber.org/protocol/disco#info', function(stanza) {
|
|
|
|
|
|
|
|
sys.debug((stanza.attrs.from + " wont to disco!")[jabber.color]);
|
|
|
|
|
|
|
|
jabber.resultIq(stanza, new xmpp.Element('query', {xmlns: 'http://jabber.org/protocol/disco#info'})
|
|
|
|
|
|
|
|
.c('feature', {'var': 'http://jabber.org/protocol/disco#info'}).up()
|
|
|
|
|
|
|
|
.c('feature', {'var': 'http://jabber.org/protocol/disco#items'}).up()
|
|
|
|
|
|
|
|
.c('feature', {'var': 'http://jabber.org/protocol/muc'}).up()
|
|
|
|
|
|
|
|
.c('identity', {
|
|
|
|
|
|
|
|
category: 'conference',
|
|
|
|
|
|
|
|
type: 'text',
|
|
|
|
|
|
|
|
name: 'Play-Specific Chatrooms'
|
|
|
|
|
|
|
|
}).up()
|
|
|
|
|
|
|
|
.tree()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
this.registerIqHandler('jabber:iq:last', function(stanza) {
|
|
|
|
|
|
|
|
sys.debug((stanza.attrs.from + ' wonts last')[jabber.color]);
|
|
|
|
|
|
|
|
//[FIXME] giving a good last time
|
|
|
|
|
|
|
|
jabber.resultIq(stanza, new xmpp.Element('query', {
|
|
|
|
|
|
|
|
xmlns: 'jabber:iq:last', seconds:'1'})
|
|
|
|
|
|
|
|
.tree()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
|
|
|
|
this.registerIqHandler('jabber:iq:version', function(stanza) {
|
|
|
|
|
|
|
|
jabber.resultIq(stanza, new xmpp.Element('query', {xmlns:'jabber:iq:version'})
|
|
|
|
|
|
|
|
.c('name').t('node-xmpp-client').up()
|
|
|
|
|
|
|
|
.c('version').t('0.0.1').up()
|
|
|
|
|
|
|
|
.c('os').t('mac').up()
|
|
|
|
|
|
|
|
.tree()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
});
|
|
|
|
this.addListener('iq', function(stanza) {
|
|
|
|
this.addListener('iq', function(stanza) {
|
|
|
|
sys.debug(stanza.getChild('query').toString().yellow);
|
|
|
|
sys.debug(stanza.getChild('query').toString().yellow);
|
|
|
|
var query = stanza.getChild('query', 'http://jabber.org/protocol/disco#info');
|
|
|
|
|
|
|
|
if(query != null) {
|
|
|
|
|
|
|
|
sys.debug((stanza.attrs.from + " wont to disco!")[jabber.color]);
|
|
|
|
|
|
|
|
jabber.resultIq(stanza, new xmpp.Element('query', {xmlns: 'http://jabber.org/protocol/disco#info'})
|
|
|
|
|
|
|
|
.c('feature', {'var': 'http://jabber.org/protocol/disco#info'}).up()
|
|
|
|
|
|
|
|
.c('feature', {'var': 'http://jabber.org/protocol/disco#items'}).up()
|
|
|
|
|
|
|
|
.c('feature', {'var': 'http://jabber.org/protocol/muc'}).up()
|
|
|
|
|
|
|
|
.c('identity', {
|
|
|
|
|
|
|
|
category: 'conference',
|
|
|
|
|
|
|
|
type: 'text',
|
|
|
|
|
|
|
|
name: 'Play-Specific Chatrooms'
|
|
|
|
|
|
|
|
}).up()
|
|
|
|
|
|
|
|
.tree()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
query = stanza.getChild('query', 'jabber:iq:last');
|
|
|
|
|
|
|
|
if(query != null) {
|
|
|
|
|
|
|
|
sys.debug((stanza.attrs.from + ' wonts last')[jabber.color]);
|
|
|
|
|
|
|
|
//[FIXME] giving a good last time
|
|
|
|
|
|
|
|
jabber.resultIq(stanza, new xmpp.Element('query', {
|
|
|
|
|
|
|
|
xmlns: 'jabber:iq:last', seconds:'1'})
|
|
|
|
|
|
|
|
.tree()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
query = stanza.getChild('query', 'jabber:iq:version');
|
|
|
|
|
|
|
|
if(query != null) {
|
|
|
|
|
|
|
|
jabber.resultIq(stanza, new xmpp.Element('query', {xmlns:'jabber:iq:version'})
|
|
|
|
|
|
|
|
.c('name').t('node-xmpp-client').up()
|
|
|
|
|
|
|
|
.c('version').t('0.0.1').up()
|
|
|
|
|
|
|
|
.c('os').t('mac').up()
|
|
|
|
|
|
|
|
.tree()
|
|
|
|
|
|
|
|
);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
@ -142,6 +146,10 @@ Client.prototype._debug = function(txt) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
};
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Client.prototype.registerIqHandler = function(xmlns, action) {
|
|
|
|
|
|
|
|
this._iqHandler[xmlns] = action;
|
|
|
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
Client.prototype.message = function(to, message) {
|
|
|
|
Client.prototype.message = function(to, message) {
|
|
|
|
this.xmpp.send(new xmpp.Element('message', {
|
|
|
|
this.xmpp.send(new xmpp.Element('message', {
|
|
|
|
to: to,
|
|
|
|
to: to,
|
|
|
|