MyNixOS website logo
Description

CoAP implementation for Haskell.

CoAP library for writing CoAP clients, servers or just for decoding and encoding CoAP messages. The Network.CoAP.Server and Network.CoAP.Client modules allows building CoAP servers and clients on top of a messaging layer which provides reliable transport of CoAP requests/responses.

Hcoap is a haskell CoAP library. See http://coap.technology/ for more information about the CoAP protocol. The library aims to support RFC 7252 specification, and currently only support non-secure CoAP transport.

The library is split into a high-level API in Network.CoAP.Server and Network.CoAP.Client, and a lower layer API in Network.CoAP.Message for working directly with CoAP messages.

Build Status

Example server

main =
  withSocketsDo $ do
    sock <- socket AF_INET6 Datagram defaultProtocol
    bindSocket sock (SockAddrInet6 5683 0 iN6ADDR_ANY 0)
    server <- createServer (createUDPTransport sock) (\(request, _) -> do
      let payload = Just (B.pack "{\"value\":\"foo\"}")
      return (Response Content [ContentFormat ApplicationJson] payload))
    runServer server

Example client

main = do
  let request = Request { requestMethod = GET
                        , requestOptions = []
                        , requestPayload = Nothing
                        , requestReliable = True }
withSocketsDo $ do
  sock <- socket AF_INET6 Datagram defaultProtocol
  bindSocket sock (SockAddrInet6 0 0 iN6ADDR_ANY 0)
  let transport = createUDPTransport sock
  client <- createClient transport
  uri <- parseURI "coap://[::1]:5683/hello"
  response <- doRequest client uri request
  putStrLn ("Got response: " ++ show response)
  return ()
Metadata

Version

0.1.2.1

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows