Smack Jobs - igniterealtime/Smack GitHub Wiki

This is a list of open unpaid Jobs for Smack, i.e. work that could/should be done. If you are interested in helping open source development by taking one of these Jobs then please contact us in #smack (Freenode, IRC) before you start coding. It's important that we discuss the road-map and design of your project. Jobs tagged with "GSOC" are potential Google Summer of Code Projects (of course, only if we are accepted).

Add support for vCard4 (XEP-292) and add abstraction layer for vcard-temp

Difficulty: medium-hard Tags: Java, Vcard, GSOC

See https://igniterealtime.org/issues/browse/SMACK-685 and http://xmpp.org/extensions/xep-0292.html

Take care of Smack's BOSH code and jBOSH

Difficulty: hard Tags: Java, BOSH, GSOC

Smack's BOSH code and the jBOSH library were written ~2009. Development stopped two years later. The code was not written with Android in mind. The aSmack project needed to apply heavy patches to Smack's BOSH code and jBOSH in order to get it running on Android. All patches have now been included into Smack and jBOSH.

The code still has some rough edges. For example jBOSH's unit test's are non-deterministic, they fail occasionally.

Fix javadoc doclint warnings

Difficulty: easy-medium Tags: javadoc

Java8's javadoc doclint feature produces some warnings when run on Smack. Those should get fixed.

Add support for "PKIX over Secure HTTP (POSH)"

Difficulty: medium Tags: TLS, Java

Add support for https://datatracker.ietf.org/doc/draft-ietf-xmpp-posh/. See https://igniterealtime.org/issues/browse/SMACK-640

Improve/Rewrite PubSub and PEP implementation

Difficulty: hard Tags: Java, PubSub, GSOC

Currently PubSub and PEP don't share any code, as they were written indepently from each other. But since PEP is a subset of PubSub, it should use Smack's PubSub API (SMACK-416).

Resurrect integration tests

Difficulty: easy-medium Tags: Java, XMPP Server, Integration Test

Smack has had integration tests since the beginning. Sadly the state of the integration tests deteriorated over the time, to a point where they had to be "disabled". Their code still exists in the integration-test folders, but is likely not compatible with Smack 4. Your task is to move legacy integration tests from the integration-test folders, to the new shiny integration test framework: smack-integration-test. See also documentation/developer/integrationtest.md.

Bundled XMPP service for the integration tests

Difficulty: medium Tags: Java, XMPP Server, Integration Test

Create an embedded test environment. For example Apache Camel uses Vysper, a Java based XMPP server, for their integration tests. But other solutions are conceivable. Prosody is an interesting candidate, because it does support Stream Management (XEP-198). The embedded test environment should pull, i.e. download, all requirement components and set them up in an throw away environment, so that it can get deleted after the integration tests were run.

Transform XMPP data classes to follow the guidelines

Difficulty: medium Tags: Java, Design Patterns

Transform XMPP classes to follow https://github.com/igniterealtime/Smack/blob/master/documentation/developer/stanzas.md#general-rules

Fix unit tests

Difficulty: medium Tags: Java, Unit Test

There are some unit test (mostly in the file transfer related unit test code), that are not sound synchronized (e.g. they use Thread.sleep(X) to "wait" for something to happen). This causes those tests to randomly fail, e.g. when Travis-CI is busy. Find and fix those tests.

Increase the unit test coverage

Difficulty: medium Tags: Java, Unit Test

Increase the unit test coverage as reported by gradle jacocoRootReport in build/reports/jacoco by writing good (!) unit tests.

Check for changelog entry and snapshot dependencies

Difficulty: easy Tags: Gradle

Gradle should check if a changelog entry exists for release builds. This should help prevent releases without a changelog entry. Furthermore release builds should not have dependencies on alpha, beta, snapshot, etc. artifacts. Maybe Gradle's Component Selection Rules can be used for that.

Improve SmackDebugger

Difficulty: medium Tags: Java

The SmackDebugger interface consists of many unused legacy methods, that should get removed. The overall process how a debugger is hooked into a XMPP connection could be possible simplified.

Change API to use TimeUnit instead of long

Difficulty: easy Tags: Java

Create sample Android App

Difficulty: medium Tags: Java, Android

Smack 4.1 runs native on Android. Create a sample Android App to show how Smack can be used on Android.

Create minimal libidn alternative

Difficulty: medium Tags: Java, Android

libidn provides XMPP profile for stringprep and nameprep. But sadly its usage of Arrays.binarySearch() make it not suitable for Android API < 9. Provide a XMPP focused alternative to libidn that runs on Android 8 (Smacks minimal Android API level).

Create XMPPLLConnection for Serverless Messaging (XEP-174, link-local)

Difficulty: hard Tags: Java, Non-blocking IO, Android, GSOC

This job is already assigned to a GSOC student

Since 2009 there exists a patchset which adds serverless messaging (link-local) support to Smack. Unfortunately the patch design is no longer compatible with recent Smack versions and thorough examination has shown that it needs major rewriting in order to fulfil the requirements for inclusion in the 'master' branch. Also Smack's abstraction regarding Connection code, in particular regarding parsing, is not (yet) perfect. It is possible that some code from smack-tcp could be useful for smack-serverless too. And since serverless messaging means that every participant needs to establish a (TCP) connection to every other entity it wishes to communicate with, smack-serverless should make use of java.nio. Or do you want to create thread for every connection? :)

Serverless Messaging is also a often request feature from users using Smack on Android, so the code has to be Android compatible.

There is already some work done regarding serverless messaging: https://github.com/igniterealtime/Smack/pull/25

Goals include:

  • Use java.nio to manage the connections
  • XMPPConnection should work as defined in the interface contract
  • XMPPLLConnection should manage a set of XMPPLLStreams
  • Multiple XMPPLLConnections should be supported (on the same host)
  • Create smack-serverless with an interface for the multi-cast DNS service
  • Create smack-serverless-jmdns, using the latest JmDNS
  • Create smack-serverless-android, using Android's NsdManager, beware of https://code.google.com/p/android/issues/detail?id=35810

Further resources:

More Jobs

Have a look at the open issues found in Smack's Bug Tracker JIRA: https://igniterealtime.org/issues/secure/IssueNavigator.jspa?reset=true&mode=hide&jqlQuery=project+%3D+SMACK+AND+resolution+%3D+Unresolved+ORDER+BY+priority+DESC