Added Call-ID mask for Topos using API call of Topoh Call ID mask using topoh API call instead of swapping with new ID. Call ID masking is done when a message is received from the upstream and unmasked before sending it to the upstream.
<!-- 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, ...) - [ ] Each component has a single commit (if not, squash them into one commit) - [ ] 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) - [ ] 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 - [ ] 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/3334
-- Commit Summary --
* Topos: Added Call-ID mask
-- File Changes --
M src/modules/topos/doc/topos_admin.xml (20) M src/modules/topos/topos_mod.c (126) M src/modules/topos/tps_msg.c (31) M src/modules/topos/tps_msg.h (2)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/3334.patch https://github.com/kamailio/kamailio/pull/3334.diff
@miconda commented on this pull request.
@@ -490,10 +503,9 @@ int tps_msg_received(sr_event_param_t *evp)
} } dialog = (get_to(&msg)->tag_value.len>0)?1:0; - if(dialog) { - /* dialog request */ - tps_request_received(&msg, dialog); - } + + tps_request_received(&msg, dialog); +
Is the above change necessary? Should tps_request_received() be executed for initial (non-in-dialog) requests?
@toharish commented on this pull request.
@@ -490,10 +503,9 @@ int tps_msg_received(sr_event_param_t *evp)
} } dialog = (get_to(&msg)->tag_value.len>0)?1:0; - if(dialog) { - /* dialog request */ - tps_request_received(&msg, dialog); - } + + tps_request_received(&msg, dialog); +
yes, it's required to mask the Call-ID for the inial Request. Please refer to the changes in tps_msg.c function tps_request_received where it is masking the Call-ID and then returning back when dialog=0 ``` if(dialog==0) { tps_mask_callid(msg); /* nothing to do for initial request other than Call-ID mask */ return 0; } ``` This could have been done by checking (dialog==0) and calling tps_mask_callid(msg) directly in topos_mod.c insted of calling tps_request_received(&msg, dialog).
Any Request which is entered from the Upstream Call-ID mask is done Any Request which is sent to Upstream Call-ID Un-mask is done
Any response which is entered from the Upstream Call-ID mask is done Any response which is sent to Upstream Call-ID Un-mask is done
@miconda commented on this pull request.
@@ -490,10 +503,9 @@ int tps_msg_received(sr_event_param_t *evp)
} } dialog = (get_to(&msg)->tag_value.len>0)?1:0; - if(dialog) { - /* dialog request */ - tps_request_received(&msg, dialog); - } + + tps_request_received(&msg, dialog); +
During the kamailio config processing, the call-id must be the original value, not masked. The mask has to be done when the message is sent out, unmask has to be done when the message is received. You can compare with what's done by topoh for call-id masking/unmasking.
@toharish commented on this pull request.
@@ -490,10 +503,9 @@ int tps_msg_received(sr_event_param_t *evp)
} } dialog = (get_to(&msg)->tag_value.len>0)?1:0; - if(dialog) { - /* dialog request */ - tps_request_received(&msg, dialog); - } + + tps_request_received(&msg, dialog); +
To mask the Call-ID after the processing will be a challenge as TOPOS is using Call-ID as the key and further it is identifying from the request/response as UPSTREAM / DOWNSTREAM after tps_storage_load_dialog function call. which means when there is a message from Downstream we will not be able to UnMask first before loading the dialog from the database as we are not knowing the direction. To solve this we will have to add additional cookies and headers similar to Topoh which will be too much additional processing instead this approach of masking when receiving from Upstream and hiding other headers before sending downstream and Unmasking before sending to Upstream and hiding other headers when received from downstream will be better.
@miconda commented on this pull request.
@@ -490,10 +503,9 @@ int tps_msg_received(sr_event_param_t *evp)
} } dialog = (get_to(&msg)->tag_value.len>0)?1:0; - if(dialog) { - /* dialog request */ - tps_request_received(&msg, dialog); - } + + tps_request_received(&msg, dialog); +
The config has to process the SIP message as it would be without topos (or topoh), otherwise things become more complex to track (accounting, troubleshooting, sipdump, ...). Masking the call id comes with a prefix:
- https://www.kamailio.org/docs/modules/stable/modules/topoh.html#topoh.p.call...
If the prefix is not matched, unmasking is not done, see th_unmask_callid() from topoh.
At the end, even it has to be more complexity added to topos module, it is the way to go, instead of affecting everything else.
@toharish commented on this pull request.
@@ -490,10 +503,9 @@ int tps_msg_received(sr_event_param_t *evp)
} } dialog = (get_to(&msg)->tag_value.len>0)?1:0; - if(dialog) { - /* dialog request */ - tps_request_received(&msg, dialog); - } + + tps_request_received(&msg, dialog); +
Ok thank you, I will close this PR and add a new PR with Call-ID mask when it is sent out downstream
Closed #3334.