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]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

  • No Candidates
Versions [RSS] 0.1.0.0, 0.1.0.1, 0.1.0.2, 0.1.1.0, 0.1.2.0, 0.1.2.1
Dependencies async (>=2.0 && <3), base (>=4 && <5), binary (>=0.7 && <0.8), bytestring (>=0.10 && <0.11), dns (>=2 && <3), hcoap, iproute (>=1.3 && <2), mtl (>=2.1 && <2.3), network (>=2.6 && <2.7), network-uri (>=2.6 && <3), random (>=1.1 && <2), stm (>=2.4 && <2.5), 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
Executables hcoap-example-client, hcoap-example-server
Downloads 3426 total (16 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user
Build status unknown [no reports yet]

Readme for hcoap-0.1.2.1

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