#### Pre-Submission Checklist - [x] Commit message has the format required by CONTRIBUTING guide - [x] Commits are split per component (core, individual modules, libs, utils, ...) - [x] Each component has a single commit (if not, squash them into one commit) - [x] No commits to README files for modules (changes must be done to docbook files in `doc/` subfolder, the README file is autogenerated)
#### Type Of Change - [ ] Small bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds new functionality) - [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist: - [ ] PR should be backported to stable branches - [x] Tested changes locally - [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
A new parameter timeout_mode is added. This parameter defines if timeouts are enabled, and in which unit timeout values are expressed. - 0 - Timeouts are disabled. - 1 - Timeout values are in seconds (default). - 2 - Timeout values are in milliseconds.
For reference, see discussion in: https://github.com/kamailio/kamailio/pull/3611
Implementation detail:
``` default global timeout = 0 (unconfigured).
Parse connections as usual. If they have a timeout configured, use it.
In mod_init: if global timeout == 0 (unconfigured), and timeout_mode is 1 or 2: if timeout_mode == 1 -> global timeout = 4 (seconds) if timeout_mode == 2 -> global timeout = 4000 (milliseconds)
for each connection "conn" (fixup): if timeout_mode is not 1 or 2 -> conn.timeout = 0 (to reflect the fact that no timeout will be handled) else if conn.timeout is not configured -> conn.timeout = global timeout (in seconds or milliseconds, depending on timeout_mode).
When doing Curl requests (curL_request_url): if timeout_mode == 1: set CURLOPT_TIMEOUT if timeout_mode == 2: set CURLOPT_TIMEOUT_MS ```
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/3615
-- Commit Summary --
* http_client: Add parameter timeout_mode (timeout in seconds or milliseconds)
-- File Changes --
M src/modules/http_client/curlcon.c (27) M src/modules/http_client/curlcon.h (14) M src/modules/http_client/doc/http_client_admin.xml (35) M src/modules/http_client/functions.c (21) M src/modules/http_client/http_client.c (32) M src/modules/http_client/http_client.h (11)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/3615.patch https://github.com/kamailio/kamailio/pull/3615.diff
@miconda commented on this pull request.
@@ -854,3 +854,24 @@ curl_con_t *curl_init_con(str *name)
LM_DBG("CURL: Added connection [%.*s]\n", name->len, name->s); return cc; } + +/*! Fixup CURL connections - if timeout is not configured, Use as default global connection_timeout. + */ +void curl_conn_list_fixup(void) +{ + curl_con_t *cc; + cc = _curl_con_root; + while (cc) { + if (!(timeout_mode == 1 || timeout_mode == 2)) { + /* Timeout is disabled globally. Set timeout to 0 for all connections to reflect this. */ + cc->timeout = 0;
I would add a warning log message if `cc->timeout > 0` before setting it to `0`, to make the config admin properly aware of the situation.
@nchaigne commented on this pull request.
@@ -854,3 +854,24 @@ curl_con_t *curl_init_con(str *name)
LM_DBG("CURL: Added connection [%.*s]\n", name->len, name->s); return cc; } + +/*! Fixup CURL connections - if timeout is not configured, Use as default global connection_timeout. + */ +void curl_conn_list_fixup(void) +{ + curl_con_t *cc; + cc = _curl_con_root; + while (cc) { + if (!(timeout_mode == 1 || timeout_mode == 2)) { + /* Timeout is disabled globally. Set timeout to 0 for all connections to reflect this. */ + cc->timeout = 0;
Good suggestion. I will also add a warning if the global timeout has been configured but timeouts are disabled.
@nchaigne pushed 1 commit.
32a1c04d1643f40fbb4e75a3b0d7c07b913de0c1 http_client: Add parameter timeout_mode (timeout in seconds or milliseconds)
Thanks, merging! If someone has further useful suggestions, new commits/PRs can be made.
Merged #3615 into master.