Smack over http

Pardon me for the incomplete info. Here are the changes which I have done in com.kenai.jbosh.BOSHClient class

I introduced a new property

private Long rid;

commented the following code

long rid = requestIDSeq.getNextRID();

and at that place added
* this.rid = requestIDSeq.getNextRID();*

and finally added a new getter for rid

public Long getRid()
{
return rid;

}

thanks vibhu, i’ll try out your changes later today!

i had some time yesterday to make those edits and rebuild the .jars. thanks again vibhu - your edits worked nicely. i was able to start a BOSH connection with smack with no problems. now i’m having an odd issue attaching the connection with strophe - it always works in firefox, sometimes in safari, and never in chrome. weird! i guess i’m to find some strophe support for that one now.

have done a backport of the bosh client to smack 310, attaching as a zip file. The main part was to make BoshConnection extend XMPPConnection, handle IQ s in a better way. The only non BOSH class I needed was org.jivesoftware.smack.sasl.SASLMechanism from the latest branch.
smack-bosh-backport.jar (8473 Bytes)

Thanks for the good work. I have successfully used bosh with smack using this branch. Hopefully it will be included in the next version of smack.

Hi Guenther,

I was looking into your work in the bosh branch. Can you tell me which version of smack the BOSH version is built against? I noticed that when I built the library from source in shows ‘smack-bosh-3.2.0’. Does this mean that it is built against the 3.2.0 release of smack? Also, is there any idea if this branch will become part of the release so that bugs will be fixed against it?

Hi All,

I am kind of stuck on build issue now!! I have been trying pubsub over XMPP which is supported in version SMACK 3.2.1 (Not in 3.2.0-Snapshot version).

Now, I am trying to build Branch bosh against Tag (3.2.1) because I wanna use pubsub with bash over XMPP.

But, there are few dependecy jars under “http://svn.igniterealtime.org/svn/repos/smack/branches/bosh/build/merge/smack-bo sh/jbosh.jar”

This jar is having BOSHClient.java which calls “XmlPullParserFactory,java” at runtime which doesn’t exist in latest 3.2.1 smack release. So, I end up with following exception:

Exception in thread “BOSHClient[1762502123]: Receive thread” java.lang.NoClassDefFoundError: org/xmlpull/v1/XmlPullParserFactory

Can someone please help me in understanding the build structure becuase structure of BOSH branch is different than TAG/Trunk.

Thanks in advance! I really need this

You need the xpp3.jar library. (attached)

It is available in the whack distribution.

I remember I had to include other jars to get it to work.

I needed following (google for them):

  1. xlightweb-2.13.2-jar-with-dependencies.jar

  2. xpp3.jar (attached)

  3. dom4j.jar (in whack distro)

  4. some code from com.kenai.jbosh branch

  5. some code from org.jivesoftware.smack branch

I am attaching modified smack jar with the class files from 4 and 5 included. For the others you can download the regular jars.

This is from 3.1.0 (one of the nightly builds).
xpp3.jar (119804 Bytes)
smack.jar (367320 Bytes)

Hi,

Version : Openfire 3.7.1 , Smack- 3.2.1 and jbosh-0.6.0.jar
XMPP default port: 5222 and my connection manager port: 5333 and HttpBinding – 7070(Enabled in Admin console)
BOSHConfiguration config = new BOSHConfiguration(false, “myipaddress”,
5222, “/http-bind”, “myservicename”);

