+ * This method is intended to be overridden.
+ *
+ * @param address the IP address and port, if null the connector is bound to an ephemeral port on the wildcard
+ * address
+ * @param coapConfig the Configuration
+ * @return the {@link Connector} used for unsecured {@link CoapEndpoint}
+ */
+ protected Connector createUnsecuredConnector(InetSocketAddress address, Configuration coapConfig) {
+ return new TcpClientConnector(coapConfig);
+ }
+
+ @Override
+ public CaliforniumIdentityExtractor createIdentityExtractor() {
+ return new CaliforniumIdentityExtractor() {
+ @Override
+ public Identity getIdentity(CoapExchange exchange) {
+ EndpointContext context = getForeignPeerContext(exchange);
+ InetSocketAddress peerAddress = context.getPeerAddress();
+ return Identity.unsecure(peerAddress);
+ }
+ };
+ }
+
+ @Override
+ public CaliforniumConnectionController createConnectionController() {
+ return new CaliforniumConnectionController() {
+ @Override
+ public void forceReconnection(Endpoint endpoint, ServerIdentity identity, boolean resume) {
+ // no connection in coap, so nothing to do;
+ }
+ };
+ }
+}
diff --git a/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/endpoint/coaptcp/CoapTcpProtocolProvider.java b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/endpoint/coaptcp/CoapTcpProtocolProvider.java
new file mode 100644
index 0000000000..028188dbcd
--- /dev/null
+++ b/leshan-client-cf/src/main/java/org/eclipse/leshan/client/californium/endpoint/coaptcp/CoapTcpProtocolProvider.java
@@ -0,0 +1,57 @@
+/*******************************************************************************
+ * Copyright (c) 2022 Sierra Wireless and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * and Eclipse Distribution License v1.0 which accompany this distribution.
+ *
+ * The Eclipse Public License is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.html.
+ *
+ * Contributors:
+ * Sierra Wireless - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.leshan.client.californium.endpoint.coaptcp;
+
+import java.net.InetSocketAddress;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.californium.core.config.CoapConfig;
+import org.eclipse.californium.core.config.CoapConfig.TrackerMode;
+import org.eclipse.californium.elements.config.Configuration;
+import org.eclipse.californium.elements.config.Configuration.ModuleDefinitionsProvider;
+import org.eclipse.californium.elements.config.SystemConfig;
+import org.eclipse.californium.elements.config.TcpConfig;
+import org.eclipse.californium.elements.config.UdpConfig;
+import org.eclipse.leshan.client.californium.enpoint.CaliforniumEndpointFactory;
+import org.eclipse.leshan.client.californium.enpoint.CaliforniumProtocolProvider;
+import org.eclipse.leshan.core.endpoint.Protocol;
+
+public class CoapTcpProtocolProvider implements CaliforniumProtocolProvider {
+
+ @Override
+ public Protocol getProtocol() {
+ return Protocol.COAP_TCP;
+ }
+
+ @Override
+ public void applyDefaultValue(Configuration configuration) {
+ configuration.set(CoapConfig.MID_TRACKER, TrackerMode.NULL);
+ configuration.set(CoapConfig.MAX_ACTIVE_PEERS, 10);
+ configuration.set(CoapConfig.PROTOCOL_STAGE_THREAD_COUNT, 1);
+ }
+
+ @Override
+ public List
+ * This method is intended to be overridden.
+ *
+ * @param address the IP address and port, if null the connector is bound to an ephemeral port on the wildcard
+ * address
+ * @param coapConfig the Configuration
+ * @return the {@link Connector} used for unsecured {@link CoapEndpoint}
+ */
+ protected Connector createUnsecuredConnector(InetSocketAddress address, Configuration coapConfig) {
+ return new TcpServerConnector(address, coapConfig);
+ }
+}
diff --git a/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/endpoint/coaptcp/CoapTcpProtocolProvider.java b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/endpoint/coaptcp/CoapTcpProtocolProvider.java
new file mode 100644
index 0000000000..a612449119
--- /dev/null
+++ b/leshan-server-cf/src/main/java/org/eclipse/leshan/server/californium/endpoint/coaptcp/CoapTcpProtocolProvider.java
@@ -0,0 +1,63 @@
+/*******************************************************************************
+ * Copyright (c) 2022 Sierra Wireless and others.
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * and Eclipse Distribution License v1.0 which accompany this distribution.
+ *
+ * The Eclipse Public License is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ * and the Eclipse Distribution License is available at
+ * http://www.eclipse.org/org/documents/edl-v10.html.
+ *
+ * Contributors:
+ * Sierra Wireless - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.leshan.server.californium.endpoint.coaptcp;
+
+import java.net.InetSocketAddress;
+import java.net.URI;
+import java.util.Arrays;
+import java.util.List;
+
+import org.eclipse.californium.core.config.CoapConfig;
+import org.eclipse.californium.core.config.CoapConfig.TrackerMode;
+import org.eclipse.californium.elements.config.Configuration;
+import org.eclipse.californium.elements.config.Configuration.ModuleDefinitionsProvider;
+import org.eclipse.californium.elements.config.SystemConfig;
+import org.eclipse.californium.elements.config.TcpConfig;
+import org.eclipse.californium.elements.config.UdpConfig;
+import org.eclipse.leshan.core.endpoint.EndpointUriUtil;
+import org.eclipse.leshan.core.endpoint.Protocol;
+import org.eclipse.leshan.server.californium.endpoint.CaliforniumEndpointFactory;
+import org.eclipse.leshan.server.californium.endpoint.CaliforniumProtocolProvider;
+
+public class CoapTcpProtocolProvider implements CaliforniumProtocolProvider {
+
+ @Override
+ public Protocol getProtocol() {
+ return Protocol.COAP_TCP;
+ }
+
+ @Override
+ public void applyDefaultValue(Configuration configuration) {
+ configuration.set(CoapConfig.MID_TRACKER, TrackerMode.NULL);
+ }
+
+ @Override
+ public List