I want connect anonymously to openfire server with Android Smack 4.1 client and register the new user (username = "wq", password="wq") with AccountManager, and then disconnect and login as non-anonymous registered user.
3.1.1 Registration with a Server
Special care must be taken when an unregistered entity interacts with a server rather than a service. Normally, a server enables in-band registration so that entities can "bootstrap" their participation in the Jabber network; this bootstrapping happens when an unregistered and unauthenticated entity opens a TCP connection to a server and immediately completes the registration use case with the server, then authenticates using the newly-registered identity. As noted, when a server receives an IQ-get for registration information, it SHOULD assume that the requesting entity is unregistered unless the entity has already authenticated. Depending on local service provisioning, a server MAY return a stanza error if an unregistered entity attempts to register too many times before authenticating or if an entity attempts to register a second identity after successfully completing the registration use case; a server MAY also return a stream error if the unregistered entity waits too long before authenticating or attempts to complete a task other than authentication after successfully completing the registration use case.
connection builder looks like:
xmpptcpConnection = new XMPPTCPConnection(XMPPTCPConnectionConfiguration.builder() .setSecurityMode(ConnectionConfiguration.SecurityMode.disabled) .setResource(resource) .setHost(localhost) .setServiceName(serviceName) .setPort(port) .setDebuggerEnabled(true) .setSendPresence(true) .build() );
And registration:
if (password != null && username != null) { AccountManager accountManager = AccountManager.getInstance(xmpptcpConnection); accountManager.sensitiveOperationOverInsecureConnection(true); accountManager.createAccount(username, password); } else { smackError("Username or password wrong"); }
But I got bad-request error
05-21 21:34:20.801 19535-19577/com.xmpp D/SMACK: SENT (0): 05-21 21:34:20.805 19535-19578/com.xmpp D/SMACK: RECV (0): ANONYMOUS zlib 05-21 21:34:20.826 19535-19577/com.xmpp D/SMACK: SENT (0): = 05-21 21:34:20.828 19535-19578/com.xmpp D/SMACK: RECV (0): 05-21 21:34:20.830 19535-19578/com.xmpp D/SMACK: RECV (0): zlib 05-21 21:34:20.838 19535-19577/com.xmpp D/SMACK: SENT (0): 05-21 21:34:20.841 19535-19578/com.xmpp D/SMACK: RECV (0): cafb2f97@127.0.0.1/cafb2f97 05-21 21:34:20.843 19535-19564/com.xmpp D/SMACK: User logged (0): cafb2f97@127.0.0.1:5222/cafb2f97 05-21 21:34:20.843 19535-19564/com.xmpp D/SMACK: XMPPConnection authenticated (0) 05-21 21:34:20.844 19535-19577/com.xmpp D/SMACK: SENT (0): 05-21 21:35:20.531 19535-19577/com.xmpp D/SMACK: SENT (0): 05-21 21:35:20.535 19535-19578/com.xmpp D/SMACK: RECV (0): XMPP Client Registration Please provide the following information jabber:iq:register 05-21 21:35:20.537 19535-19577/com.xmpp D/SMACK: SENT (0): wq wq 05-21 21:35:20.540 19535-19578/com.xmpp D/SMACK: RECV (0): wq wq 05-21 21:35:20.542 19535-19564/com.xmpp W/System.err: org.jivesoftware.smack.XMPPException$XMPPErrorException: XMPPError: bad-request - modify 05-21 21:35:20.542 19535-19564/com.xmpp W/System.err: at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:232) 05-21 21:35:20.542 19535-19564/com.xmpp W/System.err: at org.jivesoftware.smack.PacketCollector.nextResultOrThrow(PacketCollector.java:213) 05-21 21:35:20.542 19535-19564/com.xmpp W/System.err: at org.jivesoftware.smackx.iqregister.AccountManager.createAccount(AccountManager.java:272) 05-21 21:35:20.542 19535-19564/com.xmpp W/System.err: at org.jivesoftware.smackx.iqregister.AccountManager.createAccount(AccountManager.java:244) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at com.xmpp.service.SmackConnection.register(SmackConnection.java:349) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at com.xmpp.service.SmackService$1.run(SmackService.java:119) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at android.os.Handler.handleCallback(Handler.java:739) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at android.os.Handler.dispatchMessage(Handler.java:95) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at android.os.Looper.loop(Looper.java:135) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at com.xmpp.service.SmackService$2.run(SmackService.java:157) 05-21 21:35:20.543 19535-19564/com.xmpp W/System.err: at java.lang.Thread.run(Thread.java:818)
I am not getting errors if I am connected with non-anonymous account, in connection builder only added :
.setUsernameAndPassword(username, password)
but I don't want to use another already registered account for registering new user to server. Is there any nice solution to pass it this way ?