As per this thread to introduce a new rid property in BOSCHClient.java I have downloaded the jbosh-0.6.0 source code from this URL (http://grepcode.com/snapshot/repo1.maven.org/maven2/com.kenai.jbosh/jbosh/0.6.0)

I made those changes in BOSHClient.java and after that also I am getting the same errors.

If I use the port number as 5222 / 5333 I am getting Timeout reaches Exception
And for 7070 port I am getting NullPointerException

Exception in thread “BOSHClient[18378667]: Receive thread” java.lang.NullPointerException
at com.kenai.jbosh.XLightWebResponse.awaitResponse(XLightWebResponse.java:187)
at com.kenai.jbosh.XLightWebResponse.getBody(XLightWebResponse.java:166)
at com.kenai.jbosh.BOSHClient.processExchange(BOSHClient.java:1031)
at com.kenai.jbosh.BOSHClient.processMessages(BOSHClient.java:976)
at com.kenai.jbosh.BOSHClient.access$000(BOSHClient.java:97)
at com.kenai.jbosh.BOSHClient$1.run(BOSHClient.java:215)
at java.lang.Thread.run(Unknown Source)

I am bit confusing with these port number. Actually which port number do I need to use here.

I am using these jars [ smack.jar,smackx-debug.jar,smackx-jingle.jar, smackx.jar, xlightweb-2.5.jar, xmlpull_1_1_3_4c.jar, xpp3-1.1.4c.jar, xSocket-2.6.6.jar and dom4j-1.6.1.jar]

Can someone please help me whatelse jars do need to include or post here the modified jars…

Thanks

I think you need the jar “xlightweb-2.13.2-jar-with-dependencies.jar”. You can find it via Google.

I am also attaching the same. Please let us know if you got it to work.
xlightweb-2.13.2-jar-with-dependencies.jar (1024367 Bytes)

Thanks for the reply.

BOSHConfiguration config = new BOSHConfiguration(false,“myipaddress”, 5222, “/http-bind”, “myservicename”);

Connection manger port : 5333 or Httpbind port : 7070 or default port : 5222 here which port number do I need to use

Thanks

You need to use the BOSH port (http-bind): 7070 or whatever your server is configured for

ejabberd default one is 5280, openfire 7070.

Just I have downloaded the following jars from this thread

smack.jar, xlightweb.jar, xlightweb-2.13.2-jar-with-dependencies.jar, xpp3.jar, xSocket.jar, smack-bosh-backport.jar

and the remaining jars from Google(Smack 3.2.1)

smackx.jar, smackx-debug.jar, smackx-jingle.jar, dom4j-1.6.1.jar

Added all these jars to Build path and after that I have tried with 5222 / 5333 / 7070 still getting the same error.

Can you please let me know is there any code changes are required other than BOSHClient.java

Thanks

I am using default openfire HTTP Binding port 7070 and enabled in Admin Console.

Getting NullPointerException in XLightWebResponse.java (line number :188)

httpResp = future.getResponse();

System.out.println(“httpResp:”+httpResp);

byte[] data = httpResp.getBlockingBody().readBytes(); ------> getting error here

and after that getting Timeout Reached Exception.

Output in java console

httpResp:HTTP/1.1 302 Found
Server: Jetty(7.0.2-SNAPSHOT)
Content-Length: 0
Location: http://myipaddress:7070/http-bind/

Exception in thread “BOSHClient[32389396]: Receive thread” java.lang.NullPointerException
at com.kenai.jbosh.XLightWebResponse.awaitResponse(XLightWebResponse.java:188)
at com.kenai.jbosh.XLightWebResponse.getBody(XLightWebResponse.java:166)
at com.kenai.jbosh.BOSHClient.processExchange(BOSHClient.java:1056)
at com.kenai.jbosh.BOSHClient.processMessages(BOSHClient.java:1000)
at com.kenai.jbosh.BOSHClient.access$0(BOSHClient.java:970)
at com.kenai.jbosh.BOSHClient$1.run(BOSHClient.java:211)
at java.lang.Thread.run(Unknown Source)

Thanks

Thank you so much for your help.

Finally I am able to connect with Openfire using BOSH after I added the trailing slash.

BOSHConfiguration config = new BOSHConfiguration(false,

“myipaddress”, 7070, **"/http-bind/", **“myservicename”);

Without trailing slash I was getting Null pointer exception.

Thanks,

1 Like

For anyone else attempting to use the smack-bosh branch above: it worked for me, but there are all sorts of NPE bugs you might encounter because it’s built against 3.2.0. You might try using the following libs instead:

Latest SMACK API 3.2.1 version doesn’t have support for BOSH. Thus, I have merged their code base

http://svn.igniterealtime.org/svn/repos/smack/branches/bosh/

and

http://svn.igniterealtime.org/svn/repos/smack/tags/smack_3_2_1/

to produce custom jars which has got support for BOSH connection. These jars can be found at amqp-xmpp-bosh/lib at master · rajesh-kumar/amqp-xmpp-bosh · GitHub

Did you ever get the BOSHConnection working with PubSub? I am trying it and I notice that in the debugger the connection continually stops and restarts when it sends out a request to get a node. Then eventually, it will work and it seems that the connection is fine from that point on. Didn’t know if you had any experience with this.

Hi Brian,

I tried something a long time back. Please find my blog at -

http://rajlondonboy.wordpress.com/2011/11/13/pubsub-demo-xmpp-and-bosh-with-amqp /

Raj

Thanks for the info. I am currently using smack 3.2.2 with a version of BOSHConnection that I found on github . I will try again with 3.2.1 and your version of the jar. One difference I see is that I am using Openfire for my server where you are using EJabberd. Thanks for the info. The issue I am seeing is weird - after my request for a a node, I am getting a “Client provided invalid session” error on the server. Regardless, I will give it a shot. Thanks again.

Anyone get PLAIN Sasl to work with this? I can’t seem to get this to work at all. I know the login stuff is correct, as I’ve tested it using XMPPConnection class, I just change this and the port, and using BOSH I get “No response from the server.:”. Watching the this in wireshark, it looks like it get’s the challenge and does nothing with it.

Thanks.