summaryrefslogtreecommitdiff
path: root/Utility
diff options
context:
space:
mode:
authorGravatar Joey Hess <joeyh@joeyh.name>2016-11-17 17:19:04 -0400
committerGravatar Joey Hess <joeyh@joeyh.name>2016-11-17 18:30:50 -0400
commit49da2d5efdad0038f22bc5e3bc50cf117849d472 (patch)
treea5b5bb140c712f2d49e6ff5f3488fcdd5539ac60 /Utility
parent6a176acc6e40a68740dab363eac4bdd324a77eb8 (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.hs7
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