Skip to content

Commit

Permalink
add stubs for carrier modules (#6400)
Browse files Browse the repository at this point in the history
  • Loading branch information
lazedo authored and jamesaimonetti committed Mar 23, 2020
1 parent bd168f6 commit f1278c1
Show file tree
Hide file tree
Showing 30 changed files with 1,183 additions and 74 deletions.
6 changes: 3 additions & 3 deletions core/kazoo_number_manager/src/carriers/knm_bandwidth.erl
Original file line number Diff line number Diff line change
Expand Up @@ -89,9 +89,9 @@ is_local() -> 'false'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
-spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
{error, any()}.
check_numbers(_Numbers) -> {error, not_implemented}.
-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
{'error', 'not_implemented'}.
check_numbers(_Numbers) -> {'error', 'not_implemented'}.

%%------------------------------------------------------------------------------
%% @doc Query the Bandwidth.com system for a quantity of available numbers
Expand Down
12 changes: 4 additions & 8 deletions core/kazoo_number_manager/src/carriers/knm_bandwidth2.erl
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@ is_number_billable(_Number) -> 'true'.
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
-spec check_numbers(kz_term:ne_binaries()) -> {ok, kz_json:object()} |
{error, any()}.
check_numbers(_Numbers) -> {error, not_implemented}.
-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
{'error', 'not_implemented'}.
check_numbers(_Numbers) -> {'error', 'not_implemented'}.

%%------------------------------------------------------------------------------
%% @doc Query the Bandwidth.com system for a quantity of available numbers
Expand Down Expand Up @@ -464,11 +464,7 @@ tollfree_search_response_to_KNM(Xml, QID) ->
%% @doc Convert a rate center XML entity to json
%% @end
%%------------------------------------------------------------------------------
-spec rate_center_to_json(kz_types:xml_els() | kz_types:xml_el()) -> kz_json:object().
rate_center_to_json([]) ->
kz_json:new();
rate_center_to_json([Xml]) ->
rate_center_to_json(Xml);
-spec rate_center_to_json(kz_types:xml_el()) -> kz_json:object().
rate_center_to_json(Xml) ->
kz_json:from_list(
props:filter_empty(
Expand Down
54 changes: 32 additions & 22 deletions core/kazoo_number_manager/src/carriers/knm_carriers.erl
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ check_fold(Module, {Nums, OKs0, KOs0}) ->

check_numbers(Module, Nums) ->
try apply(Module, check_numbers, [Nums]) of
{ok, JObj} -> {kz_json:to_map(JObj), #{}};
{'ok', JObj} -> {kz_json:to_map(JObj), #{}};
{error, _} -> {#{}, maps:from_list([{Num,<<"error">>} || Num <- Nums])}
catch
_:_ ->
Expand All @@ -127,8 +127,8 @@ available_carriers(Options) ->

-spec get_available_carriers(options()) -> kz_term:atoms().
get_available_carriers(Options) ->
case account_id(Options) =:= undefined
orelse reseller_id(Options) =:= undefined
case account_id(Options) =:= 'undefined'
orelse reseller_id(Options) =:= 'undefined'
of
'true' -> keep_only_reachable(?CARRIER_MODULES);
'false' ->
Expand All @@ -151,20 +151,32 @@ default_carrier() ->
%%------------------------------------------------------------------------------
-spec all_modules() -> kz_term:ne_binaries().
all_modules() ->
[<<"knm_bandwidth2">>
,<<"knm_bandwidth">>
[<<"knm_bandwidth">>
,<<"knm_bandwidth2">>
,<<"knm_didww">>
,<<"knm_flowroute">>
,<<"knm_inteliquent">>
,<<"knm_inum">>
,<<"knm_local">>
,<<"knm_inventory">>
,<<"knm_it_vocal">>
,<<"knm_level3">>
,<<"knm_local">>
,<<"knm_managed">>
,<<"knm_mdn">>
,<<"knm_o1">>
,<<"knm_other">>
,<<"knm_peerless">>
,<<"knm_reserved">>
,<<"knm_reserved_reseller">>
,<<"knm_simwood">>
,<<"knm_telnyx">>
,<<"knm_thinq">>
,<<"knm_verizon">>
,<<"knm_vitelity">>
,<<"knm_voip_innovations">>
,<<"knm_voxbone">>
,<<"knm_windstream">>
,<<"knm_ziron">>
].

%%------------------------------------------------------------------------------
Expand All @@ -173,11 +185,10 @@ all_modules() ->
%%------------------------------------------------------------------------------
-spec info(kz_term:api_ne_binary(), kz_term:api_ne_binary(), kz_term:api_ne_binary()) -> kz_json:object().
info(AuthAccountId, AccountId, ResellerId) ->
AvailableCarriers = available_carriers([{account_id, AccountId}
,{reseller_id, ResellerId}
AvailableCarriers = available_carriers([{'account_id', AccountId}
,{'reseller_id', ResellerId}
]),
Acc0 = #{?CARRIER_INFO_MAX_PREFIX => 15
},
Acc0 = #{?CARRIER_INFO_MAX_PREFIX => 15},
Map = lists:foldl(fun info_fold/2, Acc0, AvailableCarriers),
kz_json:from_map(
Map#{?CARRIER_INFO_USABLE_CARRIERS => usable_carriers()
Expand All @@ -187,11 +198,10 @@ info(AuthAccountId, AccountId, ResellerId) ->

-spec info_fold(module(), map()) -> map().
info_fold(Module, Info=#{?CARRIER_INFO_MAX_PREFIX := MaxPrefix}) ->
try apply(Module, info, []) of
try apply(Module, 'info', []) of
#{?CARRIER_INFO_MAX_PREFIX := Lower}
when is_integer(Lower), Lower < MaxPrefix ->
Info#{?CARRIER_INFO_MAX_PREFIX => Lower
};
Info#{?CARRIER_INFO_MAX_PREFIX => Lower};
_ -> Info
catch
_E:_R ->
Expand Down Expand Up @@ -228,8 +238,8 @@ allowed_creation_states(AccountId) ->
acquire(T0=#{todo := Ns}) ->
F = fun (N, T) ->
case knm_number:attempt(fun acquire/1, [N]) of
{ok, NewN} -> knm_numbers:ok(NewN, T);
{error, R} -> knm_numbers:ko(N, R, T)
{'ok', NewN} -> knm_numbers:ok(NewN, T);
{'error', R} -> knm_numbers:ko(N, R, T)
end
end,
lists:foldl(F, T0, Ns);
Expand Down Expand Up @@ -262,16 +272,16 @@ acquire(Number, ?NE_BINARY=Mod, 'false') ->
disconnect(T0=#{todo := Ns}) ->
F = fun (N, T) ->
case knm_number:attempt(fun disconnect/1, [N]) of
{ok, NewN} -> knm_numbers:ok(NewN, T);
{error, R} ->
{'ok', NewN} -> knm_numbers:ok(NewN, T);
{'error', R} ->
Num = knm_phone_number:number(knm_number:phone_number(N)),
knm_numbers:ko(Num, R, T)
end
end,
lists:foldl(F, T0, Ns);
disconnect(Number) ->
Module = knm_phone_number:module_name(knm_number:phone_number(Number)),
try apply(Module, disconnect_number, [Number]) of
try apply(Module, 'disconnect_number', [Number]) of
Result -> Result
catch
'error':_ ->
Expand Down Expand Up @@ -340,23 +350,23 @@ is_number_billable(PhoneNumber) ->
%%------------------------------------------------------------------------------
-spec is_local(kz_term:ne_binary()) -> boolean().
is_local(Carrier) ->
try apply(Carrier, is_local, [])
try apply(Carrier, 'is_local', [])
catch
_E:_R ->
kz_util:log_stacktrace(),
true
'true'
end.

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec apply(module() | kz_term:ne_binary() | knm_number:knm_number(), atom(), list()) -> any().
apply(Module, FName, Args) when is_atom(Module), Module =/= undefined ->
apply(Module, FName, Args) when is_atom(Module), Module =/= 'undefined' ->
lager:debug("contacting carrier ~s for ~s", [Module, FName]),
erlang:apply(Module, FName, Args);
apply(?NE_BINARY=Carrier, FName, Args) ->
Module = erlang:binary_to_atom(Carrier, utf8),
Module = erlang:binary_to_atom(Carrier, 'utf8'),
apply(Module, FName, Args);
apply(Number, FName, Args) ->
Carrier = knm_phone_number:module_name(knm_number:phone_number(Number)),
Expand Down
91 changes: 91 additions & 0 deletions core/kazoo_number_manager/src/carriers/knm_didww.erl
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
%%%-----------------------------------------------------------------------------
%%% @copyright (C) 2015-2020, 2600Hz
%%% @doc Handle client requests for phone number
%%% @end
%%%-----------------------------------------------------------------------------
-module(knm_didww).
-behaviour(knm_gen_carrier).

-export([info/0]).
-export([is_local/0]).
-export([find_numbers/3]).
-export([acquire_number/1]).
-export([disconnect_number/1]).
-export([is_number_billable/1]).
-export([should_lookup_cnam/0]).
-export([check_numbers/1]).

-include("knm.hrl").

-define(KNM_CARRIER_NAME, "didww").
-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec info() -> map().
info() ->
#{?CARRIER_INFO_MAX_PREFIX => 3
}.

%%------------------------------------------------------------------------------
%% @doc Is this carrier handling numbers local to the system?
%%
%% <div class="notice">A non-local (foreign) carrier module makes HTTP requests.</div>
%% @end
%%------------------------------------------------------------------------------
-spec is_local() -> boolean().
is_local() -> 'false'.

%%------------------------------------------------------------------------------
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
{'error', 'not_implemented'}.
check_numbers(_Numbers) -> {'error', 'not_implemented'}.

%%------------------------------------------------------------------------------
%% @doc Query carrier for available numbers.
%% @end
%%------------------------------------------------------------------------------
-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
{'ok', knm_number:knm_numbers()}.
find_numbers(_Prefix, _Quantity, _Options) ->
{'ok', []}.

%%------------------------------------------------------------------------------
%% @doc Acquire a given number from carrier.
%% @end
%%------------------------------------------------------------------------------
-spec acquire_number(knm_number:knm_number()) -> no_return().
acquire_number(Number) ->
knm_errors:by_carrier(?MODULE, 'not_implemented', Number).

%%------------------------------------------------------------------------------
%% @doc Return number back to carrier.
%% @end
%%------------------------------------------------------------------------------
-spec disconnect_number(knm_number:knm_number()) ->
no_return().
disconnect_number(Number) ->
knm_errors:by_carrier(?MODULE, 'not_implemented', Number).

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
is_number_billable(_Number) -> 'true'.

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec should_lookup_cnam() -> boolean().
should_lookup_cnam() -> 'true'.

%%%=============================================================================
%%% Internal functions
%%%=============================================================================
92 changes: 92 additions & 0 deletions core/kazoo_number_manager/src/carriers/knm_flowroute.erl
Original file line number Diff line number Diff line change
@@ -0,0 +1,92 @@
%%%-----------------------------------------------------------------------------
%%% @copyright (C) 2015-2020, 2600Hz
%%% @doc Handle client requests for phone number
%%% @end
%%%-----------------------------------------------------------------------------
-module(knm_flowroute).
-behaviour(knm_gen_carrier).

-export([info/0]).
-export([is_local/0]).
-export([find_numbers/3]).
-export([acquire_number/1]).
-export([disconnect_number/1]).
-export([is_number_billable/1]).
-export([should_lookup_cnam/0]).
-export([check_numbers/1]).

-include("knm.hrl").

-define(KNM_CARRIER_NAME, "flowroute").
-define(KNM_CARRIER_CONFIG_CAT, <<(?KNM_CONFIG_CAT)/binary, ".", ?KNM_CARRIER_NAME>>).

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec info() -> map().
info() ->
#{?CARRIER_INFO_MAX_PREFIX => 3
}.

%%------------------------------------------------------------------------------
%% @doc Is this carrier handling numbers local to the system?
%%
%% <div class="notice">A non-local (foreign) carrier module makes HTTP requests.</div>
%% @end
%%------------------------------------------------------------------------------
-spec is_local() -> boolean().
is_local() -> 'false'.

%%------------------------------------------------------------------------------
%% @doc Check with carrier if these numbers are registered with it.
%% @end
%%------------------------------------------------------------------------------
-spec check_numbers(kz_term:ne_binaries()) -> {'ok', kz_json:object()} |
{'error', 'not_implemented'}.
check_numbers(_Numbers) -> {'error', 'not_implemented'}.

%%------------------------------------------------------------------------------
%% @doc Query carrier for available numbers.
%% @end
%%------------------------------------------------------------------------------
-spec find_numbers(kz_term:ne_binary(), pos_integer(), knm_carriers:options()) ->
{'ok', knm_number:knm_numbers()}.
find_numbers(_Prefix, _Quantity, _Options) ->
{'ok', []}.

%%------------------------------------------------------------------------------
%% @doc Acquire a given number from carrier.
%% @end
%%------------------------------------------------------------------------------
-spec acquire_number(knm_number:knm_number()) ->
no_return().
acquire_number(Number) ->
knm_errors:by_carrier(?MODULE, 'not_implemented', Number).

%%------------------------------------------------------------------------------
%% @doc Return number back to carrier.
%% @end
%%------------------------------------------------------------------------------
-spec disconnect_number(knm_number:knm_number()) ->
no_return().
disconnect_number(Number) ->
knm_errors:by_carrier(?MODULE, 'not_implemented', Number).

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec is_number_billable(knm_phone_number:knm_phone_number()) -> boolean().
is_number_billable(_Number) -> 'true'.

%%------------------------------------------------------------------------------
%% @doc
%% @end
%%------------------------------------------------------------------------------
-spec should_lookup_cnam() -> boolean().
should_lookup_cnam() -> 'true'.

%%%=============================================================================
%%% Internal functions
%%%=============================================================================
Loading

0 comments on commit f1278c1

Please sign in to comment.