CoAP over TCP - eclipse-californium/californium GitHub Wiki

Californium currently have an experimental and incomplete implementation of CoAP (Constrained Application Protocol) over TCP, TLS, and WebSockets - RFC8323

The current implementation is based on TCP connector based on Netty 4.x.
The idea about having a Client TCP connector based on JDK only was raised by the past but there is nothing like this for now.

Here is an attempt to list already implemented and missing features.
A minimal viable feature should probably implement all mandatory feature.

CoAP over TCP

Feature Mandatory Implemented Comments
Message Format :heavy_check_mark: :heavy_check_mark:
Capabilities and Settings Messages :heavy_check_mark: :x: From 3.3 .Message Transmission : Once a Transport Connection is established, each endpoint MUST send a CSM (see Section 5.3) as its first message on the connection. ... ... Endpoints MUST treat a missing or invalid CSM as a connection error and abort the connection (see Section 5.6).
Keep Alive :question: A minimal viable feature should at least ignore Keep Alive
Ping/Pong :heavy_check_mark: :x: A minimal viable feature should at least answer to Ping with a Pong
Ping/Pong : Custody Option :x:
Release Messages :x:
Release Messages : Alternative-Address Option :x:
Release Messages : Hold-Off :x:
Abort Messages :heavy_check_mark: :x:
Abort Messages : Bad-CSM-Option :x:
Block-Wise Transfer :heavy_check_mark:
Block-Wise Transfer : BERT Option :heavy_check_mark:
Observing Resource :construction: Partially implemented, missing : "If the client observes one or more resources over a reliable transport, then the CoAP server ... MUST remove all entries associated with the client endpoint from the lists of observers when the connection either times out or is closed."

CoAP over TLS over TCP

Feature Mandatory Implemented Comments
PreSharedKey :heavy_check_mark: :question: "PreSharedKey", "RawPublicKey", or "Certificate" is mandatory to implement for the TLS binding, depending on the credential type used with the device. A device compliant with the profile in this section MUST implement TLS_PSK_WITH_AES_128_CCM_8 and follow the guidance from this section.
RawPublicKey :heavy_check_mark: :question: "PreSharedKey", "RawPublicKey", or "Certificate" is mandatory to implement for the TLS binding, depending on the credential type used with the device. A device compliant with the profile in this section MUST implement TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 and follow the guidance from this section..
Certificate :heavy_check_mark: :question: "PreSharedKey", "RawPublicKey", or "Certificate" is mandatory to implement for the TLS binding, depending on the credential type used with the device. A device compliant with the profile in this section MUST implement TLS_ECDHE_ECDSA_WITH_AES_128_CCM_8 and follow the guidance from this section.

Note about CCM_8 mandatory cipher suite, there is discussions to know if it should be deprecated or not.
So a first minimal viable feature could start with cipher suites supported by JDK/netty (see #1488-comment).

CoAP over WebSocket

Nothing specific to WebSocket is currently implemented.