anchor.diff:      message(send, Msg, S);
   
   %% Monitor has sent an outgoing message.
  -transition(Bin, S)
  -  when is_binary(Bin) ->
  -    message(ack, Bin, S);
  +transition(Msg, S)
  +  when is_record(Msg, diameter_packet);
  +       is_binary(Msg) ->
  +    message(ack, Msg, S);
   
   %% Deferred actions from a message_cb.
   transition({actions, Dir, Acts}, S) ->
  
positive.code: 
  %% cb/3
  
  cb(false, _, Bin) ->
      [Bin];
  
  cb(CB, Dir, Msg) ->
      diameter_lib:eval([CB, Dir, Msg]).
  
negative.code: %% request. Ignoring possible extra arguments, calls are of the
  %% following form.
  %%
  %% cb(recv, Msg)          Receive a message into diameter?
  %% cb(send, Msg)          Send a message on the socket?
  %% cb(ack,  Msg)          Acknowledgement of a completed send.
  %% cb(ack,  false)        Acknowledgement of a discarded request.
  %%
  %% Msg will be binary() in a recv callback, but can be a
  %% diameter_packet record in a send/ack callback if a recv/send
  %% callback returns a record. Callbacks return a list of the following
  %% form.
  %%
  %%   [boolean() | send | recv | binary() | #diameter_packet{}]
  %%
  %% The atoms are meaningless by themselves, but say whether subsequent
  %% messages are to be sent or received. A boolean says whether or not
  %% to continue reading on the socket. Messages can be received even
  %% after false is returned if these arrived in the same packet. A
  %% leading recv or send is implicit on the corresponding callbacks. A
  