Module: sip-router
Branch: master
Commit: 7bbf8fece2cc93c5b1ddd2c3dcc12e8a920dd54d
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=7bbf8fe…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Sat Apr 6 22:02:48 2013 +0200
snmpstats Add disabled section in Makefile for compilation on Centos systems
Net-SNMP and snmpd can be built with embedded perl and libwrap support. If that's
the case on your system you need to enable the EMBEDDED_PERL section in the
Makefile. Maybe this could be enabled automatically.
---
modules/snmpstats/Makefile | 14 ++++++++++++++
1 files changed, 14 insertions(+), 0 deletions(-)
diff --git a/modules/snmpstats/Makefile b/modules/snmpstats/Makefile
index f518ba6..0086ef1 100644
--- a/modules/snmpstats/Makefile
+++ b/modules/snmpstats/Makefile
@@ -15,6 +15,20 @@ else
INSTALLMIBDIR = $(cfg-prefix)$(shell net-snmp-config --prefix)/share/snmp/mibs
endif
+ifeq($(EMBEDDED_PERL),1)
+#
+# Enable this part if you compile on Centos 5 or another system that has a
+# packaged snmpd with embedded perl and libwrap support
+#
+BUILDAGENTLIBS += -Wl,-E -Wl,-rpath,/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE \
+ -L/usr/local/lib /usr/lib/perl5/5.8.8/i386-linux-thread-multi/auto/DynaLoader/DynaLoader.a \
+ -L/usr/lib/perl5/5.8.8/i386-linux-thread-multi/CORE \
+ -lperl -lresolv -lnsl -ldl -lm -lcrypt -lutil -lpthread -lc \
+ -lwrap \
+ -lsensors \
+ -lrpmdb -lrpm
+endif
+
CFLAGS+=
auto_gen=
NAME=snmpstats.so
Module: sip-router
Branch: master
Commit: bddf66407ef7521f3d1f1e941b4c1e104e59d1ef
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=bddf664…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Sat Apr 6 22:04:51 2013 +0200
snmpstats fix typo in Makefile.
---
modules/snmpstats/Makefile | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/modules/snmpstats/Makefile b/modules/snmpstats/Makefile
index 0086ef1..2d4af2a 100644
--- a/modules/snmpstats/Makefile
+++ b/modules/snmpstats/Makefile
@@ -15,7 +15,7 @@ else
INSTALLMIBDIR = $(cfg-prefix)$(shell net-snmp-config --prefix)/share/snmp/mibs
endif
-ifeq($(EMBEDDED_PERL),1)
+ifeq ($(EMBEDDED_PERL),1)
#
# Enable this part if you compile on Centos 5 or another system that has a
# packaged snmpd with embedded perl and libwrap support
Module: sip-router
Branch: master
Commit: 0fd0906680ce0f022820fd15819486eb4acfe24a
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=0fd0906…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Sun Apr 7 09:45:21 2013 +0200
snmpstats minor typo fixes
---
modules/snmpstats/snmpSIPPortTable.c | 2 +-
modules/snmpstats/snmpSIPPortTable.h | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/modules/snmpstats/snmpSIPPortTable.c b/modules/snmpstats/snmpSIPPortTable.c
index 04a2b80..46410d8 100644
--- a/modules/snmpstats/snmpSIPPortTable.c
+++ b/modules/snmpstats/snmpSIPPortTable.c
@@ -169,7 +169,7 @@ kamailioSIPPortTable_context *getRow(int ipType, int *ipAddress)
* to an integer so that if the function is called again with another
* 'protocol', we can continue from the last index.
*/
-void createRowsFromIPList(int *theList, int listSize, int protocol,
+static void createRowsFromIPList(int *theList, int listSize, int protocol,
int *snmpIndex, int family) {
kamailioSIPPortTable_context *currentRow;
diff --git a/modules/snmpstats/snmpSIPPortTable.h b/modules/snmpstats/snmpSIPPortTable.h
index 4032672..eb552dc 100644
--- a/modules/snmpstats/snmpSIPPortTable.h
+++ b/modules/snmpstats/snmpSIPPortTable.h
@@ -50,7 +50,7 @@ extern "C" {
// OLD #define SIP_PORT_TABLE_STR_INDEX_SIZE 10
#define SIP_PORT_TABLE_STR_INDEX_SIZE 50
-/* This strucutre represents a single row in the table. */
+/* This structure represents a single row in the table. */
typedef struct kamailioSIPPortTable_context_s
{
@@ -107,7 +107,7 @@ extern size_t kamailioSIPPortTable_oid_len;
#define COLUMN_KAMAILIOSIPTRANSPORTRCV 4
#define kamailioSIPPortTable_COL_MIN 4
-#define kamailioSIPPortTable_COL_MAX 12
+#define kamailioSIPPortTable_COL_MAX 4
#ifdef __cplusplus
Module: sip-router
Branch: master
Commit: e28a06a7a8f5558bb81cfc09d5cb70b9c6938328
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=e28a06a…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Sat Apr 6 21:56:59 2013 +0200
lib/kcore Fix IPv6 support in interface list
Added a new function that takes family as an argument. In order to list both
IPv4 and IPv6 you need to call that function once per address family.
Keep the old IPv4-only function for backwards compatibility.
---
lib/kcore/statistics.c | 55 ++++++++++++++++++++++++++++++++++++-----------
lib/kcore/statistics.h | 10 +++++++-
2 files changed, 51 insertions(+), 14 deletions(-)
diff --git a/lib/kcore/statistics.c b/lib/kcore/statistics.c
index c94bde0..22fed2d 100644
--- a/lib/kcore/statistics.c
+++ b/lib/kcore/statistics.c
@@ -113,11 +113,37 @@ stat_var *get_stat_var_from_num_code(unsigned int numerical_code, int out_codes)
* contents, to avoid a nasty memory leak.
*/
int get_socket_list_from_proto(int **ipList, int protocol) {
+ return get_socket_list_from_proto_and_family(ipList, protocol, AF_INET);
+}
+
+
+/*!
+ * This function will retrieve a list of all ip addresses and ports that Kamailio
+ * is listening on, with respect to the transport protocol specified with
+ * 'protocol'. This function supports both IPv4 and IPv6
+ *
+ * The first parameter, ipList, is a pointer to a pointer. It will be assigned a
+ * new block of memory holding the IP Addresses and ports being listened to with
+ * respect to 'protocol'. The array maps a 2D array into a 1 dimensional space,
+ * and is layed out as follows:
+ *
+ * The first NUM_IP_OCTETS indices will be the IP address, and the next index
+ * the port. So if NUM_IP_OCTETS is equal to 4 and there are two IP addresses
+ * found, then:
+ *
+ * - ipList[0] will be the first octet of the first ip address
+ * - ipList[3] will be the last octet of the first ip address.
+ * - iplist[4] will be the port of the first ip address
+ * -
+ * - iplist[5] will be the first octet of the first ip address,
+ * - and so on.
+ */
+int get_socket_list_from_proto_and_family(int **ipList, int protocol, int family) {
struct socket_info *si;
struct socket_info** list;
- int num_ip_octets = 4;
+ int num_ip_octets = family == AF_INET ? NUM_IP_OCTETS : NUM_IPV6_OCTETS;
int numberOfSockets = 0;
int currentRow = 0;
@@ -136,6 +162,13 @@ int get_socket_list_from_proto(int **ipList, int protocol) {
return 0;
}
#endif
+#ifndef USE_SCTP
+ if (protocol == PROTO_SCTP)
+ {
+ return 0;
+ }
+#endif
+ /* We have no "interfaces" for websockets */
if (protocol == PROTO_WS || protocol == PROTO_WSS)
return 0;
@@ -145,8 +178,7 @@ int get_socket_list_from_proto(int **ipList, int protocol) {
/* Find out how many sockets are in the list. We need to know this so
* we can malloc an array to assign to ipList. */
for(si=list?*list:0; si; si=si->next){
- /* We only support IPV4 at this point. */
- if (si->address.af == AF_INET) {
+ if (si->address.af == family) {
numberOfSockets++;
}
}
@@ -172,21 +204,18 @@ int get_socket_list_from_proto(int **ipList, int protocol) {
/* Extract out the IP Addresses and ports. */
for(si=list?*list:0; si; si=si->next){
+ int i;
/* We currently only support IPV4. */
- if (si->address.af != AF_INET) {
+ if (si->address.af != family) {
continue;
}
- (*ipList)[currentRow*(num_ip_octets + 1) ] =
- si->address.u.addr[0];
- (*ipList)[currentRow*(num_ip_octets + 1)+1] =
- si->address.u.addr[1];
- (*ipList)[currentRow*(num_ip_octets + 1)+2] =
- si->address.u.addr[2];
- (*ipList)[currentRow*(num_ip_octets + 1)+3] =
- si->address.u.addr[3];
- (*ipList)[currentRow*(num_ip_octets + 1)+4] =
+ for (i = 0; i < num_ip_octets; i++) {
+ (*ipList)[currentRow*(num_ip_octets + 1) + i ] =
+ si->address.u.addr[i];
+ }
+ (*ipList)[currentRow*(num_ip_octets + 1) + i] =
si->port_no;
currentRow++;
diff --git a/lib/kcore/statistics.h b/lib/kcore/statistics.h
index 08bf20d..110f02c 100644
--- a/lib/kcore/statistics.h
+++ b/lib/kcore/statistics.h
@@ -40,6 +40,7 @@
#define NUM_IP_OCTETS 4
+#define NUM_IPV6_OCTETS 16
#ifdef STATISTICS
@@ -63,7 +64,7 @@ stat_var *get_stat_var_from_num_code(unsigned int numerical_code, int in_codes);
/*!
* This function will retrieve a list of all ip addresses and ports that Kamailio
* is listening on, with respect to the transport protocol specified with
- * 'protocol'.
+ * 'protocol'. This function only returns IPv4 addresses.
*
* The first parameter, ipList, is a pointer to a pointer. It will be assigned a
* new block of memory holding the IP Addresses and ports being listened to with
@@ -93,6 +94,13 @@ stat_var *get_stat_var_from_num_code(unsigned int numerical_code, int in_codes);
*/
int get_socket_list_from_proto(int **ipList, int protocol);
+/*! \brief Function to get a list of all IP addresses and ports in a specific
+ * family, like AF_INET or AF_INET6
+ *
+ * For documentation see \ref get_socket_list_from_proto()
+ */
+int get_socket_list_from_proto_and_family(int **ipList, int protocol, int family);
+
/*!
* Returns the sum of the number of bytes waiting to be consumed on all network
Hello,
I got the following coredump while doing some testing with t_suspend() and t_continue() on the first INVITE:
(gdb) bt
#0 qm_detach_free (qm=0x7fe2dae65000, size=16) at mem/q_malloc.c:269
#1 qm_malloc (qm=0x7fe2dae65000, size=16) at mem/q_malloc.c:386
#2 0x00007fe2e5e6d541 in update_totag_set (t=0x7fe2db0f42d0, ok=<value optimized out>) at t_reply.c:372
#3 0x00007fe2e5e72387 in relay_reply (t=<value optimized out>, p_msg=<value optimized out>, branch=2, msg_status=200, cancel_data=0x7fff63fdf9b0, do_put_on_wait=1) at t_reply.c:1854
#4 0x00007fe2e5e733e6 in reply_received (p_msg=0x7fe2e6a55ba0) at t_reply.c:2370
#5 0x00000000004547f5 in do_forward_reply (msg=0x7fe2e6a55ba0, mode=<value optimized out>) at forward.c:799
#6 0x000000000049a5ba in receive_msg (buf=<value optimized out>, len=961, rcv_info=0x7fff63fdfc40) at receive.c:270
#7 0x00000000005281a6 in udp_rcv_loop () at udp_server.c:544
#8 0x0000000000464d3a in main_loop () at main.c:1638
#9 0x0000000000467a6c in main (argc=<value optimized out>, argv=<value optimized out>) at main.c:2566
I suspend the transaction in one route and then I continue it in another route, similar to below:
route[INVITE]
# Suspend and put to memcache:
t_suspend();
xlog("proceesing suspended in transaction [$T(id_index):$T(id_label)]\n");
$var(transaction_index)=$T(id_index);
$var(transaction_label)=$T(id_label);
$mct(wait_$tU)= "" + $var(transaction_index) + ":" + $var(transaction_label);
$mctex(wait_$tU) = 100;
}
route[INVITE_resume] {
# get the transaction index and lable from memcache
$avp(check) = $mct(wait_$tU) ; # I should have the transaction index and the transaction label here
$var(my_transaction_index) = $(avp(check){s.select,0,:});
$var(my_transaction_label) = $(avp(check){s.select,1,:});
$var(a)= $(var(my_transaction_index){s.int});
$var(b) = $(var(my_transaction_label){s.int});
t_continue( "$var(a)", "$var(b)" , "my_relay_route");
}
route[INVITE_resume] executes only on an asynchronous event (a certain SIP message that might come or not) .
I use kamailio 4.0.0/Centos Linux. I suspect it happened when I sent CANCEL, but I could not reproduce. I still have the core file.
Regards,
Dragos
Module: sip-router
Branch: master
Commit: 0f4168e0e6b53c8993121f7a751cabecc2d3e1f3
URL: http://git.sip-router.org/cgi-bin/gitweb.cgi/sip-router/?a=commit;h=0f4168e…
Author: Olle E. Johansson <oej(a)edvina.net>
Committer: Olle E. Johansson <oej(a)edvina.net>
Date: Sat Apr 6 14:51:59 2013 +0200
ipops Add section IDs to README xml files
---
modules/ipops/README | 44 ++++++++++++++++++------------------
modules/ipops/doc/ipops_admin.xml | 22 +++++++++---------
2 files changed, 33 insertions(+), 33 deletions(-)
diff --git a/modules/ipops/README b/modules/ipops/README
index a0250a5..bd79553 100644
--- a/modules/ipops/README
+++ b/modules/ipops/README
@@ -76,8 +76,8 @@ Chapter 1. Admin Guide
1. Overview
- This module offers operations for handling IP addresses, both IPv4 and
- IPv6.
+ The IPops module offers operations for handling IP addresses, both IPv4
+ and IPv6.
IPv6 is defined in RFC 2460. The same IPv6 address can be represented
by different ASCII strings, so binary comparison is required. For
@@ -125,7 +125,7 @@ Chapter 1. Admin Guide
4.9. is_ip_rfc1918 (ip)
4.10. is_in_subnet (ip, subnet)
-4.1. is_ip (ip)
+4.1. is_ip (ip)
Returns TRUE if the argument is a valid IPv4, IPv6 or IPv6 reference.
FALSE otherwise.
@@ -137,14 +137,14 @@ Chapter 1. Admin Guide
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.1. is_ip usage
+ Example 1.1. is_ip usage
...
if (is_ip($rd)) {
xlog("L_INFO", "RURI domain is an IP address (not a host name/domain)\n");
}
...
-4.2. is_pure_ip (ip)
+4.2. is_pure_ip (ip)
Returns TRUE if the argument is a valid IPv4 or IPv6. FALSE otherwise.
@@ -154,7 +154,7 @@ if (is_ip($rd)) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.2. is_pure_ip usage
+ Example 1.2. is_pure_ip usage
...
$var(ip) = "::1";
if (is_pure_ip($var(ip))) {
@@ -162,7 +162,7 @@ if (is_pure_ip($var(ip))) {
}
...
-4.3. is_ipv4 (ip)
+4.3. is_ipv4 (ip)
Returns TRUE if the argument is a valid IPv4. FALSE otherwise.
@@ -172,14 +172,14 @@ if (is_pure_ip($var(ip))) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.3. is_ipv4 usage
+ Example 1.3. is_ipv4 usage
...
if (is_ipv4("1.2.3.4")) {
xlog("L_INFO", "it's IPv4\n");
}
...
-4.4. is_ipv6 (ip)
+4.4. is_ipv6 (ip)
Returns TRUE if the argument is a valid IPv6. FALSE otherwise.
@@ -189,14 +189,14 @@ if (is_ipv4("1.2.3.4")) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.4. is_ipv6 usage
+ Example 1.4. is_ipv6 usage
...
if (is_ipv6("1080:0:0:0:8:800:200C:417A")) {
xlog("L_INFO", "it's IPv6\n");
}
...
-4.5. is_ipv6_reference (ip)
+4.5. is_ipv6_reference (ip)
Returns TRUE if the argument is a valid IPv6 reference. FALSE
otherwise.
@@ -207,14 +207,14 @@ if (is_ipv6("1080:0:0:0:8:800:200C:417A")) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.5. is_ipv6_reference usage
+ Example 1.5. is_ipv6_reference usage
...
if (is_ipv6_reference("[1080:0:0:0:8:800:200C:417A]")) {
xlog("L_INFO", "it's IPv6 reference\n");
}
...
-4.6. ip_type (ip)
+4.6. ip_type (ip)
Returns the type of the given IP.
@@ -230,7 +230,7 @@ if (is_ipv6_reference("[1080:0:0:0:8:800:200C:417A]")) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.6. ip_type usage
+ Example 1.6. ip_type usage
...
ip_type($var(myip));
switch($rc) {
@@ -249,7 +249,7 @@ switch($rc) {
}
...
-4.7. compare_ips (ip1, ip2)
+4.7. compare_ips (ip1, ip2)
Returns TRUE if both IP addresses are the same. FALSE otherwise. This
function also allows comparing an IPv6 address against an IPv6
@@ -263,7 +263,7 @@ switch($rc) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.7. compare_ips usage
+ Example 1.7. compare_ips usage
...
if (compare_ips("1080:0000:0000:0000:0008:0800:200C:417A", "[1080::8:800:200C:41
7A]")) {
@@ -271,7 +271,7 @@ if (compare_ips("1080:0000:0000:0000:0008:0800:200C:417A", "[1080::8:800:200C:41
}
...
-4.8. compare_pure_ips (ip1, ip2)
+4.8. compare_pure_ips (ip1, ip2)
Returns TRUE if both IP's are the same. FALSE otherwise. This function
does NOT allow comparing an IPv6 against an IPv6 reference.
@@ -285,14 +285,14 @@ if (compare_ips("1080:0000:0000:0000:0008:0800:200C:417A", "[1080::8:800:200C:41
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.8. compare_pure_ips usage
+ Example 1.8. compare_pure_ips usage
...
if (compare_pure_ips($si, "1080::8:800:200C:417A")) {
xlog("L_INFO", "both are the same IP\n");
}
...
-4.9. is_ip_rfc1918 (ip)
+4.9. is_ip_rfc1918 (ip)
Returns TRUE if the argument is a private IPv4 according to RFC 1918.
FALSE otherwise.
@@ -303,14 +303,14 @@ if (compare_pure_ips($si, "1080::8:800:200C:417A")) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.9. is_ip_rfc1918 usage
+ Example 1.9. is_ip_rfc1918 usage
...
if (is_ip_rfc1918("10.0.123.123")) {
xlog("L_INFO", "it's a private IPv4\n");
}
...
-4.10. is_in_subnet (ip, subnet)
+4.10. is_in_subnet (ip, subnet)
Returns TRUE if the first argument is an IP address within the (CIDR
notation) subnet in the second argument. FALSE otherwise.
@@ -323,7 +323,7 @@ if (is_ip_rfc1918("10.0.123.123")) {
This function can be used from REQUEST_ROUTE, FAILURE_ROUTE,
ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.
- Example 1.10. is_in_subnet usage
+ Example 1.10. is_in_subnet usage
...
if (is_in_subnet("10.0.123.123", "10.0.123.1/24")) {
xlog("L_INFO", "it's in the subnet\n");
diff --git a/modules/ipops/doc/ipops_admin.xml b/modules/ipops/doc/ipops_admin.xml
index 8cbeac2..c7ce810 100644
--- a/modules/ipops/doc/ipops_admin.xml
+++ b/modules/ipops/doc/ipops_admin.xml
@@ -19,7 +19,7 @@
<title>Overview</title>
<para>
- This module offers operations for handling IP addresses, both IPv4 and IPv6.
+ The IPops module offers operations for handling IP addresses, both IPv4 and IPv6.
</para>
<para>
IPv6 is defined in <ulink url="http://tools.ietf.org/html/rfc2460">RFC 2460</ulink>.
@@ -93,7 +93,7 @@
<title>Functions</title>
- <section>
+ <section id="ipops.f.is_ip">
<title>
<function moreinfo="none">is_ip (ip)</function>
</title>
@@ -131,7 +131,7 @@ if (is_ip($rd)) {
</section>
- <section>
+ <section id="ipops.f.is_pur_ip">
<title>
<function moreinfo="none">is_pure_ip (ip)</function>
</title>
@@ -170,7 +170,7 @@ if (is_pure_ip($var(ip))) {
</section>
- <section>
+ <section id="ipops.f.is_ipv4">
<title>
<function moreinfo="none">is_ipv4 (ip)</function>
</title>
@@ -208,7 +208,7 @@ if (is_ipv4("1.2.3.4")) {
</section>
- <section>
+ <section id="ipops.f.is_ipv6">
<title>
<function moreinfo="none">is_ipv6 (ip)</function>
</title>
@@ -246,7 +246,7 @@ if (is_ipv6("1080:0:0:0:8:800:200C:417A")) {
</section>
- <section>
+ <section id="ipops.f.is_ipv6_reference">
<title>
<function moreinfo="none">is_ipv6_reference (ip)</function>
</title>
@@ -284,7 +284,7 @@ if (is_ipv6_reference("[1080:0:0:0:8:800:200C:417A]")) {
</section>
- <section>
+ <section id="ipops.f.is_ip_type">
<title>
<function moreinfo="none">ip_type (ip)</function>
</title>
@@ -359,7 +359,7 @@ switch($rc) {
</section>
- <section>
+ <section id="ipops.f.compare_ips">
<title>
<function moreinfo="none">compare_ips (ip1, ip2)</function>
</title>
@@ -403,7 +403,7 @@ if (compare_ips("1080:0000:0000:0000:0008:0800:200C:417A", "[1080::8:800:200C:41
</section>
- <section>
+ <section id="ipops.f.compare_pure_ips">
<title>
<function moreinfo="none">compare_pure_ips (ip1, ip2)</function>
</title>
@@ -447,7 +447,7 @@ if (compare_pure_ips($si, "1080::8:800:200C:417A")) {
</section>
- <section>
+ <section id="ipops.f.is_ip_rfc1918">
<title>
<function moreinfo="none">is_ip_rfc1918 (ip)</function>
</title>
@@ -485,7 +485,7 @@ if (is_ip_rfc1918("10.0.123.123")) {
</section>
- <section>
+ <section id="ipops.f.is_in_subnet">
<title>
<function moreinfo="none">is_in_subnet (ip, subnet)</function>
</title>
Hi!
db_mysql in devel now has transaction support, which should work with presence. It's contributed by Håkon Nassjöen that responded to my cry for help in the Google+ Kamailio group!
Thanks, Håkon!
/O