anchor.diff:  status_string(available  ) -> ?DLINK_ARG_AVAILABLE;
   status_string(unavailable) -> ?DLINK_ARG_UNAVAILABLE.
   
  -process_authorize(FromPid, PeerIP, PeerPort, TransactionID, RemoteAddress, RemotePort,
  -                  Protocol, Signature, CompSpec) ->
  -
  +process_authorize(FromPid, PeerIP, PeerPort, TransactionID, RemoteAddress,
  +		  RemotePort, ProtoVersion, Signature, Certificates, CompSpec) ->
       ?info("dlink_tcp:authorize(): Peer Address:   ~p:~p", [PeerIP, PeerPort ]),
       ?info("dlink_tcp:authorize(): Remote Address: ~p~p", [ RemoteAddress, RemotePort ]),
       ?info("dlink_tcp:authorize(): Protocol Ver:   ~p", [ ProtoVersion ]),
       ?debug("dlink_tcp:authorize(): TransactionID:  ~p", [ TransactionID ]),
  -    ?debug("dlink_tcp:authorize(): Certificate:    ~p", [ Certificate ]),
       ?debug("dlink_tcp:authorize(): Signature:      ~p", [ Signature ]),
   
       { LocalAddress, LocalPort } = rvi_common:node_address_tuple(),
  
positive.code:               RemoteAddress,
                RemotePort,
                ProtoVersion,
                Signature ] =
                  opts([?DLINK_ARG_TRANSACTION_ID,
                        ?DLINK_ARG_ADDRESS,
                        ?DLINK_ARG_PORT,
                        ?DLINK_ARG_VERSION,
                        ?DLINK_ARG_SIGNATURE],
                       Elems, undefined),
  
              process_authorize(FromPid, PeerIP, PeerPort,
                                TransactionID, RemoteAddress, RemotePort,
                                ProtoVersion, Signature, CompSpec);
  
          ?DLINK_CMD_SERVICE_ANNOUNCE ->
              [ TransactionID,
  
negative.code: 	[not_found] ->
  	    false
      end.
  
  term_to_json(Term) ->
      binary_to_list(iolist_to_binary(exo_json:encode(Term))).
  
  opt(K, L, Def) ->
      case lists:keyfind(K, 1, L) of
  	{_, V} -> V;
  	false  -> Def
      end.
  
  opts(Keys, Elems, Def) ->
      [ opt(K, Elems, Def) || K <- Keys].
  