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 contractXMPPLLConnection
should manage a set ofXMPPLLStreams
- Multiple
XMPPLLConnection
s 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