Kitchensync

Java Library for Distributed Communication


Project maintained by mrstampy Hosted on GitHub Pages — Theme by mattgraham

A Java Library for Distributed Communication

You are special agent Michael Roedick in charge of covert ops software development at the NSA. Keith Alexander has just called you into his office to discuss the requirements for software to support a covert programme.

"Hi Michael, thanks for beaming in. Good to see you. Take a seat. I trust you read the brief regarding Operation FUBAR?"

"Yes I did. So what kind of software do the operatives need?"

"It has to allow communication between field operatives and allow broadcasting of messages to groups. This includes text, images, videos…"

"Ok, what is the use case for it?"

"Right. The TI will be monitored by agents around the domicile. The software needs to be able to send false data to other operatives on a regular basis to provide plausible deniability. The operation data will be encrypted and the connections between operatives must be encrypted. When the TI leaves the agents around the domicile will need to send messages to alert agents in the field of the TI's movements. It needs to happen in near-realtime in order to coordinate the various operations each group must undertake."

"Ok, so the street theatre operatives and gaslighting operatives can coordinate based on whether the TI is in the vicinity or not, right?"

"Exactly. And it needs to be able to send pictures and video to either individual operatives or groups. The groups need to be easily created, communicated and destroyed on demand. And you'll need to use some open source libraries to disguise the software. You know, like what we did for Linux. Say, you still in touch with Linus?"

"I send him a fruit basket every Christmas. I think I've got it, and I know where to start."

You rise to leave when you hear your boss - "Ah ah ah - what do we say?"

"Whoops...Permission to leave the bridge sir."

"Permission granted."

Special Agent Roedick, KitchenSync is just the thing for you!

Release 2.0 - August 2, 2014

Release 1.2 - July 31, 2014

Release 1.1 - July 26, 2014

Quickstart

KitchenSync Architecture

KitchenSync is a Java Library for non-centralized network communication between separate processes using the UDP protocol. Channels can be created as multicast channels which allow broadcasting of messages to all connected channels, port-specific channels or next-port-available channels and are intended to be easily created and destroyed as required. It is built on top of Netty and is designed to be simple to understand and use while providing the ability to customise individual channels.

public class KiSyMessageChannel extends
        AbstractKiSyChannel<KiSyMessageByteBufCreator, KiSyMessageInitializer, NioDatagramChannel> {

    @Override
    protected KiSyMessageInitializer initializer() {
        return new KiSyMessageInitializer();
    }

    @Override
    protected Class<NioDatagramChannel> getChannelClass() {
        return NioDatagramChannel.class;
    }

    @Override
    protected KiSyMessageByteBufCreator initByteBufCreator() {
        return new KiSyMessageByteBufCreator();
    }

}

This reference implementation of KitchenSync-core provides a generic messaging object - KiSyMessage - which can be tailored for specific use. Of note in this RI: