[Pkg-voip-commits] [kamailio] 02/04: Add new modules. Add upstream patches.

Victor Seva Lopez maniac-guest at moszumanska.debian.org
Wed Dec 11 15:32:32 UTC 2013


This is an automated email from the git hooks/post-receive script.

maniac-guest pushed a commit to branch vseva/4.1.0
in repository kamailio.

commit d5c2fce7b988eefd2702214cefc2fc82eb72b3a0
Author: Victor Seva <linuxmaniac at torreviejawireless.org>
Date:   Wed Dec 11 16:06:23 2013 +0100

    Add new modules. Add upstream patches.
---
 debian/control                                     |  35 +-
 debian/control.tls                                 | 118 +++++--
 debian/control.tls.sh                              |  30 +-
 debian/kamailio.README.Debian                      |   8 +-
 debian/patches/series                              |  11 +-
 ...-dialog_ng-Fix-segfault-in-dlg_new_dialog.patch |  28 ++
 ...oups-include-gzcompress-sipt-and-mohqueue.patch |  66 ++++
 ...setting-0-instead-of-r-for-sdp_get_line_s.patch | 377 +++++++++++++++++++++
 ...fs-compiler-optimization-level-made-varia.patch | 163 +++++++++
 ...ore-fixed-several-clang-compiler-warnings.patch |  91 +++++
 ...er-index-for-domain-column-when-laoding-e.patch |  31 ++
 ...7-tm-safety-checks-inside-t_next_contacts.patch |  86 +++++
 ...andle-error-case-when-deleting-contact-fa.patch | 282 +++++++++++++++
 ...d-double-locking-when-preloading-attribut.patch |  40 +++
 ...-check-for-double-free-in-q_malloc-as-in-.patch |  30 ++
 debian/rules                                       |   2 +-
 16 files changed, 1357 insertions(+), 41 deletions(-)

diff --git a/debian/control b/debian/control
index 9227b22..aefbe20 100644
--- a/debian/control
+++ b/debian/control
@@ -8,16 +8,18 @@ Build-Depends: bison,
  docbook-xml,
  dpkg-dev (>= 1.16.1.1),
  flex,
+ gcj-jdk,
  libconfuse-dev,
  libcurl4-gnutls-dev,
  libdb-dev (>= 4.6.19),
  libevent-dev,
  libexpat1-dev,
  libgeoip-dev (>= 1.4.5),
+ libhiredis-dev (>= 0.10.0),
  libjson0-dev,
  libldap2-dev,
  liblua5.1-0-dev,
- libmemcache-dev,
+ libmemcached-dev,
  libmono-2.0-dev,
  libmysqlclient-dev,
  libncurses5-dev,
@@ -27,11 +29,11 @@ Build-Depends: bison,
  libradiusclient-ng-dev,
  libreadline-dev,
  libsasl2-dev,
+ libsctp-dev,
  libsnmp-dev,
  libsqlite3-dev,
- libxml2-dev,
- libhiredis-dev (>= 0.10.0),
  libunistring-dev,
+ libxml2-dev,
  python,
  python-dev,
  unixodbc-dev,
@@ -396,3 +398,30 @@ Description: Provides a set utility functions for Kamailio
  Provides a set of utility functions for Kamailio, which are not related
  to the server configuration.
 
+Package: kamailio-sctp-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
+Description: sctp module for Kamailio
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the sctp module for Kamailio.
+
+Package: kamailio-java-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         gjc-jre,
+         kamailio (= ${binary:Version})
+Description: contains the app_java module
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the app_java module, an extension allowing to
+ execute embedded Java applications within configuration file.
diff --git a/debian/control.tls b/debian/control.tls
index 4ba07c4..c364aee 100644
--- a/debian/control.tls
+++ b/debian/control.tls
@@ -8,17 +8,20 @@ Build-Depends: bison,
  docbook-xml,
  dpkg-dev (>= 1.16.1.1),
  flex,
+ gcj-jdk,
  libconfuse-dev,
  libcurl4-openssl-dev,
  openssl,
+ libval-dev,
  libdb-dev (>= 4.6.19),
  libevent-dev,
  libexpat1-dev,
  libgeoip-dev (>= 1.4.5),
+ libhiredis-dev (>= 0.10.0),
  libjson0-dev,
  libldap2-dev,
  liblua5.1-0-dev,
- libmemcache-dev,
+ libmemcached-dev,
  libmono-2.0-dev,
  libmysqlclient-dev,
  libncurses5-dev,
@@ -28,22 +31,22 @@ Build-Depends: bison,
  libradiusclient-ng-dev,
  libreadline-dev,
  libsasl2-dev,
+ libsctp-dev,
  libsnmp-dev,
  libsqlite3-dev,
- libxml2-dev,
- libhiredis-dev (>= 0.10.0),
  libunistring-dev,
+ libxml2-dev,
  python,
  python-dev,
  unixodbc-dev,
  xsltproc
-Standards-Version: 3.9.3
+Standards-Version: 3.9.4
 Homepage: http://www.kamailio.org/
-Vcs-Svn: git+ssh://git.debian.org/git/pkg-voip/kamailio.git
+Vcs-git: git://anonscm.debian.org/pkg-voip/kamailio.git
 Vcs-Browser: http://anonscm.debian.org/gitweb/?p=pkg-voip/kamailio.git
 
 Package: kamailio
-Architecture: any
+Architecture: linux-any
 Multi-Arch: foreign
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${shlibs:Depends}, ${misc:Depends}, python, adduser
@@ -68,7 +71,7 @@ Description: very fast and configurable SIP proxy
 Package: kamailio-dbg
 Priority: extra
 Section: debug
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, kamailio (= ${binary:Version})
@@ -81,7 +84,7 @@ Description: very fast and configurable SIP proxy [debug symbols]
  modules. You only need to install it if you need to debug Kamailio.
 
 Package: kamailio-geoip-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -94,7 +97,7 @@ Description: contains the geoip module
  use GeoIP API within configuration file.
 
 Package: kamailio-sqlite-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -107,7 +110,7 @@ Description: SQLite database connectivity module for Kamailio
  This package provides the SQLite database driver for Kamailio.
 
 Package: kamailio-json-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -120,7 +123,7 @@ Description: Json parser and jsonrpc modules for Kamailio
  and the JSON-RPC client over netstrings.
 
 Package: kamailio-memcached-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -134,7 +137,7 @@ Description: Provides the memcached module, an interface to the memcached server
  server, a high-performance, distributed memory object caching system.
 
 Package: kamailio-lua-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -147,7 +150,7 @@ Description: contains the app_lua module
  execute embedded Lua applications within configuration file.
 
 Package: kamailio-mono-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -160,7 +163,7 @@ Description: contains the app_mono module
  execute embedded Mono applications within configuration file.
 
 Package: kamailio-python-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, python-dev, kamailio (= ${binary:Version})
@@ -173,7 +176,7 @@ Description: contains the app_python module
  execute embedded Python applications within configuration file.
 
 Package: kamailio-redis-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -185,7 +188,7 @@ Description: Redis database connectivity module for Kamailio
  This package provides the Redis NOSQL database driver for Kamailio.
 
 Package: kamailio-mysql-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version}), mysql-client
@@ -197,7 +200,7 @@ Description: MySQL database connectivity module for Kamailio
  This package provides the MySQL database driver for Kamailio.
 
 Package: kamailio-postgres-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version}), postgresql-client
@@ -209,7 +212,7 @@ Description: PostgreSQL database connectivity module for Kamailio
  This package provides the PostgreSQL database driver for Kamailio.
 
 Package: kamailio-cpl-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -222,7 +225,7 @@ Description: CPL module (CPL interpreter engine) for Kamailio
  Kamailio, turning Kamailio into a CPL server (storage and interpreter).
 
 Package: kamailio-radius-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -236,7 +239,7 @@ Description: RADIUS modules for Kamailio
  RADIUS server.
 
 Package: kamailio-unixodbc-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -248,7 +251,7 @@ Description: unixODBC database connectivity module for Kamailio
  This package provides the unixODBC database driver for Kamailio.
 
 Package: kamailio-presence-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -262,7 +265,7 @@ Description: SIMPLE presence modules for Kamailio
  external triggered presence and XCAP support.
 
 Package: kamailio-perl-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -275,7 +278,7 @@ Description: Perl extensions and database driver for Kamailio
  the perlvdb database driver for Kamailio.
 
 Package: kamailio-snmpstats-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version}), snmpd
@@ -288,7 +291,7 @@ Description: SNMP AgentX subagent module for Kamailio
  as an AgentX subagent which connects to a master agent.
 
 Package: kamailio-xmpp-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -300,7 +303,7 @@ Description: XMPP gateway module for Kamailio
  This package provides the SIP to XMPP IM translator module for Kamailio.
 
 Package: kamailio-xml-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -317,7 +320,7 @@ Description: XML based extensions for Kamailio's Management Interface
  - xmlops module for XPath operations in configuration file
 
 Package: kamailio-carrierroute-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -330,7 +333,7 @@ Description: carrierroute module for Kamailio
  solution for routing, balancing and blacklisting.
 
 Package: kamailio-berkeley-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version}), db5.1-util
@@ -344,7 +347,7 @@ Description: Berkeley database module for Kamailio
  in files, no additional server is necessary.
 
 Package: kamailio-berkeley-bin
