aboutsummaryrefslogtreecommitdiffstats
path: root/lib/diameter/src/base
diff options
context:
space:
mode:
authorAnders Svensson <[email protected]>2015-05-03 11:56:15 +0200
committerAnders Svensson <[email protected]>2015-05-03 12:42:32 +0200
commit49e8b11ce3620e686e3388ee7d8a0f445b5f853a (patch)
tree910addaaa1270c09a0fe0f58bccc240992a96600 /lib/diameter/src/base
parent920b80059027814d564e1c010e76c464996bdf5c (diff)
downloadotp-49e8b11ce3620e686e3388ee7d8a0f445b5f853a.tar.gz
otp-49e8b11ce3620e686e3388ee7d8a0f445b5f853a.tar.bz2
otp-49e8b11ce3620e686e3388ee7d8a0f445b5f853a.zip
Fix counting error with unknown application id
Statistics could be accumulated on a key like {{23,275,0}, recv} even though 23 was not the application id of the dictionary in question. Missed in commits df19c272 and 7816ab2f.
Diffstat (limited to 'lib/diameter/src/base')
-rw-r--r--lib/diameter/src/base/diameter_traffic.erl18
1 files changed, 7 insertions, 11 deletions
diff --git a/lib/diameter/src/base/diameter_traffic.erl b/lib/diameter/src/base/diameter_traffic.erl
index 538ebeeeba..bdb83ee682 100644
--- a/lib/diameter/src/base/diameter_traffic.erl
+++ b/lib/diameter/src/base/diameter_traffic.erl
@@ -1116,19 +1116,15 @@ msg_id(#diameter_packet{header = H}, Dict) ->
%% there are 2^32 (application ids) * 2^24 (command codes) = 2^56
%% pairs for an attacker to choose from.
msg_id(Hdr, Dict) ->
- {_ApplId, Code, R} = Id = diameter_codec:msg_id(Hdr),
- case Dict:msg_name(Code, 0 == R) of
- '' ->
- unknown(Dict:id(), R);
- _ ->
- Id
+ {Aid, Code, R} = Id = diameter_codec:msg_id(Hdr),
+ if Aid == ?APP_ID_RELAY ->
+ {relay, R};
+ true ->
+ choose(Aid /= Dict:id() orelse '' == Dict:msg_name(Code, 0 == R),
+ unknown,
+ Id)
end.
-unknown(?APP_ID_RELAY, R) ->
- {relay, R};
-unknown(_, _) ->
- unknown.
-
%% No E-bit: can't be 3xxx.
is_result(RC, false, _Dict0) ->
RC < 3000 orelse 4000 =< RC;