Skip to content

Latest commit

 

History

History
80 lines (48 loc) · 5.88 KB

README.md

File metadata and controls

80 lines (48 loc) · 5.88 KB

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

  • Added isPortSpecificChannel to KiSyChannel interface, implemented in abstract superclasses
  • More efficient sorting of inbound and outbound handlers
  • Added ByteBufCreator interface to allow KiSyChannels to easily override the default message creation (strings, byte arrays and KiSyMessages.
  • generics fix in inbound and outbound managers

Release 1.1 - July 26, 2014

  • Added isMulticastChannel to KiSyChannel interface, implemented in abstract superclasses
  • Code reorganization

Quickstart

  • Ivy dependency - <dependency org="com.github.mrstampy" name="KitchenSync" rev="2.0"/>
  • Example code

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: