Skip navigation
1 2 3 ... 11 Previous Next

Ignite Realtime Blog

156 Posts
2

Candy plugin for Openfire

Posted by Dele Olajide May 16, 2012

The ignite realtime community is happy to announce a plugin for the popular Candy (Chats Are Not Dead Yet) group-chat web client. Candy was developed by Michael Weibel (@weibelm) and Patrick Stadler (@pstadler) on behalf of their employer Amiado Group. It provides group and private chat for collaborative working between teams.

 

The Candy plugin for Openfire adds audio-conferencing and a telephone voicebridge service to Candy. In practice, it means a user can join a group-chat with voice using their PC mic/speaker or their SIP Phone. If the optional  PSTN/PBX gateway is configured, then an external mobile phone or home telephone can be used. The voice bridge can call the destination or accept an incoming call. The audio bridge is based on the jVoiceBridge project and can handle hundreds of concurrent users across multiple conferences,

 

The Candy web client has been extended by a voicebridge plugin which activates/deactivates either RTMP Flash or SIP audio-conferencing when user clicks on the  group-chat room/conference tab. Both group-chat and private chats are supported. It uses the XMPP Openlink XEP to handle the telephone messages

 

For more details read the rest of the overview document at http://community.igniterealtime.org/docs/DOC-2287 and visit the project web site at http://code.google.com/p/openfire-candy/

7

This is a short notice of two new projects I am initiating and inviting members to be involved with.

Jitsi-Jingle

There has been an outstanding request to bring the Jingle implementation of Spark/Openfire up-to-date and compatible with newer implementations from NimBuzz, Gtalk and Jitsi. Openfire has a Jingle-Nodes plugin which replaces the legacy Openfire media proxy, but it is ignored by Spark.

 

The ideal and proper way of doing this would be to update the Smack Jingle library (smackx-jingle), but it seems to be abandoned and would require some effort to study the code and appreciable time to implement the changes. The other option is to hack a working and actively maintained implementation based on Smack like Jitsi. As I have an immediate need for a Java-based Jingle library, I have opted for the second option.

 

The project is hosted here. If you are interested and can afford to be involved, please send me a private message

 

Openfire-Ringo

Once upon a time I used to code server-side JavaScript in the Netscape and IIS and all that changed with managed code, frameworks and templating using J2EE or .Net. As usual, life goes on in repeating cycles and JavaScript is now the rage and back in fashion thanks to NodeJs and Google's very fast V8 JavaScript engine. I recently caught up with RingoJs which is a ComonJs framework implementation of Mozilla'a Rhino JavaScript engine. Rhino imay not be as fast as NodeJs, but because it uses Jetty 7.5, it will enables us to provide Openfire with its own server-side scripting engine.

 

So what can we do with Openfire-Ringo?

 

Quite a lot. Just imagine JavaScript plugins for Openfire that can be managed directly from the admin web console and having privilege access to the Openfire server-side API and plugins. They can be used to extend Openfire like regular Java plugins and expose the business and enterprise features of an XMPP server like Openfire to a new generation of jQuery developers.

 

The project is hosted here. If you are interested and can afford to be involved, please send me a private message

 

Update

Got first working version of OpenfireJS running. I am quite please with the results.

 

Here is a working example of using Openfire Message Interceptor to intecept every message in Openfire and print the packet to the info log file from JavaScript. The script will continue to run until Openfire is shutdown or the script is deleted.

 

var log = Packages.org.jivesoftware.util.Log;

var interceptorMgr = Packages.org.jivesoftware.openfire.interceptor.InterceptorManager;

var interceptor =  { interceptPacket: function (packet, session, incoming, processed)

{

          if (processed) log.info(packet);

} }

 

var myInterceptor = new org.jivesoftware.openfire.interceptor.PacketInterceptor(interceptor);

interceptorMgr.getInstance().addInterceptor(myInterceptor);


 

To give it a spin, head to the project home page. You will need Openfire 3.7.2 with jetty 7.5.  Not tested on on any lower version

9

I have a just added WebRTC audio/video support to OfChat to confirm that the proposed WebRTC transport for Jingle actually works.

 

Image2.jpg

OfChat is a web client for Openfire implemented as a Chrome extension. I am not releasing the WebRTC code until the the next release of Chrome which will use JSEP instead of ROAP.

 

UPDATE

 

I have attached the latest OfChat Chrome extension (ver 0.0.8) with support for WebRTC using the Jingle WebRTC Transport proposal. Sadly, the proposal is to be withdrawn, so this might be incompatible with anything else in a few months time. See posting below for requirements. It is all in HTML and JavaScript, so finds where Chrome installs it to see source code.

0

Jingle [1] defines a framework for negotiating and managing out-of-band multimedia sessions over XMPP. In order to provide a flexible framework, the base Jingle specification omits data transport methods and media session types, requiring separate specifications. Typical peer-to-peer session types include voice chat (see Jingle Audio Content Description Format [2]) and video chat (see Jingle Video Content Description Format [3]) which are based on the Real-time Transport Protocol (RTP) and will be suitable for WebRTC.

 

WebRTC uses a protocol called JavaScript Session Establishment Protocol (JSEP) [4] that pulls the media negotiation and signaling state machine out of the browser into JavaScript. JSEP like Jingle separates session descriptions from transports and exposes the media negotiation to the application developer making it very compatible with Jingle,.

 

In order to use WebRTC with the Jingle RTP-ICE Transport Method [5] requires the developer to translate between the web browser session descriptions and Jingle. This means understanding WebRTC SDP and correct translation into Jingle by the call initiator and back into SDP by the call target. The developer must also create correct RTP-ICE transport candidates at both call ends.

 

When both paticipants of an audio/video call are both web browsers supporting WebRTC,  we already know that the web browsers will transport the media between each other, so it makes for a simpler and neater approach to simply forward the session description messages emitted from the web browser as Jingle session info payload messages instead of translating web browser SDP offer/answer media data into Jingle session descriptions and constructing redundant transport candidates.

 

This document defines a new Jingle transport method for establishing and managing WebRTC media streams.

 

For the full proposed specification, please go here

10

For those who are following, WebRTC is a free, open project that enables web browsers with Real-Time Communications (RTC) capabilities via simple Javascript APIs and is now available for Chrome.

 

A while ago, I implemented a Websocket plugin for Openfire that uses Jetty 7.5. Work is already under way by community member Pat Santora to make it a core plugin for Openfire.

 

WebRTC with WebSockets when fully functional, will enable audio and video conferencing from a web browser without the need for a browser plugin like Flash and even a media server like Red5. The media connection will be peer to peer directly between browsers and the signaling can be SIP, Jingle or whatever over a WebSocket connection or HTTPRequest.

 

To see how WebRTC compares to Flash Player with RTMFP, I created a simple web page demo using the WebSockets plugin for Openfire and JavaScript and tested with the latest Chrome Canary 19.0.1041.

 

Image2.jpg

 

Performance is good, but it is still early days as the WebRTC specification is still evolving. There are active debates on signaling, device capability discovery and where to hide the the complex code; JavaScript libraries or the Browser. For those who want to see what's under the hood, I have attached the single web page. Run two instances from two different PCs. Change the JavaScript to suit your own Openfire server.

 

I think I have enough to get started on adding two-way Jingle Audio/Video to the OfChat web client using a WebRTC compatible transport.

1

Release of Smack 3.2.2

Posted by rcollier Feb 6, 2012

The latest version of Smack is now available for download.  There have been several bugfixes related to file transfer and minor improvements in this version.

 

Barring anything being broken specifically by this release, the next version of Smack will be 3.3, there are no plans for a 3.2.3 version.

 

Here is a list of issues resolved in this release.

 

  • SMACK-263 -         Set file info in all send* methods
  • SMACK-338 -         IBB filetransfer doesn't work as expected
  • SMACK-346 -         Bug in return code for rejection handling in FileTransferManager
  • SMACK-349 -         Smack's IBB sends too much data in a packet
  • SMACK-350 -         Bytestream is not working in Spark 2.6.3 from XP to W7
  • SMACK-353 -         Thread leak in the FaultTolerantNegotiator
  • SMACK-354 -         Provide milliseconds in timestamp colum debugwindow
  • SMACK-322 -         NPE in XMPPConnection
  • SMACK-324 -         Investigate SASL issue with jabberd2 servers
  • SMACK-348 -         Documentation error - broken link
  • SMACK-362 -         smack throw NoSuchElementException if the muc#roominfo_subject has no values
  • SMACK-343 -         Make Smack jar an OSGi bundle.

 

