Constrained Application Protocol: Difference between revisions

Content deleted Content added
Mkarts (talk | contribs)
Put inactive (for years) projects and tools into own section
ce
 
(6 intermediate revisions by 2 users not shown)
Line 41:
|}
 
=== CoAP Fixedfixed-Sizesize Headerheader ===
The first 4 bytes are mandatory in all CoAP datagrams, they constitute the fixed-size header.
 
These fields can be extracted from these 4 bytes in C via these macros:
<syntaxhighlight lang="c">
#define COAP_HEADER_VERSION(data) ( (0xC0 & (data)[0]) >> 6 )
#define COAP_HEADER_TYPE(data) ( (0x30 & (data)[0]) >> 4 )
Line 202 ⟶ 203:
| coap || Dart || RFC 7252|| Client || Blockwise Transfers, Observe, Multicast, Proxying (partial) || MIT || https://github.com/shamblett/coap
|-
| aiocoap || Python 3 || RFC 7252, RFC 7641, RFC 7959, RFC 8323, RFC 7967, RFC 8132, RFC 9176, RFC 8613, RFC 9528|| Client + Server || Blockwise Transfers, Observe (partial) || MIT || {{URL|https://pypi.python.org/pypi/aiocoap}}
|-
| Californium || Java || RFC 7252, RFC 7641, RFC 7959|| Client + Server || Observe, Blockwise Transfers, Multicast (since 2.x), DTLS (+ DTLS 1.2 Connection ID) || EPL+EDL || {{URL|https://www.eclipse.org/californium}} {{URL|https://github.com/eclipse/californium}}
|-
| CoAP implementation for GoCoAPSharp || [[GoC#, (programming language)|Go]].NET || RFC 7252|| Client + Server || Core, +Observe, DraftBlock, SubscribeRD || MIT || {{URL|http://www.coapsharp.com https://github.com/dustinFemtomaxInc/go-coapcoapsharp}}
|-
| CoAPSharpFreeCoAP || C#, .NET || RFC 7252|| Client + Server + HTTP/CoAP Proxy || Core, ObserveDTLS, Block,Blockwise RDTransfers || MITBSD || http://www.coapsharp.com {{URL|https://github.com/FemtomaxInckeith-cullen/coapsharpFreeCoAP}}
|-
| Erbium for ContikiGo-CoAP || C[[Go (programming language)|Go]] || RFC 7252, RFC 8232, RFC 7641, RFC 7959|| Client + Server || Core, Observe, Blockwise, TransfersMulticast, TCP/TLS || 3-clauseApache BSDLicense 2.0 || http{{URL|https://wwwgithub.contikicom/plgd-os.orgdev/ (ergo-rest-example)coap}}
|-
| FreeCoAPjava-coap || CJava || RFC 7252, RFC 7641, RFC 7959, RFC 8323|| Client + Server + HTTP/CoAP|| Proxy ||Core, DTLS,Apache BlockwiseLicense Transfers2.0 || BSD {{URL|| https://github.com/keith-cullenPelionIoT/FreeCoAPjava-coap}}
|-
| java-coaplibcoap || JavaC || RFC 7252, RFC 7390, RFC 7641, RFC 7959, RFC 7967, RFC 8132, RFC 8323, RFC 8516, RFC 8613, RFC 8768, RFC 8974, RFC 9175, RFC 9177|| Client + Server ||Core, Observe, ||Multicast, ApacheBlockwise LicenseTransfers, 2.0Patch/Fetch, OSCORE, (D)TLS || BSD/GPL || https://github.com/PelionIoTobgm/java-coaplibcoap
|-
|libcoapy
| libcoap || C || RFC 7252, RFC 7390, RFC 7641, RFC 7959, RFC 7967, RFC 8132, RFC 8323, RFC 8516, RFC 8613, RFC 8768, RFC 8974, RFC 9175, RFC 9177|| Client + Server ||Core, Observe, Multicast, Blockwise Transfers, Patch/Fetch, OSCORE, DTLS || BSD/GPL || https://github.com/obgm/libcoap
|Python
| colspan="3" |same support as libcoap
|MIT
|{{URL|https://github.com/anyc/libcoapy}}
|-
| lobaro-coap || C || RFC 7252|| Client + Server ||Observe, Blockwise Transfers || MIT || {{URL|http://www.lobaro.com/lobaro-coap}}
|-
| microCoAPy || MicroPython || RFC 7252|| Client + Server || Core || Apache License 2.0 || {{URL|https://github.com/insighio/microCoAPy}}
|-
| nanoCoAP || C || RFC 7252|| Client + Server || Core, Blockwise Transfers, DTLS || LGPL || {{URL|https://api.riot-os.org/group__net__nanocoap.html}}
|-
| node-coap || JavascriptJavaScript || RFC 7252,
RFC 7641, RFC 7959
| Client + Server || Core, Observe, Block || MIT || {{URL|https://github.com/mcollina/node-coap}}
|-
| Qt CoAP || C++ || RFC 7252|| Client || Core, Observe, Blockwise Transfers || GPL, Commercial || https://doc.qt.io/qt-6/qtcoap-index.html
|-
| coap-rs || Rust || RFC 7252|| Client + Server || Core, Multicast, Observe option, ''Too Many Requests'' Response Code || MIT || {{URL|https://github.com/Covertness/coap-rs}}
{{URL|https://docs.rs/coap/}}
|-
|}
 
==Proxy implementations==
There exist [[Proxy server|proxy]] implementations which provide [[Forward proxy|forward]] or [[Reverse proxy|reverse]] proxy functionality for the CoAP protocol and also implementations which translate between protocols like HTTP and CoAP.
 
The following projects provide proxy functionality:
* [http://telecom.dei.unipd.it/pages/read/90/ Squid 3.1.9 with transparent HTTP-CoAP mapping module]
* [https://code.google.com/p/jcoap/ jcoap Proxy]
Line 250 ⟶ 258:
| CoAP Shell || Java || RFC 7252|| Client || Observe, Blockwise Transfers, DTLS || Apache License 2.0 || https://github.com/tzolov/coap-shell
|-
| Copper || JavaScript (Browserbrowser Pluginplugin) || RFC 7252|| Client || Observe, Blockwise Transfers || 3-clause BSD || https://github.com/mkovatsc/Copper https://addons.mozilla.org/firefox/addon/copper-270430/{{Dead link|date=July 2019 |bot=InternetArchiveBot |fix-attempted=yes }}
|-
|}
Line 263 ⟶ 271:
| Canopus || [[Go (programming language)|Go]] || RFC 7252|| Client + Server || Core || Apache License 2.0 || https://github.com/zubairhamed/canopus
|-
| Go-CoAP implementation for Go || [[Go (programming language)|Go]] || RFC 7252, RFC 8232, RFC 7641, RFC 7959|| Client + Server || Core, Observe,+ Blockwise,Draft Multicast, TCP/TLSSubscribe || Apache License 2.0MIT || https://github.com/plgd-devdustin/go-coap
|-
| CoAP.NET || C# || RFC 7252, coap-13, coap-08, coap-03 || Client + Server || Core, Observe, Blockwise Transfers || 3-clause BSD || https://github.com/smeshlink/CoAP.NET
Line 270 ⟶ 278:
|-
| eCoAP || C || RFC 7252|| Client + Server || Core || MIT || https://gitlab.com/jobol/ecoap
|-
| Erbium for Contiki || C || RFC 7252|| Client + Server || Observe, Blockwise Transfers || 3-clause BSD || http://www.contiki-os.org/ (er-rest-example)
|-
| guile-coap || Guile || RFC 7252, RFC 8323 || Client + Server || || GPL-3.0-or-later || https://codeberg.org/eris/guile-coap
Line 277 ⟶ 287:
| jCoAP || Java || RFC 7252|| Client + Server || Observe, Blockwise Transfers || Apache License 2.0 || https://code.google.com/p/jcoap/
|-
| LibNyoci || C || RFC 7252|| Client + Server || Core, Observe, Block, DTLS || MIT || https://github.com/darconeous/libnyoci
|-
| microcoap || C || RFC 7252|| Client + Server || || MIT || https://github.com/1248/microcoap
|-
| nCoap || Java || RFC 7252|| Client + Server || Observe, Blockwise Transfers, CoRE Link Format, [https://tools.ietf.org/html/draft-kleine-core-coap-endpoint-id-01 Endpoint-ID-Draft] || BSD || https://github.com/okleine/nCoAP
Line 318 ⟶ 328:
* Certificate, where DTLS is enabled and the device uses [[X.509]] certificates for validation.
 
Research has been conducted on optimizing DTLS by implementing security associates as CoAP resources rather than using DTLS as a security wrapper for CoAP traffic. This research has indicated that improvements of up to 6.5 times none optimized implementations.<ref name="Security as a CoAP resource: An optimized DTLS implementation for the IoT">{{cite book |last1=Capossele |first1=Angelo |last2=Cervo |first2=Valerio |last3=De Cicco |first3=Gianluca |last4=Petrioli |first4=Chiara|title=2015 IEEE International Conference on Communications (ICC) |chapter=Security as a CoAP resource: An optimized DTLS implementation for the IoT |author4-link= Chiara Petrioli |date=June 2015 |journalpublisher=IEEE |pages=529–554 |doi= 10.1109/ICC.2015.7248379|isbn=978-1-4673-6432-4 |s2cid=12568959 }}</ref>
 
In addition to DTLS, RFC8613<ref>{{Cite journal|last1=Palombini|first1=Francesca|last2=Seitz|first2=Ludwig|last3=Selander|first3=Goeran|last4=Mattsson|first4=John|title=Object Security for Constrained RESTful Environments (OSCORE)|url=https://tools.ietf.org/html/rfc8613.html|access-date=2021-05-07|website=tools.ietf.org|year=2019 |doi=10.17487/RFC8613 |s2cid=58380874 |language=en}}</ref> defines the Object Security for Constrained RESTful Environments ([[OSCORE]]) protocol which provides security for CoAP at the application layer.