hcoap: CoAP implementation for Haskell.

[ bsd3, library, network, program ] [ Propose Tags ]

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.

[Skip to Readme]
Versions [RSS] [faq],,,,,
Dependencies async (>=2.0 && <3), base (==4.*), binary (==0.7.*), bytestring (==0.10.*), dns (==2.*), hcoap, iproute (>=1.3 && <2), mtl (>=2.1 && <2.3), network (==2.6.*), network-uri (>=2.6 && <3), random (>=1.1 && <2), stm (==2.4.*), time (>=1.4 && <1.6) [details]
License BSD-3-Clause
Copyright Copyright (c) 2016, Ulf Lilleengen
Author Ulf Lilleengen
Maintainer ulf.lilleengen@gmail.com
Category Network
Home page https://github.com/lulf/hcoap
Source repo head: git clone git://github.com/lulf/hcoap.git
Uploaded by lulf at 2016-02-18T21:36:00Z
Distributions NixOS:
Executables hcoap-example-client, hcoap-example-server
Downloads 2955 total (23 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Hackage Matrix CI
Docs uploaded by user
Build status unknown [no reports yet]




Maintainer's Corner

For package maintainers and hackage trustees


Readme for hcoap-

[back to package description]

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 ()