From 7bbc37aeac58692379b962abaeabdf0b3c846538 Mon Sep 17 00:00:00 2001 From: vkatsuba Date: Wed, 7 Jul 2021 15:50:08 +0300 Subject: [PATCH] Add handle of timeout in map_reply_ie/1 --- apps/ergw_core/src/ergw_context.erl | 14 +++++++++++--- apps/ergw_core/src/gtp_v1_c.erl | 2 +- apps/ergw_core/src/gtp_v2_c.erl | 2 +- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/apps/ergw_core/src/ergw_context.erl b/apps/ergw_core/src/ergw_context.erl index bf907fc6..ba2c1345 100644 --- a/apps/ergw_core/src/ergw_context.erl +++ b/apps/ergw_core/src/ergw_context.erl @@ -105,13 +105,14 @@ port_message_h(Request, #gtp{} = Msg) -> port_message_run(Request, Msg) catch throw:{error, Error} -> - ?LOG(error, "handler failed with: ~p", [Error]), - gtp_context:generic_error(Request, Msg, Error) + Reason = handle_jobs_reason(Error), + ?LOG(error, "handler failed with: ~p", [Reason]), + gtp_context:generic_error(Request, Msg, Reason) after jobs:done(Opaque) end; {error, Reason} -> - gtp_context:generic_error(Request, Msg, Reason) + gtp_context:generic_error(Request, Msg, handle_jobs_reason(Reason)) end. port_message_run(Request, #gtp{type = g_pdu} = Msg) -> @@ -139,3 +140,10 @@ load_class(#gtp{version = v1} = Msg) -> gtp_v1_c:load_class(Msg); load_class(#gtp{version = v2} = Msg) -> gtp_v2_c:load_class(Msg). + +handle_jobs_reason(rejected = Reason) -> + Reason; +handle_jobs_reason(timeout) -> + rate_limit; +handle_jobs_reason(Reason) -> + Reason. diff --git a/apps/ergw_core/src/gtp_v1_c.erl b/apps/ergw_core/src/gtp_v1_c.erl index c6ba4e79..d4e4ed2b 100644 --- a/apps/ergw_core/src/gtp_v1_c.erl +++ b/apps/ergw_core/src/gtp_v1_c.erl @@ -314,7 +314,7 @@ map_reply_ie(missing_or_unknown_apn) -> #cause{value = missing_or_unknown_apn}; map_reply_ie(no_resources_available) -> #cause{value = no_resources_available}; -map_reply_ie(rejected) -> +map_reply_ie(Reason) when Reason =:= rejected; Reason =:= rate_limit -> #cause{value = no_resources_available}; map_reply_ie(all_dynamic_addresses_are_occupied) -> #cause{value = all_dynamic_pdp_addresses_are_occupied}; diff --git a/apps/ergw_core/src/gtp_v2_c.erl b/apps/ergw_core/src/gtp_v2_c.erl index 529000b6..e7c0b17e 100644 --- a/apps/ergw_core/src/gtp_v2_c.erl +++ b/apps/ergw_core/src/gtp_v2_c.erl @@ -334,7 +334,7 @@ map_reply_ie(missing_or_unknown_apn) -> #v2_cause{v2_cause = missing_or_unknown_apn}; map_reply_ie(no_resources_available) -> #v2_cause{v2_cause = no_resources_available}; -map_reply_ie(rejected) -> +map_reply_ie(Reason) when Reason =:= rejected; Reason =:= rate_limit -> #v2_cause{v2_cause = no_resources_available}; map_reply_ie(all_dynamic_addresses_are_occupied) -> #v2_cause{v2_cause = all_dynamic_addresses_are_occupied};