-Architecture: any
+Architecture: linux-any
 Multi-Arch: foreign
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}
@@ -358,7 +361,7 @@ Description: Berkeley database module for Kamailio - helper program
  install kamailio-berkeley-modules and not this package directly.
 
 Package: kamailio-ldap-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -372,7 +375,7 @@ Description: LDAP modules for Kamailio
  directory.
 
 Package: kamailio-ims-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -385,7 +388,7 @@ Description: IMS module for Kamailio
  to run as an IMS core.
 
 Package: kamailio-utils-modules
-Architecture: any
+Architecture: linux-any
 Multi-Arch: same
 Pre-Depends: ${misc:Pre-Depends}
 Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
@@ -397,6 +400,33 @@ Description: Provides a set utility functions for Kamailio
  Provides a set of utility functions for Kamailio, which are not related
  to the server configuration.
 
+Package: kamailio-sctp-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends}, ${shlibs:Depends}, kamailio (= ${binary:Version})
+Description: sctp module for Kamailio
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the sctp module for Kamailio.
+
+Package: kamailio-java-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: ${misc:Depends},
+         ${shlibs:Depends},
+         gjc-jre,
+         kamailio (= ${binary:Version})
+Description: contains the app_java module
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the app_java module, an extension allowing to
+ execute embedded Java applications within configuration file.
 Package: kamailio-tls-modules
 Architecture: any
 Multi-Arch: same
@@ -429,3 +459,29 @@ Description: Websocket module for kamailio
  per second even on low-budget hardware.
  .
  This package contains the module implementing WebSocket transport layer.
+
+Package: kamailio-dnssec-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: kamailio (= ${Source-Version}),
+         ${shlibs:Depends}
+Description: contains the dnssec module
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the dnssec module for Kamailio.
+
+Package: kamailio-autheph-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: ${misc:Pre-Depends}
+Depends: kamailio (= ${binary:Version}),
+         ${shlibs:Depends}
+Description: authentication using ephemeral credentials module for Kamailio
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the ephemeral module for Kamailio.
diff --git a/debian/control.tls.sh b/debian/control.tls.sh
index 450103a..be6a719 100755
--- a/debian/control.tls.sh
+++ b/debian/control.tls.sh
@@ -1,6 +1,6 @@
 #!/bin/bash
 # Script to create control with kamailio-tls-modules
-sed -e 's/libcurl4-gnutls-dev/libcurl4-openssl-dev,\n openssl/' control > control.tls
+sed -e 's/libcurl4-gnutls-dev/libcurl4-openssl-dev,\n openssl,\n libval-dev/' control > control.tls
 echo "Package: kamailio-tls-modules
 Architecture: any
 Multi-Arch: same
@@ -32,6 +32,32 @@ Description: Websocket module for kamailio
  proxy server. Written entirely in C, Kamailio can handle thousands calls
  per second even on low-budget hardware.
  .
- This package contains the module implementing WebSocket transport layer." >> control.tls
+ This package contains the module implementing WebSocket transport layer.
+
+Package: kamailio-dnssec-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: \${misc:Pre-Depends}
+Depends: kamailio (= \${Source-Version}),
+         \${shlibs:Depends}
+Description: contains the dnssec module
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the dnssec module for Kamailio.
+
+Package: kamailio-autheph-modules
+Architecture: any
+Multi-Arch: same
+Pre-Depends: \${misc:Pre-Depends}
+Depends: kamailio (= \${binary:Version}),
+         \${shlibs:Depends}
+Description: authentication using ephemeral credentials module for Kamailio
+ Kamailio is a very fast and flexible SIP (RFC3261)
+ proxy server. Written entirely in C, Kamailio can handle thousands calls
+ per second even on low-budget hardware.
+ .
+ This package provides the ephemeral module for Kamailio." >> control.tls
 
 exit 0
diff --git a/debian/kamailio.README.Debian b/debian/kamailio.README.Debian
index a0b347d..5659997 100644
--- a/debian/kamailio.README.Debian
+++ b/debian/kamailio.README.Debian
@@ -2,7 +2,7 @@ Kamailio for Debian
 -------------------
 
 * TLS support
--------------	 
+-------------
 
 Due to a license incompatibility between the GPL and the OpenSSL license, we
 cannot ship Kamailio with TLS enabled.
@@ -13,13 +13,15 @@ However, if you need Kamailio with TLS, it's easy to get it:
  - apt-get source kamailio
  - execute the script kamailio-[...]/debian/control.tls.sh
  - move kamailio-[...]/debian/control.tls to kamailio-[...]/debian/control
- - add "tls outbound websocket" to PACKAGE_GROUPS
+ - add "tls outbound websocket autheph dnssec" to PACKAGE_GROUPS
  - run dpkg-buildpackage -rfakeroot
 
 You will get this new modules:
  - kamailio-tls-modules
  - kamailio-websocket-modules
  - kamailio-outbound-modules
+ - kamailio-dnssec-modules
+ - kamailio-autheph-modules
 
 * init script check for fork=no
 -------------------------------
@@ -56,4 +58,4 @@ get a core dump in case Kamailio crashes. The debug symbols for Kamailio are
 provided by the kamailio-dbg package.
 
 
- -- Victor Seva <linuxmaniac at torreviejawireless.org>  Mon, 29 Apr 2013 11:01:06 +0200
+ -- Victor Seva <linuxmaniac at torreviejawireless.org>  Wed, 11 Dec 2013 16:07:11 +0100
diff --git a/debian/patches/series b/debian/patches/series
index deae84c..cbc5b70 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -1,5 +1,14 @@
+upstream/0001-dialog_ng-Fix-segfault-in-dlg_new_dialog.patch
+upstream/0002-Makefile.groups-include-gzcompress-sipt-and-mohqueue.patch
+upstream/0003-sdpops-fix-setting-0-instead-of-r-for-sdp_get_line_s.patch
+upstream/0004-Makefile.defs-compiler-optimization-level-made-varia.patch
+upstream/0005-core-fixed-several-clang-compiler-warnings.patch
+upstream/0006-usrloc-proper-index-for-domain-column-when-laoding-e.patch
+upstream/0007-tm-safety-checks-inside-t_next_contacts.patch
+upstream/0008-registrar-handle-error-case-when-deleting-contact-fa.patch
+upstream/0009-usrloc-avoid-double-locking-when-preloading-attribut.patch
+upstream/0010-core-safety-check-for-double-free-in-q_malloc-as-in-.patch
 no_lib64_on_64_bits.patch
 no_INSTALL_file.patch
 fix_export.patch
 default_fifo.patch
