public byte[] addHeaders(byte[] data)
	{
		List<Byte> result = new ArrayList<Byte>();

		// Header byte
		result.add((byte)0x03);

		// Timestamp
		long timediff = System.currentTimeMillis() - startTime;
		result.add((byte)((timediff & 0xFF0000) >> 16));
		result.add((byte)((timediff & 0x00FF00) >> 8));
		result.add((byte)(timediff & 0x0000FF));

		// Body size
		result.add((byte)((data.length & 0xFF0000) >> 16));
		result.add((byte)((data.length & 0x00FF00) >> 8));
		result.add((byte)(data.length & 0x0000FF));

		// Content type
		result.add((byte)0x11);

		// Source ID
		result.add((byte)0x00);
		result.add((byte)0x00);
		result.add((byte)0x00);
		result.add((byte)0x00);

		// Add body
		for (int i = 0; i < data.length; i++)
		{
			result.add(data[i]);
			if (i % 128 == 127 && i != data.length - 1)
				result.add((byte)0xC3);
		}

		byte[] ret = new byte[result.size()];
		for (int i = 0; i < ret.length; i++)
			ret[i] = result.get(i);

		return ret;
	}