diff options
author | Anders Svensson <anders@erlang.org> | 2012-08-31 15:56:32 +0200 |
---|---|---|
committer | Anders Svensson <anders@erlang.org> | 2012-08-31 17:31:06 +0200 |
commit | d1d52e846fe3c94d68f433514da72564600c383c (patch) | |
tree | 891eeb62032ff6e706852131def2378d63db1178 | |
parent | de0cbe83cd96c17d75baf353e84c883b78980f98 (diff) | |
download | otp-d1d52e846fe3c94d68f433514da72564600c383c.tar.gz otp-d1d52e846fe3c94d68f433514da72564600c383c.tar.bz2 otp-d1d52e846fe3c94d68f433514da72564600c383c.zip |
Fix answer-message blunder
-rw-r--r-- | lib/diameter/src/base/diameter_service.erl | 12 |
1 files changed, 12 insertions, 0 deletions
diff --git a/lib/diameter/src/base/diameter_service.erl b/lib/diameter/src/base/diameter_service.erl index ced6fe605c..fa9a730f4f 100644 --- a/lib/diameter/src/base/diameter_service.erl +++ b/lib/diameter/src/base/diameter_service.erl @@ -2565,9 +2565,15 @@ str(T) -> %% question. The third form allows messages to be sent as is, without %% a dictionary, which is needed in the case of relay agents, for one. +%% Messages will be header/avps list as a relay and the only AVP's we +%% look for are in the common dictionary. This is required since the +%% relay dictionary doesn't inherit the common dictionary (which maybe +%% it should). get_avp_value(?RELAY, Name, Msg) -> get_avp_value(?BASE, Name, Msg); +%% Message sent as a header/avps list, probably a relay case but not +%% necessarily. get_avp_value(Dict, Name, [#diameter_header{} | Avps]) -> try {Code, _, VId} = Dict:avp_header(Name), @@ -2581,6 +2587,7 @@ get_avp_value(Dict, Name, [#diameter_header{} | Avps]) -> undefined end; +%% Outgoing message as a name/values list. get_avp_value(_, Name, [_MsgName | Avps]) -> case lists:keyfind(Name, 1, Avps) of {_, V} -> @@ -2589,6 +2596,11 @@ get_avp_value(_, Name, [_MsgName | Avps]) -> undefined end; +%% Record might be an answer message in the common dictionary. +get_avp_value(Dict, Name, Rec) + when Dict /= ?BASE, element(1, Rec) == 'diameter_base_answer-message' -> + get_avp_value(?BASE, Name, Rec); + %% Message is typically a record but not necessarily: diameter:call/4 %% can be passed an arbitrary term. get_avp_value(Dict, Name, Rec) -> |