NOTE: The documentation links have not been updated yet, but the jar files are available.

18

Spark 2.7.0 beta 1

Posted by Walter Ebeling Dec 23, 2011

Dear Community,

 

after some more weeks of testing, debugging and developing, we would like to ask for your support and publish the first beta of Spark 2.7.0. Ultimately, we would like to move Spark to Java 7, but that is currently not implemented via the installers. This will change in January after an update to the lastest version von Install4j provided by ej-Technologies.

 

You can find the nightly build for Windows here:  http://bamboo.igniterealtime.org/browse/SPARK-INSTALL4J-543/artifact/JOB1/Instal l4j

 

About Java 7: Spark 2.7.0 will run with Java 7. Please interchange the bundled JRE (located at Spark-install-folder\JRE) against a Java 7 JRE or use the installer named spark_2_6_3_12555_online.exe and install Java 7 as default on Windows. Using Java 7 will stop Spark from stealing the focus, when a new message is received.

 

Important Note: Oracle has introduced a bug in Java 1.6.0 u 25-27 that prevents Spark from closing automatically during the log-off on the Windows plattform. This is not Spark related. This affects all users that install the Spark version without an included JRE.

 

About file transfer: Spark 2.7.0 beta 1 is fixing an big bug with file transfer. Spark 2.6.x has an programmatic error that was making IBB file transfer very unstable. Tim Jentz deserves a big credit for finding this after weeks of debugging. Great job Tim!!!

Spark 2.7.0 will also move to a standard implementation for IBB file transfer. As a result of moving to the standard IBB implementation, you may have issues with transfer between Spark 2.7.0 and Spark 2.5.8 on IBB. This is an unavoidable result of obeying the standard. IBB is the fall back implementation, if Bytestream is not an option. Hence IBB is not the regular transfer method as it is much slower than Bytestream.

 

About plugins: There were large scale changes in the way Spark is dealing internally with plugins/extensions. All Plugin developers are kindly ask to review, if their plugins are still working. This applies also to Fastpath. Feedback regarding issues with this are highly appreciated.

 

About GUI: The Spark developers are only supporting JTattoo Luna. There are several reports that other skins are not working properly. This applies especially to Substance. If you are experiencing any GUI bug, please check if JTattoo Luna is also having this issue and report it.

As a general statement, I would urge all professional users to use the customizing options of Spark to get rid of Substance in corporate environments. The dev team may ultimately decide to remove Substance for 2.7x in a future release.

 

About Mac and Windows7 64 bit: The next Mac release is NOT secured. We are looking for a developer who can provide a Mac beta release. The integration to Windows7 64 bit is ok, but the flashing notification in the tray may or may not work. A tester and developer (MS C++ Code)  for this is also needed.

 

The change log for this beta is:

 

SPARK-1465     Checkboxes appear bigger then normal since the jtattoo update

SPARK-1464     When user accepts group chat invitation, status is always online

SPARK-1460     No group context menu on a right click

SPARK-1459     Update to the latest JTattoo version (Nov 2011)

SPARK-1452     If conferences tab is hidden, then Fastpath tab is hidden also

SPARK-1451     Vcard popup is not always showing up on mouse hover

SPARK-1450     When network connection is lost, chat window cannot be closed

SPARK-1449     UNC Path does not link to folder

SPARK-1445     Selecting 'Start a chat' in a group chat room opens an incomplete chat window

SPARK-1444     Subscription dialog shows the id value instead of the nickname

SPARK-1443     Privacy plugins cannot be accessed if we log into Spark through the IP address of the server

SPARK-1465     Checkboxes appear bigger then normal since the jtattoo update

SPARK-1464     When user accepts group chat invitation, status is always online

