anchor.diff:      [start, result_codes, {group, traffic}, outstanding, empty, stop].
   
   groups() ->
  -    [{P, [P], Ts} || Ts <- [tc()], P <- [shuffle, parallel]]
  +    [{P, [P], Ts} || Ts <- [tc(tc())], P <- [shuffle, parallel]]
           ++
  -        [{?util:name([T,R,D,A,C,SD,SS,CD,CS]),
  +        [{?util:name([T,R,D,A,C,SD,SS,ST,CD,CS]),
             [],
             [{group, if SD orelse CD -> shuffle; true -> parallel end}]}
            || T <- ?TRANSPORTS,
  
positive.code:          handle_error/6,
           handle_request/3]).
  
  -include("diameter.hrl").
  -include("diameter_gen_base_rfc3588.hrl").
  -include("diameter_gen_base_accounting.hrl").
  
negative.code: %% send_error/send_timeout
  request(#diameter_base_RAR{}, _Caps) ->
      receive after 2000 -> {protocol_error, ?TOO_BUSY} end.
  
  %% message/3
  %%
  %% Limit the number of messages received. More can be received if read
  %% in the same packet.
  
  %% incoming request
  message(recv, <<_:32, 1, _/bits>> = Bin, N) ->
      [Bin, 1 < N, fun ?MODULE:message/3, N-1];
  
  %% incoming answer
  message(recv, Bin, _) ->
      [Bin];
  
  %% outgoing
  message(send, Bin, _) ->
      [Bin];
  
  %% sent request
  message(ack, <<_:32, 1, _/bits>>, _) ->
      [];
  
  %% sent answer or discarded request
  message(ack, _, N) ->
      [0 =< N, fun ?MODULE:message/3, N+1].
  