anchor.diff:  
   %% recv1/3
   
  -%% Incoming request after DPR has been sent: discard. Don't discard
  -%% DPR, so both ends don't do so when sending simultaneously.
  +%% Incoming request after outgoing DPR: discard. Don't discard DPR, so
  +%% both ends don't do so when sending simultaneously.
   recv1(Name,
         #diameter_packet{header = #diameter_header{is_request = true} = H},
         #state{dpr = {_,_,_}})
     when Name /= 'DPR' ->
  -    invalid(false, recv_after_dpr, H);
  +    invalid(false, recv_after_outgoing_dpr, H);
  +
  +%% Incoming request after incoming DPR: discard.
  +recv1(_,
  +      #diameter_packet{header = #diameter_header{is_request = true} = H},
  +      #state{dpr = true}) ->
  +    invalid(false, recv_after_incoming_dpr, H);
   
   %% DPA with identifier mismatch, or in response to a DPR initiated by
   %% the service.
  
positive.code: 
  %% dpr/2
  %%
  %% The RFC isn't clear on whether DPR should be send in a non-Open
  %% state. The Peer State Machine transitions it documents aren't
  %% exhaustive (no Stop in Wait-I-CEA for example) so assume it's up to
  %% the implementation and transition to Closed (ie. die) if we haven't
  
negative.code:     Peer = {self(), Caps},
      dpr(CBs, [Reason, Ref, Peer], S);
  
  %% Connection is open, DPR already sent or received.
  dpr(_, #state{state = 'Open'}) ->
      ok;
  
  