diff --git a/src/modules/async/README b/src/modules/async/README index 2e8357b52d3..079b77e694c 100644 --- a/src/modules/async/README +++ b/src/modules/async/README @@ -26,20 +26,26 @@ Daniel-Constantin Mierla 3. Parameters 3.1. workers (int) + 3.2. ms_timer (int) 4. Functions 4.1. async_route(routename, seconds) - 4.2. async_sleep(seconds) - 4.3. async_task_route(routename) + 4.2. async_ms_route(routename, milliseconds) + 4.3. async_sleep(seconds) + 4.4. async_ms_sleep(milliseconds) + 4.5. async_task_route(routename) List of Examples 1.1. Set workers parameter - 1.2. async_route usage - 1.3. async_sleep usage - 1.4. async_workers usage - 1.5. async_task_route usage + 1.2. Set ms_timer parameter + 1.3. async_route usage + 1.4. async_ms_route usage + 1.5. async_sleep usage + 1.6. async_ms_sleep usage + 1.7. async_workers usage + 1.8. async_task_route usage Chapter 1. Admin Guide @@ -54,12 +60,15 @@ Chapter 1. Admin Guide 3. Parameters 3.1. workers (int) + 3.2. ms_timer (int) 4. Functions 4.1. async_route(routename, seconds) - 4.2. async_sleep(seconds) - 4.3. async_task_route(routename) + 4.2. async_ms_route(routename, milliseconds) + 4.3. async_sleep(seconds) + 4.4. async_ms_sleep(milliseconds) + 4.5. async_task_route(routename) 1. Overview @@ -94,6 +103,7 @@ Chapter 1. Admin Guide 3. Parameters 3.1. workers (int) + 3.2. ms_timer (int) 3.1. workers (int) @@ -107,11 +117,27 @@ Chapter 1. Admin Guide modparam("async", "workers", 2) ... +3.2. ms_timer (int) + + Enables millisecond timer for async_ms_sleep() and async_ms_route() + functions. The integer value is the timer resolution in milliseconds. + ms_timer = 1 enables 1 millisecond timer but generates higher load on + the system. ms_timer = 20 enables 20 ms timer. + + Default value is 0. + + Example 1.2. Set ms_timer parameter +... +modparam("async", "ms_timer", 1) +... + 4. Functions 4.1. async_route(routename, seconds) - 4.2. async_sleep(seconds) - 4.3. async_task_route(routename) + 4.2. async_ms_route(routename, milliseconds) + 4.3. async_sleep(seconds) + 4.4. async_ms_sleep(milliseconds) + 4.5. async_task_route(routename) 4.1. async_route(routename, seconds) @@ -134,7 +160,7 @@ modparam("async", "workers", 2) This function can be used from REQUEST_ROUTE. - Example 1.2. async_route usage + Example 1.3. async_route usage ... request_route { ... @@ -147,7 +173,42 @@ route[RESUME] { } ... -4.2. async_sleep(seconds) +4.2. async_ms_route(routename, milliseconds) + + Simulate a sleep of 'milliseconds' and then continue the processing of + the SIP request with the route[routename]. In case of internal errors, + the function returns false, otherwise the function exits the execution + of the script at that moment (return 0 behaviour). This function works + only if the ms_timer parameter has a value greater then 0. + + The routename parameter can be a static string or a dynamic string + value with config variables. + + The sleep parameter represent the number of milliseconds to suspend the + processing of a SIP request. Maximum value is 30000 (30 sec). The + parameter can be a static integer or a variable holding an integer. + + Since the SIP request handling is resumed in another process, the + config file execution state is practically lost. Therefore beware that + the execution of config after resume will end once the route[routename] + is finished. + + This function can be used from REQUEST_ROUTE. + + Example 1.4. async_ms_route usage +... +request_route { + ... + async_ms_route("RESUME", "250"); + ... +} +route[RESUME] { + send_reply("404", "Not found"); + exit; +} +... + +4.3. async_sleep(seconds) Simulate a sleep of 'seconds' and then continue the processing of SIP request with the next action. In case of internal errors, the function @@ -159,14 +220,49 @@ route[RESUME] { This function can be used from REQUEST_ROUTE. - Example 1.3. async_sleep usage + Example 1.5. async_sleep usage ... async_sleep("4"); send_reply("404", "Not found"); exit; ... -4.3. async_task_route(routename) +4.4. async_ms_sleep(milliseconds) + + Simulate a sleep of 'milliseconds' and then continue the processing of + SIP request with the next action. In case of internal errors, the + function returns false. This function works only if the ms_timer + parameter has a value greater then 0. + + The sleep parameter represent the number of milliseconds to suspend the + processing of SIP request. Maximum value is 30000 (30 sec). The + parameter can be a static integer or a variable holding an integer. + + This function can be used from REQUEST_ROUTE. + + Example 1.6. async_ms_sleep usage +... +route[REQUESTSHAPER] { + $var(res) = http_connect("leakybucket", + "/add?key=$fd", $null, $null,"$avp(delay)"); + $var(d) = $(avp(delay){s.int}); + if ($var(d) > 0) { + # Delay the request by $avp(delay) ms + async_ms_sleep("$var(d)"); + if (!t_relay()) { + sl_reply_error(); + } + exit; + } + # No delay + if (!t_relay()) { + sl_reply_error(); + } + exit; +} +... + +4.5. async_task_route(routename) Continue the processing of the SIP request with the route[routename] in one of the processes from core asynchronous framework. The core @@ -178,7 +274,7 @@ exit; async_workers core parameter in the configuration file. See the core cookbook for more information. - Example 1.4. async_workers usage + Example 1.7. async_workers usage ... # Enable 8 worker processes used by async and other modules async_workers=8 @@ -198,7 +294,7 @@ async_workers=8 This function can be used from REQUEST_ROUTE. - Example 1.5. async_task_route usage + Example 1.8. async_task_route usage ... request_route { ...