diff options
author | Nathan Angelacos <nangel@alpinelinux.org> | 2013-12-20 12:51:36 +0000 |
---|---|---|
committer | Natanael Copa <ncopa@alpinelinux.org> | 2013-12-23 15:14:42 +0000 |
commit | 5737992a43886c46e2516e5eec9960dfd6eaba21 (patch) | |
tree | 263b2735fa6a5d05ececc67f2958b2463ca503be /main/kamailio | |
parent | ff8ba9e73b1b1945fcfbc6be78273d9b8c0db530 (diff) | |
download | aports-5737992a43886c46e2516e5eec9960dfd6eaba21.tar.bz2 aports-5737992a43886c46e2516e5eec9960dfd6eaba21.tar.xz |
main/kamailio: Version bump to 4.1.0
New (4.1.x) modules added to the following packages:
kamailio: gzcompress,rtpproxy-ng,stun,sipt
kamailio-extras: cnxcc
kamailio-db: mohqueue
kamailio-ims: ims-charging
kamailio-authephemeral: auth_ephemeral (no default from upstream)
Diffstat (limited to 'main/kamailio')
-rw-r--r-- | main/kamailio/0001-4.1-backports-to-2013-12-12.patch | 1149 | ||||
-rw-r--r-- | main/kamailio/APKBUILD | 197 | ||||
-rw-r--r-- | main/kamailio/kamailio-4.1-backslash.patch | 48 |
3 files changed, 1298 insertions, 96 deletions
diff --git a/main/kamailio/0001-4.1-backports-to-2013-12-12.patch b/main/kamailio/0001-4.1-backports-to-2013-12-12.patch new file mode 100644 index 000000000..c5dfe5262 --- /dev/null +++ b/main/kamailio/0001-4.1-backports-to-2013-12-12.patch @@ -0,0 +1,1149 @@ +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) +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:= +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/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; +diff --git a/modules/avpops/avpops_parse.c b/modules/avpops/avpops_parse.c +index 3a16f18..3a6c5ec 100644 +--- a/modules/avpops/avpops_parse.c ++++ b/modules/avpops/avpops_parse.c +@@ -129,6 +129,14 @@ int parse_avp_db(char *s, struct db_param *dbp, int allow_scheme) + goto error; + } + } ++ /* no pv to lookup, create one to store flags details */ ++ dbp->a.u.sval = (pv_spec_t*)pkg_malloc(sizeof(pv_spec_t)); ++ if(dbp->a.u.sval==NULL) ++ { ++ LM_ERR("no more pkg\n"); ++ goto error; ++ } ++ memset(dbp->a.u.sval, 0, sizeof(pv_spec_t)); + dbp->a.u.sval->pvp.pvn.u.isname.type |= (flags<<8)&0xff00; + dbp->a.type = AVPOPS_VAL_NONE; + } else { +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; + } + +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; + } + + } +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; + } +diff --git a/modules/snmpstats/mibs/KAMAILIO-TC b/modules/snmpstats/mibs/KAMAILIO-TC +index 81d1459..171c491 100644 +--- a/modules/snmpstats/mibs/KAMAILIO-TC ++++ b/modules/snmpstats/mibs/KAMAILIO-TC +@@ -62,7 +62,7 @@ KamailioSIPTransportProtocol ::= TEXTUAL-CONVENTION + tcp(2), + sctp(3), + tls(4), +- sctp_tls(5), ++ sctptls(5), + ws(6), + wss(7) + } +@@ -79,14 +79,13 @@ KamailioSIPEntityRole ::= TEXTUAL-CONVENTION + operation of a SIP outbound edge proxy node. + Kamailio adds the role 'sipcaptureServer' for + operation of a Homer SIPcapture node." +- " + SYNTAX BITS { + other(0), + userAgent(1), + proxyServer(2), + redirectServer(3), +- registrarServer(4) +- edgeproxyServer(5) ++ registrarServer(4), ++ edgeproxyServer(5), + sipcaptureServer(6) + } + +diff --git a/modules/tm/t_reply.c b/modules/tm/t_reply.c +index 562b583..4d9901d 100644 +--- a/modules/tm/t_reply.c ++++ b/modules/tm/t_reply.c +@@ -1093,7 +1093,7 @@ int run_branch_failure_handlers(struct cell *t, struct sip_msg *rpl, + + /* failure_route for a local UAC? */ + if (!shmem_msg) { +- LOG(L_WARN,"Warning: run_branch_failure_handlers: no UAC support (%d, %d) \n", ++ LOG(L_WARN,"no UAC support (%d, %d) \n", + on_branch_failure, t->tmcb_hl.reg_types); + return 0; + } +@@ -1101,13 +1101,13 @@ int run_branch_failure_handlers(struct cell *t, struct sip_msg *rpl, + /* don't start faking anything if we don't have to */ + if (unlikely((on_branch_failure < 0) && !has_tran_tmcbs( t, TMCB_ON_BRANCH_FAILURE))) { + LOG(L_WARN, +- "Warning: run_failure_handlers: no branch_failure handler (%d, %d)\n", ++ "no branch_failure handler (%d, %d)\n", + on_branch_failure, t->tmcb_hl.reg_types); + return 1; + } + + if (!fake_req(&faked_req, shmem_msg, extra_flags, &t->uac[picked_branch])) { +- LOG(L_ERR, "ERROR: run_branch_failure_handlers: fake_req failed\n"); ++ LOG(L_ERR, "fake_req failed\n"); + return 0; + } + /* fake also the env. conforming to the fake msg */ +@@ -1124,7 +1124,7 @@ int run_branch_failure_handlers(struct cell *t, struct sip_msg *rpl, + if (exec_pre_script_cb(&faked_req, BRANCH_FAILURE_CB_TYPE)>0) { + /* run a branch_failure_route action if some was marked */ + if (run_top_route(event_rt.rlist[on_branch_failure], &faked_req, 0)<0) +- LOG(L_ERR, "ERROR: run_branch_failure_handlers: Error in run_top_route\n"); ++ LOG(L_ERR, "error in run_top_route\n"); + exec_post_script_cb(&faked_req, BRANCH_FAILURE_CB_TYPE); + } + /* update message flags, if changed in branch_failure route */ +@@ -1357,9 +1357,9 @@ static enum rps t_should_relay_response( struct cell *Trans , int new_code, + /* also append the current reply to the transaction to + * make it available in failure routes - a kind of "fake" + * save of the final reply per branch */ +- Trans->uac[branch].reply = reply; + if (unlikely(has_tran_tmcbs( Trans, TMCB_ON_BRANCH_FAILURE_RO|TMCB_ON_BRANCH_FAILURE) +- || (Trans->uac[picked_branch].on_branch_failure) )) { ++ || (Trans->uac[branch].on_branch_failure) )) { ++ Trans->uac[branch].reply = reply; + extra_flags= + ((Trans->uac[branch].request.flags & F_RB_TIMEOUT)? + FL_TIMEOUT:0) | +@@ -1369,6 +1369,7 @@ static enum rps t_should_relay_response( struct cell *Trans , int new_code, + picked_branch = branch; + run_branch_failure_handlers( Trans, Trans->uac[branch].reply, + new_code, extra_flags); ++ Trans->uac[branch].reply = 0; + } + + +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"); +diff --git a/modules/usrloc/udomain.c b/modules/usrloc/udomain.c +index 244f8e7..88fc7e4 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; +@@ -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)) { +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] = '-'; diff --git a/main/kamailio/APKBUILD b/main/kamailio/APKBUILD index 156d1b8a7..37f6c61db 100644 --- a/main/kamailio/APKBUILD +++ b/main/kamailio/APKBUILD @@ -1,8 +1,8 @@ # Contributor: Michael Mason <ms13sp@gmail.com> # Maintainer: Nathan Angelacos <nangel@alpinelinux.org> pkgname=kamailio -pkgver=4.0.4 -pkgrel=1 +pkgver=4.1.0 +pkgrel=0 pkgdesc="Open Source SIP Server" url="http://www.kamailio.org/" arch="all" @@ -13,7 +13,7 @@ license="GPL2+" depends="" makedepends="bison flex expat-dev postgresql-dev pcre-dev mysql-dev libxml2-dev curl-dev unixodbc-dev confuse-dev ncurses-dev sqlite-dev - lua-dev openldap-dev openssl-dev net-snmp-dev" + lua-dev openldap-dev openssl-dev net-snmp-dev libunistring-dev" install="$pkgname.pre-install $pkgname.pre-upgrade" # See sip-router/Makfile.groups for the list of recommended modules for @@ -23,35 +23,34 @@ install="$pkgname.pre-install $pkgname.pre-upgrade" # # _mod_list_dbg is not defined in the orginal # -# Move avp from _mod_list_extra to _mod_list_basic, so that we can create -# a kamailio-extra package +# Move avp from _mod_list_extras to _mod_list_basic, so that we can create +# a kamailio-extras package # # Remove db_text from _mod_list_db because we create a separate dbtext package # # - basic used modules, with no extra dependency (widespread usage) _mod_list_basic="avp async auth benchmark blst cfg_rpc cfgutils corex counters \ - ctl debugger diversion enum exec ipops kex mangler maxfwd \ - 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" + ctl debugger diversion enum exec gzcompress ipops kex mangler \ + maxfwd 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 sipt" # - extra used modules, with no extra dependency -_mod_list_extras="auth_diameter call_control dmq domainpolicy msrp pdb \ - qos sca seas sms sst timer tmrec uac_redirect xhttp \ - xhttp_rpc xprint" +_mod_list_extras="auth_diameter call_control cnxcc dmq domainpolicy msrp pdb \ + qos sca seas sms sst timer tmrec uac_redirect xhttp \ + xhttp_rpc xprint" # - common modules depending on database _mod_list_db="acc alias_db auth_db avpops cfg_db db_flatstore \ - db_cluster dialog dispatcher domain drouting group \ - htable imc matrix msilo mtree p_usrloc pdt permissions \ - pipelimit prefix_route registrar sipcapture siptrace speeddial \ - sqlops uac uri_db userblacklist usrloc" - + db_cluster dialog dispatcher domain drouting group \ + htable imc matrix mohqueue msilo mtree p_usrloc pdt permissions \ + pipelimit prefix_route registrar sipcapture siptrace speeddial \ + sqlops uac uri_db userblacklist usrloc" # - common modules depending on database, using UID db schema _mod_list_dbuid="db2_ops uid_auth_db uid_avp_db uid_domain uid_gflags \ - uid_uri_db" + uid_uri_db" # - modules for devel purposes _mod_list_devel="malloc_test print print_lib" @@ -122,13 +121,19 @@ _mod_list_stun="stun" # - modules depending on libval-threads libcrypto libsres libpthread _mod_list_dnssec="dnssec" +# - modules depending on libsctp +_mod_list_sctp="sctp" + +# - modules depending on openssl library +_mod_list_authephemeral="auth_ephemeral" + # - modules related to SIMPLE presence extensions _mod_list_presence="presence presence_conference presence_dialoginfo \ - presence_mwi presence_profile presence_reginfo \ - presence_xml \ - pua pua_bla pua_dialoginfo pua_mi pua_reginfo \ - pua_usrloc pua_xmpp \ - rls xcap_client xcap_server" + presence_mwi presence_profile presence_reginfo \ + presence_xml \ + pua pua_bla pua_dialoginfo pua_mi pua_reginfo \ + pua_usrloc pua_xmpp \ + rls xcap_client xcap_server" # - modules depending on lua library _mod_list_lua="app_lua" @@ -159,8 +164,8 @@ _mod_list_mono="app_mono" # - modules related to IMS extensions _mod_list_ims="cdp cdp_avp dialog_ng ims_auth ims_isc ims_icscf ims_qos \ - ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf \ - ims_usrloc_scscf" + ims_registrar_pcscf ims_registrar_scscf ims_usrloc_pcscf \ + ims_usrloc_scscf ims_charging" # - modules depending on osp toolkit library _mod_list_osp="osp" @@ -182,18 +187,17 @@ _module_group_kstandard="$_mod_list_basic $_mod_list_dbuid $_mod_list_pcre" subpackages="$pkgname-doc" _modules="$_module_group_kstandard" for _i in db postgres sqlite dbtext mysql \ - cpl xml unixodbc snmpstats xmpp carrierroute \ - ldap utils tls presence lua ims outbound dbg \ - extras websocket; do - + cpl xml unixodbc snmpstats xmpp carrierroute \ + ldap utils tls presence lua ims outbound dbg \ + extras websocket authephemeral; do + subpackages="$subpackages $pkgname-$_i" eval "_modules=\"\$_modules \$_mod_list_$_i\"" done source="http://www.kamailio.org/pub/kamailio/$pkgver/src/kamailio-${pkgver}_src.tar.gz - 0001-websocket-remove-libunistring-dependency.patch - musl-fixes.patch - kamailio-4.0-backslash.patch + kamailio-4.1-backslash.patch + 0001-4.1-backports-to-2013-12-12.patch kamailio.cfg kamailio.initd " @@ -235,7 +239,6 @@ build() { cd "$_builddir" make FLAVOUR=kamailio STUN=1 \ PREFIX=/usr \ - CC_EXTRA_OPTS="$CFLAGS -D_GNU_SOURCE" \ cfg_target=/etc/kamailio/ \ include_modules="$_modules" \ LIBDIR=lib \ @@ -254,7 +257,7 @@ package() { mv "$pkgdir"/etc/kamailio/kamailio.cfg \ "$pkgdir"/usr/share/doc/kamailio/ install -m644 -D "$srcdir"/kamailio.cfg \ - "$pkgdir"/etc/kamailio/kamailio.cfg + "$pkgdir"/etc/kamailio/kamailio.cfg install -m755 -D "$srcdir"/$pkgname.initd "$pkgdir"/etc/init.d/$pkgname install -d -o kamailio "$pkgdir"/var/run/kamailio @@ -289,134 +292,136 @@ _db_driver() { db() { - _generic_pkg "modules using a database backend" "$_mod_list_db" + _generic_pkg "modules using a database backend" "$_mod_list_db" } postgres() { - _db_driver Postgres postgres postgres pgsql + _db_driver Postgres postgres postgres pgsql } mysql() { - _db_driver Mysql mysql mysql mysql + _db_driver Mysql mysql mysql mysql } sqlite() { - _db_driver SQlite sqlite db_sqlite sqlite + _db_driver SQlite sqlite db_sqlite sqlite } dbtext() { - _db_driver DBText text dbtext dbtext || return 1 - depends="$depends python" - mkdir -p "$subpkgdir"/usr/lib/kamailio/kamctl - mv "$pkgdir"/usr/lib/kamailio/kamctl/dbtextdb \ - "$subpkgdir"/usr/lib/kamailio/kamctl/ + _db_driver DBText text dbtext dbtext || return 1 + depends="$depends python" + mkdir -p "$subpkgdir"/usr/lib/kamailio/kamctl + mv "$pkgdir"/usr/lib/kamailio/kamctl/dbtextdb \ + "$subpkgdir"/usr/lib/kamailio/kamctl/ } cpl() { - _generic_pkg "CPL (Call Processing Language) interpreter" \ - "$_mod_list_cpl" + _generic_pkg "CPL (Call Processing Language) interpreter" \ + "$_mod_list_cpl" } xml() { - _generic_pkg "XML related modules: $_mod_list_xml" \ - "$_mod_list_xml" || return 1 - mkdir -p "$subpkgdir"/usr/share/kamailio - mv "$pkgdir"/usr/share/kamailio/xhttp_pi \ - "$subpkgdir"/usr/share/kamailio || return 1 - mkdir -p "$subpkgdir"/etc/kamailio/ - mv "$pkgdir"/etc/kamailio/pi_framework.xml \ - "$subpkgdir"/etc/kamailio || return 1 + _generic_pkg "XML related modules: $_mod_list_xml" \ + "$_mod_list_xml" || return 1 + mkdir -p "$subpkgdir"/usr/share/kamailio + mv "$pkgdir"/usr/share/kamailio/xhttp_pi \ + "$subpkgdir"/usr/share/kamailio || return 1 + mkdir -p "$subpkgdir"/etc/kamailio/ + mv "$pkgdir"/etc/kamailio/pi_framework.xml \ + "$subpkgdir"/etc/kamailio || return 1 } unixodbc() { - _generic_pkg "Database drivers for unixodbc" \ - "$_mod_list_unixodbc" + _generic_pkg "Database drivers for unixodbc" \ + "$_mod_list_unixodbc" } snmpstats() { - _generic_pkg "SNMP statistics support" \ - "$_mod_list_snmpstats" || return 1 - mkdir -p "$subpkgdir"/usr/share/snmp - mv "$_builddir"/modules/snmpstats/mibs \ - "$subpkgdir"/usr/share/snmp/ || return 1 + _generic_pkg "SNMP statistics support" \ + "$_mod_list_snmpstats" || return 1 + mkdir -p "$subpkgdir"/usr/share/snmp + mv "$_builddir"/modules/snmpstats/mibs \ + "$subpkgdir"/usr/share/snmp/ || return 1 } xmpp() { - _generic_pkg "XMPP (Jabber) gateway" \ - "$_mod_list_xmpp" + _generic_pkg "XMPP (Jabber) gateway" \ + "$_mod_list_xmpp" } carrierroute() { - _generic_pkg "carrier grade routing functions" \ - "$_mod_list_carrierroute" + _generic_pkg "carrier grade routing functions" \ + "$_mod_list_carrierroute" } ldap() { - _generic_pkg "LDAP search functions" \ - "$_mod_list_ldap" + _generic_pkg "LDAP search functions" \ + "$_mod_list_ldap" } utils() { - _generic_pkg "miscelaneous utility functions" \ - "$_mod_list_utils" + _generic_pkg "miscelaneous utility functions" \ + "$_mod_list_utils" } tls() { - _generic_pkg "TLS support" \ - "$_mod_list_tls" + _generic_pkg "TLS support" \ + "$_mod_list_tls" } presence() { - _generic_pkg "SIP Notify (Presence) support" \ - "$_mod_list_presence" + _generic_pkg "SIP Notify (Presence) support" \ + "$_mod_list_presence" } lua() { _generic_pkg "Lua script support" \ - "$_mod_list_lua" + "$_mod_list_lua" } ims() { - _generic_pkg "IP Multimedia Subsystem (IMS) support" \ - "$_mod_list_ims" + _generic_pkg "IP Multimedia Subsystem (IMS) support" \ + "$_mod_list_ims" } outbound() { - _generic_pkg "RFC 5626 section 5 Outbound suppport" \ - "$_mod_list_outbound" + _generic_pkg "RFC 5626 section 5 Outbound suppport" \ + "$_mod_list_outbound" } dbg() { - _generic_pkg "debugging modules" \ - "$_mod_list_dbg" + _generic_pkg "debugging modules" \ + "$_mod_list_dbg" } extras() { - _generic_pkg "extra modules" \ - "$_mod_list_extra" + _generic_pkg "extra modules" \ + "$_mod_list_extras" } websocket() { - _generic_pkg "websocket support" \ - "$_mod_list_websocket" + _generic_pkg "websocket support" \ + "$_mod_list_websocket" +} + +authephemeral() { + _generic_pkg "auth ephemeral (webrtc)" \ + "$_mod_list_authephemeral" } -md5sums="e625f52d53ed00da97a50b3ecd451b8d kamailio-4.0.4_src.tar.gz -6251a5c33373c5276897c8abbbecc619 0001-websocket-remove-libunistring-dependency.patch -2f26f821280bc65b77231ec3ba6e0472 musl-fixes.patch -7ca9394c4987c83a27f492c5b6b055f0 kamailio-4.0-backslash.patch +md5sums="a7d0e685c4890895c6a8623777a111a6 kamailio-4.1.0_src.tar.gz +2ab22324f307424958cfa786acfd3bc1 kamailio-4.1-backslash.patch +50071a01fd1b4d1230fca439b2569432 0001-4.1-backports-to-2013-12-12.patch a3c959ec568c43a905710e7d25cd8c25 kamailio.cfg 9c190575e28772a784c4172216d85333 kamailio.initd" -sha256sums="abd6e8a1076d8e58d80a3bb6efc32d784b130796add03961f4bbdbd6f58049a7 kamailio-4.0.4_src.tar.gz -bbc06f9ae62b2e8df2c58f9a171f0408e075d5a51e2457e85ef3ca01aa972df9 0001-websocket-remove-libunistring-dependency.patch -46b92e27006c08cc3511d241d2958b720a8b5de650b7d51339b265b4b0a48474 musl-fixes.patch -2cb24070809718deac1a32fd4de73eaea47c685d9608fd06ae6531bd34fe4604 kamailio-4.0-backslash.patch +sha256sums="bea5edb51b42d6ce9b5befdc352cd401e91714cdcb5b21db3c05a40390d22907 kamailio-4.1.0_src.tar.gz +d74f14413feeebf67cb94c0274f3ef5efd1b59d17c92da264a1e3c3fe0aa83dc kamailio-4.1-backslash.patch +4adaeb4327d6bf6b0e459c4a43c95a877929360f50631c742bc4531b059bb465 0001-4.1-backports-to-2013-12-12.patch 8024266849033a917147827c3579a382f10f3796989bebc6de3d7c80c965fb72 kamailio.cfg 82612cc107e51de6968568a266de25b98e57257926defab7261fd81cbd624e00 kamailio.initd" -sha512sums="5b486ca72094edef3f617a5285af5519614d3b470babf78db921cf3c321eccc2314e3bbf745e86929fb51249e25c1d55abd519f4559acbd6cfe5cf527485bb0f kamailio-4.0.4_src.tar.gz -a972e57d8d64c104cb3df329442c746588818ed7f148a409d6050bcbbbb021cc1eeb970b59924e0ffb7f9487faacb99cada0dbfb19b0b87f66ca6b2bcf8b8345 0001-websocket-remove-libunistring-dependency.patch -443b4b4cfcc6d4c55833185829cc43ed11b922169d9f24d8aecfaf3c59d65cb32a2806cdd2e846261767c7ad7cbca0517d52c7e0bf10e55cbe4b5fab2b62e4e8 musl-fixes.patch -f83ca7e4feaa02ba4c97fe8b3ff72857b334b6ba27f90b1cc4a2819c77bf40a1d6b77cc8d9b9afa045da5a1a4706b737b73f93c39c0cdb57c14088ca691afbf9 kamailio-4.0-backslash.patch +sha512sums="d364a9f31049ceb01171ded0f5ab23ebbb0386637f5b78a21fda800ef9a90b58ecf6596057fcc72c32e91014251416004309d9095afd63d2af95019764a19f93 kamailio-4.1.0_src.tar.gz +70b0d6ffb7c728d0aa962cb646713cf5a3c2665a57c2dd85d2f820384235426de59ef202a97d24321c3428aa6af32182091b53c79f82072b2232f0146c9310ff kamailio-4.1-backslash.patch +851fb3b3c1a5125ccc0b4c8d9672ed90fb7d20032ee421edc95590d740e0d31ae9b8d8ed1f326ae41ed8fde224bb3f8ee5dd1c8147d48b86d5e7dfd2104ba839 0001-4.1-backports-to-2013-12-12.patch 0b666bfa10fd0af97b62749f8691cb3f76d9b40d1abe0a33e810e367bd733d2e8189c89f7f23010ec591116aada6e1a8a403b17449fe775038917617f281ad4d kamailio.cfg babec2a230daea3c579dc581f9a945c70bd1736cdacaaa7a183d902c8d9fbd4f7958cce03424fb65cdf7a1f6aa077ad8aec7e53525e270f88f856caa374505e7 kamailio.initd" diff --git a/main/kamailio/kamailio-4.1-backslash.patch b/main/kamailio/kamailio-4.1-backslash.patch new file mode 100644 index 000000000..955891191 --- /dev/null +++ b/main/kamailio/kamailio-4.1-backslash.patch @@ -0,0 +1,48 @@ +--- a/utils/kamctl/kamdbctl.base ++++ b/utils/kamctl/kamdbctl.base +@@ -33,18 +33,18 @@ + + # Used by dbtext and db_berkeley to define tables to be created, used by + # postgres to do the grants +-STANDARD_TABLES=${STANDARD_TABLES:-version acc dbaliases domain domain_attrs +- grp uri speed_dial lcr_gw lcr_rule lcr_rule_target pdt subscriber +- location location_attrs re_grp trusted address missed_calls +- usr_preferences aliases silo dialog dialog_vars dispatcher dialplan ++STANDARD_TABLES=${STANDARD_TABLES:-version acc dbaliases domain domain_attrs \ ++ grp uri speed_dial lcr_gw lcr_rule lcr_rule_target pdt subscriber \ ++ location location_attrs re_grp trusted address missed_calls \ ++ usr_preferences aliases silo dialog dialog_vars dispatcher dialplan \ + acc_cdrs} +-EXTRA_TABLES=${EXTRA_TABLES:-imc_members imc_rooms cpl sip_trace domainpolicy +- carrierroute carrier_name domain_name carrierfailureroute userblacklist +- globalblacklist htable purplemap uacreg pl_pipes mtree mtrees ++EXTRA_TABLES=${EXTRA_TABLES:-imc_members imc_rooms cpl sip_trace domainpolicy \ ++ carrierroute carrier_name domain_name carrierfailureroute userblacklist \ ++ globalblacklist htable purplemap uacreg pl_pipes mtree mtrees \ + sca_subscriptions mohqcalls mohqueues} +-PRESENCE_TABLES=${PRESENCE_TABLES:-presentity active_watchers watchers xcap ++PRESENCE_TABLES=${PRESENCE_TABLES:-presentity active_watchers watchers xcap \ + pua rls_presentity rls_watchers} +-DBUID_TABLES=${UID_TABLES:-uid_credentials uid_domain uid_domain_attrs ++DBUID_TABLES=${UID_TABLES:-uid_credentials uid_domain uid_domain_attrs \ + uid_global_attrs uid_uri uid_uri_attrs uid_user_attrs} + + # SQL definitions +@@ -74,13 +74,13 @@ + SED=${SED:-sed} + + # define what modules should be installed +-STANDARD_MODULES=${STANDARD_MODULES:-standard acc lcr domain group +- permissions registrar usrloc msilo alias_db uri_db speeddial ++STANDARD_MODULES=${STANDARD_MODULES:-standard acc lcr domain group \ ++ permissions registrar usrloc msilo alias_db uri_db speeddial \ + avpops auth_db pdt dialog dispatcher dialplan} + + PRESENCE_MODULES=${PRESENCE_MODULES:-presence rls} + +-EXTRA_MODULES=${EXTRA_MODULES:-imc cpl siptrace domainpolicy carrierroute ++EXTRA_MODULES=${EXTRA_MODULES:-imc cpl siptrace domainpolicy carrierroute \ + userblacklist htable purple uac pipelimit mtree sca mohqueue} + + DBUID_MODULES=${UID_MODULES:-uid_auth_db uid_avp_db uid_domain uid_gflags + |