diff --git a/net/kamailio/Makefile b/net/kamailio/Makefile index 15e54046e147..844e8d9dce2b 100644 --- a/net/kamailio/Makefile +++ b/net/kamailio/Makefile @@ -1,177 +1,198 @@ PORTNAME= kamailio -PORTVERSION= 5.5.4 -PORTREVISION= 3 +PORTVERSION= 5.6.2 CATEGORIES= net MASTER_SITES= http://www.kamailio.org/pub/kamailio/${PORTVERSION}/src/ DISTNAME= ${PORTNAME}-${PORTVERSION}_src MAINTAINER= dmitry.wagin@ya.ru COMMENT= Very fast and configurable open source SIP proxy WWW= https://www.kamailio.org/ LICENSE= GPLv2 LICENSE_FILE= ${WRKSRC}/COPYING RUN_DEPENDS= ${LOCALBASE}/bin/bash:shells/bash USES= compiler:c11 cpe gmake ncurses pkgconfig python:3.5+ readline \ shebangfix USE_LDCONFIG= yes USE_RC_SUBR= kamailio SHEBANG_FILES= utils/kamctl/dbtextdb/dbtextdb.py utils/kamctl/kamctl \ utils/kamctl/kamdbctl MAKE_ARGS+= LIBSSL_SET_MUTEX_SHARED=1 CFLAGS+= -Wall KAMAILIO_USER?= kamailio KAMAILIO_GROUP?= kamailio KAMAILIO_RUNDIR?= /var/run/${PORTNAME} SUB_LIST= KAMAILIO_GROUP=${KAMAILIO_GROUP} \ KAMAILIO_RUNDIR=${KAMAILIO_RUNDIR} \ KAMAILIO_USER=${KAMAILIO_USER} WRKSRC= ${WRKDIR}/${PORTNAME}-${PORTVERSION} USERS= ${KAMAILIO_USER} GROUPS= ${KAMAILIO_GROUP} -OPTIONS_DEFINE= DATABASE DIALPLAN DOCS EVAPI JWT KAFKA LWSC \ - MQTT OUTBOUND PERL PHONENUM PRESENCE RADIUS \ - SCTP SECSIPID TLS WEBSOCKET +OPTIONS_DEFINE= DATABASE DIALPLAN DLGS DOCS EVAPI JWT KAFKA \ + LOST LWSC MQTT OUTBOUND PERL PHONENUM POSOPS \ + PRESENCE RADIUS SCTP SECSIPID SIPREPO SLACK \ + SWORKER TLS WEBSOCKET OPTIONS_DEFAULT= MYSQL PRESENCE RADIUS SQLITE TLS OPTIONS_GROUP= DATABASE_DRIVERS KEMI_LANGS OPTIONS_GROUP_DATABASE_DRIVERS= MYSQL PGSQL SQLITE UNIXODBC OPTIONS_GROUP_KEMI_LANGS= LUAJIT PYTHON3 OPTIONS_SUB= YES DATABASE_DESC= Database support DATABASE_DRIVERS_DESC= Database drivers DIALPLAN_DESC= String translations based on rules +DLGS_DESC= Lightweight, stateless dialog tracking and statistics EVAPI_DESC= Network event broadcast API JWT_DESC= JSON Web Token generation and validation KAFKA_DESC= Produces and sends messages to a Kafka server KEMI_LANGS_DESC= Kamailio Embedded Interface Interpreters +LOST_DESC= HELD (RFC6155) and LOST (RFC5222) location-based routing LUAJIT_DESC= Execute embedded Lua scripts LWSC_DESC= Websocket client connector using libwebsockets MQTT_DESC= MQTT connector for bi-directional publish-subscribe communication OUTBOUND_DESC= SIP Outbound support PHONENUM_DESC= Phone number lookup and normalization using libphonenumber +POSOPS_DESC= Operations using the position in the SIP message buffer PRESENCE_DESC= Presence support PYTHON3_DESC= Execute embedded Python3 scripts SCTP_DESC= SCTP support SECSIPID_DESC= Secure SIP/Telephony Identity (STIR/SHAKEN) extensions +SIPREPO_DESC= In-memory SIP message storage +SLACK_DESC= Connector to Slack channels +SWORKER_DESC= Tasks management for specialized workers WEBSOCKET_DESC= WebSocket transport layer DATABASE_VARS= EXTRA_GROUPS+=db DIALPLAN_LIB_DEPENDS= libpcre.so:devel/pcre DIALPLAN_VARS= EXTRA_MODULES+=dialplan +DLGS_VARS= EXTRA_MODULES+=dlgs + EVAPI_LIB_DEPENDS= libev.so:devel/libev EVAPI_VARS= EXTRA_MODULES+=evapi JWT_LIB_DEPENDS= libjwt.so:www/libjwt JWT_VARS= EXTRA_MODULES+=jwt KAFKA_LIB_DEPENDS= librdkafka.so:net/librdkafka KAFKA_VARS= EXTRA_MODULES+=kafka +LOST_LIB_DEPENDS= libcurl.so:ftp/curl \ + libxml2.so:textproc/libxml2 +LOST_VARS= EXTRA_MODULES+=lost + LUAJIT_USES= luajit LUAJIT_MAKE_ARGS= LUAJIT=yes LUAJIT_VARS= EXTRA_MODULES+=app_lua LWSC_LIB_DEPENDS= libwebsockets.so:net/libwebsockets LWSC_VARS= EXTRA_MODULES+=lwsc MQTT_LIB_DEPENDS= libev.so:devel/libev \ libmosquitto.so:net/mosquitto MQTT_VARS= EXTRA_MODULES+=mqtt MYSQL_IMPLIES= DATABASE MYSQL_USES= mysql MYSQL_VARS= EXTRA_GROUPS+=mysql OUTBOUND_VARS= EXTRA_MODULES+=outbound PERL_USES= perl5 PERL_MAKE_ENV= PERLCCOPTS="`perl -MExtUtils::Embed -e ccopts`" \ PERLLDOPTS="`perl -MExtUtils::Embed -e ldopts`" \ TYPEMAP="`perl -MConfig -e 'print $$Config{privlib}'`/ExtUtils/typemap" PERL_VARS= EXTRA_MODULES+=app_perl PGSQL_IMPLIES= DATABASE PGSQL_USES= pgsql PGSQL_VARS= EXTRA_GROUPS+=postgres PHONENUM_LIB_DEPENDS= libphonenumber.so:devel/libphonenumber PHONENUM_VARS= EXTRA_MODULES+=phonenum +POSOPS_VARS= EXTRA_MODULES+=posops + PRESENCE_LIB_DEPENDS= libcurl.so:ftp/curl \ libxml2.so:textproc/libxml2 PRESENCE_VARS= EXTRA_GROUPS+=presence PYTHON3_USES= gettext-runtime PYTHON3_MAKE_ARGS= PYTHON3=${PYTHON_CMD} PYTHON3_VARS= EXTRA_MODULES+=app_python3 RADIUS_LIB_DEPENDS= libradiusclient-ng.so:net/radiusclient RADIUS_VARS= EXTRA_GROUPS+=radius SCTP_VARS= EXTRA_MODULES+=sctp SECSIPID_VARS= EXTRA_MODULES+=secsipid +SIPREPO_VARS= EXTRA_MODULES+=siprepo + +SLACK_LIB_DEPENDS= libcurl.so:ftp/curl +SLACK_VARS= EXTRA_MODULES+=slack + SQLITE_IMPLIES= DATABASE SQLITE_USES= sqlite SQLITE_VARS= EXTRA_MODULES+=db_sqlite +SWORKER_VARS= EXTRA_MODULES+=sworker + TLS_USES= ssl TLS_VARS= EXTRA_MODULES+=tls UNIXODBC_IMPLIES= DATABASE UNIXODBC_LIB_DEPENDS= libodbc.so:databases/unixODBC UNIXODBC_VARS= EXTRA_MODULES+=db_unixodbc WEBSOCKET_LIB_DEPENDS= libunistring.so:devel/libunistring WEBSOCKET_VARS= EXTRA_MODULES+=websocket .include DEFAULT_GROUPS= standard CFG_ARGS+= LIBDIR="lib" \ run_target="${KAMAILIO_RUNDIR}" .if !empty (EXTRA_GROUPS) CFG_ARGS+= group_include="${DEFAULT_GROUPS} ${EXTRA_GROUPS}" .else CFG_ARGS+= group_include="${DEFAULT_GROUPS}" .endif .if !empty (EXTRA_MODULES) CFG_ARGS+= include_modules="${EXTRA_MODULES}" .endif post-patch-DOCS-off: @${REINPLACE_CMD} 's|install-doc install-man|install-man|' \ ${WRKSRC}/src/Makefile pre-build: cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} ${CFG_ARGS} cfg do-install: @cd ${WRKSRC} && ${SETENV} ${MAKE_ENV} ${MAKE_CMD} ${MAKE_ARGS} install @(cd ${STAGEDIR}${ETCDIR}; for i in `${FIND} . -type f`; do ${MV} $$i $$i.sample; done) post-install: @${RMDIR} ${STAGEDIR}${DATADIR} || true @${FIND} ${STAGEDIR}${PREFIX} -type f -name '*.so' -exec ${STRIP_CMD} {} + @${FIND} ${STAGEDIR}${PREFIX} -type f -name '*.so.1' -exec ${STRIP_CMD} {} + @${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/kamailio @${STRIP_CMD} ${STAGEDIR}${PREFIX}/sbin/kamcmd .include diff --git a/net/kamailio/distinfo b/net/kamailio/distinfo index 3a852c38b7e8..c8f977c5c09f 100644 --- a/net/kamailio/distinfo +++ b/net/kamailio/distinfo @@ -1,3 +1,3 @@ -TIMESTAMP = 1645470840 -SHA256 (kamailio-5.5.4_src.tar.gz) = 991d081abc6ee2efdbdb85ee7398f8812f2bdb9ab30ccf9ae0ace6562943860a -SIZE (kamailio-5.5.4_src.tar.gz) = 12794910 +TIMESTAMP = 1665134014 +SHA256 (kamailio-5.6.2_src.tar.gz) = ea3cd5d688c34208b92072c3844c8276b693e0ca2c688168ea0357978c76b32d +SIZE (kamailio-5.6.2_src.tar.gz) = 12921131 diff --git a/net/kamailio/files/patch-src_core_cfg.y b/net/kamailio/files/patch-src_core_cfg.y new file mode 100644 index 000000000000..c84bab8e0d0c --- /dev/null +++ b/net/kamailio/files/patch-src_core_cfg.y @@ -0,0 +1,43 @@ +--- src/core/cfg.y.orig (revision 2cebd46f8f2dc3f87c9cfd2054976e347aa75ace) ++++ src/core/cfg.y +@@ -2045,14 +2045,38 @@ + module_stm: + LOADMODULE STRING { + LM_DBG("loading module %s\n", $2); +- if (load_module($2)!=0) { ++ if (ksr_load_module($2, NULL)!=0) { ++ yyerror("failed to load module"); ++ } ++ } ++ | LOADMODULE LPAREN STRING RPAREN { ++ LM_DBG("loading module %s\n", $3); ++ if (ksr_load_module($3, NULL)!=0) { ++ yyerror("failed to load module"); ++ } ++ } ++ | LOADMODULE LPAREN STRING COMMA STRING RPAREN { ++ LM_DBG("loading module %s opts %s\n", $3, $5); ++ if (ksr_load_module($3, $5)!=0) { + yyerror("failed to load module"); + } + } + | LOADMODULE error { yyerror("string expected"); } + | LOADMODULEX STRING { + LM_DBG("loading module %s\n", $2); +- if (load_modulex($2)!=0) { ++ if (ksr_load_modulex($2, NULL)!=0) { ++ yyerror("failed to load module"); ++ } ++ } ++ | LOADMODULEX LPAREN STRING RPAREN { ++ LM_DBG("loading module %s\n", $3); ++ if (ksr_load_modulex($3, NULL)!=0) { ++ yyerror("failed to load module"); ++ } ++ } ++ | LOADMODULEX LPAREN STRING COMMA STRING RPAREN { ++ LM_DBG("loading module %s opts %s\n", $3, $5); ++ if (ksr_load_modulex($3, $5)!=0) { + yyerror("failed to load module"); + } + } diff --git a/net/kamailio/files/patch-src_core_sr__module.c b/net/kamailio/files/patch-src_core_sr__module.c new file mode 100644 index 000000000000..947d005ed59f --- /dev/null +++ b/net/kamailio/files/patch-src_core_sr__module.c @@ -0,0 +1,79 @@ +--- src/core/sr_module.c.orig (revision 43f764cae870b15a96b8ca88f1eb195d4ceb8455) ++++ src/core/sr_module.c +@@ -525,6 +525,7 @@ + return -1; + } + ++ + /** + * \brief load a sr module + * +@@ -537,9 +538,10 @@ + * absolute path (not starting with '/') then will try: + * \/mod_path + * @param mod_path path or module name ++ * @param opts options string + * @return 0 on success , <0 on error + */ +-int load_module(char* mod_path) ++int ksr_load_module(char* mod_path, char *opts) + { + void* handle; + char* error; +@@ -553,11 +555,16 @@ + str expref; + char exbuf[64]; + char* mdir; ++ char *p; + + #ifndef RTLD_NOW + /* for openbsd */ + #define RTLD_NOW DL_LAZY + #endif ++#ifndef RTLD_GLOBAL ++/* Unsupported! */ ++#define RTLD_GLOBAL 0 ++#endif + + if(ksr_locate_module(mod_path, &path)<0) { + return -1; +@@ -567,6 +574,17 @@ + + retries=2; + dlflags=RTLD_NOW; ++ ++ if(opts!=NULL) { ++ for(p=opts; *p!='\0'; p++) { ++ if(*p=='G' || *p=='g') { ++ dlflags |= RTLD_GLOBAL; ++ } else { ++ LM_INFO("unknown option: %c\n", *p); ++ } ++ } ++ } ++ + reload: + handle=dlopen(path, dlflags); /* resolve all symbols now */ + if (handle==0){ +@@ -653,10 +671,11 @@ + return -1; + } + ++ + /** + * + */ +-int load_modulex(char* mod_path) ++int ksr_load_modulex(char* mod_path, char *opts) + { + str seval; + str sfmt; +@@ -679,7 +698,7 @@ + } + } + +- return load_module(emod); ++ return ksr_load_module(emod, opts); + } + + /** diff --git a/net/kamailio/files/patch-src_core_sr__module.h b/net/kamailio/files/patch-src_core_sr__module.h new file mode 100644 index 000000000000..af0f3077c090 --- /dev/null +++ b/net/kamailio/files/patch-src_core_sr__module.h @@ -0,0 +1,13 @@ +--- src/core/sr_module.h.orig (revision 43f764cae870b15a96b8ca88f1eb195d4ceb8455) ++++ src/core/sr_module.h +@@ -336,8 +336,8 @@ + extern int mod_response_cbk_no; /**< size of reponse callbacks array */ + + int register_builtin_modules(void); +-int load_module(char* path); +-int load_modulex(char* path); ++int ksr_load_module(char* path, char* opts); ++int ksr_load_modulex(char* path, char* opts); + ksr_cmd_export_t* find_export_record(char* name, int param_no, int flags); + cmd_function find_export(char* name, int param_no, int flags); + cmd_function find_mod_export(char* mod, char* name, int param_no, int flags); diff --git a/net/kamailio/files/patch-src_main.c b/net/kamailio/files/patch-src_main.c new file mode 100644 index 000000000000..d7c078af955b --- /dev/null +++ b/net/kamailio/files/patch-src_main.c @@ -0,0 +1,11 @@ +--- src/main.c.orig (revision 43f764cae870b15a96b8ca88f1eb195d4ceb8455) ++++ src/main.c +@@ -2446,7 +2446,7 @@ + fprintf(stderr, "bad load module parameter\n"); + goto error; + } +- if (load_module(optarg)!=0) { ++ if (ksr_load_module(optarg, NULL)!=0) { + LM_ERR("failed to load the module: %s\n", optarg); + goto error; + } diff --git a/net/kamailio/pkg-message b/net/kamailio/pkg-message new file mode 100644 index 000000000000..8365ba4ccd0c --- /dev/null +++ b/net/kamailio/pkg-message @@ -0,0 +1,14 @@ +[ +{ + type: install + message: <