anchor.diff:  %%----------------------------------------------------------------------
   %%  The user_default private API
   %%----------------------------------------------------------------------
  +
  +-spec diameter_service_info(Services, Info) -> Result
  +	when
  +		Services :: [term()],
  +		Info :: [Item],
  +		Item :: peer | applications | capabilities
  +				| transport | connections | statistics,
  +		Result :: [ServiceResult],
  +		ServiceResult :: {Service, [term()]},
  +		Service :: term().
  +%% @hidden
  +diameter_service_info(Services, []) ->
  +	Info = [peer, applications, capabilities,
  +			transport, connections, statistics],
  +	diameter_service_info(Services, Info, []);
  +diameter_service_info(Services, Info) ->
  +	diameter_service_info(Services, Info, []).
  +%% @hidden
  +diameter_service_info([Service | T], Info, Acc) ->
  +	diameter_service_info(T, Info,
  +			[{Service, diameter:service_info(Service, Info)} | Acc]);
  +diameter_service_info([], _Info, Acc) ->
  +	lists:reverse(Acc).
   
   -spec avp(Value) -> AVP
   	when
  
positive.code: help() ->
  	shell_default:help(),
  	io:format("** ocs commands ** \n"),
  	io:format("di()       -- diameter services info\n"),
  	io:format("di(acct, Info) -- diameter accounting services info\n"),
  	io:format("di(auth, Info) -- diameter authentication and authorization services info\n"),
  	true.
  
  -spec di() -> Result
  	when
  		Result :: term().
  %% @doc Get information on running diameter services.
  di() ->
  	Info = [peer, applications, capabilities,
  			transport, connections, statistics],
  	F = fun F([H | T], Acc) ->
  			F(T, [diameter:service_info(H, Info) | Acc]);
  		F([], Acc) ->
  			lists:reverse(Acc)
  	end,
  	case diameter:services() of
  		Services when length(Services) > 0 ->
  			F(Services, []);
  		[] ->
  			[]
  	end.
  
  -spec di(ServiceType, Info) -> Result
  	when
  		ServiceType :: auth | acct,
  		Info :: [Values],
  		Values :: [] | peer | applications | capabilities
  				| transport | connections | statistics,
  		Result :: term() | {error, Reason},
  		Reason :: unknown_service.
  %% @doc Get the status of running diameter services.
  di(auth, Info) ->
  	case diameter:services() of
  		[{ocs_diameter_auth_service, _, _} = Service, _] ->
  			diameter:service_info(Service, get_params(Info));
  		[_, {ocs_diameter_auth_service, _, _} = Service] ->
  			diameter:service_info(Service, get_params(Info));
  		[{ocs_diameter_auth_service, _, _} = Service] ->
  			diameter:service_info(Service, get_params(Info));
  		_ ->
  			{error, unknown_service}
  	end;
  di(acct, Info) ->
  	case diameter:services() of
  		[{ocs_diameter_acct_service, _, _} = Service, _] ->
  			diameter:service_info(Service, get_params(Info));
  		[_, {ocs_diameter_acct_service, _, _} = Service] ->
  			diameter:service_info(Service, get_params(Info));
  		[{ocs_diameter_acct_service, _, _} = Service] ->
  			diameter:service_info(Service, get_params(Info));
  		_ ->
  			{error, unknown_service}
  	end.
  
  -spec get_avp_info(AVP) -> Result
  	when
  
negative.code: -copyright('Copyright (c) 2016 - 2021 SigScale Global Inc.').
  
  %% export the user_default public API
  -export([help/0, di/0, di/1, di/2, get_avp_info/1]).
  
  -include_lib("diameter/include/diameter.hrl").
  
  