<!-- Kamailio Pull Request Template -->
#### 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 - [x] Related to issue #3720
#### Description Fixing R-RURI and adding necessary headers when creating fake_msg in xhttp_mod.c for successful message validation and the ability to perform various kamailio functions from event_route[xhttp:request]. You can view, comment on, or merge this pull request online at:
https://github.com/kamailio/kamailio/pull/3723
-- Commit Summary --
* xhttp: fix execution of async functions
-- File Changes --
M src/modules/xhttp/xhttp_mod.c (39)
-- Patch Links --
https://github.com/kamailio/kamailio/pull/3723.patch https://github.com/kamailio/kamailio/pull/3723.diff
First, this is not a fix, the http traffic was never supposed to be fully handled as sip traffic. Kamailio is not a full HTTP server/proxy. The workaround for creating a fake sip message was done for local processing, mainly to be able to use authentication and authorization functions as well as config variables.
The async framework is purely designed for received SIP traffic, creating a SIP transaction that stays in memory, runs various timer callbacks and sip-specs specific tasks.
You patch creates an internal sip message that does not even follow the strict requirements for a sip requests, like tags, via branch, ... CSeq has an hardcoded method even there can be different ones even in http. Also it breaks the $hu. These are just a few remarks upon a quick look. This PR is not appropriate to merge.
If you need to do some async processing in Kamailio, you have to do it with sip traffic. You can generate from cli with sipexer or sipsak tools.
You are right, there are many ways to solve the problem. The presence of an HTTP server in kamailio allows you to implement microservices and I suggested expanding its use. I don’t think I can convince you otherwise, but kamailio has long become a multifunctional tool necessary for processing SIP calls. Our company was faced with the need for this functionality to build a system for testing, I think that this improvement would allow other clients to use Kamailio more efficiently. I think that issuing $hu is easy to fix, since the original URI value is not lost :) Thank you.
Even adding the http url value as parameter to r-uri is not safe, because its value can have special characters that have different meaning.
If you need to do something async in xhttp, then you have to add something specific for http requests, knowing the complexity of processing for SIP transaction, leveraging its suspend()/continue() does not feel the right way.
Note also that a new module was added, microhttpd, that is supposed to handle better http traffic than the old custom xhttp. It is at the beginning, not many features, but I would recommend building on top of it if you want support also for modern http protocol, not only http 1.x.
This PR is stale because it has been open 6 weeks with no activity. Remove stale label or comment or this will be closed in 2 weeks.
Closed #3723.