SPARK-1460     No group context menu on a right click

SPARK-1459     Update to the latest JTattoo version (Nov 2011)

SPARK-1452     If conferences tab is hidden, then Fastpath tab is hidden also

SPARK-1451     Vcard popup is not always showing up on mouse hover

SPARK-1450     When network connection is lost, chat window cannot be closed

SPARK-1449     UNC Path does not link to folder

SPARK-1445     Selecting 'Start a chat' in a group chat room opens an incomplete chat window

SPARK-1444     Subscription dialog shows the id value instead of the nickname

SPARK-1443     Privacy plugins cannot be accessed if we log into Spark through the IP address of the server

SPARK-1442     JabberVersion.java uses hardcoded value "Spark IM Client" for version name

SPARK-1441     ContactItem in shared group - right click popup menu performs copy when move is selected

SPARK-1440     Bug in ConferenceUtils.java that can break smack communication

SPARK-1439     Plugins are loaded in random order - plugins with no dependency has to be loaded first

SPARK-1438     Avatars are not scaled in user login/logout notification dialog

SPARK-1437     Bug in PrivacyManager that can break smack communication

SPARK-1429     Update French translation

SPARK-1427     Default Appearance/Colors cannot be overwritten through plugin;Group-Chat colors are hard-coded

SPARK-1423     typo error in LayoutSettings.java

SPARK-1422     persist vcard may throw file not found exception when jid is empty

SPARK-1421     Application version and application name are hardcoded

SPARK-1420     The messages in the set status message window is not getting deleted

SPARK-1419     Chat room configuration shows wrong roles for which presence is broadcast

SPARK-1418     Update simplified Chinese translation

SPARK-1414     Chat window is not flashing when receiving new message on Windows 7 64 bit

SPARK-1413     Update build.xml to check for Java 7

SPARK-1411     Sometimes file transfer indication is not updated on the receiving side

SPARK-1408     Remove "#" character next to Accounts button on the login screen

SPARK-1405     Improved last activity recognition

SPARK-1403     Enhance ability to extend core classes like ContactItem, ContactGroup, etc through plugin

SPARK-1400     Update to latest version Exe4J

SPARK-1381     Group Chat - Actions/Start a conference menu: propose bookmarked room (if any) instead of adhoc (random) room name

SPARK-1379     Support for XEP-0147

SPARK-1326     Make tabs position optional: TOP or BOTTOM; make search input appearance optional

SPARK-1324     SparkToaster showing avatars in real size

SPARK-1313     Enhance ability to overwrite spark properties values through plugin

SPARK-1215     Log out doesn't log out, it shuts down spark

SPARK-891       Typing notifications would be easier to see if also displayed near typing area

 

The beta release also includes a new Smack library that is based on Smack 3.2.1 plus the following bugfixes:

 

SMACK-362      smack throw NoSuchElementException if the muc#roominfo_subject has no values

SMACK-354      Provide milliseconds in timestamp colum debugwindow

SMACK-353      Thread leak in the FaultTolerantNegotiator

SMACK-350      Bytestream is not working in Spark 2.6.3 from XP to W7

SMACK-349      Smack's IBB sends too much data in a packet

SMACK-348      Documentation error - broken link

SMACK-346      Bug in return code for rejection handling in FileTransferManager

SMACK-343      Make Smack jar an OSGi bundle.

SMACK-338      IBB filetransfer doesn't work as expected

SMACK-336      There is an empty element in a SASL response

SMACK-335      Need to set file size and name for outgoing file transfer from input stream

SMACK-324      Investigate SASL issue with jabberd2 servers

SMACK-322      NPE in XMPPConnection

SMACK-263      Set file info in all send* methods

 

Expect a second beta in the first quarter 2012 that will include the latest final release of Smack

 

Please report issues in the Developer Forum

9

Seasonal Greetings

Posted by Walter Ebeling Dec 22, 2011

Dear Community!

 

