anchor.diff:  %% @author Marc Worrell
  -%% @copyright 2012 Marc Worrell
  +%% @copyright 2012-2019 Marc Worrell
   %% @doc Misc utility URL functions for zotonic
   
  -%% Copyright 2012 Marc Worrell
  +%% Copyright 2012-2019 Marc Worrell
   %%
   %% Licensed under the Apache License, Version 2.0 (the "License");
   %% you may not use this file except in compliance with the License.
  
positive.code:     false;
  ip_match_1(PeerAdr, [PeerAdr|_IPs]) ->
      true;
  ip_match_1(PeerAdr, [Local|IPs]) when Local =:= "local"; Local =:= local ->
      case is_local(PeerAdr) of
          true -> true;
          false -> ip_match_1(PeerAdr, IPs)
      end;
  ip_match_1(_PeerAdr, [Any|_]) when Any =:= "any"; Any =:= any ->
      true;
  ip_match_1(_PeerAdr, [None|_]) when None =:= "none"; None =:= none ->
      false;
  ip_match_1(PeerAdr, [{MatchAdr,BitsNr}|IPs]) when is_tuple(MatchAdr), is_integer(BitsNr) ->
      case ip_match_mask(PeerAdr, MatchAdr, BitsNr) of
          true -> true;
  
negative.code:                 PeerAdr -> true;
                  _ -> ip_match(PeerAdr, IPs)
              end;
          [] ->
              ip_match(PeerAdr, IPs)
      end;
  ip_match_1(PeerAdr, [IP|IPs]) when is_binary(IP) ->
      ip_match_1(PeerAdr, [ binary_to_list(IP) | IPs ]).
  
  parse_address({_,_,_,_} = IP) -> {ok, IP};
  parse_address({_,_,_,_,_,_,_,_} = IP) -> {ok, IP};
  