Hi,
I am trying to use t_suspend()/t_continue() multiple times on the same
transaction. Calling t_suspend() more than once works, but the second
time I call t_continue() the transaction is killed and a 500 response is
sent. It is the "if (branch == t->nr_of_outgoings)" check from the code
fragment below (from t_suspend.c:t_continue()) that results in the
transaction being killed - you can see the debug/error line I added to
determine this in the fragment.
Is using t_suspend()/t_continue() multiple times something that should
work?
Thanks,
Peter
if (t->uas.status < 200) {
/* No final reply has been sent yet.
* Check whether or not there is any pending branch.
*/
for ( branch = 0;
branch < t->nr_of_outgoings;
branch++
) {
if ((t->uac[branch].request.buffer != NULL)
&& (t->uac[branch].last_received < 200)
)
break;
}
if (branch == t->nr_of_outgoings) {
/* There is not any open branch so there is
* no chance that a final response will be
received. */
ret = 0;
LM_ERR("branch == t->nr_of_outgoings\n");
goto kill_trans;
}
}
--
Peter Dunkley
Technical Director
Crocodile RCS Ltd
Hi, the new RFC 6665 mandates that the subscription dialog is made
*after* the first NOTIFY from the UAS (rather than after the 200 to
the initial SUBSCRIBE). This means that the UAC MUST take the route
set from the *first* received NOTIFY (instead of taking it from the
200 to the initial SUBSCRIBE).
Therefore a proxy compliant with RFC 6665 MUST always add RR to
in-dialog NOTIFY requests and thus, I propose that the default SR
script file implements it.
Regards.
--
Iñaki Baz Castillo
<ibc(a)aliax.net>
Module: sip-router
Branch: master
Commit: 0f702f6e236eb0cbb238bf83a0c4ae94d7b3cad8
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=0f702f6…
Author: Anca Vamanu <anca.vamanu(a)1and1.ro>
Committer: Anca Vamanu <anca.vamanu(a)1and1.ro>
Date: Thu Jul 19 17:49:13 2012 +0300
modules_k/uac: uac_replace_from/to AUTO mode with dialog module
Added a implementation for uac_replace_from/to() that uses the dialog
module for AUTO mode. In this mode the URIs are stored as dialog
variables.
The change in tm module fixes a bug: if uac_replace_to() was called, the
URI was not changed accordingly in Cancel.
---
modules/tm/t_cancel.c | 5 +-
modules_k/dialog/dialog.c | 2 +
modules_k/dialog/dlg_load.h | 6 +
modules_k/uac/README | 111 +++++++++++-----
modules_k/uac/doc/uac_admin.xml | 68 +++++++++-
modules_k/uac/replace.c | 292 ++++++++++++++++++++++++++++++---------
modules_k/uac/uac.c | 17 ++-
7 files changed, 393 insertions(+), 108 deletions(-)
Diff: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commitdiff;h=0f7…
Module: sip-router
Branch: master
Commit: 2750e03d4977d4a8f59ca0d2d0f59e1caec96b2d
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=2750e03…
Author: Carsten Bock <carsten(a)ng-voice.com>
Committer: Carsten Bock <carsten(a)ng-voice.com>
Date: Mon Sep 17 17:25:38 2012 +0200
New Option: "x" for automatic bridging between IPv4 and IPv6.
Based on the following assumption: "i" is the IPv4 interface
and "e" is the IPv6 interface on the RTPProxy (tested with both
RTPProxy and Sipwise's ngcp-mediaproxy-ng).
Mechanism is as follows:
- IP in SDP is IPv4: Do bridging "ie"
- IP in SDP is IPv6: Do bridging "ei"
Not a big deal, but makes the configuration much more easier.
---
modules/rtpproxy/doc/rtpproxy.xml | 8 ++++++++
modules/rtpproxy/doc/rtpproxy_admin.xml | 7 +++++++
modules/rtpproxy/rtpproxy.c | 22 +++++++++++++++++++++-
3 files changed, 36 insertions(+), 1 deletions(-)
diff --git a/modules/rtpproxy/doc/rtpproxy.xml b/modules/rtpproxy/doc/rtpproxy.xml
index d5a15ee..741a4d9 100644
--- a/modules/rtpproxy/doc/rtpproxy.xml
+++ b/modules/rtpproxy/doc/rtpproxy.xml
@@ -57,6 +57,14 @@
<email>osas(a)voipembedded.com</email>
</address>
</editor>
+ <editor>
+ <firstname>Carsten</firstname>
+ <surname>Bock</surname>
+ <affiliation><orgname>ng-voice GmbH</orgname></affiliation>
+ <address>
+ <email>carsten(a)ng-voice.com</email>
+ </address>
+ </editor>
</authorgroup>
<copyright>
<year>2003-2008</year>
diff --git a/modules/rtpproxy/doc/rtpproxy_admin.xml b/modules/rtpproxy/doc/rtpproxy_admin.xml
index a245d73..d6a9dc5 100644
--- a/modules/rtpproxy/doc/rtpproxy_admin.xml
+++ b/modules/rtpproxy/doc/rtpproxy_admin.xml
@@ -344,6 +344,13 @@ rtpproxy_offer();
the 'w' flag for clients behind NAT! See also above notes!
</para></listitem>
<listitem><para>
+ <emphasis>x</emphasis> - this flag will do automatic bridging between IPv4 on the
+ "internal network" and IPv6 on the "external network". The distinction is done by
+ the given IP in the SDP, e.g. a IPv4 Address will always call "ie" to the RTPProxy
+ (IPv4(i) to IPv6(e)) and an IPv6Address will always call "ei" to the RTPProxy (IPv6(e)
+ to IPv4(i)).
+ </para></listitem>
+ <listitem><para>
<emphasis>f</emphasis> - instructs rtpproxy to ignore marks
inserted by another rtpproxy in transit to indicate that the
session is already goes through another proxy. Allows creating
diff --git a/modules/rtpproxy/rtpproxy.c b/modules/rtpproxy/rtpproxy.c
index 9a0fd14..59e7092 100644
--- a/modules/rtpproxy/rtpproxy.c
+++ b/modules/rtpproxy/rtpproxy.c
@@ -1993,6 +1993,7 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
{NULL, 0}, /* Timeout-Socket */
};
int iovec_param_count;
+ int autobridge_ipv4v6;
char *c1p, *c2p, *bodylimit, *o1p;
char itoabuf_buf[20];
@@ -2012,7 +2013,7 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
LM_ERR("out of pkg memory\n");
FORCE_RTP_PROXY_RET (-1);
}
- flookup = force = real = orgip = commip = via = 0;
+ flookup = force = real = orgip = commip = via = autobridge_ipv4v6 = 0;
for (cp = str1; cp != NULL && *cp != '\0'; cp++) {
switch (*cp) {
case '1':
@@ -2076,6 +2077,11 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
orgip = 1;
break;
+ case 'x':
+ case 'X':
+ autobridge_ipv4v6 = 1;
+ break;
+
case 'w':
case 'W':
if (append_opts(&opts, 'S') == -1) {
@@ -2253,6 +2259,12 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
}
/* XXX must compare address families in all addresses */
if (pf == AF_INET6) {
+ if (autobridge_ipv4v6 != 0) {
+ if ((append_opts(&opts, 'E') == -1) && (append_opts(&opts, 'I') == -1)) {
+ LM_ERR("out of pkg memory\n");
+ FORCE_RTP_PROXY_RET (-1);
+ }
+ }
if (append_opts(&opts, '6') == -1) {
LM_ERR("out of pkg memory\n");
FORCE_RTP_PROXY_RET (-1);
@@ -2260,7 +2272,15 @@ force_rtp_proxy(struct sip_msg* msg, char* str1, char* str2, int offer, int forc
/* We need to update the pointers and the length here, it has changed. */
v[1].iov_base = opts.s.s;
v[1].iov_len = opts.oidx;
+ } else {
+ if (autobridge_ipv4v6 != 0) {
+ if ((append_opts(&opts, 'I') == -1) && (append_opts(&opts, 'E') == -1)) {
+ LM_ERR("out of pkg memory\n");
+ FORCE_RTP_PROXY_RET (-1);
+ }
+ }
}
+
STR2IOVEC(newip, v[9]);
STR2IOVEC(oldport, v[11]);
#ifdef EXTRA_DEBUG
According to the 3.3 docs, this function in the ™ module is no longer needed. Is this correct?
If so, should someone remove it?
Hmm. All mentions of ™ gets automatically converted to a trademark sign in my mailer. I mean the T M Module :-)
/O
--------
1.4.6. delete_timer (integer)
Time after which a to-be-deleted transaction currently ref-ed by a process will be tried to be deleted again (in milliseconds).
Note: this parameter is obsolete for ser 2.1 (in 2.1 the transaction is deleted the moment it's not referenced anymore).
Default value is 200 milliseconds.
Example 6. Set delete_timer parameter
...
modparam("tm", "delete_timer", 100)
...
Hello,
if we have a SDP content like this one:
v=0
o=alice 2890844526 2890844527 IN IP4 host.example.com
s=
c=IN IP4 session.foo.org
t=0 0
m=audio 49170 RTP/AVP 97
c=IN IP4 stream.bar.org
a=rtpmap:97 iLBC/8000
m=audio 49170 RTP/AVP 97
a=rtpmap:97 iLBC/8000
m=audio 49170 RTP/AVP 97
c=IN IP4 bar.baz.net
a=rtpmap:97 iLBC/8000
When parsing this function three streams are created:
first one will have ip_addr string equal to "stream.bar.org"
second one: "stream.bar.org" <-- Wrong! it is using same as first one,
instead using session default
third one: "bar.baz.net"
Attached patch solves it.
Kind regards,
Vicente.
Hi All,
I'm observing a core intermittently at "qm_status (qm=0x786cd000) at
mem/q_malloc.c:763" for kamailio version 3.1.0
looking at the backtrace this is occurring while doing a tcp buffer
overrun. Please have a look and let me know if anyone observed this issue
or how can we debug it.
Please find the backtrace and kamailio version
osbprod-V2R0:~ # /usr/sbin/kamailio -V
version: kamailio 3.1.0 (i386/linux) 21a375
flags: STATS: Off, USE_IPV6, USE_TCP, USE_TLS, TLS_HOOKS, USE_RAW_SOCKS,
DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC,
DBG_QM_MALLOC, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE,
USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES
ADAPTIVE_WAIT_LOOPS=1024, MAX_RECV_BUFFER_SIZE 262144, MAX_LISTEN 16,
MAX_URI_SIZE 1024, BUF_SIZE 65535, PKG_SIZE 15MB
poll method support: poll, epoll_lt, epoll_et, sigio_rt, select.
id: 21a375
compiled on 12:38:44 Apr 26 2012 with gcc 4.5.0
#0 qm_status (qm=0x786cd000) at mem/q_malloc.c:763
#1 0x0819c0f3 in qm_debug_frag (qm=0x786cd000, f=<value optimized out>) at
mem/q_malloc.c:167
#2 0x0819c352 in qm_free (qm=0x786cd000, p=0x7a6cb6ac, file=0x821cce2
"<core>: tcp_main.c", func=0x822285f "wbufq_run", line=880) at
mem/q_malloc.c:457
#3 0x0815f686 in wbufq_run (tcpconn=0x7a1a7548, ev=4, fd_i=-1) at
tcp_main.c:880
#4 handle_tcpconn_ev (tcpconn=0x7a1a7548, ev=4, fd_i=-1) at tcp_main.c:4141
#5 0x08169bf2 in io_wait_loop_epoll () at io_wait.h:1092
#6 tcp_main_loop () at tcp_main.c:4606
#7 0x080b0404 in main_loop () at main.c:1655
#8 0x080b1f84 in main (argc=9, argv=0xbfb4c9f4) at main.c:2446
(gdb) l
758 LOG_(DEFAULT_FACILITY, memlog, "qm_status: ",
759 "dumping free list stats :\n");
760 for(h=0,i=0;h<QM_HASH_SIZE;h++){
761 unused=0;
762 for (f=qm->free_hash[h].head.u.nxt_free,j=0;
763 f!=&(qm->free_hash[h].head);
f=f->u.nxt_free, i++, j++){
764 if (!FRAG_WAS_USED(f)){
765 unused++;
766 #ifdef DBG_QM_MALLOC
767 LOG_(DEFAULT_FACILITY,
memlog, "qm_status: ",
Hi,
I was building some test RPMs (Fedora 17, x86_64) of master and found that
the ldap module no longer builds.
CC (gcc) [M ldap.so] ldap_exp_fn.o
ldap_exp_fn.c: In function ‘ldap_search_impl’:
ldap_exp_fn.c:74:22: error: request for member ‘getf’ in something not a
structure or union
make: *** [ldap_exp_fn.o] Error 1
Regards,
Peter
--
Peter Dunkley
Technical Director
Crocodile RCS Ltd
Hi,
I was building some test RPMs (Fedora 17, x86_64) of master and found that
the carrierroute module no longer builds.
The errors I get are:
CC (gcc) [M carrierroute.so] cr_func.o
cr_func.c: In function ‘cr_gp2id’:
cr_func.c:88:22: error: request for member ‘type’ in something not a
structure or union
cr_func.c:89:42: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:90:22: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:92:23: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:93:6: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:95:28: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:97:11: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:97:11: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:97:11: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:97:11: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:97:11: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:105:24: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:106:7: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:108:29: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:110:12: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:110:12: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:110:12: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:110:12: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:110:12: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c: In function ‘set_next_domain_on_rule’:
cr_func.c:190:35: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:191:25: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c: In function ‘actually_rewrite’:
cr_func.c:357:49: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:358:26: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c: In function ‘cr_load_user_carrier’:
cr_func.c:642:35: error: request for member ‘pvp’ in something not a
structure or union
cr_func.c:643:26: error: request for member ‘pvp’ in something not a
structure or union
make: *** [cr_func.o] Error 1
Regards,
Peter
--
Peter Dunkley
Technical Director
Crocodile RCS Ltd