Another year has passed for this open source project and various developers have contributed significantly to nearly all of our projects. We were able to finally release Openfire 3.7 and Spark 2.6.3 under Apache 2.0 license. The most important Smack library has also seen several releases and last but not least the good old instant messaging gateway Kraken returned to us. Some great innovations were presented like SparkWeb/Redfire, Websocks and Candy. I really would like to thank all developers involved by contributing code and all users and system admins that went through this year. A very special thank you goes to Daryl Herzmann who keeps the servers healthy and Wroot for outstanding work in the forum. I would also like to single out Guus der Kinderen for his insights in Openfire architecture and the release of Openfire 3.7.

 

Merry Christmas to all of you and a happy, healthy and sucessful 2012

34

The Ignite Realtime community is happy to announce the release of version 3.7.1 of Openfire! Downloads for various platforms are available here.

 

Openfire is a real time collaboration (RTC) server licensed under the Open Source Apache license. It uses the only widely adopted open protocol for instant messaging, XMPP (also called Jabber). Openfire is incredibly easy to setup and administer, but offers rock-solid security and performance.

 

The 3.7.1 release is primarily a bugfix release. Amongst others, these issues have been addressed:

  • A number of enhancements were made to the server-to-server connectivity. Server-to-Server connectivity was enhanced and a bug preventing a successful dialback was fixed.
  • Various improvements have been made to platform specific installers and scripts.
  • The Multi-User Chat implementation has received various tweaks and updates.

The full changelog is available on the Openfire project page.

 

We welcome your feedback, suggestions, tips, hints, questions and other contributions in the Ignite Realtime Community pages.

2

If you use openfire-jappix plugin on your server, you should update to version 0.0.2 which uses the the new 0.8 package

 

Please read

 

http://codingteam.net/project/jappix/news/show/500-jappix_users_please_update

 

and

 

http://codingteam.net/project/jappix/browse/diff/1319/1320/

44

Ignite Realtime community is happy to release OfChat (Openfire Chat), a Google Chrome extension that puts a chat toolbar on any web site you want so you don't have to switch back and forth between tabs or have to resize your browser window to include your desktop chat application on your screen.

 

Image1.jpg

 

OfChat does not require a front-end Apache web server or middle-man BOSH server and connects directly with Openfire eliminating the cross-domain issues associated with web browser application like SparkWeb, Jappix or Candy. With WebSockets, it is as fast as a chat desktop application. It also uses Google Alerts when the Chrome window is minimised.

 

OfChat is based on on Gtalklet for by Sean Zheng and has been modified to work with Openfire BOSH and the WebSockets Plugin for Openfire 3.7.1. It uses Strophe JavaScript library by Jack Moffitt and includes a new Openfire.Connection class which implements the full Strophe.Connection class for Openfire WebSockets. Openfire.Connection should work with other Stophe based applications as a direct replacement for Strophe.Connection..

 

OfChat does not have a conventional roster display with groups. You have to start typing into the search area to filter a list of contacts in Google search style and like the new Facebook contact list view. In order to see only online contacts, just press spacebar as your first character. Support for MUC (group-chat) will be added later on.

 

To install from Chrome, just click on this link or download and install from the attached ofchat.crx file.

 

After you install the extension, go to the extension's preferences and enter your Openfire account credentials. Enter your Openfire BOSH URL. It is usually http://your_server:7070/http-bind/. Please don't select WebSockets unless you have upgraded your Openfire server to use jetty 7.5.1+ and running the WebSockets plugin. Once you've signed in, reload one of your tabs and you should see it pop up in the lower right-hand corner. Once you see it in the corner of your screen, just hit the grey circle to log in. Once you log in, you can set status as normal. Click the plus sign as many times you need to search for a contact and start a new chat.You can block it from showing up on certain sites from the extension's preferences.

7

This is an implementation of WebSockets for the Openfire XMPP server. It consists a plugin for Openfire and a low-level JavaScript library suitable to be used with jQuery.

 

Why?

Recently, I have been involved in shaping an XMPP protocol extension (XEP) for simple application remote control of telephony devices for financial trading systems. This XEP is called Openlink and is still evolving.

 

I use XMPP Bosh to provide an Openlink Javascript library for web based applications and I am seeking to improve performance and scalability beyond the limitations of long-polling BOSH connections, so I decided to investigate replacing BOSH with Websockets in my Openlink Javascript library.

