Hi all,
I’d like to bring up some development topics related to the SIP parsing logic, specifically when handling sip: with embedded tel URIs scheme. The current behaviour, particularly when user=phone is present, is leading to some inconsistencies and potential confusion, and I believe it might require some refactoring or documentation updates.
Current Parsing Behavior:
When a tel: URI is embedded in a sip: scheme (e.g., user=phone is present), the parser currently copies the URI parsed parameters to sip_params, then splits the user part (like 123;param=value;param2=value2) into user and all the rest tel parameters to params. This behaviour is only triggered when the global phone2tel configuration option is enabled (which is the default).
Issues:
1. Inconsistent Handling of URI Parameters
There’s no consistency across modules on whether they use sip_params or params to get the URI parameters. While most modules correctly use sip_params, others use params. Normally, this works fine because sip_params and params hold the same data when user=phone is not present or phone2tel is disabled. However, when user=phone is present and phone2tel is enabled, params may be empty, leading to unexpected behavior in modules relying on it.
For example, the following modules are using params and many others:
* dmqnode.c (line 204)<https://github.com/kamailio/kamailio/blob/ba6ab04e06b0dfd66874749e0cb1225f2…>
* notification_peer.c (line 432)<https://github.com/kamailio/kamailio/blob/ba6ab04e06b0dfd66874749e0cb1225f2…>
While some may handle the differences between sip_params and params, not all of them do.
2. Unclear Intention of the phone2tel Global Parameter
The current parser code is quite old, and it’s unclear what the original intention behind the phone2tel global parameter was. As far as I understand, the sip: scheme can handle tel: URIs, and this is the most widely accepted specification. The role of phone2tel seems to blur the lines between the two schemes, leading to unexpected transformations.
Example of Unexpected Behavior:
Consider the following header:
P-Asserted-Identity: Display <sip:+1234;pname=pval@domain;user=phone>;tag=1234
If we apply the {tobody.user} transformation, the expected output should be the user part of the URI. Based on the RFC, we expected the transformation to return +1234;pname=pval. However, due to the phone2tel global configuration parameter, the parser treats it as a tel: scheme and returns only +1234. This behavior seems to be influenced by how the global parameter forces the parser to handle the URI.
Proposal:
To resolve these issues, I suggest the following:
1. Refactor Parameter Handling: Introduce a more explicit separation of tel_params and sip_params, and ensure all modules use the correct set of parameters based on the context. This would help enforce consistency across the codebase.
2. Update Documentation: Provide clear documentation regarding the behavior of phone2tel and how it impacts URI parsing. In particular, the transformation documentation should reflect the expected behavior depending on whether the URI is treated as sip: or tel:.
3. Review and Fix Modules: We should audit the modules that currently rely on params and ensure they are using sip_params where appropriate, especially in cases where user=phone could be present.
Any guidance or feedback on these points would be greatly appreciated. If you’ve encountered any related bugs or discovered other edge cases, please let me know so we can address them.
Best regards,
Xenofon
<!-- Kamailio Pull Request Template -->
Topos: Added get_callid_mask functin which will give the masked callID if actual callID is given and get_callid_unmask function which will unmask the given call-ID. This funtion is useful when the client sends a refer methord with refer-to header containing call-id
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [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:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [x] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
<!-- Describe your changes in detail -->
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/3872
-- Commit Summary --
* add funtion to mask/unmask callID
* get_callid_mask /get_callid_unmask Document Update
-- File Changes --
M src/modules/topos/doc/topos_admin.xml (87)
M src/modules/topos/topos_mod.c (183)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/3872.patchhttps://github.com/kamailio/kamailio/pull/3872.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/3872
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/3872(a)github.com>
<!-- Kamailio Pull Request Template -->
<!--
IMPORTANT:
- for detailed contributing guidelines, read:
https://github.com/kamailio/kamailio/blob/master/.github/CONTRIBUTING.md
- pull requests must be done to master branch, unless they are backports
of fixes from master branch to a stable branch
- backports to stable branches must be done with 'git cherry-pick -x ...'
- code is contributed under BSD for core and main components (tm, sl, auth, tls)
- code is contributed GPLv2 or a compatible license for the other components
- GPL code is contributed with OpenSSL licensing exception
-->
#### Pre-Submission Checklist
<!-- Go over all points below, and after creating the PR, tick all the checkboxes that apply -->
<!-- All points should be verified, otherwise, read the CONTRIBUTING guidelines from above-->
<!-- If you're unsure about any of these, don't hesitate to ask on sr-dev mailing list -->
- [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
- [x] Small bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds new functionality)
- [ ] Breaking change (fix or feature that would change existing functionality)
#### Checklist:
<!-- Go over all points below, and after creating the PR, tick the checkboxes that apply -->
- [ ] PR should be backported to stable branches
- [x] Tested changes locally
- [ ] Related to issue #XXXX (replace XXXX with an open issue number)
#### Description
If the query failed, the result set should not be parsed and used. This results in an empty result set which will most likely lead to unwanted behavior.
Background: While troubleshooting, we detected that domain.reload actually replaces domains with an empty result set if mongodb connectivity fails.
```
DEBUG: db_mongodb [mongodb_dbase.c:849]: db_mongodb_store_result(): An error occurred: No suitable servers found (`serverSelectionTryOnce` set): [connection timeout calling ismaster on 'pdb-iop1-wrmg-2:27017'] [connection timeout calling ismaster on 'pdb-iop1-wrmg-1:27017']
DEBUG: domain [domain.c:365]: reload_tables(): number of rows in domain_attrs table: 0
DEBUG: <core> [db_res.c:79]: db_free_columns(): freeing 0 columns
DEBUG: <core> [db_res.c:138]: db_free_result(): freeing result set at 0x7fb0c9811848
DEBUG: db_mongodb [mongodb_dbase.c:973]: db_mongodb_query(): query to collection [domains]
DEBUG: db_mongodb [mongodb_dbase.c:1007]: db_mongodb_query(): query filter: { }
DEBUG: db_mongodb [mongodb_dbase.c:1043]: db_mongodb_query(): columns filter: { "projection" : { "domain" : 1, "did" : 1 } }
```
You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/3996
-- Commit Summary --
* mongodb: fix cursor error resulting empty result set
-- File Changes --
M src/modules/db_mongodb/mongodb_dbase.c (1)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/3996.patchhttps://github.com/kamailio/kamailio/pull/3996.diff
--
Reply to this email directly or view it on GitHub:
https://github.com/kamailio/kamailio/pull/3996
You are receiving this because you are subscribed to this thread.
Message ID: <kamailio/kamailio/pull/3996(a)github.com>