Hello,
KEMI can be programmed in Java, JavaScript, Lua(sr), Squirrel, Mono, Perl, Python(2,3,3s), Ruby.
Which language binding has the lowest runtime overhead in CPU-terms? How about lowest overhead in terms of RAM?
Kind regards
Дилян
Hi.
Can you please advise if existing ims implementation supports integration
with ims AS (Application Server), in particular for the third party
registration:
- upon UE registration is completed, S-CSCF constructs Register message
(which keeps all details of subscriber register message) and submits it to
AS server as regular SIP-message (TS 24.229 5.4.1.7 Notification of
Application Servers about registration status). S-CSCF obtains AS address
from SAA (Server Assignment Answer) diameter message, received from HSS
upon successful registration.
--
obelousov.tel
Hi List
Some time ago, during my learning curve with kamailio, I learned that a
branch route is where you make modifications to callerId's.
So I extensively re-engineered the config to move as much as possible
of callerid modification into branch routes.
But now I discovered, when a call is dispatched via dispatch group with
multiple destinations and one destination fails, therefore the failure
route is triggered, the branch route is not being called on the second
attempt, thus callerid being in the wrong format.
Example:
dispatcher.lst
As an example, consider having dispatcher group 2001 for national traffic over two
dedicated links and Dispatcher group 2002 for international traffic.
2001 sip:192.168.1.1:5060 0 0 name="Carrier1"
2001 sip:192.168.2.1:5060 0 0 name="Carrier1"
2002 sip:192.168.1.3:5060 0 0 name="Carrier2"
request_route
{
# We determine where we want to send the call
# and choose dispatch group 2001, the 'national' one.
# But there are are other dispatch groups and branch triggers
# set this way and routed to DISPATCHCALL
$avp(dispgroup) = 2001;
t_on_branch("BR_TO_NATIONAL");
route(DISPATCHCALL);
}
route[DISPATCHCALL]
{
t_set_fr(120000,1500); # Fast Failover
t_set_max_lifetime(300000,0);
t_set_retr(200,800);
if (ds_select_dst("$avp(dispgroup)", "6")) {
if (ds_is_from_list(-1,0,"$du")) {
t_on_failure("DISPATCH_FAILURE");
route(RELAY);
}
}
}
branch_route[BR_TO_NATIONAL]
{
# Here I make sure, all CallerId and Header are correct for the
# national Carrier
}
failure_route[DISPATCH_FAILURE]
{
if (t_check_status("(5[0-9][0-9])") or (t_branch_timeout() and !t_branch_replied())) {
# Try next DS.
if (ds_next_dst()) {
xlog("L_INFO", " --> retargeting request\n");
t_on_failure("DISPATCH_FAILURE");
route(RELAY); #### RIGHT HERE!
exit;
}
}
# We fail
xlog("L_ERROR", "Call Failed\n");
}
My issue is not, that if the call is routed after the first path failed
(marked with #### RIGHT HERE!) then the appropriate branch route is not
triggered again and the headers are wrong. But I can not set t_on_branch
within route[DISPATCHCALL] or route[DISPATCH_FAILURE] because this is
called with a different pre-set branch trigger, depending on the target
dispatch group.
Is there a way to make a branch trigger more persistent?
--
Mit freundlichen Grüssen
-Benoît Panizzon- @ HomeOffice und normal erreichbar
--
I m p r o W a r e A G - Leiter Commerce Kunden
______________________________________________________
Zurlindenstrasse 29 Tel +41 61 826 93 00
CH-4133 Pratteln Fax +41 61 826 93 01
Schweiz Web http://www.imp.ch
______________________________________________________
Hello,
I am using the topoh module and it works fine except for the BYE requests
coming from the callee (the person receiving the call). When a BYE is
received from the destination of the call, then Kamailio relays it to the
dummy IP 127.0.0.8. This is exemplified in the topoh:msg-outgoing
and topoh:msg-sending events where the $sndto(ip) is set to 127.0.0.8.
I am using all default modparams with topoh. The only modparam I have is
for setting the event_callback. I am using Kamailio 5.6.2 with Kemi using
python3.
Michel Pelletier
Hi List
I noticed that the database is accumulating entries on dialog_vars.
I don't know when and why this is happening.
Are there any special measures that have to be taken like making sure
to unset variables after using them to prevent this?
Or is this something which is supposed to happen when kamailio is
restarted?
Mit freundlichen Grüssen
-Benoît Panizzon-
--
I m p r o W a r e A G - Leiter Commerce Kunden
______________________________________________________
Zurlindenstrasse 29 Tel +41 61 826 93 00
CH-4133 Pratteln Fax +41 61 826 93 01
Schweiz Web http://www.imp.ch
______________________________________________________
Hi List
Testing failure situations, I discovered unset_dlg_profile can
not be used in request_route:
I count the channels per customer in a dlg_profile to know when they
are busy. Residential POTS customer have 1 channel.
Now this situation (Trying to mimik POTS behavior)
Kamailio <=> CPE of 'John-Doe'
=> INVITE
set_dlg_profile of John-Doe is 0: Not busy
set_dlg_profile of John-Doe +1
<= 100 trying
<= 180 ringing
== LINK to CPE DISRUPTED ==
X<= 200 OK (not reaching kamailio)
CPE is sending 200 a couple of times and fails.
Caller is still hearing ringing tone as it never got 200 OK.
The caller does not want to wait longer and hangs up
=>X CANCEL (NOT reaching CPE)
This is the moment, on which I would like to unset_dlg_profile of
John-Doe to mark his channel available again.
But the CPE is never going to acknowledge this CANCEL with 487.
Unfortunately: unset_dlg_profile(): dialog delete profile cannot be used in request route
Only when kamailio has sent CANCEL a couple of times and the
failure_route for this CANCEL is triggered, I can remove the call
from the dlg_profile of that customer within failure_route.
If I am unlucky, in the meantime other calls get 'busy' instead of
being re-routed to the configured backup number of that customer.
Agreed, after a couple of seconds, the call goes to the failure
route and the dialogue is ending thus calls work as expected.
But wouldn't it be nice to be able to unset the
dlg_profile upon receiving the CANCEL instead on when the CANCEL
transaction is successful?
Mit freundlichen Grüssen
-Benoît Panizzon-
--
I m p r o W a r e A G - Leiter Commerce Kunden
______________________________________________________
Zurlindenstrasse 29 Tel +41 61 826 93 00
CH-4133 Pratteln Fax +41 61 826 93 01
Schweiz Web http://www.imp.ch
______________________________________________________
Hi Folks
We use two 'core' instances and two 'registrar' instances.
The pairs sync their information (Dialogues + Locations) via DMQ.
But I noticed that they record the Via and Record-Routes by IP
addresses. So I guess if one fails, signaling would not automatically
switch to the remaining host as the IP of the failed one is in the
header, right?
So, is there a way to put a DNS resolvable host-name in the Via and
Record-Route header, so that DNS round-robin would make sure requests
reach the available server if one of the pairs fails?
Mit freundlichen Grüssen
-Benoît Panizzon-
--
I m p r o W a r e A G - Leiter Commerce Kunden
______________________________________________________
Zurlindenstrasse 29 Tel +41 61 826 93 00
CH-4133 Pratteln Fax +41 61 826 93 01
Schweiz Web http://www.imp.ch
______________________________________________________
Hello!
I'm examining the WebSocket module and I am wondering how it handles
multiple connections from the same port.
For context, imagine the following scenario:
UA1 ==> Load Balancer:41914 ==> Kamailio (WS)
UA2 ==> Load Balancer:41914 ==> Kamailio (WS)
Now, imagine Kamailio perceives UA1 from port 41914. What happens if that
UA1 suddenly drops and another UA2 comes in from the same port? (before the
connection closed event is fired for UA1)
I understand by looking at the source code that `wsconn_add` is called and
that this new connection is added to the list. But what happens with the
previous UA entry? does it gets overwritten or does it stays there?
The reason for my question is: I am perceiving the above scenario like this:
Let's say UA1 is *sip:d3315cf8@9a431b1f90e5.invalid;transport=ws SIP/2.0*
and UA2 is *sip:asd08a08@555343439666.invalid;transport=ws. *If UA2 comes
in and takes over the port that UA1 was using, and I send an INVITE to UA1
UA2 ends up receiving the invite (obviously because it now has that port
allocated).
So what I am thinking is that both *d3315cf8(a)9a431b1f90e5.invalid *and
*asd08a08(a)555343439666.invalid
*are mapped to the same port for a short period of time.
Thoughts?
Saludos,
[image: Twitter] <https://twitter.com/benjaminvison>[image: Instagram]
<https://instagram.com/bvisonl/>
Benjamín Visón / IT Engineer / Software Developer
bvisonl(a)gmail.com / (829)-664-5163
https://www.linkedin.com/in/bvisonl/
Hi,
Is there any good solution for the scenario of an auth_challenge() with two separate transaction suspensions?
To clarify (simplified):
request_route {
...
t_newtran();
if(!is_present_hf("Authorization") && !is_present_hf("Proxy-Authorization")) {
auth_challenge("$fd", "1");
exit;
}
# TM suspend/continue
t_newtran();
async credentials query("RESUME_AUTH");
}
route[RESUME_AUTH] {
# Credentials received into PVs.
if(!pv_auth_check("...")) {
auth_challenge("$fd", "1");
exit;
}
# Create transaction shell if not exists already from auth query.
if(!t_lookup_request())
t_newtran();
# TM suspend/continue
async route query("RESUME_ROUTING");
}
route[RESUME_ROUTING] {
# Unmarshal etc.
t_relay(); # etc.
}
What happens here is that the first auth_challenge() results in a retransmission of its 407 challenge without absorbing the negative ACK. This is despite the ostensibly stateful behaviour of auth_challenge() without "force_stateless_reply" enabled.
In this case, it eclipses the second, unrelated 407 challenge from the subsequent routing query (407 challenge with +1 CSeq):

-- Alex
--
Alex Balashov | Principal | Evariste Systems LLC
Tel: +1-706-510-6800 / +1-800-250-5920 (toll-free)
Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
Hi,
we have some Kamailios working as outboundproxy. So they get requests from internal systems and send them to different providers. From time to time, one provider returns a server as primary resource which is currently unavailable.
I guess if the internal systems connected directly to the target, they would remember the failed server and remember to always use the server with second priority at least until DNS refresh time. In our setup, since every request is "new" for Kamailio, it doesn't remember, which host is reachable or not.
Example:
target: example.com_sip._udp.example.com SRV resolves to:
10 192.0.2.42 5060
20 198.51.100.42 5060
30 203.0.113.42 5060
192.0.2.42 is unavailable. Still, Kamailio uses it for every new request and failover to 198.51.100.42 occurs only after timeouts hit.
Is there a best practice for solving this? I have played around with the dst_blocklist settings, but that caused even more trouble because Kamailio started blocking requests to peers that have only one server in the record having a short hickup.
Thanks in advance for every input, as this is causing trouble every time we run into such a situation.
Regards,
Sebastian