-spelling_errors.patch
diff --git a/debian/patches/upstream/0001-dialog_ng-Fix-segfault-in-dlg_new_dialog.patch b/debian/patches/upstream/0001-dialog_ng-Fix-segfault-in-dlg_new_dialog.patch
new file mode 100644
index 0000000..83c84b9
--- /dev/null
+++ b/debian/patches/upstream/0001-dialog_ng-Fix-segfault-in-dlg_new_dialog.patch
@@ -0,0 +1,28 @@
+From 7cc7bde95757ea8861c07acafeb528e09e0b52ac Mon Sep 17 00:00:00 2001
+From: Hugh Waite <hugh.waite at crocodile-rcs.com>
+Date: Wed, 4 Dec 2013 22:37:31 +0000
+Subject: [PATCH] dialog_ng: Fix segfault in dlg_new_dialog
+
+(cherry picked from commit 32f9c9187a9d886c46b24ee38173274da63febda)
+---
+ modules/dialog_ng/dlg_handlers.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/modules/dialog_ng/dlg_handlers.c b/modules/dialog_ng/dlg_handlers.c
+index 262e923..93a00c7 100644
+--- a/modules/dialog_ng/dlg_handlers.c
++++ b/modules/dialog_ng/dlg_handlers.c
+@@ -905,9 +905,9 @@ int dlg_new_dialog(struct sip_msg *req, struct cell *t, const int run_initial_cb
+     if (populate_leg_info(dlg, req, t, DLG_CALLER_LEG,
+             &(get_from(req)->tag_value)) != 0) {
+         LM_ERR("could not add further info to the dialog\n");
+-        shm_free(dlg);
+         lock_destroy(dlg->dlg_out_entries_lock);
+         lock_dealloc(dlg->dlg_out_entries_lock);
++        shm_free(dlg);
+         return -1;
+     }
+ 
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0002-Makefile.groups-include-gzcompress-sipt-and-mohqueue.patch b/debian/patches/upstream/0002-Makefile.groups-include-gzcompress-sipt-and-mohqueue.patch
new file mode 100644
index 0000000..bfac1d5
--- /dev/null
+++ b/debian/patches/upstream/0002-Makefile.groups-include-gzcompress-sipt-and-mohqueue.patch
@@ -0,0 +1,66 @@
+From bd5335ac84bdb8854a7b7dab41136fe6abd01c9f Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Thu, 5 Dec 2013 09:58:38 +0100
+Subject: [PATCH] Makefile.groups: include gzcompress, sipt and mohqueue in
+ packaging groups
+
+(cherry picked from commit 4dcbd1b1cbd4854607d286094c42d257623c548d)
+---
+ Makefile.groups | 13 ++++++++++---
+ 1 file changed, 10 insertions(+), 3 deletions(-)
+
+diff --git a/Makefile.groups b/Makefile.groups
+index d1cad86..30f2f17 100644
+--- a/Makefile.groups
++++ b/Makefile.groups
+@@ -13,7 +13,7 @@ mod_list_basic=async auth benchmark blst cfg_rpc cfgutils corex counters \
+ 				   mediaproxy mi_datagram mi_fifo mi_rpc mqueue \
+ 				   nat_traversal nathelper path pike pv ratelimit rr rtimer \
+ 				   rtpproxy sanity sdpops siputils sl statistics textops \
+-				   textopsx tm tmx topoh xlog rtpproxy-ng stun
++				   textopsx tm tmx topoh xlog rtpproxy-ng stun sipt
+ 
+ # - extra used modules, with no extra dependency
+ mod_list_extra=avp auth_diameter call_control cnxcc dmq domainpolicy msrp pdb \
+@@ -23,7 +23,7 @@ mod_list_extra=avp auth_diameter call_control cnxcc dmq domainpolicy msrp pdb \
+ # - common modules depending on database
+ mod_list_db=acc alias_db auth_db avpops cfg_db db_text db_flatstore \
+ 			  db_cluster dialog dispatcher domain drouting group \
+-			  htable imc matrix msilo mtree p_usrloc pdt permissions \
++			  htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions \
+ 			  pipelimit prefix_route registrar sipcapture siptrace speeddial \
+ 			  sqlops uac uri_db userblacklist usrloc
+ 
+@@ -154,6 +154,9 @@ mod_list_java=app_java
+ # - modules depending on iptables library
+ mod_list_iptrtpproxy=iptrtpproxy
+ 
++# - modules depending on gzip library
++mod_list_gzcompress=gzcompress
++
+ # - all modules
+ mod_list_all=$(sort $(mod_list_basic) $(mod_list_extra) \
+ 			   $(mod_list_db) $(mod_list_dbuid) \
+@@ -175,7 +178,8 @@ mod_list_all=$(sort $(mod_list_basic) $(mod_list_extra) \
+ 			   $(mod_list_iptrtpproxy) $(mod_list_mi_xmlrpc) \
+ 			   $(mod_list_outbound) $(mod_list_osp) \
+ 			   $(mod_list_java) $(mod_list_dnssec) \
+-			   $(mod_list_sctp) $(mod_list_autheph))
++			   $(mod_list_sctp) $(mod_list_autheph) \
++			   $(mod_list_gzcompress))
+ 
+ 
+ 
+@@ -333,6 +337,9 @@ module_group_ksctp=$(mod_list_sctp)
+ # pkg auth_ephemeral module
+ module_group_kautheph=$(mod_list_autheph)
+ 
++# pkg gzcompress module
++module_group_kgzcompress=$(mod_list_gzcompress)
++
+ # list of static modules
+ #
+ static_modules:=
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0003-sdpops-fix-setting-0-instead-of-r-for-sdp_get_line_s.patch b/debian/patches/upstream/0003-sdpops-fix-setting-0-instead-of-r-for-sdp_get_line_s.patch
new file mode 100644
index 0000000..79429c5
--- /dev/null
+++ b/debian/patches/upstream/0003-sdpops-fix-setting-0-instead-of-r-for-sdp_get_line_s.patch
@@ -0,0 +1,377 @@
+From c56e66287d4456692bdad0f2454896ffd342cf0d Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Fri, 6 Dec 2013 11:32:41 +0100
+Subject: [PATCH] sdpops: fix setting 0 instead of \r for
+ sdp_get_line_startswith()
+
+- reported by Tuan Viet Nguyen
+
+(cherry picked from commit 041b12dc6e5ad88e981d44180436a90518cbcf0d)
+---
+ modules/sdpops/sdpops_mod.c | 156 ++++++++++++++++++++++----------------------
+ 1 file changed, 78 insertions(+), 78 deletions(-)
+
+diff --git a/modules/sdpops/sdpops_mod.c b/modules/sdpops/sdpops_mod.c
+index a506fc6..16f2278 100644
+--- a/modules/sdpops/sdpops_mod.c
++++ b/modules/sdpops/sdpops_mod.c
+@@ -168,8 +168,8 @@ int sdp_remove_str_codec_id_attrs(sip_msg_t* msg,
+ 	payload = sdp_stream->payload_attr;
+ 	while (payload) {
+ 		LM_DBG("a= ... for codec %.*s/%.*s\n",
+-			payload->rtp_payload.len, payload->rtp_payload.s,
+-			payload->rtp_enc.len, payload->rtp_enc.s);
++				payload->rtp_payload.len, payload->rtp_payload.s,
++				payload->rtp_enc.len, payload->rtp_enc.s);
+ 		if(rm_codec->len==payload->rtp_payload.len
+ 				&& strncmp(payload->rtp_payload.s, rm_codec->s,
+ 					rm_codec->len)==0) {
+@@ -181,8 +181,8 @@ int sdp_remove_str_codec_id_attrs(sip_msg_t* msg,
+ 							aline.len, 0);
+ 					if (anchor == NULL) {
+ 						LM_ERR("failed to remove [%.*s] inside [%.*s]\n",
+-							rm_codec->len, rm_codec->s,
+-							aline.len, aline.s);
++								rm_codec->len, rm_codec->s,
++								aline.len, aline.s);
+ 						return -1;
+ 					}
+ 				}
+@@ -195,8 +195,8 @@ int sdp_remove_str_codec_id_attrs(sip_msg_t* msg,
+ 							aline.len, 0);
+ 					if (anchor == NULL) {
+ 						LM_ERR("failed to remove [%.*s] inside [%.*s]\n",
+-							rm_codec->len, rm_codec->s,
+-							aline.len, aline.s);
++								rm_codec->len, rm_codec->s,
++								aline.len, aline.s);
+ 						return -1;
+ 					}
+ 				}
+@@ -226,7 +226,7 @@ int sdp_codec_in_str(str *allcodecs, str* codec, char delim)
+ 			if(codec->len <= allcodecs->len-i) {
+ 				if(strncmp(&allcodecs->s[i], codec->s, codec->len)==0) {
+ 					if(&allcodecs->s[i+codec->len]
+-									== &allcodecs->s[allcodecs->len]
++							== &allcodecs->s[allcodecs->len]
+ 							|| allcodecs->s[i+codec->len] == delim) {
+ 						/* match */
+ 						return 1;
+@@ -263,12 +263,12 @@ int sdp_remove_str_codec_id(sip_msg_t* msg, str *allcodecs, str* rmcodec)
+ 			if(rmcodec->len <= allcodecs->len-i) {
+ 				if(strncmp(&allcodecs->s[i], rmcodec->s, rmcodec->len)==0) {
+ 					if(&allcodecs->s[i+rmcodec->len]
+-									== &allcodecs->s[allcodecs->len]
++							== &allcodecs->s[allcodecs->len]
+ 							|| allcodecs->s[i+rmcodec->len] == ' ') {
+ 						/* match - remove also the space before codec id */
+ 						LM_DBG("found codec [%.*s] inside [%.*s]\n",
+-									rmcodec->len, rmcodec->s,
+-									allcodecs->len, allcodecs->s);
++								rmcodec->len, rmcodec->s,
++								allcodecs->len, allcodecs->s);
+ 						anchor = del_lump(msg, &allcodecs->s[i-1] - msg->buf,
+ 								rmcodec->len+1, 0);
+ 						if (anchor == NULL) {
+@@ -332,8 +332,8 @@ int sdp_remove_codecs_by_id(sip_msg_t* msg, str* codecs)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - payloads [%.*s]\n",
+-				sdp_stream_num, sdp_session_num, 
+-				sdp_stream->payloads.len, sdp_stream->payloads.s);
++					sdp_stream_num, sdp_session_num, 
++					sdp_stream->payloads.len, sdp_stream->payloads.s);
+ 			sdp_codecs = sdp_stream->payloads;
+ 			tmp_codecs = *codecs;
+ 			while(str_find_token(&tmp_codecs, &rm_codec, ',')==0
+@@ -598,8 +598,8 @@ int sdp_keep_codecs_by_id(sip_msg_t* msg, str* codecs, str *media)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - payloads [%.*s]\n",
+-				sdp_stream_num, sdp_session_num,
+-				sdp_stream->payloads.len, sdp_stream->payloads.s);
++					sdp_stream_num, sdp_session_num,
++					sdp_stream->payloads.len, sdp_stream->payloads.s);
+ 			if((media==NULL)
+ 					|| (media->len==sdp_stream->media.len
+ 						&& strncasecmp(sdp_stream->media.s, media->s,
+@@ -615,8 +615,8 @@ int sdp_keep_codecs_by_id(sip_msg_t* msg, str* codecs, str *media)
+ 
+ 					if(sdp_codec_in_str(codecs, &rm_codec, ',')==0) {
+ 						LM_DBG("codecs [%.*s] - remove [%.*s]\n",
+-							sdp_codecs.len, sdp_codecs.s,
+-							rm_codec.len, rm_codec.s);
++								sdp_codecs.len, sdp_codecs.s,
++								rm_codec.len, rm_codec.s);
+ 						sdp_remove_str_codec_id(msg, &sdp_codecs, &rm_codec);
+ 						sdp_remove_str_codec_id_attrs(msg, sdp_stream, &rm_codec);
+ 					}
+@@ -761,11 +761,11 @@ static int sdp_with_media(sip_msg_t *msg, str *media)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - media [%.*s]\n",
+-				sdp_stream_num, sdp_session_num,
+-				sdp_stream->media.len, sdp_stream->media.s);
++					sdp_stream_num, sdp_session_num,
++					sdp_stream->media.len, sdp_stream->media.s);
+ 			if(media->len==sdp_stream->media.len
+ 					&& strncasecmp(sdp_stream->media.s, media->s,
+-							media->len)==0)
++						media->len)==0)
+ 				return 1;
+ 			sdp_stream_num++;
+ 		}
+@@ -838,16 +838,16 @@ static int sdp_remove_media(sip_msg_t *msg, str *media)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - media [%.*s]\n",
+-				sdp_stream_num, sdp_session_num,
+-				sdp_stream->media.len, sdp_stream->media.s);
++					sdp_stream_num, sdp_session_num,
++					sdp_stream->media.len, sdp_stream->media.s);
+ 			if(media->len==sdp_stream->media.len
+ 					&& strncasecmp(sdp_stream->media.s, media->s,
+-							media->len)==0)
++						media->len)==0)
+ 			{
+ 				/* found - remove */
+ 				LM_DBG("removing media stream: %.*s", media->len, media->s);
+ 				nxt_stream = get_sdp_stream(msg, sdp_session_num,
+-								sdp_stream_num+1);
++						sdp_stream_num+1);
+ 				/* skip back 'm=' */
+ 				dstart = sdp_stream->media.s - 2;
+ 				if(!nxt_stream) {
+@@ -860,7 +860,7 @@ static int sdp_remove_media(sip_msg_t *msg, str *media)
+ 				anchor = del_lump(msg, dstart - msg->buf, dlen, 0);
+ 				if (anchor == NULL) {
+ 					LM_ERR("failed to remove media type [%.*s]\n",
+-						 media->len, media->s);
++							media->len, media->s);
+ 					return -1;
+ 				}
+ 
+@@ -930,11 +930,11 @@ static int sdp_with_transport(sip_msg_t *msg, str *transport)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - transport [%.*s]\n",
+-				sdp_stream_num, sdp_session_num,
+-				sdp_stream->transport.len, sdp_stream->transport.s);
++					sdp_stream_num, sdp_session_num,
++					sdp_stream->transport.len, sdp_stream->transport.s);
+ 			if(transport->len==sdp_stream->transport.len
+ 					&& strncasecmp(sdp_stream->transport.s, transport->s,
+-							transport->len)==0)
++						transport->len)==0)
+ 				return 1;
+ 			sdp_stream_num++;
+ 		}
+@@ -1007,16 +1007,16 @@ static int sdp_remove_transport(sip_msg_t *msg, str *transport)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - transport [%.*s]\n",
+-				sdp_stream_num, sdp_session_num,
+-				sdp_stream->transport.len, sdp_stream->transport.s);
++					sdp_stream_num, sdp_session_num,
++					sdp_stream->transport.len, sdp_stream->transport.s);
+ 			if(transport->len==sdp_stream->transport.len
+ 					&& strncasecmp(sdp_stream->transport.s, transport->s,
+-							transport->len)==0)
++						transport->len)==0)
+ 			{
+ 				/* found - remove */
+ 				LM_DBG("removing transport stream: %.*s", transport->len, transport->s);
+ 				nxt_stream = get_sdp_stream(msg, sdp_session_num,
+-								sdp_stream_num+1);
++						sdp_stream_num+1);
+ 				/* skip back 'm=' */
+ 				dstart = sdp_stream->media.s - 2;
+ 				if(!nxt_stream) {
+@@ -1029,7 +1029,7 @@ static int sdp_remove_transport(sip_msg_t *msg, str *transport)
+ 				anchor = del_lump(msg, dstart - msg->buf, dlen, 0);
+ 				if (anchor == NULL) {
+ 					LM_ERR("failed to remove transport type [%.*s]\n",
+-						 transport->len, transport->s);
++							transport->len, transport->s);
+ 					return -1;
+ 				}
+ 
+@@ -1111,8 +1111,8 @@ int sdp_with_codecs_by_id(sip_msg_t* msg, str* codecs)
+ 			if(!sdp_stream) break;
+ 
+ 			LM_DBG("stream %d of %d - payloads [%.*s]\n",
+-				sdp_stream_num, sdp_session_num,
+-				sdp_stream->payloads.len, sdp_stream->payloads.s);
++					sdp_stream_num, sdp_session_num,
++					sdp_stream->payloads.len, sdp_stream->payloads.s);
+ 			sdp_codecs = sdp_stream->payloads;
+ 			tmp_codecs = *codecs;
+ 			while(str_find_token(&tmp_codecs, &fnd_codec, ',')==0
+@@ -1123,13 +1123,13 @@ int sdp_with_codecs_by_id(sip_msg_t* msg, str* codecs)
+ 
+ 				if(sdp_codec_in_str(&sdp_codecs, &fnd_codec, ' ')==0) {
+ 					LM_DBG("codecs [%.*s] - not found [%.*s]\n",
+-						sdp_codecs.len, sdp_codecs.s,
+-						fnd_codec.len, fnd_codec.s);
++							sdp_codecs.len, sdp_codecs.s,
++							fnd_codec.len, fnd_codec.s);
+ 					notfound = 1;
+ 				} else {
+ 					LM_DBG("codecs [%.*s] - found [%.*s]\n",
+-						sdp_codecs.len, sdp_codecs.s,
+-						fnd_codec.len, fnd_codec.s);
++							sdp_codecs.len, sdp_codecs.s,
++							fnd_codec.len, fnd_codec.s);
+ 					foundone = 1;
+ 				}
+ 			}
+@@ -1250,7 +1250,7 @@ static int w_sdp_get(sip_msg_t* msg, char *avp)
+ 	str s;
+ 	pv_spec_t *avp_spec = NULL;
+ 	int sdp_missing=1;
+-	
++
+ 	s.s = avp; s.len = strlen(s.s);
+ 	if (pv_locate_name(&s) != s.len)
+ 	{
+@@ -1275,7 +1275,7 @@ static int w_sdp_get(sip_msg_t* msg, char *avp)
+ 		return -1;
+ 	}
+ 	sdp = (sdp_info_t*)msg->body;
+-	
++
+ 	if (sdp_missing) {
+ 		LM_DBG("No SDP\n");
+ 		return -2;
+@@ -1286,10 +1286,10 @@ static int w_sdp_get(sip_msg_t* msg, char *avp)
+ 	}
+ 	if (add_avp(AVP_VAL_STR | avp_type, avp_name, avp_val) != 0)
+ 	{
+-	  LM_ERR("Failed to add SDP avp");
+-	  return -1;
++		LM_ERR("Failed to add SDP avp");
++		return -1;
+ 	}
+-	
++
+ 	return 1;
+ }
+ 
+@@ -1314,16 +1314,16 @@ static int w_sdp_get_line_startswith(sip_msg_t *msg, char *avp, char *s_line)
+ 	char* p = NULL;
+ 	str s;
+ 	str sline;
+-        int_str avp_val;
+-        int_str avp_name;
+-        pv_spec_t *avp_spec = NULL;
+-        static unsigned short avp_type = 0;
++	int_str avp_val;
++	int_str avp_name;
++	pv_spec_t *avp_spec = NULL;
++	static unsigned short avp_type = 0;
+ 	int sdp_missing=1;
+ 
+ 	if (s_line == NULL || strlen(s_line) <= 0)
+ 	{
+ 		LM_ERR("Search string is null or empty\n");
+-		    return -1;
++		return -1;
+ 	}
+ 	sline.s = s_line;
+ 	sline.len = strlen(s_line);
+@@ -1337,10 +1337,10 @@ static int w_sdp_get_line_startswith(sip_msg_t *msg, char *avp, char *s_line)
+ 
+ 	sdp = (sdp_info_t *)msg->body;
+ 
+-        if (sdp_missing || sdp == NULL)
++	if (sdp_missing || sdp == NULL)
+ 	{
+-                LM_DBG("No SDP\n");
+-                return -2;
++		LM_DBG("No SDP\n");
++		return -2;
+ 	}
+ 
+ 	body.s = sdp->raw_sdp.s;
+@@ -1360,29 +1360,29 @@ static int w_sdp_get_line_startswith(sip_msg_t *msg, char *avp, char *s_line)
+ 	if (avp == NULL || strlen(avp) <= 0)
+ 	{
+ 		LM_ERR("avp variable is null or empty\n");
+-		    return -1;
++		return -1;
+ 	}
+ 
+ 	s.s = avp;
+ 	s.len = strlen(s.s);
+ 
+ 	if (pv_locate_name(&s) != s.len)
+-        {
+-                LM_ERR("invalid parameter\n");
+-                return -1;
+-        }
+-
+-        if (((avp_spec = pv_cache_get(&s)) == NULL)
+-                        || avp_spec->type!=PVT_AVP) {
+-                LM_ERR("malformed or non AVP %s AVP definition\n", avp);
+-                return -1;
+-        }
+-
+-        if(pv_get_avp_name(0, &avp_spec->pvp, &avp_name, &avp_type)!=0)
+-        {
+-                LM_ERR("[%s]- invalid AVP definition\n", avp);
+-                return -1;
+-        }
++	{
++		LM_ERR("invalid parameter\n");
++		return -1;
++	}
++
++	if (((avp_spec = pv_cache_get(&s)) == NULL)
++			|| avp_spec->type!=PVT_AVP) {
++		LM_ERR("malformed or non AVP %s AVP definition\n", avp);
++		return -1;
++	}
++
++	if(pv_get_avp_name(0, &avp_spec->pvp, &avp_name, &avp_type)!=0)
++	{
++		LM_ERR("[%s]- invalid AVP definition\n", avp);
++		return -1;
++	}
+ 
+ 	p = find_sdp_line(body.s, body.s+body.len, sline.s[0]);
+ 	while (p != NULL)
+@@ -1395,21 +1395,21 @@ static int w_sdp_get_line_startswith(sip_msg_t *msg, char *avp, char *s_line)
+ 
+ 		if (strncmp(line.s, sline.s, sline.len) == 0)
+ 		{
+-            		avp_val.s.s = line.s;
+-            		avp_val.s.len = line.len;
++			avp_val.s.s = line.s;
++			avp_val.s.len = line.len;
+ 
+-			// remove ending \r\n if exists
++			/* skip ending \r\n if exists */
+ 			if (avp_val.s.s[line.len-2] == '\r' && avp_val.s.s[line.len-1] == '\n')
+ 			{
+-			    avp_val.s.s[line.len-2] = '\0';
+-			    avp_val.s.len -= 2;
++				/* add_avp() clones to shm and adds 0-terminating char */
++				avp_val.s.len -= 2;
+ 			}
+ 
+-    			if (add_avp(AVP_VAL_STR | avp_type, avp_name, avp_val) != 0)
+-    			{
+-        		    LM_ERR("Failed to add SDP line avp");
+-        		    return -1;
+-    			}
++			if (add_avp(AVP_VAL_STR | avp_type, avp_name, avp_val) != 0)
++			{
++				LM_ERR("Failed to add SDP line avp");
++				return -1;
++			}
+ 
+ 			return 1;
+ 		}
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0004-Makefile.defs-compiler-optimization-level-made-varia.patch b/debian/patches/upstream/0004-Makefile.defs-compiler-optimization-level-made-varia.patch
new file mode 100644
index 0000000..252f686
--- /dev/null
+++ b/debian/patches/upstream/0004-Makefile.defs-compiler-optimization-level-made-varia.patch
@@ -0,0 +1,163 @@
+From 5552d9f733a6423d4d940f9b93a6808de0800a1d Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Fri, 6 Dec 2013 16:33:04 +0100
+Subject: [PATCH] Makefile.defs: compiler optimization level made variable
+
+- allow using -O3 for clang, which gives error on the former default -O9
+
+(cherry picked from commit 0713c0de50f8c2f4da2ee0ef33b0505c37792392)
+---
+ Makefile.defs | 32 +++++++++++++++++---------------
+ 1 file changed, 17 insertions(+), 15 deletions(-)
+
+diff --git a/Makefile.defs b/Makefile.defs
+index 480a3f8..327eeb9 100644
+--- a/Makefile.defs
++++ b/Makefile.defs
+@@ -273,6 +273,7 @@ CC_LONGVER:=$(shell if  $(CC) -v 2>/dev/null; then \
+ 					else \
+ 						$(CC) -V 2>&1 ; \
+ 					fi )
++CC_OPT ?= -O9
+ MKTAGS=ctags
+ 
+ #find-out the compiler's name
+@@ -334,6 +335,7 @@ ifneq (, $(findstring clang, $(CC_LONGVER)))
+ 	CC_FULLVER:=$(shell echo "$(CC_LONGVER)" | head -n 1 |  sed -e 's/.*version \([0-9]\.[0-9]\).*/\1/g' )
+ 	CC_SHORTVER:=$(shell echo "$(CC_FULLVER)" | cut -d. -f1,2 )
+ 	CC_VER=$(CC) $(CC_FULLVER)
++	CC_OPT=-O3
+ 	MKDEP=$(CC) -MM 
+ endif
+ 
+@@ -887,7 +889,7 @@ ifeq	($(ARCH), i386)
+ ifeq		($(CC_NAME), gcc) 
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS=-g -O9 -funroll-loops  -Wcast-align $(PROFILE)
++				CFLAGS=-g $(CC_OPT) -funroll-loops  -Wcast-align $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ $(call				set_if_empty,CPU,athlon64)
+@@ -945,8 +947,8 @@ ifeq		($(CC_NAME), clang)
+ $(call                          set_if_empty,CPU,athlon64)
+ 					C_DEFS+=-DCC_GCC_LIKE_ASM
+                                         CFLAGS+=-m32
+-                                                -O9      \
+-                                                         \
++                                                $(CC_OPT) \
++                                                          \
+                                                 -mtune=$(CPU)
+                                         LDFLAGS+=-m32
+ else			# CC_NAME, clang
+@@ -972,7 +974,7 @@ ifeq	($(ARCH), x86_64)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS=-g -O9 -funroll-loops  -Wcast-align $(PROFILE)
++				CFLAGS=-g $(CC_OPT) -funroll-loops  -Wcast-align $(PROFILE)
+ 			#if gcc 4.5+
+ 			# don't add '-mtune=$(CPU)' - gcc failure
+ ifeq			($(CC_SHORTVER), 4.5+)
+@@ -1041,7 +1043,7 @@ ifeq            ($(CC_NAME), clang)
+ $(call                          set_if_empty,CPU,opteron)
+ 					C_DEFS+=-DCC_GCC_LIKE_ASM
+                                         CFLAGS+=-m64 \
+-                                                -O9        
++                                                $(CC_OPT)        
+                                         LDFLAGS+=-m64
+ else      	# CC_NAME, clang
+ ifeq		($(CC_NAME), icc)
+@@ -1066,7 +1068,7 @@ ifeq	($(ARCH), sparc64)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM -DSPARC64_MODE
+ 				#common stuff
+-				CFLAGS=-g -O9 -funroll-loops  $(PROFILE) \
++				CFLAGS=-g $(CC_OPT) -funroll-loops  $(PROFILE) \
+ 					#-Wcast-align \
+ 					#-Wmissing-prototypes 
+ 				#if gcc 4.5+ or 4.2+
+@@ -1157,7 +1159,7 @@ ifeq	($(ARCH), sparc)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS=-g -O9 -funroll-loops  $(PROFILE) \
++				CFLAGS=-g $(CC_OPT) -funroll-loops  $(PROFILE) \
+ 					#-Wcast-align \
+ 					#-Wmissing-prototypes 
+ 				#if gcc 4.5+ or 4.2+
+@@ -1222,7 +1224,7 @@ ifeq	($(ARCH), arm)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS=-marm -march=armv5t -O9 -funroll-loops -fsigned-char $(PROFILE)
++				CFLAGS=-marm -march=armv5t $(CC_OPT) -funroll-loops -fsigned-char $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ 					CFLAGS+= -ftree-vectorize -fno-strict-overflow
+@@ -1270,7 +1272,7 @@ ifeq	($(ARCH), arm6)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS=-march=armv6 -O9 -funroll-loops -fsigned-char \
++				CFLAGS=-march=armv6 $(CC_OPT) -funroll-loops -fsigned-char \
+ 						$(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+@@ -1317,7 +1319,7 @@ ifeq	($(ARCH), mips)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS=-O9 -funroll-loops  $(PROFILE)
++				CFLAGS=$(CC_OPT) -funroll-loops  $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ 					CFLAGS+=-march=r3000 -minline-all-stringops \
+@@ -1364,7 +1366,7 @@ ifeq	($(ARCH), mips2)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS= -mips2 -O9 -funroll-loops $(PROFILE)
++				CFLAGS= -mips2 $(CC_OPT) -funroll-loops $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ 					CFLAGS+=-minline-all-stringops -ftree-vectorize \
+@@ -1409,7 +1411,7 @@ ifeq	($(ARCH), mips64)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS= -mips64 -O9 -funroll-loops $(PROFILE)
++				CFLAGS= -mips64 $(CC_OPT) -funroll-loops $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ 					CFLAGS+=-minline-all-stringops -ftree-vectorize \
+@@ -1454,7 +1456,7 @@ ifeq	($(ARCH), alpha)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS= -O9 -funroll-loops $(PROFILE)
++				CFLAGS= $(CC_OPT) -funroll-loops $(PROFILE)
+ 			#if gcc 4.5 or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ 					CFLAGS+= -fno-strict-overflow
+@@ -1500,7 +1502,7 @@ ifeq	($(ARCH), ppc)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS= -O9 -funroll-loops -fsigned-char $(PROFILE)
++				CFLAGS= $(CC_OPT) -funroll-loops -fsigned-char $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ $(call				set_if_empty,CPU,powerpc)
+@@ -1549,7 +1551,7 @@ ifeq	($(ARCH), ppc64)
+ ifeq		($(CC_NAME), gcc)
+ 				C_DEFS+=-DCC_GCC_LIKE_ASM
+ 				#common stuff
+-				CFLAGS= -O9 -funroll-loops -fsigned-char $(PROFILE)
++				CFLAGS= $(CC_OPT) -funroll-loops -fsigned-char $(PROFILE)
+ 			#if gcc 4.5+ or 4.2+
+ ifeq (,$(strip $(filter-out 4.2+ 4.5+,$(CC_SHORTVER))))
+ $(call				set_if_empty,CPU,powerpc64)
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0005-core-fixed-several-clang-compiler-warnings.patch b/debian/patches/upstream/0005-core-fixed-several-clang-compiler-warnings.patch
new file mode 100644
index 0000000..ce8421a
--- /dev/null
+++ b/debian/patches/upstream/0005-core-fixed-several-clang-compiler-warnings.patch
@@ -0,0 +1,91 @@
+From 90681624c54f0ec0b1259e205bcc0274316b4549 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Fri, 6 Dec 2013 17:16:25 +0100
+Subject: [PATCH] core: fixed several clang compiler warnings
+
+(cherry picked from commit f0fb6f1e9fbb2f7f0c2bed5ba0d50a56cf5cf444)
+---
+ dset.c               | 4 ++--
+ flags.c              | 2 +-
+ msg_translator.c     | 2 +-
+ parser/parse_fline.c | 2 +-
+ select_buf.c         | 2 +-
+ 5 files changed, 6 insertions(+), 6 deletions(-)
+
+diff --git a/dset.c b/dset.c
+index 13b000b..4b886bd 100644
+--- a/dset.c
++++ b/dset.c
+@@ -90,7 +90,7 @@ branch_t *get_sip_branch(int idx)
+ 		return NULL;
+ 	if(idx<0)
+ 	{
+-		if(nr_branches + idx >= 0)
++		if((int)nr_branches + idx >= 0)
+ 			return &branches[nr_branches+idx];
+ 		return NULL;
+ 	}
+@@ -109,7 +109,7 @@ int drop_sip_branch(int idx)
+ {
+ 	if(nr_branches==0 || idx>=nr_branches)
+ 		return 0;
+-	if(idx<0 && nr_branches+idx<0)
++	if(idx<0 && (int)nr_branches+idx<0)
+ 		return 0;
+ 	/* last branch */
+ 	if(idx==nr_branches-1)
+diff --git a/flags.c b/flags.c
+index 1523d0b..becb569 100644
+--- a/flags.c
++++ b/flags.c
+@@ -74,7 +74,7 @@ int flag_in_range( flag_t flag ) {
+ 			flag, MAX_FLAG );
+ 		return 0;
+ 	}
+-	if (flag<0) {
++	if ((int)flag<0) {
+ 		LOG(L_ERR, "ERROR: message flag (%d) must be in range %d..%d\n",
+ 			flag, 0, MAX_FLAG );
+ 		return 0;
+diff --git a/msg_translator.c b/msg_translator.c
+index b4581e7..13b0785 100644
+--- a/msg_translator.c
++++ b/msg_translator.c
+@@ -1575,7 +1575,7 @@ static inline int adjust_clen(struct sip_msg* msg, int body_delta, int proto)
+ 		 */
+ 		/* no need for Content-Length if it's and UDP packet and
+ 		 * it hasn't Content-Length already */
+-		if ((msg->content_length==0)){
++		if (msg->content_length==0){
+ 		    /* content-length doesn't exist, append it */
+ 			/* msg->unparsed should point just before the final crlf
+ 			 * - whole message was parsed by the above parse_headers
+diff --git a/parser/parse_fline.c b/parser/parse_fline.c
+index 8dacfe5..b8fee65 100644
+--- a/parser/parse_fline.c
++++ b/parser/parse_fline.c
+@@ -233,7 +233,7 @@ error:
+ 	if (prn) {
+ 		for (t=0; t<offset; t++)
+ 			if (*(buffer+t)) *(prn+t)=*(buffer+t);
+-			else *(prn+t)='�';
++			else *(prn+t)=176; /* '�' */
+ 		LOG(L_DBG, "parsed so far: %.*s\n", offset, ZSW(prn) );
+ 		pkg_free( prn );
+ 	};
+diff --git a/select_buf.c b/select_buf.c
+index b3463a8..7277d48 100644
+--- a/select_buf.c
++++ b/select_buf.c
+@@ -162,7 +162,7 @@ int int_to_static_buffer(str* res, int val)
+ {
+ 	char *c;
+ 	c = int2str(abs(val), &res->len);
+-	res->s = get_static_buffer(res->len+(val<0)?1:0);
++	res->s = get_static_buffer(res->len+((val<0)?1:0));
+ 	if (!res->s) return -1;
+ 	if (val < 0) {
+ 		res->s[0] = '-';	
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0006-usrloc-proper-index-for-domain-column-when-laoding-e.patch b/debian/patches/upstream/0006-usrloc-proper-index-for-domain-column-when-laoding-e.patch
new file mode 100644
index 0000000..800c73c
--- /dev/null
+++ b/debian/patches/upstream/0006-usrloc-proper-index-for-domain-column-when-laoding-e.patch
@@ -0,0 +1,31 @@
+From 45ea3c6de26def1fa704f3e444bd37800ca09d9f Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Fri, 6 Dec 2013 18:02:36 +0100
+Subject: [PATCH] usrloc: proper index for domain column when laoding extra
+ attributes
+
+- patch by Seudin Kasumovic, FS#377
+
+(cherry picked from commit 551524cfc83b922c23e2d26f8cc5950df2a0af54)
+---
+ modules/usrloc/udomain.c | 4 ++--
+ 1 file changed, 2 insertions(+), 2 deletions(-)
+
+diff --git a/modules/usrloc/udomain.c b/modules/usrloc/udomain.c
+index 244f8e7..a736051 100644
+--- a/modules/usrloc/udomain.c
++++ b/modules/usrloc/udomain.c
+@@ -1250,8 +1250,8 @@ int uldb_preload_attrs(udomain_t *_d)
+ 			}
+ 
+ 			if (use_domain) {
+-				domain.s = (char*)VAL_STRING(ROW_VALUES(row) + 6);
+-				if (VAL_NULL(ROW_VALUES(row)+6) || domain.s==0 || domain.s[0]==0){
++				domain.s = (char*)VAL_STRING(ROW_VALUES(row) + 5);
++				if (VAL_NULL(ROW_VALUES(row)+5) || domain.s==0 || domain.s[0]==0){
+ 					LM_CRIT("empty domain record for user %.*s...skipping\n",
+ 							user.len, user.s);
+ 					continue;
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0007-tm-safety-checks-inside-t_next_contacts.patch b/debian/patches/upstream/0007-tm-safety-checks-inside-t_next_contacts.patch
new file mode 100644
index 0000000..3524b7a
--- /dev/null
+++ b/debian/patches/upstream/0007-tm-safety-checks-inside-t_next_contacts.patch
@@ -0,0 +1,86 @@
+From f08c9545016da2bb974a1a8ded82c7aa25e9b704 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Sat, 7 Dec 2013 13:35:45 +0100
+Subject: [PATCH] tm: safety checks inside t_next_contacts()
+
+(cherry picked from commit 21027d0c17558f3a1a4797049448cbbdfe50554f)
+---
+ modules/tm/t_serial.c | 34 ++++++++++++++++++++++++++++------
+ 1 file changed, 28 insertions(+), 6 deletions(-)
+
+diff --git a/modules/tm/t_serial.c b/modules/tm/t_serial.c
+index 93c7480..62200ad 100644
+--- a/modules/tm/t_serial.c
++++ b/modules/tm/t_serial.c
+@@ -488,14 +488,24 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* value)
+ 		il->next = (struct instance_list *)0;
+ 		set_instance(msg, &instance);
+ 	} else {
++		instance.s = 0;
+ 		instance.len = 0;
+ 	}
+ 
+ 	vavp = xavp_get(&ruid_name, xavp->val.v.xavp);
+-	ruid = vavp->val.v.s;
+-
++	if (vavp != NULL) {
++		ruid = vavp->val.v.s;
++	} else {
++		ruid.s = 0;
++		ruid.len = 0;
++	}
+ 	vavp = xavp_get(&ua_name, xavp->val.v.xavp);
+-	location_ua = vavp->val.v.s;
++	if (vavp != NULL) {
++		location_ua = vavp->val.v.s;
++	} else {
++		location_ua.s = 0;
++		location_ua.len = 0;
++	}
+ 
+ 	/* Rewrite Request-URI */
+ 	rewrite_uri(msg, &uri);
+@@ -582,10 +592,20 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* value)
+ 		flags = vavp->val.v.i;
+ 
+ 		vavp = xavp_get(&ruid_name, xavp->val.v.xavp);
+-		ruid = vavp->val.v.s;
++		if (vavp != NULL) {
++			ruid = vavp->val.v.s;
++		} else {
++			ruid.s = 0;
++			ruid.len = 0;
++		}
+ 
+ 		vavp = xavp_get(&ua_name, xavp->val.v.xavp);
+-		location_ua = vavp->val.v.s;
++		if (vavp != NULL) {
++			location_ua = vavp->val.v.s;
++		} else {
++			location_ua.s = 0;
++			location_ua.len = 0;
++		}
+ 
+ 		vavp = xavp_get(&instance_name, xavp->val.v.xavp);
+ 		if (vavp != NULL) {
+@@ -623,6 +643,7 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* value)
+ 				il = ilp;
+ 			}
+ 		} else {
++			instance.s = 0;
+ 			instance.len = 0;
+ 		}
+ 
+@@ -632,7 +653,8 @@ int t_next_contacts(struct sip_msg* msg, char* key, char* value)
+ 				dst_uri.len, (dst_uri.len > 0)?dst_uri.s:"",
+ 				path.len, (path.len>0)?path.s:"",
+ 				instance.len, (instance.len>0)?instance.s:"",
+-				ruid.len, ruid.s, location_ua.len, location_ua.s);
++				ruid.len, (ruid.len>0)?ruid.s:"",
++				location_ua.len, (location_ua.len>0)?location_ua.s:"");
+ 		if (append_branch(msg, &uri, &dst_uri, &path, 0, flags, sock, &instance, 0,
+ 					&ruid, &location_ua) != 1) {
+ 			LM_ERR("appending branch failed\n");
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0008-registrar-handle-error-case-when-deleting-contact-fa.patch b/debian/patches/upstream/0008-registrar-handle-error-case-when-deleting-contact-fa.patch
new file mode 100644
index 0000000..68f35e8
--- /dev/null
+++ b/debian/patches/upstream/0008-registrar-handle-error-case-when-deleting-contact-fa.patch
@@ -0,0 +1,282 @@
+From efb2670ef03b69cb0ae26e7c9ac427c995ffbacf Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Mon, 9 Dec 2013 10:05:11 +0100
+Subject: [PATCH] registrar: handle error case when deleting contact fails for
+ unregister()
+
+- reformatted file
+
+(cherry picked from commit 67d218e29457ffd75148c8c520b26ec6f3f41719)
+---
+ modules/registrar/save.c | 103 ++++++++++++++++++++++++-----------------------
+ 1 file changed, 52 insertions(+), 51 deletions(-)
+
+diff --git a/modules/registrar/save.c b/modules/registrar/save.c
+index fc5d564..caa81df 100644
+--- a/modules/registrar/save.c
++++ b/modules/registrar/save.c
+@@ -95,7 +95,7 @@ static inline int star(sip_msg_t *_m, udomain_t* _d, str* _a, str *_h)
+ {
+ 	urecord_t* r;
+ 	ucontact_t* c;
+-	
++
+ 	ul.lock_udomain(_d, _a);
+ 
+ 	if (!ul.get_urecord(_d, _a, &r)) {
+@@ -114,11 +114,11 @@ static inline int star(sip_msg_t *_m, udomain_t* _d, str* _a, str *_h)
+ 
+ 	if (ul.delete_urecord(_d, _a, r) < 0) {
+ 		LM_ERR("failed to remove record from usrloc\n");
+-		
+-		     /* Delete failed, try to get corresponding
+-		      * record structure and send back all existing
+-		      * contacts
+-		      */
++
++		/* Delete failed, try to get corresponding
++		 * record structure and send back all existing
++		 * contacts
++		 */
+ 		rerrno = R_UL_DEL_R;
+ 		if (!ul.get_urecord(_d, _a, &r)) {
+ 			build_contact(_m, r->contacts, _h);
+@@ -133,7 +133,7 @@ static inline int star(sip_msg_t *_m, udomain_t* _d, str* _a, str *_h)
+ 
+ 
+ /*! \brief
+- */
++*/
+ static struct socket_info *get_sock_val(struct sip_msg *msg)
+ {
+ 	struct socket_info *sock;
+@@ -179,10 +179,10 @@ static struct socket_info *get_sock_val(struct sip_msg *msg)
+ 		socks = vavp->val.v.s;
+ 	}
+ 	if (parse_phostport( socks.s, &hosts.s, &hosts.len,
+-	&port, &proto)!=0) {
++				&port, &proto)!=0) {
+ 		socks.s[socks.len] = c;
+ 		LM_ERR("bad socket <%.*s> in \n",
+-			socks.len, socks.s);
++				socks.len, socks.s);
+ 		return 0;
+ 	}
+ 	if(sock_hdr_name.len>0 && c!=0) {
+@@ -211,7 +211,7 @@ static inline int no_contacts(sip_msg_t *_m, udomain_t* _d, str* _a, str* _h)
+ {
+ 	urecord_t* r;
+ 	int res;
+-	
++
+ 	ul.lock_udomain(_d, _a);
+ 	res = ul.get_urecord(_d, _a, &r);
+ 	if (res < 0) {
+@@ -220,7 +220,7 @@ static inline int no_contacts(sip_msg_t *_m, udomain_t* _d, str* _a, str* _h)
+ 		ul.unlock_udomain(_d, _a);
+ 		return -1;
+ 	}
+-	
++
+ 	if (res == 0) {  /* Contacts found */
+ 		build_contact(_m, r->contacts, _h);
+ 		ul.release_urecord(r);
+@@ -280,7 +280,7 @@ static inline ucontact_info_t* pack_ci( struct sip_msg* _m, contact_t* _c, unsig
+ 
+ 		/* set tcp connection id */
+ 		if (_m->rcv.proto==PROTO_TCP || _m->rcv.proto==PROTO_TLS
+-		        || _m->rcv.proto==PROTO_WS  || _m->rcv.proto==PROTO_WSS) {
++				|| _m->rcv.proto==PROTO_WS  || _m->rcv.proto==PROTO_WSS) {
+ 			ci.tcpconn_id = _m->rcv.proto_reserved1;
+ 		} else {
+ 			ci.tcpconn_id = -1;
+@@ -288,7 +288,7 @@ static inline ucontact_info_t* pack_ci( struct sip_msg* _m, contact_t* _c, unsig
+ 
+ 		/* additional info from message */
+ 		if (parse_headers(_m, HDR_USERAGENT_F, 0) != -1 && _m->user_agent &&
+-		_m->user_agent->body.len>0 && _m->user_agent->body.len<MAX_UA_SIZE) {
++				_m->user_agent->body.len>0 && _m->user_agent->body.len<MAX_UA_SIZE) {
+ 			ci.user_agent = &_m->user_agent->body;
+ 		} else {
+ 			ci.user_agent = &no_ua;
+@@ -379,8 +379,8 @@ static inline ucontact_info_t* pack_ci( struct sip_msg* _m, contact_t* _c, unsig
+ 				if (received_found==0) {
+ 					memset(&val, 0, sizeof(int_str));
+ 					if (rcv_avp_name.n!=0
+-								&& search_first_avp(rcv_avp_type, rcv_avp_name, &val, 0)
+-								&& val.s.len > 0) {
++							&& search_first_avp(rcv_avp_type, rcv_avp_name, &val, 0)
++							&& val.s.len > 0) {
+ 						if (val.s.len>RECEIVED_MAX_SIZE) {
+ 							rerrno = R_CONTACT_LEN;
+ 							LM_ERR("received too long\n");
+@@ -574,13 +574,13 @@ error:
+ 
+ 
+ static int test_max_contacts(struct sip_msg* _m, urecord_t* _r, contact_t* _c,
+-										ucontact_info_t *ci, int mc)
++		ucontact_info_t *ci, int mc)
+ {
+ 	int num;
+ 	int e;
+ 	ucontact_t* ptr, *cont;
+ 	int ret;
+-	
++
+ 	num = 0;
+ 	ptr = _r->contacts;
+ 	while(ptr) {
+@@ -590,7 +590,7 @@ static int test_max_contacts(struct sip_msg* _m, urecord_t* _r, contact_t* _c,
+ 		ptr = ptr->next;
+ 	}
+ 	LM_DBG("%d valid contacts\n", num);
+-	
++
+ 	for( ; _c ; _c = get_next_contact(_c) ) {
+ 		/* calculate expires */
+ 		calc_contact_expires(_m, _c->expires, &e);
+@@ -610,7 +610,7 @@ static int test_max_contacts(struct sip_msg* _m, urecord_t* _r, contact_t* _c,
+ 			if (e == 0) num--;
+ 		}
+ 	}
+-	
++
+ 	LM_DBG("%d contacts after commit\n", num);
+ 	if (num > mc) {
+ 		LM_INFO("too many contacts for AOR <%.*s>\n", _r->aor.len, _r->aor.s);
+@@ -668,7 +668,7 @@ static inline int update_contacts(struct sip_msg* _m, urecord_t* _r, int _mode,
+ 
+ #ifdef USE_TCP
+ 	if ( (_m->flags&tcp_persistent_flag) &&
+-	(_m->rcv.proto==PROTO_TCP||_m->rcv.proto==PROTO_TLS||_m->rcv.proto==PROTO_WS||_m->rcv.proto==PROTO_WSS)) {
++			(_m->rcv.proto==PROTO_TCP||_m->rcv.proto==PROTO_TLS||_m->rcv.proto==PROTO_WS||_m->rcv.proto==PROTO_WSS)) {
+ 		e_max = -1;
+ 		tcp_check = 1;
+ 	} else {
+@@ -756,15 +756,15 @@ static inline int update_contacts(struct sip_msg* _m, urecord_t* _r, int _mode,
+ 				/* If call-id has changed then delete all records with this sip.instance
+ 				   then insert new record */
+ 				if (ci->instance.s != NULL &&
+-					(ci->callid->len != c->callid.len ||
+-						strncmp(ci->callid->s, c->callid.s, ci->callid->len) != 0))
++						(ci->callid->len != c->callid.len ||
++						 strncmp(ci->callid->s, c->callid.s, ci->callid->len) != 0))
+ 				{
+ 					ptr = _r->contacts;
+ 					while (ptr)
+ 					{
+ 						ptr0 = ptr->next;
+ 						if ((ptr != c) && ptr->instance.len == c->instance.len &&
+-							strncmp(ptr->instance.s, c->instance.s, ptr->instance.len) == 0)
++								strncmp(ptr->instance.s, c->instance.s, ptr->instance.len) == 0)
+ 						{
+ 							ul.delete_ucontact(_r, ptr);
+ 						}
+@@ -912,12 +912,12 @@ int save(struct sip_msg* _m, udomain_t* _d, int _cflags, str *_uri)
+ 	}
+ 
+ 	if (reg_outbound_mode != REG_OUTBOUND_NONE
+-		&& !(parse_headers(_m, HDR_VIA2_F, 0) == -1 || _m->via2 == 0
+-			|| _m->via2->error != PARSE_OK)) {
++			&& !(parse_headers(_m, HDR_VIA2_F, 0) == -1 || _m->via2 == 0
++				|| _m->via2->error != PARSE_OK)) {
+ 		/* Outbound supported on server, and more than one Via: - not the first hop */
+ 
+ 		if (!(parse_headers(_m, HDR_PATH_F, 0) == -1 || _m->path == 0)) {
+-		        route = (rr_t *)0;
++			route = (rr_t *)0;
+ 			if (parse_rr_body(_m->path->body.s, _m->path->body.len, &route) < 0) {
+ 				LM_ERR("Failed to parse Path: header body\n");
+ 				goto error;
+@@ -949,7 +949,7 @@ int save(struct sip_msg* _m, udomain_t* _d, int _cflags, str *_uri)
+ 
+ 		if ((use_ob == 0) && (reg_regid_mode == REG_REGID_OUTBOUND)) {
+ 			if ((get_supported(_m) & F_OPTION_TAG_OUTBOUND)
+-			    && contact->reg_id) {
++					&& contact->reg_id) {
+ 				LM_WARN("Outbound used by UAC but not supported by edge proxy\n");
+ 				rerrno = R_OB_UNSUP_EDGE;
+ 				goto error;
+@@ -959,7 +959,7 @@ int save(struct sip_msg* _m, udomain_t* _d, int _cflags, str *_uri)
+ 			}
+ 		}
+ 	}
+-	
++
+ 	get_act_time();
+ 	c = get_first_contact(_m);
+ 
+@@ -1012,9 +1012,9 @@ int unregister(struct sip_msg* _m, udomain_t* _d, str* _uri, str *_ruid)
+ 	if (_ruid == NULL) {
+ 		/* No ruid provided - remove all contacts for aor */
+ 
+-	        if (extract_aor(_uri, &aor, NULL) < 0) {
+-		        LM_ERR("failed to extract Address Of Record\n");
+-		        return -1;
++		if (extract_aor(_uri, &aor, NULL) < 0) {
++			LM_ERR("failed to extract Address Of Record\n");
++			return -1;
+ 		}
+ 
+ 		u = parse_to_uri(_m);
+@@ -1029,36 +1029,37 @@ int unregister(struct sip_msg* _m, udomain_t* _d, str* _uri, str *_ruid)
+ 	} else {
+ 		/* ruid provided - remove a specific contact */
+ 
+-	        if (_uri->len > 0) {
++		if (_uri->len > 0) {
+ 
+-		        if (extract_aor(_uri, &aor, NULL) < 0) {
+-		                LM_ERR("failed to extract Address Of Record\n");
+-		                return -1;
+-		        }
++			if (extract_aor(_uri, &aor, NULL) < 0) {
++				LM_ERR("failed to extract Address Of Record\n");
++				return -1;
++			}
+ 
+-		        if (ul.get_urecord_by_ruid(_d, ul.get_aorhash(&aor),
+-						   _ruid, &r, &c) != 0) {
+-			        LM_WARN("AOR/Contact not found\n");
+-			        return -1;
++			if (ul.get_urecord_by_ruid(_d, ul.get_aorhash(&aor),
++						_ruid, &r, &c) != 0) {
++				LM_WARN("AOR/Contact not found\n");
++				return -1;
+ 			}
+ 			if (ul.delete_ucontact(r, c) != 0) {
+-			        LM_WARN("could not delete contact\n");
+-			        return -1;
++				ul.unlock_udomain(_d, &aor);
++				LM_WARN("could not delete contact\n");
++				return -1;
+ 			}
+ 			ul.unlock_udomain(_d, &aor);
+ 
+ 		} else {
+ 
+-   		        res = ul.delete_urecord_by_ruid(_d, _ruid);
++			res = ul.delete_urecord_by_ruid(_d, _ruid);
+ 			switch (res) {
+-			case -1:
+-			        LM_ERR("could not delete contact\n");
+-			        return -1;
+-			case -2:
+-			        LM_WARN("contact not found\n");
+-			        return -1;
+-			default:
+-			        return 1;
++				case -1:
++					LM_ERR("could not delete contact\n");
++					return -1;
++				case -2:
++					LM_WARN("contact not found\n");
++					return -1;
++				default:
++					return 1;
+ 			}
+ 
+ 		}
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0009-usrloc-avoid-double-locking-when-preloading-attribut.patch b/debian/patches/upstream/0009-usrloc-avoid-double-locking-when-preloading-attribut.patch
new file mode 100644
index 0000000..e60a155
--- /dev/null
+++ b/debian/patches/upstream/0009-usrloc-avoid-double-locking-when-preloading-attribut.patch
@@ -0,0 +1,40 @@
+From 8df9d2336e7de2648288cf8ff6821e6820d88da9 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Mon, 9 Dec 2013 10:06:15 +0100
+Subject: [PATCH] usrloc: avoid double locking when preloading attributes
+
+- reported by Seudin Kasumovic, FS#378
+
+(cherry picked from commit 888635bfa3719afeeea6f5f0d407aa862ceb34ac)
+---
+ modules/usrloc/udomain.c | 6 +++---
+ 1 file changed, 3 insertions(+), 3 deletions(-)
+
+diff --git a/modules/usrloc/udomain.c b/modules/usrloc/udomain.c
+index a736051..88fc7e4 100644
+--- a/modules/usrloc/udomain.c
++++ b/modules/usrloc/udomain.c
+@@ -1270,8 +1270,7 @@ int uldb_preload_attrs(udomain_t *_d)
+ 				suri = user;
+ 			}
+ 
+-			lock_udomain(_d, &suri);
+-			if (get_urecord_by_ruid(_d, ul_get_aorhash(&suri), &ruid, &r, &c) > 0) {
++			if (get_urecord_by_ruid(_d, ul_get_aorhash(&suri), &ruid, &r, &c) < 0) {
+ 				/* delete attrs records from db table */
+ 				LM_INFO("no contact record for this ruid\n");
+ 				uldb_delete_attrs(_d->name, &user, &domain, &ruid);
+@@ -1287,8 +1286,9 @@ int uldb_preload_attrs(udomain_t *_d)
+ 							LM_INFO("cannot add values to contact xavp\n");
+ 					}
+ 				}
++				/* get_urecord_by_ruid() locks the slot */
++				unlock_udomain(_d, &suri);
+ 			}
+-			unlock_udomain(_d, &user);
+ 		}
+ 
+ 		if (DB_CAPABILITY(ul_dbf, DB_CAP_FETCH)) {
+-- 
+1.8.5.1
+
diff --git a/debian/patches/upstream/0010-core-safety-check-for-double-free-in-q_malloc-as-in-.patch b/debian/patches/upstream/0010-core-safety-check-for-double-free-in-q_malloc-as-in-.patch
new file mode 100644
index 0000000..d257443
--- /dev/null
+++ b/debian/patches/upstream/0010-core-safety-check-for-double-free-in-q_malloc-as-in-.patch
@@ -0,0 +1,30 @@
+From eaeb74f5b6af5be13f88de93729998f13e9a06b7 Mon Sep 17 00:00:00 2001
+From: Daniel-Constantin Mierla <miconda at gmail.com>
+Date: Wed, 11 Dec 2013 09:49:52 +0100
+Subject: [PATCH] core: safety check for double free in q_malloc as in f_malloc
+
+(cherry picked from commit 943a5941f5ab479803fb30e19e9fa607f0f0fe14)
+---
+ mem/q_malloc.c | 6 ++++++
+ 1 file changed, 6 insertions(+)
+
+diff --git a/mem/q_malloc.c b/mem/q_malloc.c
+index 50acab9..8c36d03 100644
+--- a/mem/q_malloc.c
++++ b/mem/q_malloc.c
+@@ -473,6 +473,12 @@ void qm_free(struct qm_block* qm, void* p)
+ 	MDBG("qm_free: freeing frag. %p alloc'ed from %s: %s(%ld)\n",
+ 			f, f->file, f->func, f->line);
+ #endif
++	if (unlikely(f->u.is_free)){
++		LM_INFO("freeing a free fragment (%p/%p) - ignore\n",
++				f, p);
++		return;
++	}
++
+ 	size=f->size;
+ 	qm->used-=size;
+ 	qm->real_used-=size;
+-- 
+1.8.5.1
+
diff --git a/debian/rules b/debian/rules
index b6d7564..85e8fb3 100755
--- a/debian/rules
+++ b/debian/rules
@@ -33,7 +33,7 @@ EXTRA_EXCLUDED_MODULES=bdb dbtext oracle pa iptrtpproxy purple mi_xmlrpc
 PACKAGE_GROUPS=mysql postgres berkeley unixodbc radius presence \
 			   ldap xml perl utils lua memcached \
 			   snmpstats carrierroute xmpp cpl redis python geoip\
-			   sqlite json mono ims
+			   sqlite json mono ims sctp java
 
 # name of libdir in the path for libraries (e.g., lib for 32b, lib64 for 64b)
 LIBDIR ?= lib/$(DEB_HOST_MULTIARCH)

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-voip/kamailio.git



More information about the Pkg-voip-commits mailing list