@@ -31,8 +31,8 @@ module Ouroboros.Network.ConnectionHandler
3131 ( Handle (.. )
3232 , HandleWithExpandedCtx
3333 , HandleWithMinimalCtx
34- , HandleError (.. )
35- , classifyHandleError
34+ , HandlerError (.. )
35+ , classifyHandlerError
3636 , MkMuxConnectionHandler (.. )
3737 , MuxConnectionHandler
3838 , makeConnectionHandler
@@ -110,7 +110,7 @@ sduHandshakeTimeout = 10
110110-- * 'HandleHandshakeServerError'
111111-- - the connection handler thread was running server side of the
112112-- handshake protocol, which fail with 'HandshakeException'
113- -- * 'HandleError '
113+ -- * 'HandlerError '
114114-- - the multiplexer thrown 'MuxError'.
115115--
116116data Handle (muxMode :: Mx. Mode ) initiatorCtx responderCtx versionData bytes m a b =
@@ -155,42 +155,46 @@ type HandleWithMinimalCtx muxMode peerAddr versionData bytes m a b =
155155 (ResponderContext peerAddr )
156156 versionData bytes m a b
157157
158- data HandleError (muxMode :: Mx. Mode ) versionNumber where
159- HandleHandshakeClientError
160- :: HasInitiator muxMode ~ True
161- => ! (HandshakeException versionNumber )
162- -> HandleError muxMode versionNumber
158+ -- | A connection handler error.
159+ --
160+ -- It is returned either when creating the `Handle` or raised by the connection
161+ -- handler.
162+ --
163+ data HandlerError versionNumber =
164+ -- | A handshake exception when creating `Handle`.
165+ HandleHandshakeClientError ! (HandshakeException versionNumber )
163166
164- HandleHandshakeServerError
165- :: HasResponder muxMode ~ True
166- => ! (HandshakeException versionNumber )
167- -> HandleError muxMode versionNumber
167+ -- | A handshake exception when creating `Handle`.
168+ | HandleHandshakeServerError ! (HandshakeException versionNumber )
168169
169- HandleError
170- :: ! SomeException
171- -> HandleError muxMode versionNumber
170+ -- | A connection handler exception (e.g. might be a mini-protocol error, io
171+ -- exception, etc).
172+ | HandlerError ! SomeException
173+ deriving Show
172174
173- instance Show versionNumber
174- => Show (HandleError muxMode versionNumber ) where
175- show (HandleHandshakeServerError err) = " HandleHandshakeServerError " ++ show err
176- show (HandleHandshakeClientError err) = " HandleHandshakeClientError " ++ show err
177- show (HandleError err) = " HandleError " ++ show err
175+ instance ( Typeable versionNumber
176+ , Show versionNumber
177+ )
178+ => Exception (HandlerError versionNumber ) where
179+ displayException (HandleHandshakeClientError err) = " handshake client error: " ++ show err
180+ displayException (HandleHandshakeServerError err) = " handshake server error: " ++ show err
181+ displayException (HandlerError err) = " connection handler error: " ++ show err
178182
179183
180- classifyHandleError :: HandleError muxMode versionNumber
181- -> HandleErrorType
182- classifyHandleError (HandleHandshakeClientError (HandshakeProtocolLimit _)) =
184+ classifyHandlerError :: HandlerError versionNumber
185+ -> HandlerErrorType
186+ classifyHandlerError (HandleHandshakeClientError (HandshakeProtocolLimit _)) =
183187 HandshakeProtocolViolation
184188-- TODO: 'HandshakeProtocolError' is not a protocol error! It is just
185189-- a negotiation failure. It should be renamed.
186- classifyHandleError (HandleHandshakeClientError (HandshakeProtocolError _)) =
190+ classifyHandlerError (HandleHandshakeClientError (HandshakeProtocolError _)) =
187191 HandshakeFailure
188- classifyHandleError (HandleHandshakeServerError (HandshakeProtocolLimit _)) =
192+ classifyHandlerError (HandleHandshakeServerError (HandshakeProtocolLimit _)) =
189193 HandshakeProtocolViolation
190- classifyHandleError (HandleHandshakeServerError (HandshakeProtocolError _)) =
194+ classifyHandlerError (HandleHandshakeServerError (HandshakeProtocolError _)) =
191195 HandshakeFailure
192196-- any other exception, e.g. MuxError \/ IOError, codec errors, etc.
193- classifyHandleError ( HandleError _) =
197+ classifyHandlerError ( HandlerError _) =
194198 HandshakeProtocolViolation
195199
196200
@@ -202,7 +206,7 @@ type MuxConnectionHandler muxMode socket initiatorCtx responderCtx peerAddr vers
202206 socket
203207 peerAddr
204208 (Handle muxMode initiatorCtx responderCtx versionData bytes m a b )
205- (HandleError muxMode versionNumber )
209+ (HandlerError versionNumber )
206210 versionNumber
207211 versionData
208212 m
@@ -212,15 +216,15 @@ type MuxConnectionHandler muxMode socket initiatorCtx responderCtx peerAddr vers
212216type MuxConnectionManager muxMode socket initiatorCtx responderCtx peerAddr versionData versionNumber bytes m a b =
213217 ConnectionManager muxMode socket peerAddr
214218 (Handle muxMode initiatorCtx responderCtx versionData bytes m a b )
215- (HandleError muxMode versionNumber )
219+ (HandlerError versionNumber )
216220 m
217221
218222-- | Type alias for 'ConnectionManager' which is using expanded context.
219223--
220224type ConnectionManagerWithExpandedCtx muxMode socket peerAddr versionData versionNumber bytes m a b =
221225 ConnectionManager muxMode socket peerAddr
222226 (HandleWithExpandedCtx muxMode peerAddr versionData bytes m a b )
223- (HandleError muxMode versionNumber )
227+ (HandlerError versionNumber )
224228 m
225229
226230-- | To be used as `makeConnectionHandler` field of 'ConnectionManagerArguments'.
@@ -298,15 +302,14 @@ makeConnectionHandler muxTracers forkPolicy
298302 throwIO (ExceptionInHandler remoteAddress err)
299303
300304 outboundConnectionHandler
301- :: HasInitiator muxMode ~ True
302- => InResponderMode muxMode ( StrictTVar m (StrictMaybe ResponderCounters )
305+ :: InResponderMode muxMode ( StrictTVar m (StrictMaybe ResponderCounters )
303306 -> Tracer m (WithBearer (ConnectionId peerAddr ) Trace )
304307 , versionData -> DataFlow )
305308 -> ConnectionHandlerFn (ConnectionHandlerTrace versionNumber versionData )
306309 socket
307310 peerAddr
308311 (Handle muxMode initiatorCtx responderCtx versionData ByteString m a b )
309- (HandleError muxMode versionNumber )
312+ (HandlerError versionNumber )
310313 versionNumber
311314 versionData
312315 m
@@ -339,7 +342,7 @@ makeConnectionHandler muxTracers forkPolicy
339342 -- handshake negotiation failures, but not with 'IOException's or
340343 -- 'MuxError's.
341344 `catch` \ (err :: SomeException ) -> do
342- atomically $ writePromise (Left (HandleError err))
345+ atomically $ writePromise (Left (HandlerError err))
343346 throwIO err
344347 case hsResult of
345348 Left ! err -> do
@@ -382,14 +385,13 @@ makeConnectionHandler muxTracers forkPolicy
382385
383386
384387 inboundConnectionHandler
385- :: HasResponder muxMode ~ True
386- => ( StrictTVar m (StrictMaybe ResponderCounters )
388+ :: ( StrictTVar m (StrictMaybe ResponderCounters )
387389 -> Tracer m (WithBearer (ConnectionId peerAddr ) Trace ))
388390 -> ConnectionHandlerFn (ConnectionHandlerTrace versionNumber versionData )
389391 socket
390392 peerAddr
391393 (Handle muxMode initiatorCtx responderCtx versionData ByteString m a b )
392- (HandleError muxMode versionNumber )
394+ (HandlerError versionNumber )
393395 versionNumber
394396 versionData
395397 m
@@ -422,7 +424,7 @@ makeConnectionHandler muxTracers forkPolicy
422424 -- handshake negotiation failures, but not with 'IOException's or
423425 -- 'MuxError's.
424426 `catch` \ (err :: SomeException ) -> do
425- atomically $ writePromise (Left (HandleError err))
427+ atomically $ writePromise (Left (HandlerError err))
426428 throwIO err
427429
428430 case hsResult of
0 commit comments