anchor.diff:      {noreply, S#{ fragments := [Fragment | Fragments] }};
   handle_fragment(S = #{ fragments := Fragments }, N, M, _Fragment) ->
       lager:error("Got fragment ~p, expected ~p (out of ~p)", [N, length(Fragments) + 1, M]),
  -    close_connection(S),
  +    cleanup_connection(S),
       connect_fail(maps:remove(fragments, S)).
   
   handle_msg(S, MsgType, IsResponse, Result) ->
  
positive.code:     maps:get(role, State, no_role) == responder
          andalso maps:get(port, State, no_port) == no_port.
  
  close_connection(State) ->
      case maps:get(status, State, error) of
          {connected, ESock} -> enoise:close(ESock);
          _                  -> ok
  
negative.code:     send_send_block(State, Hash),
      {noreply, State};
  handle_cast(stop, State) ->
      cleanup_connection(State),
      {stop, normal, State};
  handle_cast(_Msg, State) ->
      {noreply, State}.
  