diff options
author | Anders Svensson <[email protected]> | 2017-06-14 09:30:30 +0200 |
---|---|---|
committer | Anders Svensson <[email protected]> | 2017-06-14 09:30:30 +0200 |
commit | 5ef0555f4a696e6cc5a927bc6d8f469a725c0ef1 (patch) | |
tree | b743c631806fd4e86343cd8232fcaf7da53df531 /lib/diameter/src/base/diameter_service.erl | |
parent | 4850f0cae2c46d6584fe3926a715fe08eae25176 (diff) | |
parent | c74b1c4a46c71bd3b258477ca4bf1b5d39c5095e (diff) | |
download | otp-5ef0555f4a696e6cc5a927bc6d8f469a725c0ef1.tar.gz otp-5ef0555f4a696e6cc5a927bc6d8f469a725c0ef1.tar.bz2 otp-5ef0555f4a696e6cc5a927bc6d8f469a725c0ef1.zip |
Merge branch 'anders/diameter/capx_vs_dpr/OTP-14338'
* anders/diameter/capx_vs_dpr/OTP-14338:
Let candidate peers be passed to diameter:call/4
Comment on RFC ambiguity regarding application identifiers
Remove trailing whitespace
Diffstat (limited to 'lib/diameter/src/base/diameter_service.erl')
-rw-r--r-- | lib/diameter/src/base/diameter_service.erl | 17 |
1 files changed, 12 insertions, 5 deletions
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl index 8e383818ea..a976a8b998 100644 --- a/lib/diameter/src/base/diameter_service.erl +++ b/lib/diameter/src/base/diameter_service.erl @@ -282,7 +282,8 @@ whois(SvcName) -> | {alias, diameter:app_alias()}, Opts :: {fun((Dict :: module()) -> [term()]), diameter:peer_filter(), - Xtra :: list()}, + Xtra :: list(), + [diameter:peer_ref()]}, TPid :: pid(), Caps :: #diameter_caps{}, App :: #diameter_app{}, @@ -310,10 +311,10 @@ pick(#state{options = SvcOpts} = S, #diameter_app{module = ModX, dictionary = Dict} = App0, - {DestF, Filter, Xtra}) -> + {DestF, Filter, Xtra, TPids}) -> App = App0#diameter_app{module = ModX ++ Xtra}, [_,_] = RealmAndHost = diameter_lib:eval([DestF, Dict]), - case pick_peer(App, RealmAndHost, Filter, S) of + case pick_peer(App, RealmAndHost, [Filter | TPids], S) of {_TPid, _Caps} = TC -> {{TC, App}, SvcOpts}; false = No -> @@ -1522,8 +1523,14 @@ pick_peer(Local, %% peers/4 -peers(Alias, RH, Filter, T) -> - filter(Alias, RH, Filter, T, true). +%% No peer options pointing at specific peers: search for them. +peers(Alias, RH, [Filter], T) -> + filter(Alias, RH, Filter, T, true); + +%% Or just lookup. +peers(_Alias, RH, [Filter | TPids], {PeerT, _AppT, _IdentT}) -> + {Ts, _} = filter(caps(PeerT, TPids), RH, Filter), + Ts. %% filter/5 %% |