I am trying to create a chat application with out using Google message services and with nodejs xmpp server. So I used this node js xmpp server and smack api for android app.
I dont know why but server is sending stanza saying feature not implemented.
android code which I wrote to connect xmpp server.
XMPPTCPConnectionConfiguration config = XMPPTCPConnectionConfiguration.builder() .setServiceName("localhost") .setHost(IPADRESS) .setPort(5222) .build(); AbstractXMPPConnection conn2 = new XMPPTCPConnection(config); conn2.setPacketReplyTimeout(1000); SmackConfiguration.DEBUG = true; conn2.connect(); conn2.login(mngr.getDeviceId(), "secret"); nodejs xmpp server module
var startServer = function (done) { // Sets up the server. server = new xmpp.C2S.TCPServer({ port: 5222, domain: 'localhost' }) // On connection event. When a client connects. server.on('connection', function (client) { // That's the way you add mods to a given server. // Allows the developer to register the jid against anything they want client.on('register', function (opts, cb) { console.log('REGISTER') cb(true) }) // Allows the developer to authenticate users against anything they want. client.on('authenticate', function (opts, cb) { console.log('server:', opts.username, opts.password, 'AUTHENTICATING') if (opts.password === 'secret') { console.log('server:', opts.username, 'AUTH OK') cb(null, opts) } else { console.log('server:', opts.username, 'AUTH FAIL') cb(false) } }) client.on('online', function () { console.log('server:', client.jid.local, 'ONLINE') client.send("") }) // Stanza handling client.on('stanza', function (stanza) { console.log('server:', client.jid.local, 'stanza', stanza.toString()) var from = stanza.attrs.from stanza.attrs.from = stanza.attrs.to stanza.attrs.to = from client.send(stanza) }) // Stanza handling client.on('chat', function (stanza) { console.log('server:', client.jid.local, 'chat', stanza.toString()) client.send(stanza) }); // On Disconnect event. When a client disconnects client.on('disconnect', function () { console.log('server:', 'DISCONNECT') }) }) server.on('listening', done) } startServer(function (){ console.log("server localhost started at 5222 localport"); }); nodejs server console output.
server localhost started at 5222 localport server: 354223060799129 secret AUTHENTICATING server: 354223060799129 AUTH OK server: 354223060799129 ONLINE server: 354223060799129 stanza <iq id="eW469-5" type="get" xmlns:stream="http://etherx.jabber.org/streams" from="354223060799129@localhost/Smack"><query xmlns="jabber:iq:roster"/></iq> server: 354223060799129 stanza <presence id="eW469-6" xmlns:stream="http://etherx.jabber.org/streams" from="354223060799129@localhost/Smack"/> server: 354223060799129 stanza <iq id="eW469-5" type="error" xmlns:stream="http://etherx.jabber.org/streams" from="354223060799129@localhost/Smack"><error type="cancel"><feature-not-implemented xmlns="urn:ietf:params:xml:ns:xmpp-stanzas"/></error></iq> android logs:
03-10 22:57:12.598 8126-8183/gcm.play.android.samples.com.gcmquickstart E/AbstractXMPPConnection: Exception in packet listener java.lang.NullPointerException: Attempt to invoke virtual method 'int java.lang.Object.hashCode()' on a null object reference at java.util.concurrent.ConcurrentHashMap.get(ConcurrentHashMap.java:746) at org.jivesoftware.smack.roster.Roster$PresencePacketListener.getUserPresences(Roster.java:1134) at org.jivesoftware.smack.roster.Roster$PresencePacketListener.processPacket(Roster.java:1157) at org.jivesoftware.smack.AbstractXMPPConnection$4.run(AbstractXMPPConnection.java:1156) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) 03-10 22:57:12.598 8126-8185/gcm.play.android.samples.com.gcmquickstart E/Roster: Exception reloading roster XMPPError: feature-not-implemented - cancel at org.jivesoftware.smack.AbstractXMPPConnection$5.processPacket(AbstractXMPPConnection.java:1448) at org.jivesoftware.smack.AbstractXMPPConnection$3.run(AbstractXMPPConnection.java:1126) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587) at java.lang.Thread.run(Thread.java:818) I tried so many solution for the similar type of question in stackoverflow but didnt work.help will be appreciated.
1 Answers
Answers 1
The node XMPP server project you linked is not a complete XMPP server. Its a XMPP server library which helps you to build a XMPP server with node.js.
In your log it returns the not implemented exception when you try to request the roster (contact list).
You either have to implement all the features you need in Javascript, or choose another existing feature complete XMPP software.
0 comments:
Post a Comment