This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision Next revision Both sides next revision | ||
tutorials:faq:main [2017/08/14 10:27] miconda |
tutorials:faq:main [2018/05/08 08:30] miconda [SIP Message Processing] |
||
---|---|---|---|
Line 47: | Line 47: | ||
??? Is it possible to reload Kamailio configuration file? | ??? Is it possible to reload Kamailio configuration file? | ||
- | !!! No, you must restart after you update the configuration file. | + | !!! If you use native scripting language, you must restart after you update the configuration file. |
But note that many global parameters can be changed via RPC/MI commands without restart (e.g., TCP connecting timeout, debug level). Applying changes related to loaded modules or routing block require always a restart. | But note that many global parameters can be changed via RPC/MI commands without restart (e.g., TCP connecting timeout, debug level). Applying changes related to loaded modules or routing block require always a restart. | ||
+ | |||
+ | If you use a KEMI scripting language (Lua, Python, JavaScript, Squirrel), then you can reload the routing logic script without restarting Kamailio by issuing an RPC command (see KEMI interpreter modules documentation for more details: app_lua, app_python, app_python3, | ||
??? What is the license of Kamailio? | ??? What is the license of Kamailio? | ||
Line 232: | Line 234: | ||
} | } | ||
</ | </ | ||
+ | |||
+ | Very important is also to be aware that doing same operation many times in request_route is not overwriting the previous value, but combines them. For example, if you do two times uac_replace_from(), | ||
+ | |||
+ | <code c> | ||
+ | request_route { | ||
+ | ... | ||
+ | uac_replace_from(" | ||
+ | uac_replace_from(" | ||
+ | ... | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | Results in From header having the URI: " | ||
+ | |||
??? How to remove a single header field when a header appears multiple times? | ??? How to remove a single header field when a header appears multiple times? | ||
Line 553: | Line 569: | ||
However, if return code is 0, the next action after function() is not executed. It can be used only of positive or negative response code. | However, if return code is 0, the next action after function() is not executed. It can be used only of positive or negative response code. | ||
+ | |||
+ | ??? How is the SIP request retransmission handled? | ||
+ | |||
+ | !!! The next snippet is detecting retransmissions: | ||
+ | |||
+ | <code c> | ||
+ | # handle retransmissions | ||
+ | if (!is_method(" | ||
+ | if(t_precheck_trans()) { | ||
+ | t_check_trans(); | ||
+ | exit; | ||
+ | } | ||
+ | t_check_trans(); | ||
+ | } | ||
+ | </ | ||
+ | |||
+ | The **ACK** request is skipped because it doesn' | ||
+ | |||
+ | The function **t_precheck_trans()** returns true if the same SIP request is processed at that time by another Kamailio process, so in this case it is a retransmission. The inner **t_check_trans()** has the role of detecting if the SIP transaction was created by the other process, and if yes, send again the last SIP response of the transaction, | ||
+ | |||
+ | If the function **t_precheck_trans()** returns false, the SIP request is not under processing by another Kamailio process, but it can be the case that the request processing was finished, request being sent out in stateful mode, therefore **t_check_trans()** is used to see if a transaction is found in shared memory corresponding to the same request. If such transaction is found in shared memory, then **t_check_trans()** triggers internally the **exit** for configuration file execution. | ||
=?==== Troubleshooting ===== | =?==== Troubleshooting ===== | ||