diff options
author | Joey Hess <joeyh@joeyh.name> | 2016-11-17 17:19:04 -0400 |
---|---|---|
committer | Joey Hess <joeyh@joeyh.name> | 2016-11-17 18:30:50 -0400 |
commit | 49da2d5efdad0038f22bc5e3bc50cf117849d472 (patch) | |
tree | a5b5bb140c712f2d49e6ff5f3488fcdd5539ac60 /Utility | |
parent | 6a176acc6e40a68740dab363eac4bdd324a77eb8 (diff) |
implementation of peer-to-peer protocol
For use with tor hidden services, and perhaps other transports later.
Based on Utility.SimpleProtocol, it's a line-based protocol,
interspersed with transfers of bytestrings of a specified size.
Implementation of the local and remote sides of the protocol is done
using a free monad. This lets monadic code be included here, without
tying it to any particular way to get bytes peer-to-peer.
This adds a dependency on the haskell package "free", although that
was probably pulled in transitively from other dependencies already.
This commit was sponsored by Jeff Goeke-Smith on Patreon.
Diffstat (limited to 'Utility')
-rw-r--r-- | Utility/SimpleProtocol.hs | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/Utility/SimpleProtocol.hs b/Utility/SimpleProtocol.hs index 708f590e7..728b135e8 100644 --- a/Utility/SimpleProtocol.hs +++ b/Utility/SimpleProtocol.hs @@ -5,6 +5,9 @@ - License: BSD-2-clause -} +{-# LANGUAGE FlexibleInstances #-} +{-# OPTIONS_GHC -fno-warn-orphans #-} + module Utility.SimpleProtocol ( Sendable(..), Receivable(..), @@ -88,3 +91,7 @@ dupIoHandles = do nullh `hDuplicateTo` stdin stderr `hDuplicateTo` stdout return (readh, writeh) + +instance Serializable [Char] where + serialize = id + deserialize = Just |