What did you do?

The Websocket protocol is close to finalising and Jetty (the embedded web server for Openfire) has been supporting WebSocket since Nov 2009 in version 7.0.1 which is the Jetty version in current Openfire 3.7.0. My first attempt of using the Jetty WebSocketServelet? class from Openfire 3.7.0 with Google Chrome web browser failed and I am not sure why. The WebSockets specification has changed a lot over the last two years and both Chrome and Jetty have kept up with it, so I was not surprised.

 

I therefore decided to recompile Openfire from SVN (version 3.7.1 Alpha) with latest Jetty 7.5.1 and finally got it working.

 

 

I then implemented a very thin XMPP stanza based Javascript class called openfire-websockets which exposes a minimium "Stophe" like connection object which I tested with the XMPP console application in chapter 4 of the book "Professional XMPP Programming with JavaScript and jQuery" by Jack Moffitt.


 

 

 

How?

You can use this plugin from Openfire 3.7.0. Just replace openfire.jar and slf4j-log4j12.jar in OPENFIRE_HOME\lib.

Should I?

If you do most of your application development with XMPP like I do, using Openfire and need fast and simple access to the low level XMPP messages as DOM elements in Javascript from JQuery right now, then take a look at openfire-websockets.js

Where?

http://code.google.com/p/openfire-websockets/

4

logo2.gif

ej-Technologies has granted a multi-plattform license of install4j to the Spark community. The community developers gladly accept the donation to the project. This will give all core developers of Spark the opportunity to use the features of install4j for during the development of the Spark installer.

 

Install4j is the installation plattform for Spark since many years and has helped to provide multi-plattform support and great integration in the operation systems.

 

About ej-Technologies:
ej-technologies GmbH was founded in 2001 as a privately held company and specializes in solutions that help programmers make the most of their        own applications. With its focused expertise in the areas of performance and deployment, ej-technologies is developing the next generation of enterprise application development tools.

 

If you have any questions regarding install4j and it's usage during the Spark development, please contact me via community mail.

 

Kind regards,


Walter Ebeling

39

Hi

 

again an experimental Smack to fix IBB transfers for Spark 2.6.3. This is an experimental build with patches based on the Smack 3.2. branch. The patch itself is published in SMACK-351

 

The Smack code is not using IQ Stanzas for IBB file transfer since the implementation is not correct.  Smack 3.2.1 also breaks file transfers via IBB to Spark 2.5.8. This alpha should fix:

 

SMACK-350                    Bytestream is not working in Spark 2.6.3 from XP to W7

SMACK-349                    Smack's IBB sends too much data in a packet

SMACK-263                    Set file info in all send* methods

SMACK-335                    Need to set file size and name for outgoing file transfer from input stream

 

 

Copy into the lib folder of the Spark installation folder and report results.


Walter

 

P.S. Also fixes SASL against jabberd2 since http://issues.igniterealtime.org/browse/ SMACK-324 is included.

18

Image2.jpg

 

 

I have received a couple of emails about Jappix MiniChat not working properly with Openfire BOSH.  The main issue seems to be that the Openfire BOSH is not handling the reconnection properly as the user browses from page to page.

 

I'll be surprised if it did as the implementation was a few years ago and the BOSH specification has moved on since. More importantly was that it was designed to work with SparkWeb which was always resident on the web page until the user logged off. In this mode, Openfire BOSH works very well.

 

A possible solution for using Jappix MiniChat with Openfire is to use this same approach and keep Jappix resident on the web page as the user browses from page to page. My way of doing this is to use a main top page container with the Jappix MiniChat which puts the content web page in an <iframe> tag. I then call JavaScript on the main top page from within the iframe to control Jappix.

 

Of course, this does not always work especially if the content page promotes itself to be the top main page for security purposes like Goole Mail for example. In practice, I use Jappix MiniChat with my own web applications and even if my web page is hijacked, cross domain security will stop malicious JavaScript controlling my application.

 

If this solution will work for you, then use the attached HTML file and adapt it to your needs.

1 2 3 ... 11 Previous Next