Hello,
I don't understand why msg_apply changes() can be called from
REQUEST_ROUTE *only*. Can someone explain? Can this be extended to
*FAILURE_ROUTES *also?
Basically I need to call this from FAILURE_ROUTES in order to avoid
double SDP for rtpengine offers. Searching in the mailing list I could
see that there could be other means of handling this like keeping and
reading the SDP from an avp(write/read_sdp_pv), but I find the above
method pretty straightforward.
Thanks,
Stefan
I am using Kamailio 4.1.x with NAT enabled. When I want to REGISTER using
my desktop client which is Linphone everything is find with any username.
But on Android some users can REGISTER and someusers can not. I captured
SIP packets and the only difference between packets on Android devices and
packets on Desktop client is that on my desktop "received" and "rport" are
not added by Kamailio in response messages. Any idea on what is happening
here?
I want to be able to route sip invites from my on prem skype to either an
on prem jabber server or out to office 365. It depends on who the recipient
is. I am sure Kamailio can do this but I am absolutely at a loss on where
to start.
I have tried a few different configs but I basically have to break our
office communication to test. I am looking for some guidance on what to do.
Thanks in advance!
Hello,
development (master) branch of Kamailio enters now in pre-release phase
for version 4.4.0. Therefore, no new feature should be pushed to master
until we create a dedicated branch for 4.4 (expected to be in about 4
weeks or so).
If in doubt to push or not a commit to master, push it first on a
personal branch (or attach to an email) and discuss it on sr-dev. The
new modules can be a bit more dynamic if there is need to get them to
the right shape (e.g., like decision to rename functions, parameters or
adjust database structure).
We hope to get many people involved in testing, to reach a stable state
before releasing 4.4.0. If you want to get involved and need assistance,
don't hesitate to write to mailing lists. Based on my quick review,
there were no major changes to old core components, meaning we should
have preserved quite a good level of stability overall.
Help with updating the wiki page for migration from 4.3 to 4.4 as well
as what is new in 4.4 is very appreciated. I will post updates about
them very soon.
Many thanks to everyone involved in development of 4.4 and the early
testers that played with master branch so far.
Cheers,
Daniel
--
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Kamailio World Conference, May 18-20, 2016
Berlin, Germany - http://www.kamailioworld.com
I am trying to create a cluster of Kamailio servers. I want users that are
registered on one server to be able to contact and call users on other
servers. How can I implement this in Kamailio?
PS: My servers are in a private network and I do not have DNS.
Hello,
I have a high-volume installation with 100% RTP relay using rtpengine.
We run rtpengine with a high and low port range of 8000 - 65000.
Generally the peak concurrent channel count is around 2000-4000 ports,
so in theory, so we should have enough ports for all calls currently in
process.
In practice, however, we get a nearly constant stream of these errors
from Kamailio:
Feb 2 15:52:58 sip /usr/local/sbin/kamailio[16438]: ERROR: rtpengine
[rtpengine.c:1541]: rtpp_function_call(): proxy replied with error:
Error rewriting SDP
When I trace this back to rtpengine logs on the server, I see:
---
Feb 2 15:55:47 rtphost rtpengine[14710]:
[FSRIGZPJGXZWPNO.52364.907376806] Received command 'offer' from
215.111.222.101:54100
Feb 2 15:55:47 rtphost rtpengine[14710]:
[FSRIGZPJGXZWPNO.52364.907376806] Creating new call
Feb 2 15:55:47 rtphost rtpengine[14710]:
[FSRIGZPJGXZWPNO.52364.907376806] Failed to get 2 consecutive UDP ports
for relay
Feb 2 15:55:47 rtphost rtpengine[14710]:
[FSRIGZPJGXZWPNO.52364.907376806] Error allocating media ports
Feb 2 15:55:47 rtphost rtpengine[14710]:
[FSRIGZPJGXZWPNO.52364.907376806] Protocol error in packet from
215.111.222.101:54100: Error rewriting SDP [d3:sdp285:v=0#015#012o=-
1631132006999214513 4263823554000404972 IN IP4
45.201.202.203#015#012s=VOS2009#015#012c=IN IP4
45.201.202.203#015#012t=0 0#015#012m=audio 29034 RTP/AVP 18 8 0
101#015#012a=rtpmap:18 G729/8000#015#012a=fmtp:18
annexb=no#015#012a=rtpmap:8 PCMA/8000#015#012a=rtpmap:0
PCMU/8000#015#012a=rtpmap:101 telephone-event/8000#015#012a=fmtp:101
0-15#015#0123:ICE6:remove7:replacel6:origin18:session-connectione7:call-id31:FSRIGZPJGXZWPNO.52364.90737680613:received-froml3:IP415:215.111.222
...
Feb 2 15:55:47 rtphost rtpengine[14710]:
[FSRIGZPJGXZWPNO.52364.907376806] ...
5.125e8:from-tag32:709abb985b675e1497597a5bd44ca2d67:command5:offere]
---
This is despite nearly no rtpengine engagement:
[root@csrprtpus1 log]# cat /proc/rtpengine/0/status
Refcount: 1
Control PID: 14709
Targets: 0
Buckets: 0
As far as I can see, the cause is that rtpengine is not deallocating ports:
---
[root@rtphost log]# lsof -n | grep -i rtp
rtpengine 14710 root *542u IPv6 1082109949
0t0 UDP *:39910
rtpengine 14710 root *543u IPv6 1082109950
0t0 UDP *:39911
rtpengine 14710 root *544u IPv6 1082218768
0t0 UDP *:41469
rtpengine 14710 root *545u IPv6 1082058934
0t0 UDP *:46424
rtpengine 14710 root *546u IPv6 1082366799
0t0 UDP *:22915
rtpengine 14710 root *547u IPv6 1082288397
0t0 UDP *:57245
rtpengine 14710 root *548u IPv6 1082428020
0t0 UDP *:24311
rtpengine 14710 root *549u IPv6 1082366800
0t0 UDP *:23266
rtpengine 14710 root *550u IPv6 1082798144
0t0 UDP *:22743
rtpengine 14710 root *551u IPv6 1082605782
0t0 UDP *:47845
rtpengine 14710 root *552u IPv6 1082062515
0t0 UDP *:52766
rtpengine 14710 root *553u IPv6 1082648709
0t0 UDP *:58266
rtpengine 14710 root *554u IPv6 1082122218
0t0 UDP *:54359
...
---
There are _lots_ of these:
[root@rtphost log]# lsof -n | grep -i rtpengine | grep 'UDP \*:' | wc -l
56964
So, I suppose most of these just aren't being freed up.
These are short-duration calls, and the vast majority of them are
CANCEL'd at various stages of completion. My approach to invocation of
rtpengine in the config is:
1) rtpengine_offer() in branch_route[] on outbound call:
set_rtpengine_set("1");
rtpengine_offer("replace-origin replace-session-connection ICE=remove");
add_rr_param(";proxy_media=yes");
setflag(PROXY_MEDIA);
This can happen multiple times, as many branches may be attempted before
a gateway is found to take the call.
2) Symmetrical rtpengine_answer() in onreply_route:
if(isflagset(PROXY_MEDIA) && has_body("application/sdp")
&& $var(origin_b2bua) == 0) {
set_rtpengine_set("1");
rtpengine_answer("replace-origin replace-session-connection
ICE=remove");
}
3) rtpengine_delete() in event of CANCEL:
if(is_method("CANCEL")) {
# Kill RTP stream if this call was using rtpengine.
set_rtpengine_set("1");
rtpengine_delete();
# Implicitly forward the CANCEL and drop out of script
# if the corresponding INVITE transaction exists.
if(!t_relay_cancel()) {
# If we are still here, the INVITE transaction
# was found but an error occurred.
sl_send_reply("500", "Internal Server Error");
exit;
}
# If we are still here, this is also bad because it means
# the corresponding INVITE transaction no longer exists.
xlog("L_INFO", 'action=R-MAIN-REQUEST | ret=CANCEL_NO_TRANS_MATCH');
exit;
4) rtpengine_delete() in case of BYE:
if(has_totag()) {
if(loose_route()) {
if(is_method("BYE")) {
if(check_route_param("proxy_media=yes")) {
set_rtpengine_set("1");
rtpengine_delete();
}
} else if(is_method("INVITE")) {
# update rtpengine_offer() etc.
}
...
} else {
...
}
}
Any obvious problem here?
Thanks!
-- Alex
--
Alex Balashov | Principal | Evariste Systems LLC
303 Perimeter Center North, Suite 300
Atlanta, GA 30346
United States
Tel: +1-800-250-5920 (toll-free) / +1-678-954-0671 (direct)
Web: http://www.evaristesys.com/, http://www.csrpswitch.com/
Hello,
as a follow up to previous discussions on the mailing list, I would like
to propose Wednesday, Feb 3, 2016 as the day to freeze the development
for next major release. It will allow the people going at Fosdem to chat
and do last minute tunings before freezing.
Other suggestions or comments are welcome!
Cheers,
Daniel
--
Daniel-Constantin Mierla
http://twitter.com/#!/miconda - http://www.linkedin.com/in/miconda
Book: SIP Routing With Kamailio - http://www.asipto.comhttp://miconda.eu
Hi,
While compiling Kamailio 4.3.4 from package sources for Debian 7 Wheezy
(kamailio repository) I'm running into a problem. I've forked the CNXCC
module which I was trying to keep up to date with upstream changes. But
before I could do that, there is a dependency of redis added.
Unfortunately, installing redis devel libs and libevent doesn't provide
the correct version of redis. Also, I noticed on Debian 8 Jessie, it
does compile correctly.
How could Kamailio be compiled for Wheezy with these sources? I'm
missing something obvious I feel. Attached is the compile log, this is
with a completely unaltered sources.
root@devhost:/usr/src/kamailio-4.3.4+wheezy# make -C modules/cnxcc
make: Entering directory `/usr/src/kamailio-4.3.4+wheezy/modules/cnxcc'
CC (gcc) [L libkmi.so.1.0] attr.o
CC (gcc) [L libkmi.so.1.0] fmt.o
CC (gcc) [L libkmi.so.1.0] mi.o
CC (gcc) [L libkmi.so.1.0] tree.o
LD (gcc) [L libkmi.so.1.0] libkmi.so.1.0
CC (gcc) [L libsrdb1.so.1.0] db.o
CC (gcc) [L libsrdb1.so.1.0] db_id.o
CC (gcc) [L libsrdb1.so.1.0] db_pool.o
CC (gcc) [L libsrdb1.so.1.0] db_query.o
CC (gcc) [L libsrdb1.so.1.0] db_res.o
CC (gcc) [L libsrdb1.so.1.0] db_row.o
CC (gcc) [L libsrdb1.so.1.0] db_ut.o
CC (gcc) [L libsrdb1.so.1.0] db_val.o
LD (gcc) [L libsrdb1.so.1.0] libsrdb1.so.1.0
CC (gcc) [L libkcore.so.1.0] cmpapi.o
CC (gcc) [L libkcore.so.1.0] faked_msg.o
CC (gcc) [L libkcore.so.1.0] kstats_wrapper.o
CC (gcc) [L libkcore.so.1.0] parse_privacy.o
CC (gcc) [L libkcore.so.1.0] parse_sst.o
CC (gcc) [L libkcore.so.1.0] regexp.o
CC (gcc) [L libkcore.so.1.0] statistics.o
CC (gcc) [L libkcore.so.1.0] strcommon.o
LD (gcc) [L libkcore.so.1.0] libkcore.so.1.0
LD (gcc) [M cnxcc.so] cnxcc.so
cnxcc_mod.o: In function `redisLibeventReadEvent':
/usr/include/hiredis/adapters/libevent.h:10: multiple definition of
`redisLibeventReadEvent'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:10: first defined
here
cnxcc_mod.o: In function `redisLibeventWriteEvent':
/usr/include/hiredis/adapters/libevent.h:16: multiple definition of
`redisLibeventWriteEvent'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:16: first defined
here
cnxcc_mod.o: In function `redisLibeventAddRead':
/usr/include/hiredis/adapters/libevent.h:22: multiple definition of
`redisLibeventAddRead'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:22: first defined
here
cnxcc_mod.o: In function `redisLibeventDelRead':
/usr/include/hiredis/adapters/libevent.h:27: multiple definition of
`redisLibeventDelRead'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:27: first defined
here
cnxcc_mod.o: In function `redisLibeventAddWrite':
/usr/include/hiredis/adapters/libevent.h:32: multiple definition of
`redisLibeventAddWrite'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:32: first defined
here
cnxcc_mod.o: In function `redisLibeventDelWrite':
/usr/include/hiredis/adapters/libevent.h:37: multiple definition of
`redisLibeventDelWrite'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:37: first defined
here
cnxcc_mod.o: In function `redisLibeventCleanup':
/usr/include/hiredis/adapters/libevent.h:42: multiple definition of
`redisLibeventCleanup'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:42: first defined
here
cnxcc_mod.o: In function `redisLibeventAttach':
/usr/include/hiredis/adapters/libevent.h:49: multiple definition of
`redisLibeventAttach'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:49: first defined
here
cnxcc_redis.o: In function `redisLibeventReadEvent':
/usr/include/hiredis/adapters/libevent.h:10: multiple definition of
`redisLibeventReadEvent'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:10: first defined
here
cnxcc_redis.o: In function `redisLibeventWriteEvent':
/usr/include/hiredis/adapters/libevent.h:16: multiple definition of
`redisLibeventWriteEvent'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:16: first defined
here
cnxcc_redis.o: In function `redisLibeventAddRead':
/usr/include/hiredis/adapters/libevent.h:22: multiple definition of
`redisLibeventAddRead'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:22: first defined
here
cnxcc_redis.o: In function `redisLibeventDelRead':
/usr/include/hiredis/adapters/libevent.h:27: multiple definition of
`redisLibeventDelRead'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:27: first defined
here
cnxcc_redis.o: In function `redisLibeventAddWrite':
/usr/include/hiredis/adapters/libevent.h:32: multiple definition of
`redisLibeventAddWrite'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:32: first defined
here
cnxcc_redis.o: In function `redisLibeventDelWrite':
/usr/include/hiredis/adapters/libevent.h:37: multiple definition of
`redisLibeventDelWrite'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:37: first defined
here
cnxcc_redis.o: In function `redisLibeventCleanup':
/usr/include/hiredis/adapters/libevent.h:42: multiple definition of
`redisLibeventCleanup'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:42: first defined
here
cnxcc_redis.o: In function `redisLibeventAttach':
/usr/include/hiredis/adapters/libevent.h:49: multiple definition of
`redisLibeventAttach'
cnxcc_check.o:/usr/include/hiredis/adapters/libevent.h:49: first defined
here
collect2: error: ld returned 1 exit status
make: *** [cnxcc.so] Error 1
make: Leaving directory `/usr/src/kamailio-4.3.4+wheezy/modules/cnxcc'
Cheers,
Dirk