As a platform user I want a clear and simple procedure for introducing my own transport layer implementations. Major advancements were implemented within the scope of
KAA-247 where the new implementation of the platform layer, binary protocol, was functionally decoupled from the underlying transport implementation.
Now it is necessary to:
1. modularize the architecture of the transport layer on both Operations server and endpoint SDK sides;
2. identify transport layer implementations with unique names (the recommendation is to use classpath-like names, such as "org.kaaproject.protocol.transport.binary"), and versions. On the wire the protocols must be identified with 32-bit integers: protocol IDs. (The recommendation is to hash the protocol name with CRC32 to obtain the ID value. The protocol implementation does not need to know the textual protocol name for any purpose other than debugging, the hashed value is sufficient for operation.)
3. make Bootstrap server a "transparent proxy" for the connection parameters reported by the Operations servers to Zookeeper. Only the server- and endpoint-side implementations of the protocol must be aware of the format and contents of the connection parameters. Bootstrap server must report them to the endpoints as a set of protocol ID - version - connection parameters binary blob combinations.
4. document the procedure for creating and using new transport protocol implementations.