anchor.diff:  %% A failure anywhere in a message ultimately causes the entire datagram
   %% to be rejected.
   unpack(<<Maybe_Message_Type:?PPSPP_MESSAGE_SIZE, Rest/binary>>, Parsed_Messages) ->
  -    {ok, Type} = validate_message_type(Maybe_Message_Type),
  +    Type = get_message_type(Maybe_Message_Type),
       [{ok, Parsed_Message}, Maybe_More_Messages] = parse(Type, Rest),
       unpack(Maybe_More_Messages, [Parsed_Message | Parsed_Messages]).
   
  
positive.code:                        ?PEX_REScert -> pex_rescert
                     end,
      ?DEBUG("message: parser got valid message type ~p~n", [Message_Type]),
      {ok, Message_Type};
  %% message types that are not acceptable eg peer is using more recent spec
  validate_message_type(_Maybe_Message_Type) ->
      ?DEBUG("message: parser got invalid message type ~p~n", [_Maybe_Message_Type]),
      {error, ppspp_message_type_not_recognised}.
  
  %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
  %%-spec ... parse takes a msg_type, _data, and returns
  %%    {error, something} or {ok, {key, orddict}} for the unpacked message
  %%    [{Type, Parsed_Message}, Maybe_More_Messages]
  %% TODO parse should probably be unpack/2 and then drop validate_message_type/1
  parse(handshake, <<Channel:?PPSPP_CHANNEL_SIZE, Maybe_Options/binary>>) ->
      {ok, Options, Maybe_Messages} = ppspp_options:unpack(Maybe_Options),
      {ok, {handshake, orddict:store(channel, Channel, Options) }, Maybe_Messages};
  
negative.code: %% api
  -export([unpack/1,
           pack/1,
           get_message_type/1,
           handle/1]).
  
  -opaque messages() :: list( message()).
  