anchor.diff:                                     Stream#stream{remotewin=NewWin}
                              end, Streams),
       parse_settings(Rest, State#state{initial_window_size=InitialWindowSize,
  -                                     streams=Streams2});
  -parse_settings(<<_:16, _:32, Rest/binary>>, State) ->
  -    parse_settings(Rest, State);
  -parse_settings(<<>>, State) ->
  +                                     streams=Streams2}, NextBin);
  +parse_settings(<<16#2:16, 0:32, Rest/binary>>, State, NextBin) ->
  +    %% SETTINGS_ENABLE_PUSH
  +    parse_settings(Rest, State#state{remote_enable_push=false}, NextBin);
  +parse_settings(<<16#2:16, 1:32, Rest/binary>>, State, NextBin) ->
  +    %% SETTINGS_ENABLE_PUSH
  +    parse_settings(Rest, State#state{remote_enable_push=true}, NextBin);
  +parse_settings(<<16#2:16, _:32, _Rest/binary>>, State, _NextBin) ->
  +    %% SETTINGS_ENABLE_PUSH with value not in {0,1} is error.
  +    connection_error(State, ?PROTOCOL_ERROR);
  +parse_settings(<<_:16, _:32, Rest/binary>>, State, NextBin) ->
  +    parse_settings(Rest, State, NextBin);
  +parse_settings(<<>>, State, NextBin) ->
       send_settings_ack(State),
  -    State.
  +    on_recv(NextBin, State).
   
   start_request(StreamId, Headers, StreamState,
                 State=#state{streams=Streams, pids=Pids}) ->
  
positive.code:     <<_Payload:Len/binary, NextBin/binary>> = Bin,
      on_recv(NextBin, State).
  
  strip_padding(Bin, Len, Flag) when Flag band ?FLAG_PADDED =:= 0 ->
      <<Payload:Len/binary, Rest/binary>> = Bin,
      {Payload, Rest};
  
negative.code:                     {noreply, State3}
              end
      end;
  handle_cast({push, _StreamId, _Headers}, State) ->
      {noreply, State};
  handle_cast({reply, StreamId, Headers, Body, Final}, State) ->
      case find_stream(StreamId, State) of
          error ->
  