From 03cb03eacdc26a069116dc5d2a96ecbded395e34 Mon Sep 17 00:00:00 2001 From: Victor Seva Date: Fri, 6 Dec 2013 12:27:26 +0100 Subject: [PATCH] Imported Upstream version 4.1.0 --- ChangeLog | 16075 ++++++---------- Makefile | 45 + Makefile.defs | 103 +- Makefile.groups | 39 +- README | 23 +- action.c | 31 +- action.h | 3 + autover.h | 4 +- cfg.lex | 89 +- cfg.y | 237 +- cfg/cfg.h | 31 +- cfg_core.c | 15 +- cfg_core.h | 1 + config.h | 4 + core_cmd.c | 139 +- counters.c | 10 +- counters.h | 1 + data_lump.h | 2 +- dns_cache.c | 209 +- dns_func.c | 55 + dns_func.h | 55 + doc/cfg_list/Makefile | 16 +- doc/cfg_list/cfg_core.txt | 35 +- doc/cfg_list/cfg_registrar.txt | 27 +- doc/cfg_list/cfg_tcp.txt | 53 +- doc/cfg_list/cfg_tm.txt | 71 +- doc/counter_list/Makefile | 2 +- doc/rpc_list/Makefile | 49 +- .../{rpc_dispatcher_s.xml => rpc_app_lua.xml} | 12 +- doc/rpc_list/docbook/rpc_carrierroute.xml | 19 + .../docbook/{rpc_cpl-c.xml => rpc_cnxcc.xml} | 16 +- doc/rpc_list/docbook/rpc_core.xml | 26 +- .../{rpc_presence_b2b.xml => rpc_corex.xml} | 12 +- doc/rpc_list/docbook/rpc_db_flatstore.xml | 4 +- doc/rpc_list/docbook/rpc_db_text.xml | 19 + doc/rpc_list/docbook/rpc_debugger.xml | 18 +- .../{rpc_usrloc_k.xml => rpc_dialog_ng.xml} | 8 +- doc/rpc_list/docbook/rpc_dialplan.xml | 2 +- doc/rpc_list/docbook/rpc_domain.xml | 4 +- doc/rpc_list/docbook/rpc_drouting.xml | 19 + doc/rpc_list/docbook/rpc_htable.xml | 56 + doc/rpc_list/docbook/rpc_ims_usrloc_pcscf.xml | 19 + doc/rpc_list/docbook/rpc_ims_usrloc_scscf.xml | 27 + doc/rpc_list/docbook/rpc_lcr.xml | 8 + doc/rpc_list/docbook/rpc_list.xml | 47 +- doc/rpc_list/docbook/rpc_msrp.xml | 19 + doc/rpc_list/docbook/rpc_mtree.xml | 27 + doc/rpc_list/docbook/rpc_pdt.xml | 15 +- doc/rpc_list/docbook/rpc_permissions.xml | 68 + doc/rpc_list/docbook/rpc_pike.xml | 2 +- doc/rpc_list/docbook/rpc_pipelimit.xml | 65 + doc/rpc_list/docbook/rpc_prefix_route.xml | 4 +- doc/rpc_list/docbook/rpc_presence.xml | 20 + doc/rpc_list/docbook/rpc_pv.xml | 27 + doc/rpc_list/docbook/rpc_sca.xml | 100 + doc/rpc_list/docbook/rpc_sctp.xml | 33 + doc/rpc_list/docbook/rpc_sipcapture.xml | 19 + doc/rpc_list/docbook/rpc_siptrace.xml | 20 + doc/rpc_list/docbook/rpc_sl.xml | 2 +- doc/rpc_list/docbook/rpc_tls.xml | 8 +- doc/rpc_list/docbook/rpc_tm.xml | 17 +- .../{rpc_domain_s.xml => rpc_uid_domain.xml} | 4 +- .../{rpc_gflags.xml => rpc_uid_gflags.xml} | 4 +- doc/rpc_list/docbook/rpc_usrloc.xml | 67 + doc/rpc_list/docbook/rpc_usrloc_s.xml | 77 - doc/rpc_list/docbook/rpc_xhttp_pi.xml | 19 + doc/rpc_list/rpc_app_lua.txt | 12 + doc/rpc_list/rpc_carrierroute.txt | 9 + doc/rpc_list/rpc_cnxcc.txt | 15 + doc/rpc_list/rpc_core.txt | 68 +- doc/rpc_list/rpc_corex.txt | 12 + doc/rpc_list/rpc_cpl-c.txt | 15 - doc/rpc_list/rpc_db_flatstore.txt | 4 +- doc/rpc_list/rpc_db_text.txt | 9 + doc/rpc_list/rpc_debugger.txt | 8 +- doc/rpc_list/rpc_dialog_ng.txt | 9 + doc/rpc_list/rpc_dialplan.txt | 2 +- doc/rpc_list/rpc_dispatcher_s.txt | 12 - doc/rpc_list/rpc_domain.txt | 4 +- doc/rpc_list/rpc_drouting.txt | 9 + doc/rpc_list/rpc_htable.txt | 21 + doc/rpc_list/rpc_ims_usrloc_pcscf.txt | 9 + doc/rpc_list/rpc_ims_usrloc_scscf.txt | 12 + doc/rpc_list/rpc_lcr.txt | 3 + doc/rpc_list/rpc_msrp.txt | 9 + doc/rpc_list/rpc_mtree.txt | 12 + doc/rpc_list/rpc_pdt.txt | 12 +- doc/rpc_list/rpc_permissions.txt | 28 + doc/rpc_list/rpc_pike.txt | 2 +- doc/rpc_list/rpc_pipelimit.txt | 27 + doc/rpc_list/rpc_prefix_route.txt | 4 +- doc/rpc_list/rpc_presence.txt | 10 + doc/rpc_list/rpc_presence_b2b.txt | 12 - doc/rpc_list/rpc_pv.txt | 12 + doc/rpc_list/rpc_sca.txt | 40 + doc/rpc_list/rpc_sctp.txt | 17 + doc/rpc_list/rpc_sipcapture.txt | 9 + doc/rpc_list/rpc_siptrace.txt | 10 + doc/rpc_list/rpc_sl.txt | 2 +- doc/rpc_list/rpc_tls.txt | 8 +- doc/rpc_list/rpc_tm.txt | 17 +- .../{rpc_domain_s.txt => rpc_uid_domain.txt} | 4 +- .../{rpc_gflags.txt => rpc_uid_gflags.txt} | 4 +- doc/rpc_list/rpc_usrloc.txt | 27 + doc/rpc_list/rpc_usrloc_s.txt | 32 - .../{rpc_usrloc_k.txt => rpc_xhttp_pi.txt} | 6 +- doc/select_list/Makefile | 2 +- doc/stylesheets/dbschema_k/xsl/mysql.xsl | 6 +- dprint.c | 19 +- dprint.h | 15 +- dset.c | 343 +- dset.h | 28 +- dst_blacklist.c | 22 - etc/kamailio-basic.cfg | 612 + etc/kamailio.cfg | 42 +- events.c | 59 + events.h | 12 +- examples/icscf/icscf.cfg | 12 +- examples/icscf/kamailio.cfg | 85 +- examples/ims_dnszone/kamailio-ims.org.dnszone | 34 + examples/outbound/edge.cfg | 172 + examples/outbound/edge_websocket.cfg | 293 + examples/outbound/registrar.cfg | 202 + examples/pcscf/kamailio.cfg | 43 +- examples/pcscf/pcscf.cfg | 23 +- examples/scscf/kamailio.cfg | 166 +- examples/scscf/scscf.cfg | 13 +- examples/websocket.cfg | 7 +- forward.c | 46 +- forward.h | 4 +- globals.h | 11 +- ip_addr.c | 13 +- ip_addr.h | 36 - lib/ims/ims_getters.c | 103 + lib/ims/ims_getters.h | 8 + lib/kcore/parse_pai.c | 77 - lib/kcore/parse_ppi.c | 119 - lib/kcore/parse_supported.c | 190 - lib/kcore/parse_supported.h | 94 - lib/kcore/statistics.c | 82 +- lib/kcore/statistics.h | 10 +- lib/srdb1/schema/acc_cdrs.xml | 57 + lib/srdb1/schema/dbaliases.xml | 11 +- lib/srdb1/schema/entities.xml | 2 +- lib/srdb1/schema/kamailio-acc.xml | 1 + lib/srdb1/schema/kamailio-mohqueue.xml | 14 + lib/srdb1/schema/kamailio-rtpproxy.xml | 12 + lib/srdb1/schema/mohqcalls.xml | 75 + lib/srdb1/schema/mohqueues.xml | 75 + lib/srdb1/schema/rtpproxy.xml | 69 + lvalue.c | 16 +- lvalue.h | 5 +- main.c | 55 +- mem/f_malloc.c | 2 + mem/q_malloc.c | 2 + modules/acc/README | 235 +- modules/acc/acc.c | 107 +- modules/acc/acc.h | 1 + modules/acc/acc_api.h | 4 +- modules/acc/acc_cdr.c | 113 +- modules/acc/acc_logic.c | 3 +- modules/acc/acc_mod.c | 28 +- modules/acc/acc_mod.h | 7 + modules/acc/doc/acc_admin.xml | 354 +- modules/acc_radius/acc_radius_mod.c | 6 +- modules/alias_db/README | 2 +- modules/alias_db/alookup.c | 2 +- modules/app_java/BUILDING_JAR.TXT | 54 + modules/app_java/Makefile | 35 + modules/app_java/QUICKSTART.TXT | 25 + modules/app_java/README | 573 + modules/app_java/README-draft | 837 + modules/app_java/doc/Makefile | 4 + modules/app_java/doc/app_java.xml | 35 + modules/app_java/doc/app_java_admin.xml | 648 + modules/app_java/global.h | 48 + modules/app_java/java_iface.c | 284 + modules/app_java/java_iface.h | 44 + modules/app_java/java_mod.c | 260 + modules/app_java/java_mod.h | 30 + modules/app_java/java_msgobj.c | 324 + modules/app_java/java_msgobj.h | 34 + modules/app_java/java_native_methods.c | 1223 ++ modules/app_java/java_native_methods.h | 86 + modules/app_java/java_sig_parser.c | 439 + modules/app_java/java_sig_parser.h | 50 + modules/app_java/java_support.c | 220 + modules/app_java/java_support.h | 38 + .../java-untested/Kamailio.java | 388 + .../java-untested/WrappedMethods.java | 87 + .../java-untested/build.xml | 46 + .../siprouter_src/CoreMethods.java | 34 + .../java-untested/siprouter_src/IPPair.java | 15 + .../siprouter_src/NativeInterface.java | 46 + .../siprouter_src/NativeMethods.java | 22 + .../java-untested/siprouter_src/SipMsg.java | 43 + .../kamailio_java_folder/java/Kamailio.java | 130 + .../kamailio_java_folder/java/build.xml | 46 + .../java/siprouter_src/IPPair.java | 15 + .../java/siprouter_src/NativeInterface.java | 46 + .../java/siprouter_src/NativeMethods.java | 23 + .../java/siprouter_src/SipMsg.java | 43 + modules/app_java/utils.c | 89 + modules/app_java/utils.h | 34 + modules/app_lua/README | 78 +- modules/app_lua/app_lua_api.c | 248 +- modules/app_lua/app_lua_api.h | 22 + modules/app_lua/app_lua_mod.c | 94 +- modules/app_lua/app_lua_sr.c | 281 +- modules/app_lua/doc/app_lua_admin.xml | 89 +- modules/app_perl/README | 176 +- modules/app_perl/app_perl_mod.c | 205 +- modules/app_perl/doc/app_perl_admin.xml | 79 +- modules/app_perl/perlfunc.c | 3 + modules/app_perl/perlfunc.h | 2 + modules/auth/README | 686 +- modules/auth/doc/auth_functions.xml | 18 +- modules/auth/doc/auth_params.xml | 54 +- modules/auth_db/README | 12 +- modules/auth_db/doc/auth_db_admin.xml | 20 +- modules/auth_ephemeral/Makefile | 41 + modules/auth_ephemeral/README | 497 + modules/auth_ephemeral/autheph_mod.c | 449 + modules/auth_ephemeral/autheph_mod.h | 50 + modules/auth_ephemeral/authorize.c | 479 + modules/auth_ephemeral/authorize.h | 37 + modules/auth_ephemeral/checks.c | 282 + modules/auth_ephemeral/checks.h | 40 + modules/auth_ephemeral/doc/Makefile | 4 + modules/auth_ephemeral/doc/auth_ephemeral.xml | 30 + .../doc/auth_ephemeral_admin.xml | 574 + modules/avp/doc/avp_functions.xml | 48 +- modules/avp/doc/avp_params.xml | 2 +- modules/avpops/README | 68 +- modules/avpops/avpops.c | 63 +- modules/avpops/avpops_impl.c | 229 +- modules/avpops/avpops_impl.h | 2 +- modules/avpops/avpops_parse.c | 28 +- modules/avpops/doc/avpops_admin.xml | 70 +- modules/carrierroute/README | 7 +- modules/carrierroute/carrierroute.c | 44 +- modules/carrierroute/carrierroute.h | 3 + modules/carrierroute/cr_func.c | 121 +- .../carrierroute/doc/carrierroute_admin.xml | 8 +- modules/cdp/acctstatemachine.c | 254 + modules/cdp/acctstatemachine.h | 19 + modules/cdp/authstatemachine.c | 66 +- modules/cdp/authstatemachine.h | 2 - modules/cdp/cdp_load.c | 11 +- modules/cdp/cdp_load.h | 6 + modules/cdp/common.c | 52 + modules/cdp/common.h | 19 + modules/cdp/configexample/ConfigExample.xml | 2 +- modules/cdp/diameter_peer.c | 11 +- modules/cdp/mod.c | 9 + modules/cdp/peerstatemachine.c | 20 + modules/cdp/receiver.c | 3 + modules/cdp/session.c | 189 +- modules/cdp/session.h | 112 +- modules/cdp/tcp_accept.c | 4 + modules/cdp/timer.c | 3 + modules/cdp/worker.c | 3 + modules/cfgutils/README | 103 +- modules/cfgutils/cfgutils.c | 36 +- modules/cfgutils/doc/cfgutils.xml | 7 + modules/cfgutils/doc/cfgutils_admin.xml | 107 +- modules/cnxcc/Makefile | 17 + modules/cnxcc/README | 362 + modules/cnxcc/cnxcc.c | 63 + modules/cnxcc/cnxcc.h | 39 + modules/cnxcc/cnxcc_check.c | 193 + modules/cnxcc/cnxcc_check.h | 33 + modules/cnxcc/cnxcc_mod.c | 1960 ++ modules/cnxcc/cnxcc_mod.h | 156 + modules/cnxcc/cnxcc_rpc.c | 286 + modules/cnxcc/cnxcc_rpc.h | 33 + modules/cnxcc/cnxcc_select.c | 67 + modules/cnxcc/cnxcc_select.h | 32 + modules/cnxcc/cnxcc_sip_msg_faker.c | 71 + modules/cnxcc/cnxcc_sip_msg_faker.h | 29 + modules/cnxcc/doc/Makefile | 4 + modules/cnxcc/doc/cnxcc.xml | 36 + modules/cnxcc/doc/cnxcc_admin.xml | 456 + modules/cnxcc/example/kamailio-cnxcc.cfg | 1092 ++ modules/corex/README | 10 +- modules/corex/corex_lib.c | 2 +- modules/corex/corex_mod.c | 10 +- modules/corex/corex_var.c | 83 + modules/corex/corex_var.h | 28 + modules/cpl-c/cpl_sig.c | 2 +- modules/db_cluster/README | 21 +- modules/db_cluster/doc/db_cluster_admin.xml | 25 +- modules/db_mysql/README | 28 +- modules/db_mysql/doc/db_mysql_admin.xml | 20 + modules/db_mysql/km_db_mysql.c | 4 + modules/db_mysql/km_db_mysql.h | 1 + modules/db_mysql/km_dbase.c | 203 +- modules/db_mysql/km_dbase.h | 16 + modules/db_mysql/km_my_con.h | 8 +- modules/db_mysql/mysql_mod.c | 8 +- modules/db_sqlite/Makefile | 7 +- modules/db_text/README | 2 +- modules/db_unixodbc/{con.c => connection.c} | 2 +- modules/db_unixodbc/{con.h => connection.h} | 0 modules/db_unixodbc/dbase.c | 2 +- modules/db_unixodbc/list.h | 2 +- modules/db_unixodbc/res.c | 2 +- modules/db_unixodbc/row.c | 2 +- modules/db_unixodbc/val.c | 2 +- modules/debugger/Makefile | 2 + modules/debugger/README | 183 +- modules/debugger/debugger_api.c | 913 +- modules/debugger/debugger_api.h | 24 + modules/debugger/debugger_config.c | 48 + modules/debugger/debugger_config.h | 46 + modules/debugger/debugger_mod.c | 154 +- modules/debugger/doc/debugger_admin.xml | 282 +- modules/dialog/dialog.c | 62 +- modules/dialog/dlg_hash.c | 49 +- modules/dialog/dlg_hash.h | 3 + modules/dialog/dlg_req_within.c | 57 +- modules/dialog/dlg_transfer.c | 13 +- modules/dialog/dlg_transfer.h | 2 +- modules/dialog_ng/dialog.c | 78 + modules/dialog_ng/dlg_handlers.c | 36 +- modules/dialog_ng/dlg_handlers.h | 8 +- modules/dialog_ng/dlg_hash.c | 12 +- modules/dialog_ng/dlg_load.h | 19 +- modules/dialog_ng/dlg_req_within.c | 18 + modules/dialog_ng/dlg_req_within.h | 1 + modules/dialog_ng/doc/dialog_ng.xml | 4 +- modules/dialog_ng/doc/dialog_ng_admin.xml | 46 +- modules/dialog_ng/doc/dialog_ng_devel.xml | 29 + modules/dialplan/dialplan.c | 72 +- modules/dialplan/dialplan.h | 2 +- modules/dispatcher/README | 176 +- modules/dispatcher/dispatch.c | 46 +- modules/dispatcher/dispatch.h | 3 + modules/dispatcher/dispatcher.c | 30 +- modules/dispatcher/doc/dispatcher.xml | 2 +- modules/dispatcher/doc/dispatcher_admin.xml | 107 +- modules/dmq/README | 217 +- modules/dmq/bind_dmq.h | 19 +- modules/dmq/dmq.c | 17 +- modules/dmq/dmq.h | 18 - modules/dmq/dmq_funcs.c | 48 +- modules/dmq/dmq_funcs.h | 6 +- modules/dmq/dmqnode.c | 22 +- modules/dmq/doc/dmq.xml | 27 +- modules/dmq/doc/dmq_admin.xml | 156 +- modules/dmq/doc/dmq_devel.xml | 91 +- modules/dmq/message.c | 14 +- modules/dmq/message.h | 2 +- modules/dmq/notification_peer.c | 11 +- modules/dmq/notification_peer.h | 2 + modules/dmq/worker.c | 34 +- modules/dmq/worker.h | 1 + modules/dnssec/Makefile | 17 + modules/dnssec/README | 124 + modules/dnssec/dnssec_func.c | 150 + modules/dnssec/dnssec_func.h | 54 + modules/dnssec/dnssec_mod.c | 135 + modules/dnssec/doc/Makefile | 3 + modules/dnssec/doc/dnssec.xml | 33 + modules/dnssec/doc/dnssec_admin.xml | 129 + modules/domain/README | 2 +- modules/domain/domain.c | 2 +- modules/domainpolicy/README | 2 +- modules/drouting/README | 169 +- modules/drouting/doc/drouting_admin.xml | 15 + modules/drouting/drouting.c | 40 +- modules/enum/enum.c | 12 +- modules/enum/enum.h | 5 +- modules/exec/exec.c | 2 +- modules/group/README | 11 +- modules/group/doc/group_admin.xml | 30 +- modules/gzcompress/Makefile | 25 + modules/gzcompress/README | 220 + modules/gzcompress/doc/Makefile | 4 + modules/gzcompress/doc/gzcompress.xml | 37 + modules/gzcompress/doc/gzcompress_admin.xml | 229 + modules/gzcompress/gzcompress_mod.c | 396 + modules/htable/Makefile | 1 + modules/htable/README | 203 +- modules/htable/api.c | 20 + modules/htable/doc/htable_admin.xml | 198 +- modules/htable/ht_api.c | 18 +- modules/htable/ht_api.h | 6 +- modules/htable/ht_dmq.c | 277 + modules/htable/ht_dmq.h | 48 + modules/htable/ht_var.c | 18 + modules/htable/htable.c | 355 +- modules/imc/README | 8 +- modules/ims_auth/authims_mod.c | 55 +- modules/ims_auth/authorize.c | 78 +- modules/ims_auth/authorize.h | 4 +- modules/ims_auth/cxdx_avp.c | 2 +- modules/ims_auth/cxdx_mar.c | 3 +- modules/ims_auth/cxdx_mar.h | 6 - modules/ims_auth/doc/ims_auth.xml | 11 + modules/ims_auth/doc/ims_auth_admin.xml | 149 +- modules/ims_charging/Makefile | 22 + modules/ims_charging/README | 714 + modules/ims_charging/Ro_data.c | 289 + modules/ims_charging/Ro_data.h | 408 + modules/ims_charging/ccr.c | 328 + modules/ims_charging/ccr.h | 10 + modules/ims_charging/config.h | 12 + modules/ims_charging/dialog.c | 161 + modules/ims_charging/dialog.h | 14 + modules/ims_charging/diameter_ro.c | 40 + modules/ims_charging/diameter_ro.h | 11 + modules/ims_charging/doc/Makefile | 4 + modules/ims_charging/doc/images/charging1.png | Bin 0 -> 8503 bytes modules/ims_charging/doc/images/charging2.png | Bin 0 -> 80472 bytes modules/ims_charging/doc/ims_charging.xml | 50 + .../ims_charging/doc/ims_charging_admin.xml | 651 + modules/ims_charging/ims_ro.c | 1209 ++ modules/ims_charging/ims_ro.h | 23 + modules/ims_charging/mod.c | 358 + modules/ims_charging/mod.h | 50 + modules/ims_charging/ro_fixup.c | 19 + modules/ims_charging/ro_fixup.h | 14 + modules/ims_charging/ro_session_hash.c | 284 + modules/ims_charging/ro_session_hash.h | 195 + modules/ims_charging/ro_timer.c | 466 + modules/ims_charging/ro_timer.h | 93 + modules/ims_charging/stats.c | 45 + modules/ims_charging/stats.h | 29 + modules/ims_icscf/cxdx_lir.h | 5 - modules/ims_icscf/cxdx_uar.h | 6 - modules/ims_icscf/db.c | 2 +- modules/ims_icscf/doc/ims_icscf_admin.xml | 107 +- modules/ims_icscf/location.c | 23 +- modules/ims_icscf/location.h | 2 +- modules/ims_icscf/mod.c | 59 +- modules/ims_icscf/registration.c | 28 +- modules/ims_icscf/registration.h | 2 +- modules/ims_icscf/scscf_list.c | 2 +- modules/ims_isc/doc/ims_isc_admin.xml | 20 + modules/ims_isc/isc.c | 2 +- modules/ims_isc/mark.c | 72 +- modules/ims_isc/mark.h | 1 + modules/ims_isc/mod.c | 2 + modules/ims_qos/cdpeventprocessor.c | 65 +- modules/ims_qos/doc/ims_qos_admin.xml | 48 +- modules/ims_qos/mod.c | 518 +- modules/ims_qos/mod.h | 11 - modules/ims_qos/rx_aar.c | 176 +- modules/ims_qos/rx_aar.h | 26 +- modules/ims_qos/rx_authdata.c | 2 + modules/ims_qos/rx_authdata.h | 1 + modules/ims_qos/rx_avp.c | 122 +- modules/ims_qos/rx_str.c | 12 +- modules/ims_registrar_pcscf/save.c | 50 +- modules/ims_registrar_pcscf/service_routes.c | 46 +- modules/ims_registrar_scscf/cxdx_sar.c | 7 +- modules/ims_registrar_scscf/cxdx_sar.h | 8 - modules/ims_registrar_scscf/doc/Makefile | 4 + .../doc/ims_registrar_scscf.xml | 58 + .../doc/ims_registrar_scscf_admin.xml | 727 + .../doc/ims_registrar_scscf_faq.xml | 68 + modules/ims_registrar_scscf/reg_mod.c | 46 +- modules/ims_registrar_scscf/reg_mod.h | 1 - modules/ims_registrar_scscf/reply.c | 10 +- modules/ims_registrar_scscf/save.c | 59 +- modules/ims_registrar_scscf/save.h | 4 +- modules/ims_usrloc_pcscf/udomain.c | 61 +- modules/ims_usrloc_pcscf/udomain.h | 1 + modules/ims_usrloc_pcscf/usrloc.c | 1 + modules/ims_usrloc_pcscf/usrloc.h | 3 + modules/ipops/README | 91 +- modules/ipops/doc/ipops_admin.xml | 173 +- modules/ipops/ipops_mod.c | 177 +- modules/ipops/ipops_pv.c | 430 + modules/ipops/ipops_pv.h | 39 + modules/iptrtpproxy/doc/iptrtpproxy_admin.xml | 2 +- modules/kex/README | 8 +- modules/kex/doc/kex_admin.xml | 58 +- modules/lcr/lcr_mod.c | 58 +- modules/mangler/contact_ops.c | 2 +- modules/matrix/README | 6 +- modules/mediaproxy/README | 16 +- modules/memcached/Makefile | 16 +- modules/memcached/README | 99 +- modules/memcached/doc/memcached_admin.xml | 74 +- modules/memcached/mcd_var.c | 259 +- modules/memcached/mcd_var.h | 7 +- modules/memcached/memcached.c | 273 +- modules/memcached/memcached.h | 22 +- modules/mi_datagram/datagram_fnc.c | 2 - modules/mi_xmlrpc/Makefile | 4 +- modules/mi_xmlrpc/abyss_data.h | 2 + modules/mi_xmlrpc/abyss_response.c | 2 + modules/mi_xmlrpc/abyss_socket_unix.h | 3 + modules/mi_xmlrpc/abyss_xmlrpc_server.c | 9 +- modules/misc_radius/README | 84 +- modules/misc_radius/doc/misc_radius_admin.xml | 45 + modules/misc_radius/functions.c | 966 +- modules/misc_radius/misc_radius.c | 24 +- modules/misc_radius/misc_radius.h | 1 + modules/mohqueue/Makefile | 18 + modules/mohqueue/NOTES | 6 + modules/mohqueue/README | 406 + modules/mohqueue/doc/Makefile | 4 + modules/mohqueue/doc/mohqueue.xml | 31 + modules/mohqueue/doc/mohqueue_admin.xml | 510 + modules/mohqueue/mohq.c | 442 + modules/mohqueue/mohq.h | 132 + modules/mohqueue/mohq_common.h | 104 + modules/mohqueue/mohq_db.c | 626 + modules/mohqueue/mohq_db.h | 66 + modules/mohqueue/mohq_funcs.c | 2665 +++ modules/mohqueue/mohq_funcs.h | 40 + modules/mohqueue/mohq_locks.c | 199 + modules/mohqueue/mohq_locks.h | 49 + modules/mqueue/README | 8 +- modules/msilo/README | 2 +- modules/msrp/README | 25 +- modules/msrp/doc/msrp_admin.xml | 11 + modules/msrp/msrp_cmap.c | 8 +- modules/msrp/msrp_mod.c | 11 + modules/msrp/msrp_vars.c | 5 +- modules/mtree/README | 33 +- modules/mtree/doc/mtree_admin.xml | 21 +- modules/mtree/mtree.c | 25 +- modules/mtree/mtree.h | 5 +- modules/mtree/mtree_mod.c | 91 +- modules/nathelper/README | 123 +- modules/nathelper/doc/nathelper_admin.xml | 72 + modules/nathelper/nathelper.c | 162 +- modules/ndb_redis/doc/ndb_redis_admin.xml | 6 +- modules/ndb_redis/redis_client.c | 10 +- modules/outbound/README | 267 +- modules/outbound/api.h | 4 +- modules/outbound/config.c | 43 + modules/outbound/config.h | 42 + modules/outbound/doc/outbound.xml | 2 +- modules/outbound/doc/outbound_admin.xml | 264 +- modules/outbound/ob_mod.c | 103 +- modules/p_usrloc/README | 10 +- modules/path/Makefile | 3 + modules/path/README | 127 +- modules/path/doc/path.xml | 7 + modules/path/doc/path_admin.xml | 74 +- modules/path/path.c | 194 +- modules/path/path_mod.c | 10 +- modules/pdb/pdb.c | 5 +- modules/pdt/README | 2 +- modules/permissions/README | 161 +- modules/permissions/address.c | 198 +- modules/permissions/address.h | 8 + modules/permissions/doc/permissions_admin.xml | 38 +- modules/permissions/hash.c | 217 + modules/permissions/hash.h | 54 + modules/permissions/mi.c | 36 +- modules/permissions/mi.h | 4 + modules/permissions/permissions.c | 10 +- modules/permissions/trusted.c | 2 +- modules/pike/doc/pike_admin.xml | 12 +- modules/pike/pike.c | 3 + modules/pike/pike_funcs.c | 9 + modules/pike/pike_funcs.h | 1 + modules/pipelimit/README | 2 +- modules/pipelimit/doc/pipelimit_admin.xml | 50 +- modules/presence/README | 70 +- modules/presence/doc/presence_admin.xml | 19 + modules/presence/event_list.c | 2 +- modules/presence/hash.c | 2 +- modules/presence/presence.c | 41 + .../presence_conference/presence_conference.c | 2 +- modules/presence_dialoginfo/notify_body.c | 194 +- modules/presence_xml/add_events.c | 20 + modules/presence_xml/presence_xml.c | 2 + modules/pua/add_events.c | 8 + modules/pua/hash.h | 3 + modules/pua_dialoginfo/dialog_publish.c | 48 +- modules/pua_dialoginfo/pua_dialoginfo.c | 118 +- modules/pua_mi/mi_func.c | 4 +- modules/pua_reginfo/Makefile | 3 + modules/pua_reginfo/README | 80 +- modules/pua_reginfo/doc/pua_reginfo_admin.xml | 12 +- modules/pua_reginfo/notify.c | 36 +- modules/pua_reginfo/pua_reginfo.c | 13 + modules/pua_reginfo/pua_reginfo.h | 2 + modules/pua_usrloc/ul_publish.c | 4 +- modules/pv/README | 37 + modules/pv/doc/pv.xml | 4 + modules/pv/doc/pv_admin.xml | 34 + modules/pv/pv.c | 58 +- modules/pv/pv_branch.c | 22 +- modules/pv/pv_core.c | 303 +- modules/pv/pv_core.h | 14 + modules/pv/pv_shv.c | 147 + modules/pv/pv_shv.h | 3 + modules/pv/pv_trans.c | 243 +- modules/pv/pv_trans.h | 4 +- modules/pv/pv_xavp.c | 40 + modules/pv/pv_xavp.h | 6 - modules/ratelimit/README | 22 +- modules/registrar/README | 138 +- modules/registrar/api.c | 15 + modules/registrar/api.h | 4 + modules/registrar/doc/registrar_admin.xml | 127 +- modules/registrar/lookup.c | 25 +- modules/registrar/path.c | 19 +- modules/registrar/reg_mod.c | 41 +- modules/registrar/reg_mod.h | 5 +- modules/registrar/reply.c | 57 +- modules/registrar/rerrno.h | 4 +- modules/registrar/save.c | 300 +- modules/registrar/save.h | 4 +- modules/rls/notify.c | 10 +- modules/rls/subscribe.c | 4 +- modules/rr/README | 25 +- modules/rr/doc/rr_admin.xml | 9 +- modules/rr/loose.c | 167 +- modules/rr/record.c | 25 +- modules/rr/rr_mod.c | 2 +- modules/rtpproxy-ng/Makefile | 19 + modules/rtpproxy-ng/README | 652 + modules/rtpproxy-ng/bencode.c | 703 + modules/rtpproxy-ng/bencode.h | 530 + modules/rtpproxy-ng/doc/Makefile | 4 + modules/rtpproxy-ng/doc/rtpproxy-ng.xml | 103 + modules/rtpproxy-ng/doc/rtpproxy_admin.xml | 823 + modules/rtpproxy-ng/doc/rtpproxy_faq.xml | 79 + modules/rtpproxy-ng/rtpproxy.c | 1941 ++ modules/rtpproxy-ng/rtpproxy.h | 64 + modules/rtpproxy-ng/rtpproxy_funcs.c | 434 + modules/rtpproxy-ng/rtpproxy_funcs.h | 40 + modules/rtpproxy/Makefile | 1 + modules/rtpproxy/README | 546 +- modules/rtpproxy/doc/rtpproxy_admin.xml | 54 +- modules/rtpproxy/rtpproxy.c | 318 +- modules/rtpproxy/rtpproxy.h | 9 + modules/rtpproxy/rtpproxy_db.c | 169 + modules/sca/README | 4 +- modules/sca/sca_call_info.h | 5 +- modules/sca/sca_hash.c | 2 +- modules/sctp/Makefile | 16 + modules/sctp/README | 502 + modules/sctp/doc/Makefile | 4 + modules/sctp/doc/sctp.xml | 34 + modules/sctp/doc/sctp_admin.xml | 622 + sctp_ev.h => modules/sctp/sctp_ev.h | 2 +- modules/sctp/sctp_mod.c | 145 + sctp_options.c => modules/sctp/sctp_options.c | 8 +- sctp_options.h => modules/sctp/sctp_options.h | 0 modules/sctp/sctp_rpc.c | 175 + modules/sctp/sctp_rpc.h | 24 + sctp_server.c => modules/sctp/sctp_server.c | 32 +- sctp_server.h => modules/sctp/sctp_server.h | 2 +- .../sctp/sctp_sockopts.h | 0 sctp_stats.c => modules/sctp/sctp_stats.c | 3 +- sctp_stats.h => modules/sctp/sctp_stats.h | 2 +- modules/sdpops/README | 134 +- modules/sdpops/doc/sdpops_admin.xml | 68 + modules/sdpops/sdpops_mod.c | 296 + modules/seas/README | 28 +- modules/seas/seas_action.c | 5 +- modules/sipcapture/README | 4 +- modules/sipcapture/doc/sipcapture_admin.xml | 56 +- modules/sipcapture/hep.c | 14 +- modules/sipcapture/hep.h | 6 - modules/sipcapture/sipcapture.c | 687 +- modules/sipt/Makefile | 18 + modules/sipt/README | 246 + modules/sipt/doc/Makefile | 4 + modules/sipt/doc/sipt.xml | 31 + modules/sipt/doc/sipt_admin.xml | 257 + modules/sipt/sdp_mangle.c | 73 + modules/sipt/sdp_mangle.h | 41 + modules/sipt/sipt.c | 384 + modules/sipt/ss7.h | 188 + modules/sipt/ss7_parser.c | 441 + modules/siptrace/README | 6 +- modules/siptrace/siptrace.c | 14 +- modules/siputils/README | 157 +- modules/siputils/doc/siputils_admin.xml | 125 +- modules/siputils/sipops.c | 88 + modules/siputils/sipops.h | 2 + modules/siputils/siputils.c | 72 + modules/sl/README | 102 +- modules/sl/doc/sl_functions.xml | 5 +- modules/sl/sl.c | 11 +- modules/sl/sl_funcs.c | 26 +- modules/sl/sl_funcs.h | 2 + modules/snmpstats/README | 33 +- modules/snmpstats/doc/snmpstats.xml | 11 + modules/snmpstats/doc/snmpstats_admin.xml | 31 +- modules/snmpstats/kamailioNet.c | 1354 ++ modules/snmpstats/kamailioNet.h | 78 + modules/snmpstats/kamailioNetConfig.c | 446 + modules/snmpstats/kamailioNetConfig.h | 23 + modules/snmpstats/kamailioServer.c | 481 + modules/snmpstats/kamailioServer.h | 55 + modules/snmpstats/mibs/KAMAILIO-MIB | 706 +- .../snmpstats/mibs/KAMAILIO-SIP-COMMON-MIB | 11 +- modules/snmpstats/mibs/KAMAILIO-TC | 24 +- modules/snmpstats/snmpSIPCommonObjects.c | 6 + .../snmpstats/snmpSIPMethodSupportedTable.c | 20 +- modules/snmpstats/snmpSIPPortTable.c | 102 +- modules/snmpstats/snmpSIPPortTable.h | 10 +- modules/snmpstats/snmpSIPServerObjects.c | 2 +- modules/snmpstats/snmpstats.c | 9 +- modules/snmpstats/snmpstats_globals.h | 10 +- modules/snmpstats/sub_agent.c | 12 + modules/snmpstats/utilities.c | 47 + modules/snmpstats/utilities.h | 10 + modules/sqlops/README | 8 +- modules/sst/README | 2 +- modules/sst/doc/sst_admin.xml | 15 +- modules/sst/sst_handlers.c | 6 +- modules/statistics/README | 3 +- modules/stun/Makefile | 13 + modules/stun/README | 72 + modules/stun/config.c | 45 + modules/stun/config.h | 44 + modules/stun/doc/Makefile | 4 + modules/stun/doc/stun.xml | 37 + modules/stun/doc/stun_admin.xml | 68 + ser_stun.c => modules/stun/kam_stun.c | 136 +- modules/stun/kam_stun.h | 147 + modules/stun/stun_mod.c | 74 + modules/textops/README | 552 +- modules/textops/doc/textops_admin.xml | 2 +- modules/textops/textops.c | 3 +- modules/textops/txt_var.c | 2 + modules/textopsx/README | 240 +- modules/textopsx/doc/functions.xml | 40 +- modules/textopsx/textopsx.c | 19 +- modules/timer/doc/timer.xml | 4 +- modules/tls/README | 552 +- modules/tls/doc/functions.xml | 2 +- modules/tls/doc/history.xml | 27 +- modules/tls/doc/params.xml | 91 +- modules/tls/doc/rpc.xml | 8 +- modules/tls/fixed_c_zlib.h | 3 +- modules/tls/sbufq.h | 4 +- modules/tls/tls_bio.c | 2 + modules/tls/tls_bio.h | 2 + modules/tls/tls_cfg.c | 3 + modules/tls/tls_cfg.h | 2 +- modules/tls/tls_config.c | 182 +- modules/tls/tls_config.h | 40 +- modules/tls/tls_ct_q.h | 2 + modules/tls/tls_ct_wrq.c | 2 + modules/tls/tls_ct_wrq.h | 2 + modules/tls/tls_domain.c | 4 +- modules/tls/tls_domain.h | 9 +- modules/tls/tls_dump_vf.c | 7 +- modules/tls/tls_dump_vf.h | 7 +- modules/tls/tls_init.c | 58 +- modules/tls/tls_init.h | 37 +- modules/tls/tls_locking.c | 10 +- modules/tls/tls_locking.h | 2 +- modules/tls/tls_mod.c | 49 +- modules/tls/tls_mod.h | 35 +- modules/tls/tls_rpc.c | 4 +- modules/tls/tls_rpc.h | 5 +- modules/tls/tls_select.c | 10 +- modules/tls/tls_select.h | 9 +- modules/tls/tls_server.c | 5 +- modules/tls/tls_server.h | 3 - modules/tls/tls_util.c | 33 +- modules/tls/tls_util.h | 39 +- modules/tls/tls_verify.c | 34 +- modules/tls/tls_verify.h | 37 +- modules/tm/README | 666 +- modules/tm/doc/api.xml | 2 +- modules/tm/doc/event_routes.xml | 40 + modules/tm/doc/functions.xml | 214 +- modules/tm/doc/params.xml | 51 + modules/tm/doc/tm.xml | 1 + modules/tm/h_table.c | 46 +- modules/tm/h_table.h | 37 +- modules/tm/lock.c | 36 +- modules/tm/lock.h | 1 + modules/tm/t_cancel.c | 2 +- modules/tm/t_funcs.c | 1 + modules/tm/t_fwd.c | 267 +- modules/tm/t_hooks.h | 6 +- modules/tm/t_lookup.c | 54 +- modules/tm/t_lookup.h | 3 + modules/tm/t_msgbuilder.c | 20 +- modules/tm/t_reply.c | 314 +- modules/tm/t_reply.h | 12 +- modules/tm/t_serial.c | 1200 +- modules/tm/t_serial.h | 2 +- modules/tm/t_suspend.c | 473 +- modules/tm/t_suspend.h | 3 + modules/tm/tm.c | 105 +- modules/tm/tm_load.c | 3 + modules/tm/tm_load.h | 3 + modules/tm/uac.c | 27 +- modules/tm/uac.h | 3 + modules/tmrec/README | 2 +- modules/tmx/README | 153 +- modules/tmx/doc/tmx_admin.xml | 3 + modules/tmx/t_var.c | 37 + modules/tmx/t_var.h | 2 + modules/tmx/tmx_mod.c | 8 + modules/uac/README | 1 + modules/uac/doc/uac_admin.xml | 65 +- modules/uac/uac_reg.c | 2 +- modules/uac/uac_send.c | 303 +- modules/uac_redirect/rd_funcs.c | 3 +- modules/uid_avp_db/uid_avp_db.c | 4 +- modules/uri_db/README | 2 +- modules/userblacklist/README | 2 +- modules/usrloc/README | 217 +- modules/usrloc/doc/usrloc_admin.xml | 260 +- modules/usrloc/doc/usrloc_devel.xml | 25 + modules/usrloc/ucontact.c | 327 +- modules/usrloc/udomain.c | 9 +- modules/usrloc/ul_mi.c | 8 +- modules/usrloc/ul_mod.c | 20 +- modules/usrloc/ul_mod.h | 1 + modules/usrloc/ul_rpc.c | 414 +- modules/usrloc/urecord.c | 79 +- modules/usrloc/urecord.h | 10 + modules/usrloc/usrloc.c | 1 + modules/usrloc/usrloc.h | 6 + modules/utils/README | 4 +- modules/utils/doc/utils.xml | 12 + modules/utils/doc/utils_admin.xml | 48 +- modules/utils/functions.c | 32 +- modules/utils/functions.h | 3 +- modules/utils/utils.c | 81 +- modules/websocket/README | 65 +- modules/websocket/config.c | 56 + .../parse_pai.h => modules/websocket/config.h | 33 +- modules/websocket/doc/websocket.xml | 2 +- modules/websocket/doc/websocket_admin.xml | 117 +- modules/websocket/ws_conn.c | 71 +- modules/websocket/ws_conn.h | 6 +- modules/websocket/ws_frame.c | 175 +- modules/websocket/ws_frame.h | 20 +- modules/websocket/ws_handshake.c | 63 +- modules/websocket/ws_handshake.h | 15 +- modules/websocket/ws_mod.c | 112 +- modules/websocket/ws_mod.h | 9 +- modules/xcap_client/xcap_callbacks.c | 2 +- modules/xcap_client/xcap_functions.c | 4 +- modules/xcap_server/xcap_misc.c | 6 +- modules/xcap_server/xcap_server.c | 81 +- modules/xhttp/xhttp_mod.c | 13 + modules/xhttp/xhttp_trans.c | 145 + modules/xhttp/xhttp_trans.h | 30 + modules/xhttp_pi/xhttp_pi_fnc.c | 61 +- modules/xhttp_rpc/README | 4 +- modules/xmlrpc/xmlrpc.c | 4 +- modules/xprint/xp_lib.c | 6 +- msg_translator.c | 54 +- msg_translator.h | 2 + name_alias.h | 2 - obsolete/permissions/ip_set.c | 14 - obsolete/permissions/ip_set.h | 2 - obsolete/permissions/ip_set_rpc.c | 2 - obsolete/permissions/permissions.c | 2 - obsolete/registrar/save.c | 4 - parser/hf.c | 5 +- parser/keys.h | 2 + parser/msg_parser.c | 110 +- parser/msg_parser.h | 65 +- parser/parse_addr_spec.c | 927 + parser/parse_addr_spec.h | 70 + parser/parse_body.h | 2 +- parser/parse_content.c | 6 +- parser/parse_content.h | 1 + parser/parse_fline.c | 12 +- parser/parse_option_tags.c | 40 + parser/parse_option_tags.h | 166 + parser/parse_param.c | 62 +- parser/parse_param.h | 13 + parser/parse_ppi_pai.c | 213 + .../parse_ppi.h => parser/parse_ppi_pai.h | 48 +- parser/parse_require.c | 73 + parser/parse_require.h | 50 + parser/parse_supported.c | 73 + parser/parse_supported.h | 54 + parser/parse_to.c | 797 +- parser/parse_to.h | 29 +- pkg/kamailio/centos/6/README | 28 +- pkg/kamailio/centos/6/kamailio-build.appl | 41 - pkg/kamailio/centos/6/kamailio.appl | 35 - pkg/kamailio/centos/6/kamailio.init | 87 +- pkg/kamailio/centos/6/kamailio.spec | 1180 +- pkg/kamailio/centos/6/kamailio.sysconfig | 19 +- pkg/kamailio/deb/debian/changelog | 24 +- pkg/kamailio/deb/debian/control | 58 +- pkg/kamailio/deb/debian/rules | 3 +- pkg/kamailio/deb/{lenny => jessie}/changelog | 24 +- pkg/kamailio/deb/{lenny => jessie}/compat | 0 pkg/kamailio/deb/{lenny => jessie}/control | 133 +- pkg/kamailio/deb/{lenny => jessie}/copyright | 0 .../{lenny => jessie}/kamailio.README.Debian | 0 .../deb/{lenny => jessie}/kamailio.default | 0 .../deb/{lenny => jessie}/kamailio.dirs | 0 .../deb/{lenny => jessie}/kamailio.examples | 0 .../deb/{lenny => jessie}/kamailio.init | 2 +- .../deb/{lenny => jessie}/kamailio.postinst | 0 pkg/kamailio/deb/{lenny => jessie}/rules | 7 +- pkg/kamailio/deb/lucid/changelog | 24 +- pkg/kamailio/deb/lucid/control | 61 +- pkg/kamailio/deb/lucid/rules | 5 +- pkg/kamailio/deb/precise/changelog | 24 +- pkg/kamailio/deb/precise/control | 24 +- pkg/kamailio/deb/precise/rules | 3 +- pkg/kamailio/deb/squeeze/changelog | 24 +- pkg/kamailio/deb/squeeze/control | 24 +- pkg/kamailio/deb/squeeze/rules | 3 +- pkg/kamailio/deb/wheezy/changelog | 24 +- pkg/kamailio/deb/wheezy/control | 43 +- pkg/kamailio/deb/wheezy/rules | 3 +- pkg/kamailio/fedora/17/kamailio.spec | 960 +- pkg/kamailio/rpm/kamailio.spec-4.1 | 2 +- pkg/kamailio/rpm/kamailio.spec.CenOS | 2 +- pkg/kamailio/rpm/kamailio.spec.SuSE | 2 +- pt.c | 4 - pvapi.c | 47 +- pvar.h | 29 +- receive.c | 1 + resolve.c | 300 +- resolve.h | 47 +- route.h | 1 + rvalue.c | 14 + rvalue.h | 1 + script_cb.c | 2 +- script_cb.h | 4 +- sctp_core.c | 109 + sctp_core.h | 62 + select_core.c | 6 +- ser_stun.h | 186 - sip_msg_clone.c | 8 + socket_info.c | 112 +- socket_info.h | 10 + sr_module.c | 33 +- sr_module.h | 2 + stun.c | 46 + stun.h | 64 + tcp_main.c | 10 - tcp_options.c | 2 +- tcp_options.h | 2 +- tcp_read.c | 46 +- timer_funcs.h | 5 +- udp_server.c | 54 +- utils/kamctl/db_berkeley/kamailio/acc_cdrs | 10 + utils/kamctl/db_berkeley/kamailio/mohqcalls | 10 + utils/kamctl/db_berkeley/kamailio/mohqueues | 10 + utils/kamctl/db_berkeley/kamailio/rtpproxy | 10 + utils/kamctl/db_berkeley/kamailio/version | 8 + utils/kamctl/db_sqlite/acc-create.sql | 10 + utils/kamctl/db_sqlite/alias_db-create.sql | 5 +- utils/kamctl/db_sqlite/mohqueue-create.sql | 24 + utils/kamctl/db_sqlite/rtpproxy-create.sql | 10 + utils/kamctl/dbtext/kamailio/acc_cdrs | 1 + utils/kamctl/dbtext/kamailio/mohqcalls | 1 + utils/kamctl/dbtext/kamailio/mohqueues | 1 + utils/kamctl/dbtext/kamailio/rtpproxy | 1 + utils/kamctl/dbtext/kamailio/version | 4 + utils/kamctl/kamctl | 206 +- utils/kamctl/kamctl.8 | 17 +- utils/kamctl/kamctl.base | 33 +- utils/kamctl/kamctl.ctlbase | 11 +- utils/kamctl/kamctl.fifo | 34 +- utils/kamctl/kamctl.sqlbase | 6 + utils/kamctl/kamctl.sqlite | 3 + utils/kamctl/kamctlrc | 2 +- utils/kamctl/kamdbctl | 17 + utils/kamctl/kamdbctl.base | 8 +- utils/kamctl/kamdbctl.mysql | 22 + utils/kamctl/mysql/acc-create.sql | 14 +- utils/kamctl/mysql/alias_db-create.sql | 7 +- utils/kamctl/mysql/auth_db-create.sql | 2 +- utils/kamctl/mysql/avpops-create.sql | 2 +- utils/kamctl/mysql/carrierroute-create.sql | 8 +- utils/kamctl/mysql/cpl-create.sql | 2 +- utils/kamctl/mysql/dialog-create.sql | 4 +- utils/kamctl/mysql/dialplan-create.sql | 2 +- utils/kamctl/mysql/dispatcher-create.sql | 2 +- utils/kamctl/mysql/domain-create.sql | 4 +- utils/kamctl/mysql/domainpolicy-create.sql | 2 +- utils/kamctl/mysql/drouting-create.sql | 8 +- utils/kamctl/mysql/group-create.sql | 4 +- utils/kamctl/mysql/htable-create.sql | 2 +- utils/kamctl/mysql/imc-create.sql | 4 +- utils/kamctl/mysql/lcr-create.sql | 6 +- utils/kamctl/mysql/matrix-create.sql | 2 +- utils/kamctl/mysql/mohqueue-create.sql | 24 + utils/kamctl/mysql/msilo-create.sql | 2 +- utils/kamctl/mysql/mtree-create.sql | 4 +- utils/kamctl/mysql/pdt-create.sql | 2 +- utils/kamctl/mysql/permissions-create.sql | 4 +- utils/kamctl/mysql/pipelimit-create.sql | 2 +- utils/kamctl/mysql/presence-create.sql | 10 +- utils/kamctl/mysql/purple-create.sql | 2 +- utils/kamctl/mysql/registrar-create.sql | 2 +- utils/kamctl/mysql/rls-create.sql | 4 +- utils/kamctl/mysql/rtpproxy-create.sql | 10 + utils/kamctl/mysql/sca-create.sql | 2 +- utils/kamctl/mysql/siptrace-create.sql | 2 +- utils/kamctl/mysql/speeddial-create.sql | 2 +- utils/kamctl/mysql/standard-create.sql | 2 +- utils/kamctl/mysql/uac-create.sql | 2 +- utils/kamctl/mysql/uid_auth_db-create.sql | 2 +- utils/kamctl/mysql/uid_avp_db-create.sql | 2 +- utils/kamctl/mysql/uid_domain-create.sql | 4 +- utils/kamctl/mysql/uid_gflags-create.sql | 2 +- utils/kamctl/mysql/uid_uri_db-create.sql | 4 +- utils/kamctl/mysql/uri_db-create.sql | 2 +- utils/kamctl/mysql/userblacklist-create.sql | 4 +- utils/kamctl/mysql/usrloc-create.sql | 4 +- utils/kamctl/oracle/acc-create.sql | 18 + utils/kamctl/oracle/alias_db-create.sql | 5 +- utils/kamctl/oracle/mohqueue-create.sql | 40 + utils/kamctl/oracle/rtpproxy-create.sql | 18 + utils/kamctl/postgres/acc-create.sql | 10 + utils/kamctl/postgres/alias_db-create.sql | 5 +- utils/kamctl/postgres/mohqueue-create.sql | 24 + utils/kamctl/postgres/rtpproxy-create.sql | 10 + utils/kamctl/xhttp_pi/acc-mod | 41 + utils/kamctl/xhttp_pi/acc-table | 9 + utils/kamctl/xhttp_pi/mohqueue-mod | 97 + utils/kamctl/xhttp_pi/mohqueue-table | 23 + utils/kamctl/xhttp_pi/pi_framework.xml | 250 +- utils/kamctl/xhttp_pi/rtpproxy-mod | 47 + utils/kamctl/xhttp_pi/rtpproxy-table | 11 + utils/sercmd/Makefile | 2 +- utils/sercmd/parse_listen_id.c | 18 +- ver_defs.h | 16 +- xavp.c | 129 + xavp.h | 6 + 1034 files changed, 80012 insertions(+), 22387 deletions(-) create mode 100644 dns_func.c create mode 100644 dns_func.h rename doc/rpc_list/docbook/{rpc_dispatcher_s.xml => rpc_app_lua.xml} (53%) create mode 100644 doc/rpc_list/docbook/rpc_carrierroute.xml rename doc/rpc_list/docbook/{rpc_cpl-c.xml => rpc_cnxcc.xml} (50%) rename doc/rpc_list/docbook/{rpc_presence_b2b.xml => rpc_corex.xml} (57%) create mode 100644 doc/rpc_list/docbook/rpc_db_text.xml rename doc/rpc_list/docbook/{rpc_usrloc_k.xml => rpc_dialog_ng.xml} (66%) create mode 100644 doc/rpc_list/docbook/rpc_drouting.xml create mode 100644 doc/rpc_list/docbook/rpc_ims_usrloc_pcscf.xml create mode 100644 doc/rpc_list/docbook/rpc_ims_usrloc_scscf.xml create mode 100644 doc/rpc_list/docbook/rpc_msrp.xml create mode 100644 doc/rpc_list/docbook/rpc_mtree.xml create mode 100644 doc/rpc_list/docbook/rpc_permissions.xml create mode 100644 doc/rpc_list/docbook/rpc_pipelimit.xml create mode 100644 doc/rpc_list/docbook/rpc_presence.xml create mode 100644 doc/rpc_list/docbook/rpc_pv.xml create mode 100644 doc/rpc_list/docbook/rpc_sca.xml create mode 100644 doc/rpc_list/docbook/rpc_sctp.xml create mode 100644 doc/rpc_list/docbook/rpc_sipcapture.xml create mode 100644 doc/rpc_list/docbook/rpc_siptrace.xml rename doc/rpc_list/docbook/{rpc_domain_s.xml => rpc_uid_domain.xml} (88%) rename doc/rpc_list/docbook/{rpc_gflags.xml => rpc_uid_gflags.xml} (94%) delete mode 100644 doc/rpc_list/docbook/rpc_usrloc_s.xml create mode 100644 doc/rpc_list/docbook/rpc_xhttp_pi.xml create mode 100644 doc/rpc_list/rpc_app_lua.txt create mode 100644 doc/rpc_list/rpc_carrierroute.txt create mode 100644 doc/rpc_list/rpc_cnxcc.txt create mode 100644 doc/rpc_list/rpc_corex.txt delete mode 100644 doc/rpc_list/rpc_cpl-c.txt create mode 100644 doc/rpc_list/rpc_db_text.txt create mode 100644 doc/rpc_list/rpc_dialog_ng.txt delete mode 100644 doc/rpc_list/rpc_dispatcher_s.txt create mode 100644 doc/rpc_list/rpc_drouting.txt create mode 100644 doc/rpc_list/rpc_ims_usrloc_pcscf.txt create mode 100644 doc/rpc_list/rpc_ims_usrloc_scscf.txt create mode 100644 doc/rpc_list/rpc_msrp.txt create mode 100644 doc/rpc_list/rpc_mtree.txt create mode 100644 doc/rpc_list/rpc_permissions.txt create mode 100644 doc/rpc_list/rpc_pipelimit.txt create mode 100644 doc/rpc_list/rpc_presence.txt delete mode 100644 doc/rpc_list/rpc_presence_b2b.txt create mode 100644 doc/rpc_list/rpc_pv.txt create mode 100644 doc/rpc_list/rpc_sca.txt create mode 100644 doc/rpc_list/rpc_sctp.txt create mode 100644 doc/rpc_list/rpc_sipcapture.txt create mode 100644 doc/rpc_list/rpc_siptrace.txt rename doc/rpc_list/{rpc_domain_s.txt => rpc_uid_domain.txt} (77%) rename doc/rpc_list/{rpc_gflags.txt => rpc_uid_gflags.txt} (88%) delete mode 100644 doc/rpc_list/rpc_usrloc_s.txt rename doc/rpc_list/{rpc_usrloc_k.txt => rpc_xhttp_pi.txt} (53%) create mode 100644 etc/kamailio-basic.cfg create mode 100644 examples/ims_dnszone/kamailio-ims.org.dnszone create mode 100644 examples/outbound/edge.cfg create mode 100644 examples/outbound/edge_websocket.cfg create mode 100644 examples/outbound/registrar.cfg delete mode 100644 lib/kcore/parse_pai.c delete mode 100644 lib/kcore/parse_ppi.c delete mode 100644 lib/kcore/parse_supported.c delete mode 100644 lib/kcore/parse_supported.h create mode 100644 lib/srdb1/schema/acc_cdrs.xml create mode 100644 lib/srdb1/schema/kamailio-mohqueue.xml create mode 100644 lib/srdb1/schema/kamailio-rtpproxy.xml create mode 100644 lib/srdb1/schema/mohqcalls.xml create mode 100644 lib/srdb1/schema/mohqueues.xml create mode 100644 lib/srdb1/schema/rtpproxy.xml create mode 100644 modules/app_java/BUILDING_JAR.TXT create mode 100644 modules/app_java/Makefile create mode 100644 modules/app_java/QUICKSTART.TXT create mode 100644 modules/app_java/README create mode 100644 modules/app_java/README-draft create mode 100644 modules/app_java/doc/Makefile create mode 100644 modules/app_java/doc/app_java.xml create mode 100644 modules/app_java/doc/app_java_admin.xml create mode 100644 modules/app_java/global.h create mode 100644 modules/app_java/java_iface.c create mode 100644 modules/app_java/java_iface.h create mode 100644 modules/app_java/java_mod.c create mode 100644 modules/app_java/java_mod.h create mode 100644 modules/app_java/java_msgobj.c create mode 100644 modules/app_java/java_msgobj.h create mode 100644 modules/app_java/java_native_methods.c create mode 100644 modules/app_java/java_native_methods.h create mode 100644 modules/app_java/java_sig_parser.c create mode 100644 modules/app_java/java_sig_parser.h create mode 100644 modules/app_java/java_support.c create mode 100644 modules/app_java/java_support.h create mode 100644 modules/app_java/kamailio_java_folder/java-untested/Kamailio.java create mode 100644 modules/app_java/kamailio_java_folder/java-untested/WrappedMethods.java create mode 100644 modules/app_java/kamailio_java_folder/java-untested/build.xml create mode 100644 modules/app_java/kamailio_java_folder/java-untested/siprouter_src/CoreMethods.java create mode 100644 modules/app_java/kamailio_java_folder/java-untested/siprouter_src/IPPair.java create mode 100644 modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeInterface.java create mode 100644 modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeMethods.java create mode 100644 modules/app_java/kamailio_java_folder/java-untested/siprouter_src/SipMsg.java create mode 100644 modules/app_java/kamailio_java_folder/java/Kamailio.java create mode 100644 modules/app_java/kamailio_java_folder/java/build.xml create mode 100644 modules/app_java/kamailio_java_folder/java/siprouter_src/IPPair.java create mode 100644 modules/app_java/kamailio_java_folder/java/siprouter_src/NativeInterface.java create mode 100644 modules/app_java/kamailio_java_folder/java/siprouter_src/NativeMethods.java create mode 100644 modules/app_java/kamailio_java_folder/java/siprouter_src/SipMsg.java create mode 100644 modules/app_java/utils.c create mode 100644 modules/app_java/utils.h create mode 100644 modules/auth_ephemeral/Makefile create mode 100644 modules/auth_ephemeral/README create mode 100644 modules/auth_ephemeral/autheph_mod.c create mode 100644 modules/auth_ephemeral/autheph_mod.h create mode 100644 modules/auth_ephemeral/authorize.c create mode 100644 modules/auth_ephemeral/authorize.h create mode 100644 modules/auth_ephemeral/checks.c create mode 100644 modules/auth_ephemeral/checks.h create mode 100644 modules/auth_ephemeral/doc/Makefile create mode 100644 modules/auth_ephemeral/doc/auth_ephemeral.xml create mode 100644 modules/auth_ephemeral/doc/auth_ephemeral_admin.xml create mode 100644 modules/cdp/acctstatemachine.c create mode 100644 modules/cdp/acctstatemachine.h create mode 100644 modules/cdp/common.c create mode 100644 modules/cdp/common.h create mode 100644 modules/cnxcc/Makefile create mode 100644 modules/cnxcc/README create mode 100644 modules/cnxcc/cnxcc.c create mode 100644 modules/cnxcc/cnxcc.h create mode 100644 modules/cnxcc/cnxcc_check.c create mode 100644 modules/cnxcc/cnxcc_check.h create mode 100644 modules/cnxcc/cnxcc_mod.c create mode 100644 modules/cnxcc/cnxcc_mod.h create mode 100644 modules/cnxcc/cnxcc_rpc.c create mode 100644 modules/cnxcc/cnxcc_rpc.h create mode 100644 modules/cnxcc/cnxcc_select.c create mode 100644 modules/cnxcc/cnxcc_select.h create mode 100644 modules/cnxcc/cnxcc_sip_msg_faker.c create mode 100644 modules/cnxcc/cnxcc_sip_msg_faker.h create mode 100644 modules/cnxcc/doc/Makefile create mode 100644 modules/cnxcc/doc/cnxcc.xml create mode 100644 modules/cnxcc/doc/cnxcc_admin.xml create mode 100644 modules/cnxcc/example/kamailio-cnxcc.cfg create mode 100644 modules/corex/corex_var.c create mode 100644 modules/corex/corex_var.h rename modules/db_unixodbc/{con.c => connection.c} (99%) rename modules/db_unixodbc/{con.h => connection.h} (100%) create mode 100644 modules/debugger/debugger_config.c create mode 100644 modules/debugger/debugger_config.h create mode 100644 modules/dnssec/Makefile create mode 100644 modules/dnssec/README create mode 100644 modules/dnssec/dnssec_func.c create mode 100644 modules/dnssec/dnssec_func.h create mode 100644 modules/dnssec/dnssec_mod.c create mode 100644 modules/dnssec/doc/Makefile create mode 100644 modules/dnssec/doc/dnssec.xml create mode 100644 modules/dnssec/doc/dnssec_admin.xml create mode 100644 modules/gzcompress/Makefile create mode 100644 modules/gzcompress/README create mode 100644 modules/gzcompress/doc/Makefile create mode 100644 modules/gzcompress/doc/gzcompress.xml create mode 100644 modules/gzcompress/doc/gzcompress_admin.xml create mode 100644 modules/gzcompress/gzcompress_mod.c create mode 100644 modules/htable/ht_dmq.c create mode 100644 modules/htable/ht_dmq.h create mode 100644 modules/ims_charging/Makefile create mode 100644 modules/ims_charging/README create mode 100644 modules/ims_charging/Ro_data.c create mode 100644 modules/ims_charging/Ro_data.h create mode 100644 modules/ims_charging/ccr.c create mode 100644 modules/ims_charging/ccr.h create mode 100644 modules/ims_charging/config.h create mode 100644 modules/ims_charging/dialog.c create mode 100644 modules/ims_charging/dialog.h create mode 100644 modules/ims_charging/diameter_ro.c create mode 100644 modules/ims_charging/diameter_ro.h create mode 100644 modules/ims_charging/doc/Makefile create mode 100644 modules/ims_charging/doc/images/charging1.png create mode 100644 modules/ims_charging/doc/images/charging2.png create mode 100644 modules/ims_charging/doc/ims_charging.xml create mode 100644 modules/ims_charging/doc/ims_charging_admin.xml create mode 100644 modules/ims_charging/ims_ro.c create mode 100644 modules/ims_charging/ims_ro.h create mode 100644 modules/ims_charging/mod.c create mode 100644 modules/ims_charging/mod.h create mode 100644 modules/ims_charging/ro_fixup.c create mode 100644 modules/ims_charging/ro_fixup.h create mode 100644 modules/ims_charging/ro_session_hash.c create mode 100644 modules/ims_charging/ro_session_hash.h create mode 100644 modules/ims_charging/ro_timer.c create mode 100644 modules/ims_charging/ro_timer.h create mode 100644 modules/ims_charging/stats.c create mode 100644 modules/ims_charging/stats.h create mode 100644 modules/ims_registrar_scscf/doc/Makefile create mode 100644 modules/ims_registrar_scscf/doc/ims_registrar_scscf.xml create mode 100644 modules/ims_registrar_scscf/doc/ims_registrar_scscf_admin.xml create mode 100644 modules/ims_registrar_scscf/doc/ims_registrar_scscf_faq.xml create mode 100644 modules/ipops/ipops_pv.c create mode 100644 modules/ipops/ipops_pv.h create mode 100644 modules/mohqueue/Makefile create mode 100644 modules/mohqueue/NOTES create mode 100644 modules/mohqueue/README create mode 100644 modules/mohqueue/doc/Makefile create mode 100644 modules/mohqueue/doc/mohqueue.xml create mode 100644 modules/mohqueue/doc/mohqueue_admin.xml create mode 100644 modules/mohqueue/mohq.c create mode 100644 modules/mohqueue/mohq.h create mode 100644 modules/mohqueue/mohq_common.h create mode 100644 modules/mohqueue/mohq_db.c create mode 100644 modules/mohqueue/mohq_db.h create mode 100644 modules/mohqueue/mohq_funcs.c create mode 100644 modules/mohqueue/mohq_funcs.h create mode 100644 modules/mohqueue/mohq_locks.c create mode 100644 modules/mohqueue/mohq_locks.h create mode 100644 modules/outbound/config.c create mode 100644 modules/outbound/config.h create mode 100644 modules/rtpproxy-ng/Makefile create mode 100644 modules/rtpproxy-ng/README create mode 100644 modules/rtpproxy-ng/bencode.c create mode 100644 modules/rtpproxy-ng/bencode.h create mode 100644 modules/rtpproxy-ng/doc/Makefile create mode 100644 modules/rtpproxy-ng/doc/rtpproxy-ng.xml create mode 100644 modules/rtpproxy-ng/doc/rtpproxy_admin.xml create mode 100644 modules/rtpproxy-ng/doc/rtpproxy_faq.xml create mode 100644 modules/rtpproxy-ng/rtpproxy.c create mode 100644 modules/rtpproxy-ng/rtpproxy.h create mode 100644 modules/rtpproxy-ng/rtpproxy_funcs.c create mode 100644 modules/rtpproxy-ng/rtpproxy_funcs.h create mode 100644 modules/rtpproxy/rtpproxy_db.c create mode 100644 modules/sctp/Makefile create mode 100644 modules/sctp/README create mode 100644 modules/sctp/doc/Makefile create mode 100644 modules/sctp/doc/sctp.xml create mode 100644 modules/sctp/doc/sctp_admin.xml rename sctp_ev.h => modules/sctp/sctp_ev.h (99%) create mode 100644 modules/sctp/sctp_mod.c rename sctp_options.c => modules/sctp/sctp_options.c (99%) rename sctp_options.h => modules/sctp/sctp_options.h (100%) create mode 100644 modules/sctp/sctp_rpc.c create mode 100644 modules/sctp/sctp_rpc.h rename sctp_server.c => modules/sctp/sctp_server.c (99%) rename sctp_server.h => modules/sctp/sctp_server.h (98%) rename sctp_sockopts.h => modules/sctp/sctp_sockopts.h (100%) rename sctp_stats.c => modules/sctp/sctp_stats.c (99%) rename sctp_stats.h => modules/sctp/sctp_stats.h (99%) create mode 100644 modules/sipt/Makefile create mode 100644 modules/sipt/README create mode 100644 modules/sipt/doc/Makefile create mode 100644 modules/sipt/doc/sipt.xml create mode 100644 modules/sipt/doc/sipt_admin.xml create mode 100644 modules/sipt/sdp_mangle.c create mode 100644 modules/sipt/sdp_mangle.h create mode 100644 modules/sipt/sipt.c create mode 100644 modules/sipt/ss7.h create mode 100644 modules/sipt/ss7_parser.c create mode 100644 modules/snmpstats/kamailioNet.c create mode 100644 modules/snmpstats/kamailioNet.h create mode 100644 modules/snmpstats/kamailioNetConfig.c create mode 100644 modules/snmpstats/kamailioNetConfig.h create mode 100644 modules/snmpstats/kamailioServer.c create mode 100644 modules/snmpstats/kamailioServer.h create mode 100644 modules/stun/Makefile create mode 100644 modules/stun/README create mode 100644 modules/stun/config.c create mode 100644 modules/stun/config.h create mode 100644 modules/stun/doc/Makefile create mode 100644 modules/stun/doc/stun.xml create mode 100644 modules/stun/doc/stun_admin.xml rename ser_stun.c => modules/stun/kam_stun.c (87%) create mode 100644 modules/stun/kam_stun.h create mode 100644 modules/stun/stun_mod.c create mode 100644 modules/tm/doc/event_routes.xml create mode 100644 modules/websocket/config.c rename lib/kcore/parse_pai.h => modules/websocket/config.h (63%) create mode 100644 modules/xhttp/xhttp_trans.c create mode 100644 modules/xhttp/xhttp_trans.h create mode 100644 parser/parse_addr_spec.c create mode 100644 parser/parse_addr_spec.h create mode 100644 parser/parse_option_tags.c create mode 100644 parser/parse_option_tags.h create mode 100644 parser/parse_ppi_pai.c rename lib/kcore/parse_ppi.h => parser/parse_ppi_pai.h (56%) create mode 100644 parser/parse_require.c create mode 100644 parser/parse_require.h create mode 100644 parser/parse_supported.c create mode 100644 parser/parse_supported.h mode change 120000 => 100644 pkg/kamailio/centos/6/README delete mode 100644 pkg/kamailio/centos/6/kamailio-build.appl delete mode 100644 pkg/kamailio/centos/6/kamailio.appl mode change 120000 => 100644 pkg/kamailio/centos/6/kamailio.spec rename pkg/kamailio/deb/{lenny => jessie}/changelog (78%) rename pkg/kamailio/deb/{lenny => jessie}/compat (100%) rename pkg/kamailio/deb/{lenny => jessie}/control (74%) rename pkg/kamailio/deb/{lenny => jessie}/copyright (100%) rename pkg/kamailio/deb/{lenny => jessie}/kamailio.README.Debian (100%) rename pkg/kamailio/deb/{lenny => jessie}/kamailio.default (100%) rename pkg/kamailio/deb/{lenny => jessie}/kamailio.dirs (100%) rename pkg/kamailio/deb/{lenny => jessie}/kamailio.examples (100%) rename pkg/kamailio/deb/{lenny => jessie}/kamailio.init (98%) rename pkg/kamailio/deb/{lenny => jessie}/kamailio.postinst (100%) rename pkg/kamailio/deb/{lenny => jessie}/rules (97%) create mode 100644 sctp_core.c create mode 100644 sctp_core.h delete mode 100644 ser_stun.h create mode 100644 stun.c create mode 100644 stun.h create mode 100644 utils/kamctl/db_berkeley/kamailio/acc_cdrs create mode 100644 utils/kamctl/db_berkeley/kamailio/mohqcalls create mode 100644 utils/kamctl/db_berkeley/kamailio/mohqueues create mode 100644 utils/kamctl/db_berkeley/kamailio/rtpproxy create mode 100644 utils/kamctl/db_sqlite/mohqueue-create.sql create mode 100644 utils/kamctl/db_sqlite/rtpproxy-create.sql create mode 100644 utils/kamctl/dbtext/kamailio/acc_cdrs create mode 100644 utils/kamctl/dbtext/kamailio/mohqcalls create mode 100644 utils/kamctl/dbtext/kamailio/mohqueues create mode 100644 utils/kamctl/dbtext/kamailio/rtpproxy create mode 100644 utils/kamctl/mysql/mohqueue-create.sql create mode 100644 utils/kamctl/mysql/rtpproxy-create.sql create mode 100644 utils/kamctl/oracle/mohqueue-create.sql create mode 100644 utils/kamctl/oracle/rtpproxy-create.sql create mode 100644 utils/kamctl/postgres/mohqueue-create.sql create mode 100644 utils/kamctl/postgres/rtpproxy-create.sql create mode 100644 utils/kamctl/xhttp_pi/mohqueue-mod create mode 100644 utils/kamctl/xhttp_pi/mohqueue-table create mode 100644 utils/kamctl/xhttp_pi/rtpproxy-mod create mode 100644 utils/kamctl/xhttp_pi/rtpproxy-table diff --git a/ChangeLog b/ChangeLog index 88fc52616..da203d286 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,12765 +1,8538 @@ -===================== 2013-10-02 Version 4.0.4 Released ===================== +===================== 2013-XY-XY Version 4.1.0 Released ===================== -===================== Changes Since Version 4.0.3 =========================== - -commit 69d5e22b21ad4cb163e39f68a123cae3cf99e1c9 -Author: Daniel-Constantin Mierla -Date: Wed Oct 2 16:54:14 2013 +0200 - - Makefile.defs: version set to 4.0.4 - -commit 00cfb136d9532aa5e7cf2a40848e62b7df1692fa -Author: Daniel-Constantin Mierla -Date: Wed Oct 2 16:50:37 2013 +0200 - - pkg/rpm: updated version to 4.0.4 in spec files - -commit 6b26032ee8b581983d547657c9d229645cf2bd0e -Author: Daniel-Constantin Mierla -Date: Wed Oct 2 16:50:05 2013 +0200 - - pkg/deb: updated version to 4.0.4 in specs - -commit f8ae762545b85ead432f67bcb6969bc92f01b93d -Author: Daniel-Constantin Mierla -Date: Fri Sep 20 11:18:09 2013 +0200 - - registrar: note about empty value for received_param - - (cherry picked from commit e35fe9c6095361414565b1099dea1ad5950fb38d) - -commit fc410ae69c6b371538f457947fd3a2946dc492cd -Author: Daniel-Constantin Mierla -Date: Fri Sep 20 11:15:16 2013 +0200 - - registrar: if rcv_parm value is empty, don't add received to contacts in 200ok reply - - - otherwise results in malformed value - - (cherry picked from commit 2f213e313a86e16665f6d0acfec959bf23f72b7d) - -commit cbe6d2dc199e552576501a74b3cafbceeb048385 -Author: Hugh Waite -Date: Wed Oct 2 10:04:35 2013 +0100 - - xcap_server: Fix memory allocation check bug in xcap_misc - - - Would cause crash if out of package memory - (cherry picked from commit 165a351d18fd0f1639087c8eb5d9294e46a6e2b7) - -commit 82a23f22c1bba400304a7f44523e8db8b09ae295 -Author: Daniel-Constantin Mierla -Date: Thu Sep 26 13:23:46 2013 +0200 - - presence_xml: updated docs about integrated_xcap_server - - (cherry picked from commit 8e35cef8716bbd0caa406a5080e93acb3c881c41) - -commit 3a927389f2667fa3e453f30604b5448ca99f4d77 -Author: Daniel-Constantin Mierla -Date: Thu Sep 26 12:59:59 2013 +0200 - - mi_rpc: compatibility with libxmlrpc-c3 library on wheezy - - - patch by Muhammad Shahzad - - (cherry picked from commit baa4fccc2870df102a66089d6e9b6ca1ff47fc25) - -commit 9f3f494289ab25d2a4a35672e21d1b1c76cfbd6b -Author: Daniel-Constantin Mierla -Date: Mon Sep 30 16:49:26 2013 +0200 - - app_perl: use local buffer to print dynamic string in pv_sprintf() - - - avoid pkg malloc for temporary need - - fix leak in case of fmt parse error, discovered on a report by Dragos - Oancea - - (cherry picked from commit 1c3e761fbd087ee578ce305d89f6b8ee4e9ab79d) - -commit 3253fcb7e7ef628727799a92ca68739dba3d10ca -Author: Øyvind Kolbu -Date: Mon Sep 30 11:15:13 2013 +0200 - - core: resolve down to A/AAAA records when no naptr records - - - try all protocols, not only UDP - - (cherry picked from commit b50888cf447ea3a3315e665c97f71a07bb687337) - -commit b49899f75052ea4e23125c7af3e60dd3ab141aae -Author: Andrew Mortensen -Date: Thu Sep 19 13:49:24 2013 -0400 - - modules/sca: fix return value of sca_call_info_uri_update() - - - return value of 0 can bubble up as return value of sca_call_info_update(), - causing early script termination (exported function returning 0 in script - is equivalent to "exit") - - report and patch from Timo Teräs - (cherry picked from commit 844c398bba30452f0b136895b9f928cc17e5c80b) - -commit c9551e55a8a0d46de69bb49fc3eb8376fd737ccb -Author: Andrew Mortensen -Date: Tue Aug 20 15:54:17 2013 -0400 - - modules/sca: AoR should not be treated as SCA if there are no subscribers. - (cherry picked from commit a8fb905e8bf27093dcf86866ae946431ed441a41) - -commit 22268940a63747e1ef3faf47b40c493c8f34a7b3 -Author: Andrew Mortensen -Date: Tue Aug 20 15:14:26 2013 -0400 - - modules/sca: improved handling of host-only Contact URIs - (cherry picked from commit bf747c2d65aeaa74d1cea4e0a531607415e8d17d) - -commit 1672b92eb5d7eb7d07741c24bfec912e1e6b7acf -Author: Andrew Mortensen -Date: Mon Jul 22 00:48:46 2013 -0400 - - modules/sca: restore missing prototype. - - sca_subscription_aor_has_subscribers - (cherry picked from commit 7bf7e9f858faab2329e5edf3d988bef76ac2c804) - -commit 92c6c3b680047962721bb48134345012e7f631db -Author: Andrew Mortensen -Date: Mon Jul 22 00:42:18 2013 -0400 - - modules/sca: detect when an AoR is no longer SCA. - - Don't, for example, create an appearance for callees that do not send - a Call-Info header, and whose AoR also has no subscribers. - (cherry picked from commit 3464f62565dd153cb87af71a71df5db2306d74a1) - -commit 2f767f2b3454dc0bad206c0b7aa04b8a2550be25 -Author: Andrew Mortensen -Date: Mon Jul 22 00:37:32 2013 -0400 - - modules/sca: Clear stale line-seize appearances via timer. - - Some badly behaved/buggy UAs don't know when to say when. - (cherry picked from commit 8416a1c65d26ac81b71e08274f9292a7f7713fff) - -commit b15a586fd6eb226318d7111a0e14c312ec56ad8f -Author: Andrew Mortensen -Date: Thu Jun 13 16:06:10 2013 -0400 - - modules/sca: fix regression: restore purge expired timer - (cherry picked from commit d5f259f7ce04b012f7704ba433f167d034548e09) - -commit b1faa930bd69333eda47291a6354fb2bda59b822 -Author: Andrew Mortensen -Date: Thu Jun 13 15:34:00 2013 -0400 - - modules/sca: clear appearance on receipt of out-of-dialog SUBSCRIBE - - - If a call-info SUBSCRIBE with no To-tag arrives from a subscriber - with an active subscription, release any appearances owned by the - subscriber, on the assumption that the subscriber has lost track - of SCA (reboot, power/network loss). - (cherry picked from commit c6280e2eb9c2e1243d5d4ab78b8b683c8239a4b9) - -commit 0d0a6c2d0de9b56c31ce3de59ec0c9e9bd86241b -Author: Andrew Mortensen -Date: Thu Jun 13 15:30:40 2013 -0400 - - modules/sca: detect and clear orphaned appearances caused by answer glare - - - set appearance state created by SCA callee answer to ACTIVE_PENDING, - and promote to ACTIVE on ACK from caller. If no ACK from caller is - received within 30 seconds (enough time for retransmission to fail), - the ACTIVE_PENDING appearance will be cleared by the - sca_appearance_purge_stale timer. - (cherry picked from commit a9014c2b9edd200cf0032fdb30405710afc97c0b) - -commit 67bd5d6d315c89089d54dbf01531e79fe832339f -Author: Andrew Mortensen -Date: Wed May 15 16:13:23 2013 -0400 - - modules/sca: reconcile Contact and From URIs in ACK callback. - - - fix Music-on-Hold in Polycoms when SCA caller has MoH enabled and SCA callee - does SCA hold/pickup with identical To & From URIs. Previously, module would - end up looking up an appearance for callee in ACK callback instead of caller. - (cherry picked from commit ba2f749d4a894f6890601ce3d2ff3697b78c5b73) - -commit 68898fdd936c5aa34377b894240dfd460315f23e -Author: Andrew Mortensen -Date: Tue May 14 16:25:06 2013 -0400 - - modules/sca: improved BYE handling. - - - Clear appearances for both legs on BYE request if possible. - (cherry picked from commit 71f012de15bd4fecce006c35b9452854818f03af) - -commit b765ed287e61c43e299fad8396b22759a04cb7d9 -Author: Andrew Mortensen -Date: Tue May 14 16:23:46 2013 -0400 - - modules/sca: free previous appearance owner, callee, dialog if non-NULL. - (cherry picked from commit 6a126232767256a2495c846184acaec788576591) - -commit 87daab43172e780de06378773e50bf1f48cb1793 -Author: Andrew Mortensen -Date: Thu May 2 15:12:16 2013 -0400 - - modules/sca: change logging level for failed lookup by appearance-index. - - - appearance-index won't be found yet if SCA callee is answering, logging - at WARN is misleading. - (cherry picked from commit 95b38c4d239f0098e94eafb1c3ddc8834fc767e0) - -commit f547e09bfe791e485d7b15d3238e4f84242654be -Author: Andrew Mortensen -Date: Tue Apr 30 23:31:12 2013 -0400 - - modules/sca: space-separate dialog tags in sca.all_appearances output - (cherry picked from commit 16243261d7cc6dc3e03db9c589209b534d6dab74) - -commit d16ee1a19c681726b35da78f120a05317b294ce1 -Author: Andrew Mortensen -Date: Tue Apr 30 23:10:10 2013 -0400 - - modules/sca: track appearance times. - - Include time of last state chance in sca.all_appearances output. - (cherry picked from commit da3f7cbd955311309665ab0e6958e009f183f795) - -commit 86930557070857aecf8110ead7b6e5e3761fb796 -Author: Andrew Mortensen -Date: Wed Apr 24 11:30:35 2013 -0400 - - modules/sca: add sca.subscription_count to rpc exports list. - (cherry picked from commit 1d361c70b5ed87e0808bc446be327f21d8725a3f) - -commit b1bd9727e91991649bc37cd8c79cd3876876da92 -Author: Andrew Mortensen -Date: Wed Apr 24 01:18:27 2013 -0400 - - modules/sca: RPC: fix sca.show_subscription, add sca.subscription_count - - - sca.subscription_count will eventually be subsumed by sca.stats. - (cherry picked from commit f156eb0f82bb729e773027e44f1e7f930418dc93) - -commit 5ca4e8e743e1e7e61c7218858a68c9c83b4618f1 -Author: Andrew Mortensen -Date: Thu Apr 18 13:52:10 2013 -0400 - - modules/sca: fall back to tag lookup if lookup by index fails. - - - Fix appearance tracking for SCA implementations with inconsistent - Call-Info header inclusion. - (cherry picked from commit c41806685483546d00324d351ca72143a2a6c787) - -commit f4169c46d885b0d6568961bc302d0be0173a697d -Author: Andrew Mortensen -Date: Mon Apr 15 20:16:36 2013 -0400 - - modules/sca: add SCA_DB_DEFAULT_FETCH_ROW_COUNT - (cherry picked from commit 2292666bf234a168120b1c1504bea86300a440ea) - -commit e57b740d35590e7a8049cf82c38deb49a414f816 -Author: Andrew Mortensen -Date: Mon Apr 15 20:11:08 2013 -0400 - - modules/sca: use DB fetch queries when restoring subscribers from database. - - - Previously used standard query, exhausting pkg memory when subscriber - count is high. - (cherry picked from commit c9f47e608f655b3558e7c0c319f32b189732cf34) - -commit 4f7b9ac3c64c4baf20b8da76e947c777a073ef61 -Author: Andrew Mortensen -Date: Mon Apr 15 20:09:01 2013 -0400 - - modules/sca: only check if callee is SCA if callee_aor has a value. - (cherry picked from commit d1ef3000b9db99c51d5c37134af2c679ce017a82) - -commit 8c790ae25cb5927166bbf154233ca74e36b1d225 -Author: Andrew Mortensen -Date: Mon Apr 15 17:17:05 2013 -0400 - - modules/sca: add check for empty AoR in lock_shared_appearance calls. - - - Sanity checking - (cherry picked from commit 8ce54ef9b33ef533b3f4474b2c68c9ae454db458) - -commit 940d60dc398383aede76b01cfa7618fb11081da6 -Author: Andrew Mortensen -Date: Thu Apr 11 22:34:10 2013 -0400 - - modules/sca: clear appearance on t_reply with error after receiving 18x. - - - Receiving a 18x provisional reply triggers line-seize subscription - termination. Releasing the seized appearance while processing a t_reply - with an error status *after* getting a 18x would fail because - sca_subscription_terminate could not find a matching line-seize - subscription. In that case, look up appearance by tags and release it. - (cherry picked from commit aa0c84475140dc44186c68e9c544367553c891c2) - -commit d220cdbf8eb9d6c0d7108c81cd1ba762a2fa8938 -Author: Andrew Mortensen -Date: Mon Apr 8 15:01:41 2013 -0400 - - modules/sca: reduce verbosity of RPC sca.all_subscriptions output - - - accommodate more subscriptions without hitting kamcmd buffer limits. - (cherry picked from commit a9e555e6e41271e015c47d29ba85276673d3b7b6) - -commit 2a072eeea166c93a9419f6249b52c30da9367c3d -Author: Andrew Mortensen -Date: Wed Apr 3 14:54:36 2013 -0400 - - modules/sca: ensure line-seize sub update uses index from request - - - lazy removal of line-seize subscriptions that were not used for a - call could lead to failure to release expired seized appearance. - Client must have a lingering, expired line-seize subscription that - hasn't yet been purged by the timer, and indices must not match. - Fix ensures that the appearance-index from the new line-seize - subscription overwrites the index left over from the expired one. - (cherry picked from commit 43cc6015e8604e309672da4d754b5022d1e256c9) - -commit 47aeade304e6731354ff190eb07b2e01a8059a25 -Author: Andrew Mortensen -Date: Wed Apr 3 14:46:27 2013 -0400 - - modules/sca: fix SCA_CALL_INFO_EMPTY macro - - - test should be a logical OR, not AND. - (cherry picked from commit 3339e7a5bd205599fed63f82536626732b3f23d9) - -commit bbd4f9e7f4e27ecc73a5703c1a4acd0331a47f5c -Author: Andrew Mortensen -Date: Fri Mar 15 17:01:23 2013 -0400 - - modules/sca: process BYE without Call-Info from shared line. - - - Ciscos & Aastras don't seem include Call-Info header in BYE. Look up - dialog by tags and release associated appearance-index. - (cherry picked from commit 287cccf2af17e5f2f8fe09c41025b4d27bb4fda9) - -commit eb130422b65cb4ed418c9ed0b9398a069fff397f -Author: Andrew Mortensen -Date: Fri Mar 15 10:22:26 2013 -0400 - - sca: reduce log level to DBG when replacing RURI when retrieving held call. - (cherry picked from commit a51bc822f70f4185b55455456dc147205cbbbdc7) - -commit 489fd1ba70db6aefc68f037eadf92877b1f2e6cf -Author: Andrew Mortensen -Date: Fri Mar 1 16:33:59 2013 -0500 - - sca: fix private hold handling - - - private hold call-info was being ignored in hold reINVITEs, causing - inaccurate "active" notifications to go to subscribers. - (cherry picked from commit 81b5473f5a191a5aa81295acf0d96a22160f7f31) - -commit 888ea024de803c4d01be15cb30929339790a09ef -Author: Andrew Mortensen -Date: Mon Mar 4 23:13:53 2013 -0500 - - sca: fix regression dropping Expires header from SUBSCRIBE replies. - - - extra_headers.len lacked Expires header length after snprintf. - (cherry picked from commit 3b557293a33f6f3003fdd62a45e02cf8736b534e) - -commit 18593c16f5a4a7504a0de890b2bbc9025cff049f -Author: Andrew Mortensen -Date: Sun Mar 3 17:01:53 2013 -0500 - - sca: move SUBSCRIBE response handling to sca_subscription_reply - - - create necessary headers, pass to newly generic sca_reply function. - (cherry picked from commit d528c27b6fa69530bfde4a6ce83c5d4dcc6499a5) - -commit 08b6b184dcab912edf8d58d8867f74f13c50c2da -Author: Andrew Mortensen -Date: Sun Mar 3 17:00:44 2013 -0500 - - sca: reject out-of-dialog attempts to seize privately held call. - - - per spec, reject with 403 Forbidden. - (cherry picked from commit e565748048d7a6b6fda0a28959e092380c5bc26a) - -commit 5f017710a95d21ef89a936ca28ef73f5d80081e2 -Author: Andrew Mortensen -Date: Sun Mar 3 16:59:23 2013 -0500 - - sca: make sca_reply a generic reply function. - - - take a pre-filled extra_headers parameter instead, add with add_lump_rpl. - (cherry picked from commit d6d71b0e217226fe43491a0e9ba75ec0a6649cd5) - -commit 8972be270b422a5a1eef39249162e2abcde0feda -Author: Andrew Mortensen -Date: Thu Feb 14 16:55:36 2013 -0500 - - sca: fix race condition when two endpoints seize same index simultaneously - - - return 480 Temporarily Unavailable to loser of race. - (cherry picked from commit 522d06e75bf3c549af007701332f7db53a1b5ab6) - -commit e2642ea25cc19344d6e3e7f71e9df1cd7ef2532d -Author: Peter Dunkley -Date: Tue Oct 1 10:52:01 2013 +0100 - - core: fix TCP connection leak - - - patch provided by Vitally Aleksandrov - (cherry picked from commit 6cfd13cbddd1869ffbc947fdecd77d18a3fcb886) - -commit a7e7d9277f503ab42055b4b3be130e3f4a6fcae1 -Author: Hugh Waite -Date: Mon Sep 30 10:44:27 2013 +0100 - - modules/websocket: Fix connection leaks - - - Decrease the TCP connection reference count after each use - (cherry picked from commit 27474179bdeef0ddaba05389f510446a387d85e1) - - Resolved conflicts due to new feeatures in master: - - modules/websocket/ws_conn.c - modules/websocket/ws_handshake.c - -commit d5eadc90ebdb6460b43d304de86a37893263ce2d -Author: Hugh Waite -Date: Thu Jul 4 10:30:51 2013 +0100 - - core: Fix connection leak with websockets - - - Decrease connection ref count after using connection - (cherry picked from commit ffdae5987b99b9bfd39992d407a3a0a33aa772ab) - -commit 1e774166724e0bdd2c43091b3b19c1b82d197242 -Author: Hugh Waite -Date: Wed Jul 3 10:39:32 2013 +0100 - - modules/tls: Free TLS data for secure websocket connections - (cherry picked from commit 074f12c5a444188aa023797ac70e2d38d225cb18) - -commit 76319cf9600b71364e3cd6509f61da2f60b2f10f -Author: Hugh Waite -Date: Wed Jul 3 10:46:44 2013 +0100 - - modules/websocket: Fix pkg memory leaks - - - Fix pkg memory leaks in error cases - - Fix incorrect memory allocation size for ws connections - - Fix typo in websocket stats - (cherry picked from commit d0f88e19577d9b914922f83049075b7786f3d8df) - -commit 77a53b8df680808a20c73953f1e5348df5d309d2 -Author: Hugh Waite -Date: Thu Jul 4 09:33:56 2013 +0100 - - core: Improve tcp stats output - - - Add connection ref count - - Add websocket protocols - (cherry picked from commit fb4dc4b7b866239a90a4d6441ed319664697edab) - -commit 052dfbe29933bf773ba5d109a530c2b2f7ecb59c -Author: Daniel-Constantin Mierla -Date: Thu Sep 19 15:59:18 2013 +0200 - - pkg: kamailio - provide -f $CFGFILE to init.d config check function - - - reported by Grant Bagdasarian - - (cherry picked from commit f7fe8b68ffb100fbaa27344e4bee7ba69c760584) - -commit 38157fdbdadd1ff2a0ac902088082ad96b0c2f04 -Author: Daniel-Constantin Mierla -Date: Thu Sep 19 14:06:46 2013 +0200 - - core: reset fields from sip_msg_t in shm cloned structure - - - instance was pointing to pkg - -commit 1550ce9a0ffa012daf413a0abee5d80bd7cc60de -Author: Daniel-Constantin Mierla -Date: Thu Sep 19 14:05:21 2013 +0200 - - tm: reset faked request fields that can be set in failure handlers - -commit 3ca71bbf4f61c83d8e82c988d0789d147f81f30b -Author: Hugh Waite -Date: Wed Sep 18 21:34:16 2013 +0100 - - modules/sdpops: Check for valid sdp body in sdp_remove_line_by_prefix - - - Fixes crash when used on requests with no body - -commit 84b21f2e9f602032d5950069cbd1dbf3ac416fcb -Author: Hugh Waite -Date: Wed Sep 18 21:58:12 2013 +0100 - - modules/app_lua: Fix off-by-one error in modf - - - Fixes calling sr.modf with additional parameters - -commit 8ffa88060ebfd0634c0cebfea43189a8e1545b4b -Author: Juha Heinanen -Date: Wed Sep 18 08:29:41 2013 +0300 - - modules/lcr: fixed checking of IPv4 address in to_any_gw_2 function - -commit a331af11519765e863ddad68878f7c5d571d0823 -Author: Ovidiu Sas -Date: Sun Sep 15 16:38:34 2013 -0400 - - xhttp_pi: fix crash when checking bad configs - (cherry picked from commit d1219dc0d0c5e2eab0672a439aa7ce6486c31ba3) - -commit c79fb705391b90813a501165049ac79aff80928f -Author: Daniel-Constantin Mierla -Date: Sat Sep 14 11:08:23 2013 +0200 - - tm: docs - no event_routes.xml in this version - - - readme regenerated - -commit 07a8f0da3d8f3d1ec4b3e4e88db485e5015a31f2 -Author: Daniel-Constantin Mierla -Date: Sat Sep 14 09:46:23 2013 +0200 - - tm: added missing documentation for t_check_status() - - (cherry picked from commit f328b864418020b1e166b13804fe173110500d75) - - Conflicts: - modules/tm/doc/functions.xml - -commit 120b736c14b3dae780cfc9ef7fc8fd1c79d32d92 -Author: Daniel-Constantin Mierla -Date: Tue Sep 10 14:14:52 2013 +0200 - - kamdbctl: added missing dbuid tables group creation - - - patch by elactrum [at] jamailca.com - (cherry picked from commit 6f17209a70e84d91976ea42b476ae248b9b37501) - -commit 51f40460096d9c249ce34d9b4fbecf366b5f974e -Author: Victor Seva -Date: Mon Sep 9 16:52:47 2013 +0200 - - uac_redirect: get_redirect() check reason value before using it. - - This fix a core dump when get_redirects() config fuction is called with just - the one parameter. - (cherry picked from commit abf0026782c0ba4643feb25ded022e8c12725584) - -commit 9c8fd38683d9f6531b0d6ee966d81d878095bf6a -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 22:59:13 2013 +0200 - - registrar: reset r-uri pointer after backup in lookup_branches() - - - otherwise can be invalidated by next branch lookup - - (cherry picked from commit 9b44e4b48862947f2ea634c6dd611ce7c07546a2) - -commit d8739609c85cb00da9486b3f91d0c4834048485f -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 13:04:23 2013 +0200 - - topoh: safety check for missing To header - - - based on a patch by Michel de Weerd, FS#303 - - (cherry picked from commit 362d374a61953aee3cf9f96eadaef63c5f22763e) - -commit 756e30f5c33ef4ab122b333b4d1b6ce80cec0f2f -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 12:33:45 2013 +0200 - - db_postgres: use variable for make tool in module Makefile - - - fixes builds in BSD systems - - patch by Victor (coyote), FS#335 - - (cherry picked from commit 7abd496560c6274680d451f49355ad1f6a14a6a7) - -commit 796d53ddec3fe12dcb93d4a4c293de0f610581d5 -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 11:54:07 2013 +0200 - - tm: readme regenerated from xml files - -commit e7a00bb913fc24be894a668317dd2f2ac143cbed -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 11:53:28 2013 +0200 - - tm: updated xml docs with t_set_disable_internal_reply() - - - backported from 6073949aa224ea7a973058891a88a58cc0841860 - -commit 55587b6bd035f2ab10f73c6c9bde95628688e799 -Author: Daniel-Constantin Mierla -Date: Fri Aug 23 21:03:13 2013 +0200 - - tm: removed note about no-implentation for no-reply flag for t_relay_to() - - (cherry picked from commit ef9b69bbb54302e9985dd37d79831b6f80463fc1) - -commit 98ba4cec3ca2caef40725c3884e7dd5693d6c3c1 -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 11:44:23 2013 +0200 - - rtpproxy: updated rtpproxy_manage() to handle PRACKs with sdp - - (cherry picked from commit 2aa5095252f9434c7c2a63ecb130bdaf1346fde9) - -commit 3d836040bdb6d191e6f6a54e37fe680e1e3973d0 -Author: Daniel-Constantin Mierla -Date: Wed Sep 4 11:47:36 2013 +0200 - - tm: re-added the option for no-internal reply on error - - - new function t_set_disable_internal_reply(0|1) to disable|enable this - option per transaction - - t_relay_to() flags re-enabled for this option - - backport of 0f2f9c85eff0b6ad35b4c58dfcde74c8a65559d6 - -commit 2a224a569cea270d8db84438f163b9f309569df9 -Author: Daniel-Constantin Mierla -Date: Thu Aug 22 00:14:53 2013 +0200 - - core: print src address details if initial message parsing fails - - - reported by Juha Heinanen - - (cherry picked from commit 3ccf4b43e81bd2654cb306a3c2cc21b97cb51f62) - -commit fd4a2dde96a692c165f382839c3bef8636dfd9e2 -Author: Juha Heinanen -Date: Thu Aug 22 08:20:52 2013 +0300 - - modules/lcr: added some linefeed chars missing from syslog messages - - - Patch provided by Kevin Scott Adams. - (cherry picked from commit d03651fb4c3a6b50923029e121eed201fb1ff550) - - -===================== 2013-08-15 Version 4.0.3 Released ===================== - -===================== Changes Since Version 4.0.2 =========================== - -commit a75a8a140e53ef8cee58d670b3954e7ac4cdb1b8 -Author: Daniel-Constantin Mierla -Date: Thu Aug 15 15:33:55 2013 +0200 - - Makefile.defs: version set to 4.0.3 - -commit c67ac0b5ef5183947acf02d496eb5899dad0ba9b -Author: Daniel-Constantin Mierla -Date: Sun Jun 16 17:17:36 2013 +0200 - - topoh: safety check for To header - - - protection for the case when sanity module checks are not enabled - - reported in FS#303 by Michel de Weerd - - (cherry picked from commit 4f3d04d547c66a1b59398cf80e93974175141514) - -commit 2ffedf0e6bd3d9231988fbb70153bd6d72ae63ab -Author: Daniel-Constantin Mierla -Date: Thu Jul 4 11:48:26 2013 +0200 - - tm: avoid double execution of response-in callbacks - - - double execution of response-in callbacks could happen when using tm - pvs inside core reply route, being done in transaction matching - function, which is executed again by tm reply received function - - (cherry picked from commit d4cef7f5e49105c65df9651a1ad086b035f8ffdb) - -commit 9e231ae7f6a80abf686448e1593195b9012c2e8c -Author: Daniel-Constantin Mierla -Date: Thu Jul 4 11:47:18 2013 +0200 - - core: new internam sip msg flag FL_TM_RPL_MATCHED - - - mark sip reply when matched first time by tm - - used to avoid double execution of response-in callbacks - - (cherry picked from commit 230a138991b25f7f9b07b4f9cbeffbdd6acef2e8) - -commit 58322807c275ce07be6a339dd5db2416f1905470 -Author: Daniel-Constantin Mierla -Date: Sat Jul 20 10:01:25 2013 +0200 - - Makefile: sercmd renamed to kamcmd in uninstall option - - (cherry picked from commit ab601ea9a1b2561c2eaa860583cdeed478b9ea8d) - -commit 17f2611e668af139399c21677d3503c0c5a6a860 -Author: Daniel-Constantin Mierla -Date: Sun Aug 4 14:22:41 2013 +0200 - - imc: wrap bit shift defines in parenthesis - - - avoid priority conflicts when using the defines - - reported by Shankar - - (cherry picked from commit e6e0419a46c3e5127d07c95390931d10b2a01c3b) - -commit 75e20d79763094fccaacddf127699ce9f22e973a -Author: Daniel-Constantin Mierla -Date: Thu Aug 15 10:38:26 2013 +0200 - - pkg/rpm: version set to 4.0.3 in spec files - -commit 701b5faef517a65208907e771d2c3b7b015afb19 -Author: Daniel-Constantin Mierla -Date: Thu Aug 15 10:37:15 2013 +0200 - - pkg/deb: version set to 4.0.3 in spec files - -commit 3898507f56eefe5c9d8e72b37280e0d133f6e357 -Author: Daniel-Constantin Mierla -Date: Tue Aug 13 09:37:21 2013 +0200 - - usrloc: safety checks to catch empty ruid - - (cherry picked from commit b0e9132ccd1e8385b8b4faf72db806320d48e2f5) - -commit e59bb3303252c0b47f6027ae2b99a11096521154 -Author: Daniel-Constantin Mierla -Date: Tue Aug 13 09:19:02 2013 +0200 - - usrloc: more verbose log messages in case of failure to update db records - - (cherry picked from commit 66c8e730d59f9816f09573f5300e4463e5997876) - -commit d3be7fa1c47d12a1eb6e725729c6a0a2e481bc63 -Author: Hugh Waite -Date: Mon Aug 12 11:05:55 2013 +0100 - - rls: Fix memory leak in rls notify.c - - - xml is leaked in an error case - -commit a72a01a1cac4bd17e0aa91912ab158e73908d561 -Author: Hugh Waite -Date: Mon Aug 12 11:15:55 2013 +0100 - - presence: Iterate correctly around presence updates - - - timer_send_notify should increment the subset by one on each loop - -commit 6abd4b4d1eeea2c57a8bcfb071fadaca21efc20f -Author: Hugh Waite -Date: Tue Jul 16 10:51:29 2013 +0100 - - outbound: Fix freeing null pointer in destroy function - - - Only appears in error cases, e.g. syntax check - (cherry picked from commit e88af0a02de79fac583c126f08d762f7ef3f1b01) - -commit d2f62dd1855faef35bea8eff932d250557868ae5 -Author: Daniel-Constantin Mierla -Date: Thu Aug 1 15:58:59 2013 +0200 - - db_flatstore: free id pointer if no more space for table name - - - related to previus commit on this module - - keep table name null terminated - - (cherry picked from commit 6a981d3d922c914054d4c8dc7e672bb6a4ddb5f5) - -commit c50d559b4da94238a430c059dd02d74e63dd96fe -Author: Federico Cabiddu -Date: Mon Jul 29 07:59:34 2013 +0200 - - db_flatstore: fixup for new_flat_id function - - - locally copy table's name - - (cherry picked from commit 8fb0f711aaa611eac8b2776c7e5ae3c5e19243ac) - -commit 76b82480f74006d830afc9c9ae81ada25dbc7730 -Author: Daniel-Constantin Mierla -Date: Fri Jul 26 14:52:21 2013 +0200 - - uac_redirect: fixup for using acc table parameter - - - set reason parameter for acc function - - based on a patch by Federico Cabiddu, FS#327 - - (cherry picked from commit 3d33733f299dda595704108aef73a2912dc3069f) - -commit ece14d42fda4baefc4f0e8465faad17b678a6a4b -Author: Federico Cabiddu -Date: Mon Jul 29 07:59:13 2013 +0200 - - acc: acc_db_set_table_name fixup - - - add termination char to db_table_name_buf - - (cherry picked from commit 7ba6cbfcaf70cb546ea3a9f148a0f0b0bc38c16d) - -commit ea266beb3d678b36efeb82feeba6087df90d9f19 -Author: Daniel-Constantin Mierla -Date: Fri Jul 26 14:55:38 2013 +0200 - - acc: safety check for accounted values not to be NULL - - - based on a patch by Federico Cabiddu, FS#327 - - (cherry picked from commit fb3a5f7022ebd20fc516b5b8303a0274bda18258) - -commit 9f0a42dd31d765541c02d2b818dd52643589f59d -Author: Daniel-Constantin Mierla -Date: Tue Jul 2 23:32:37 2013 +0200 - - dialog: detect if no trasaction is created after config execution for new dialogs - - - release the dialog to avoid endless storage in state 1 - - (cherry picked from commit fa0339b1906690f009786fc9ed92c73a8c9e6520) - -commit 369164c689950595b7e35c36a810ecd41aaa7a0a -Author: Daniel-Constantin Mierla -Date: Mon Jul 1 15:22:33 2013 +0200 - - dialog: increment cseq in early stage for PRACK and UPDATE - - - rework from a patch by Halina Nowak - - (cherry picked from commit 6cf3ab0ca6f38d1d2e60dbc644bb4d2fb563919a) - -commit 91f64af86eebde4a179a4d9cb6837994a587a967 -Author: Daniel-Constantin Mierla -Date: Mon Jul 1 14:51:03 2013 +0200 - - dialog: avoid realloc of memory for cseq when setting leg info - - - free already allocated structs when needed - - has part of a patch by Halina Nowak - - (cherry picked from commit 71d7dc6bc750406d510e0571e05da3966911cfea) - -commit 573096ad14c34364dad160bffd7e7ed5d007f5f6 -Author: Daniel-Constantin Mierla -Date: Mon Jul 1 14:44:45 2013 +0200 - - dialog: fixed callee cseq reference - - - part of patch by Halina Nowak - - (cherry picked from commit ed6dbb0ca11206049bee9ab515ce071eb70e7b63) - -commit 3935fedf23f3bf2b6675182193cef6af3bbd903a -Author: Daniel-Constantin Mierla -Date: Wed Jul 31 12:22:12 2013 +0200 - - app_perl: push the sip msg structure to perl after initializing it - - - reported by David Cunningham - - (cherry picked from commit 341f810dca0cc0596e22f2ac1bca86de0b8d142d) - -commit 3438215263f20f63f0e69121113999f952334886 -Author: Camille Oudot -Date: Tue Jul 23 11:11:01 2013 +0200 - - modules/ims_registrar_scscf: safety check in async_cdp_callback - - (cherry-picked from commit 1aea13af9b3eea3788e90411bd94cb9e0b0c4ea3) - -commit 4471593e5f6e292d205bd84fb5912088bde32870 -Author: Daniel-Constantin Mierla -Date: Thu Jul 25 10:14:55 2013 +0200 - - app_perl: move initialization of SIP message var after initialization of temporary environment - - - upon a report by David Cunningham of a leak in operating system - memory - - (cherry picked from commit 6ff74701652a11497bd82ee3ba2ac7547d1ce666) - -commit 86864275e240be94d901fe21dde2472701e1669e -Author: Daniel-Constantin Mierla -Date: Wed Jul 17 20:19:28 2013 +0200 - - uac: restrict check of multiple from/to header changes to request route blocks - - - it can occur many times in due to branch route usage - - reported by Andrew Pogrebennyk, FS#323 - - (cherry picked from commit d3a0a8b15af59846fdaee5d9ceae61484f1d7301) - -commit b7e890b309331a13eb92c5080d276036be5833ae -Author: Daniel-Constantin Mierla -Date: Wed Jul 17 00:04:06 2013 +0200 - - presence_dialoginfo: add schema to entity - - - patch by Pawel Sternal, FS#324 - - (cherry picked from commit 716ffd2787a68734a21a1374c3dc6dd4783844bd) - -commit b87040d6839985ceb107e4a097df71afd8c69fa5 -Author: Daniel-Constantin Mierla -Date: Tue Jul 16 21:43:42 2013 +0200 - - usrloc: fixed type for db_ops_parameter - - - reported by Alex Hermann - -commit fb9a6ff96355093baa59c4f0c5c8505cb7d29311 -Author: Juha Heinanen -Date: Sat Apr 27 18:07:21 2013 +0300 - - modules/usrloc: fixed typo in db_ops_ruid param name - - (cherry picked from commit edebc03f65445f968accb58b5a761817aaee55e8) - -commit f8826df994a6baac9cfee219abafa3e1b82ee4f8 -Author: Daniel-Constantin Mierla -Date: Fri Jul 12 00:44:51 2013 +0200 - - core: avoid doing dns srv again after naptr function that includes srv lookup - - (cherry picked from commit 80935f9e8bbe20e5c320828183999b5d395ec34c) - -commit d821224ff33e7f7c43c6598482ab0870f728e763 -Author: Victor Seva -Date: Sat Jul 6 20:22:41 2013 +0200 - - modules/nathelper: remove natping_proceses limit - (cherry picked from commit edb00b0566595b509a7cdf9a1c7455ce6ee6c4c8) - -commit 3612981970e8002b3ab7f7d0324354e282205e2b -Author: Daniel-Constantin Mierla -Date: Thu Jul 11 14:36:02 2013 +0200 - - pipelimit: avoid double locking when changing pipe via rpc - - (cherry picked from commit 0c6fef5fdc2a586ebfa607d3b5344266c08ca996) - -commit 5e11ebf34bd525f02c7ff08b9520382c3aaf00f2 -Author: Daniel-Constantin Mierla -Date: Thu Jul 11 14:32:48 2013 +0200 - - pipelimit: avoid double locking when changing pipe via mi - - - reported by Krischan Udelhoven, FS#315 - - (cherry picked from commit 04fd56dc1b84b70a04438ccbf719eb85177524ad) - -commit d8c3a23ad2a5c925b16d75f33fcb865f09d7f308 -Author: Daniel-Constantin Mierla -Date: Wed Jul 3 23:29:29 2013 +0200 - - uac_redirect: adapted previous backport to append_branch() prototype for v4.0 - -commit 0227f5b61e1ea03e92a7fec9b177f602481fac84 -Author: Daniel-Constantin Mierla -Date: Wed Jul 3 23:23:40 2013 +0200 - - uac_redirect: fetch all contact headers in redirect replies - - - only first header was considered for redirect handling - - based on a report by Geoffrey Mina - - generate fake ruid (used as instance and user-agent) to satisfy the - requirements of t_load_contacts()/t_next_contacts() - - (cherry picked from commit c5081ad634742d88e56e4fcc097b756098119e4e) - -commit c4b51e9f51b4b2c4e908b4c4dc33b824021f1ca1 -Author: Daniel-Constantin Mierla -Date: Mon Jun 17 11:00:29 2013 +0200 - - pipelimit: fixed typo in module parameter name - - - patch by Krischan Udelhoven - - (cherry picked from commit c5573dddc4c11898fb68365e9a311aff0f1690c8) - -===================== 2013-06-12 Version 4.0.2 Released ===================== - -===================== Changes Since Version 4.0.1 =========================== - -commit f6fc38aab505aab1301024b58581ebec9a7181c4 -Author: Daniel-Constantin Mierla -Date: Wed Jun 12 15:50:45 2013 +0200 - - Makefile.defs: version set to 4.0.2 - -commit d4df824c3f16cf934d9056e94f8f44ae0bf3016f -Author: Daniel-Constantin Mierla -Date: Wed Jun 12 12:29:39 2013 +0200 - - pkg/rpm: version set to 4.0.2 in spec files - -commit 963fcd0ccfac6cccdc27b3a2d7a14d207ed7c516 -Author: Daniel-Constantin Mierla -Date: Wed Jun 12 12:29:16 2013 +0200 - - pkg/deb: version set to 4.0.2 in spec files - -commit d54024f873c641c21da197ee7eb3a49746f58229 -Author: Daniel-Constantin Mierla -Date: Wed Jun 12 09:14:14 2013 +0200 - - registrar: regenerated the readme file - -commit 81b61679cabd2470becf86700b777cc496f1d330 -Author: Daniel-Constantin Mierla -Date: Wed Jun 12 09:11:56 2013 +0200 - - mtree: use debug level for log message when invalid character in value to be matched - - - more verbose message when an invalid database record is found - -commit 6b0d759f0dabf36c529c6c7d22c8333e7a8731e1 -Author: Daniel-Constantin Mierla -Date: Tue Jun 11 18:39:31 2013 +0200 - - registrar: fixed typo in example of xavp_rcd parameter - (cherry picked from commit c228851e068a080050c79107c760f8ab5ffae967) - -commit 3f1f50068b96ea4bde1a7255842bf07683cbed8a -Author: Daniel-Constantin Mierla -Date: Tue Jun 11 18:37:32 2013 +0200 - - registrar: more debug messages when adding ruid xavp - - - free local ruid xavp if cannot be added to root list - (cherry picked from commit 9589466916305146fb4f982542c3f3a51126dcef) - -commit 56ba8ea8b1f1f26ccc36dfb073e1559eca4d77b1 -Author: Camille Oudot -Date: Tue Jun 11 16:34:49 2013 +0200 - - modules/ims_isc: several safety checks - - - fixed potential buffer overflow - - fixed potential crash if regcomp fails - -commit 9ee53f2abe580026c83d62b0edf1f6288dc0111a -Author: Vicente Hernando -Date: Mon Jun 10 12:14:54 2013 +0200 - - app_lua: solve crash when setting a variable not convertible to string. - (cherry picked from commit 4af0bc13901525a5638c2c64b863f377e033903f) - -commit c3f4bda21273a5172dbfe048c5a1a14216f6d047 -Author: Camille Oudot -Date: Tue May 28 17:53:07 2013 +0200 - - modules/ims_registrar_scscf: safety check for log line when recieving an SAR_UNREGISTERED_USER response - -commit 1fefe2feae9fec5621d949fe3857fcf8fb62068e -Author: Ovidiu Sas -Date: Fri Jun 7 12:09:38 2013 -0400 - - Makefile: update de-stable target: squeeze -> wheezy - (cherry picked from commit fd8dfb71d0eeae891ad0c83ff332929d54f3a3ec) - -commit a9089d05121e05287ce91fddb12769acfae866c8 -Author: Ovidiu Sas -Date: Fri Jun 7 11:17:10 2013 -0400 - - nathelper: fix IPV6 compiler warning - -commit 21747d786a4e0f8f606baeeb4f39166d351b824b -Author: Daniel-Constantin Mierla -Date: Thu Jun 6 11:47:10 2013 +0200 - - cfgutils: updated docs to specify correct time unit for usleep - - - it is microseconds, pointed by David K - (cherry picked from commit 8e937d260d0ff41f50be56e0a46ede44554f3f99) - -commit e52f1d6e5702bce8031d224f006627ab3fc3f859 -Author: Daniel-Constantin Mierla -Date: Thu Jun 6 09:09:14 2013 +0200 - - kamailio.cfg: reset $du for voicemail re-routing in failure route - (cherry picked from commit c4b29f6fac6155b9b087737df5956b687ff4e36a) - -commit 3dc0b79993863f7399b1cb579d81f3637370e35a -Author: Daniel-Constantin Mierla -Date: Wed Jun 5 22:44:13 2013 +0200 - - kamailio.cfg: few updates related to nat traversal - - - added "co" flags to rtpproxy_manage() to change all IPs in sdp, many - phone get confused if only media ip is changed - - add nat=yes parameter only for in branch route to avoid multiple - occurences - (cherry picked from commit 0193489cca56f58b512f5379c078c98a366c17e2) - -commit 72b483393b5e7c85096a79fd999caf17edde69b6 -Author: Jason Penton -Date: Wed Jun 5 08:58:29 2013 +0200 - - module/ims_auth: protection against crash if there is no auth vector initialised. - - patch submitted by Camille Oudot - (cherry picked from commit 4b65964dbe1f38bcf867301d43933f9bbf91ab7d) - -commit 51fc2140e1d0708ed213d4903552c2f98a39a5da -Author: Daniel-Constantin Mierla -Date: Mon Jun 3 20:53:05 2013 +0200 - - dialog: shift next timer run for keepalives of dialog - - - reported by Daniel Tryba - (cherry picked from commit a17a32e5f7a3120c200d6e48fe91d7aa1dfd28b1) - -commit de9607079be932be6effe40573b3219724f4393e -Author: Daniel-Constantin Mierla -Date: Mon May 27 16:54:02 2013 +0200 - - core: enclose uri in angle brakets for redirect contact header - - - safer for uri with parameters and no q - - reported by Dan Bogos - (cherry picked from commit 74bf08ef30cf18fb609c2c067584f1515ede23da) - -commit f01889d6e717892d38df8c267e20c269dbc83b0e -Author: Daniel-Constantin Mierla -Date: Sun May 26 10:43:24 2013 +0200 - - dmq: many safety checks for mem mallocs and function return codes - - - added license header in the files - (cherry picked from commit 1977645ceb12ca2d0f2f767046606f6c5ae2c3bb) - -commit 2c04dd88c8911f3a67f3f94a5ad11b1ab865aca9 -Author: Daniel-Constantin Mierla -Date: Sat May 25 16:30:33 2013 +0200 - - protoshoot: use Makefile pattern for utils - - - link to libsctp if SCTP support is enabled - (cherry picked from commit 1bdbdb64e4862ddb69c2bf13be0f9be93968bb1e) - -commit cd1120c6500bb396af9b5410ecd535160c2ba9d7 -Author: Konstantin Mosesov -Date: Sat May 18 13:56:22 2013 +0300 - - parser/sdp: Fixed segfault in sdp_print() when no SDP body. - - - Failed scenario: - remove_body(); - msg_apply_changes(); - sdp_print("1"); - - - Result: sdp=0x0 - (cherry picked from commit e81b3aac19ab567813d6cb21fcba3d9bd6e1cc90) - -commit edde8d20806aca248e3a1c1e439084988d62d361 -Author: Daniel-Constantin Mierla -Date: Fri May 17 00:46:42 2013 +0200 - - core: fixed printing function name in log message - - - based on http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html - (cherry picked from commit e081c2880b46174ad836ab1f56e3062bb17b4332) - -commit 959cab2009427fd850318980914dd0e91b3cbff8 -Author: Daniel-Constantin Mierla -Date: Wed May 15 22:45:18 2013 +0200 - - pv: clone result of several string transformations - - - it is safer for assigning back to the same variable on which the - transformation was applied - - reported by Martin Mikkelsen - (cherry picked from commit fe7e4a5152674aa9c81c09dd2fc9938d9e9e762e) - -commit c3017b2e79e47edd88f2b4917afd4794d4e6ef11 -Author: Daniel-Constantin Mierla -Date: Tue May 14 19:52:45 2013 +0200 - - utils/misc: updated vim syntax file - (cherry picked from commit 6038bae188863f541994976d299c38f50b0a699b) - -commit 90a8f28c01d804dccc50112af3235fb886e57d89 -Author: Daniel-Constantin Mierla -Date: Mon May 13 10:59:20 2013 +0200 - - core: debug message to show mapping of routing block names to ids - (cherry picked from commit 80e8058d9acea7c994819d043456fd1b449b048b) - -commit 369143aeeab0761edd70ab42cbac5648194f8a55 -Author: Juha Heinanen -Date: Sun May 12 16:10:40 2013 +0300 - - modules/presence: downgraded unsupported event syslog message - - - Downgraded unsupported event syslog message from error to notice. - (cherry picked from commit afdae93c5eba15496498be292c0c99608d801757) - -commit 2c4bc8619c61993c02eccaada7dca5f5c84199af -Author: Daniel-Constantin Mierla -Date: Tue May 7 19:15:36 2013 +0200 - - core: get rid of deferencing type-punned warning in deb wheezy - - - reported by Victor Seva - (cherry picked from commit 81d3eebd51089686949ab22da60166d4f3a460a7) - -commit 62071fddff1793254e3d615ccb956bbb7ce5ccca -Author: Henning Westerholt -Date: Thu May 2 21:17:57 2013 +0200 - - mangler: fix double definition of contact_flds_separator, reported from ld - (cherry picked from commit 003d87edc23f62de98a1a22db03b12ea58abcbc6) - -commit bb9a8ea4dcff649c06395efbe4f3aa2cc4f269f5 -Author: Peter Dunkley -Date: Mon Apr 29 20:54:52 2013 +0100 - - modules/websocket: fixed mandatory headers check - (cherry picked from commit 8f74c57605fdd1d31c7808a3b8afc79cc981b370) - -commit 61f68eae79b09898cec4a90f298c562f4c2f9a93 -Author: Peter Dunkley -Date: Mon Apr 29 20:38:06 2013 +0100 - - modules/websocket: doubled the size of the buffer for adding headers to WebSocket handshake responses - (cherry picked from commit a2e7f65ee8b86d37a6772619ae10087a05219192) - -commit 6eb6d92af2fe55d14b255bb5c5c939cc2f78ba79 -Author: Daniel-Constantin Mierla -Date: Fri Jun 7 11:00:51 2013 +0200 - - modules/rr: completely reverted after_strict() to its pre-outbound form - - - backported from c9448d9657f0e5792072c6803643c8d9075d711a by Peter - Dunkley - -commit 4b8f5eea61310a7d2545d06d513697b0c8631289 -Author: Ovidiu Sas -Date: Thu Jun 6 15:21:19 2013 -0400 - - registrar: print bogus AoR in error log - (cherry picked from commit e41230071e367015ecf794c147c60fda0bcd1907) - -commit 3a64a12e056670766da7e49a0275c1240d6d229a -Author: Daniel-Constantin Mierla -Date: Fri May 31 17:05:40 2013 +0200 - - pua: release lock on not finding temp dialog - - - patch by Halina Nowak - (cherry picked from commit 09cc2207b265d51dcbc28279623bf9c597fa3b46) - -commit be5c2e31c6498d916762b87b6d5e76403f9f1824 -Author: Hugh Waite -Date: Wed May 29 15:49:52 2013 +0100 - - documentation: Rebuild auth README - -commit 6978f42ae854385b437f637f7e6ce3fced33474c -Author: Hugh Waite -Date: Wed May 29 15:46:18 2013 +0100 - - documentation: Rebuild all modified READMEs - -commit 96aff46759acd1df1a585866c1ce9295cb2810b1 -Author: Hugh Waite -Date: Wed May 29 14:10:31 2013 +0100 - - auth_identity: Fix TOC in documentation - (cherry picked from commit d4743ac526184ce3234518234ca77c715ca2f6b6) - -commit 203ba3e9c51852b245448ab44f4a7c181919cd33 -Author: Hugh Waite -Date: Wed May 29 14:11:23 2013 +0100 - - avp: Fix TOC in documentation - (cherry picked from commit 973973bef43acac5cdbae930427b6e347746a337) - -commit ce1da89afedc38e606446527bf218ea9eb032221 -Author: Hugh Waite -Date: Wed May 29 14:37:03 2013 +0100 - - blst: Fix TOC in documentation - (cherry picked from commit f53afaaf8c7fe65507ebe179a05049c64b380632) - -commit 479199a575a3cb4a8385cbf8ad8ece5d798e09f1 -Author: Hugh Waite -Date: Wed May 29 14:37:26 2013 +0100 - - cfg_db: Fix TOC in documentation - (cherry picked from commit c209510de26aadc7ff01506dca42ec0b39904f0a) - -commit 3d6e26cd8b2188b6236c98977c4c312c2320d3bd -Author: Hugh Waite -Date: Wed May 29 14:37:45 2013 +0100 - - cfg_rpc: Fix TOC in documentation - (cherry picked from commit ca060e774dd95b0831b2efeea9b355ba3a4fc068) - -commit 67716c6c5cf5fbe89e69df5dc86db0f7dce7ed3c -Author: Hugh Waite -Date: Wed May 29 14:38:07 2013 +0100 - - counters: Fix TOC in documentation - (cherry picked from commit 2980ba3881325102835297bc5cdf5b3199a8f9b7) - -commit 183562260acce4b5fcaeb1831b4c50757dfb9dbd -Author: Hugh Waite -Date: Wed May 29 14:38:25 2013 +0100 - - ctl: Fix TOC in documentation - (cherry picked from commit cff735c7d4933d8fac54471897173a6b6c75bd4f) - -commit 43e15fa83ef1e5b043f1d2aca69864030f21dc81 -Author: Hugh Waite -Date: Wed May 29 14:38:43 2013 +0100 - - db2_ldap: Fix TOC in documentation - (cherry picked from commit 2e4e4d54015f850b377beb30a72cc4e0b2cb1cce) - -commit e6ee88798b26af044afe5d407cdb4c637171fb70 -Author: Hugh Waite -Date: Wed May 29 14:39:45 2013 +0100 - - db2_ops: Fix TOC in documentation - (cherry picked from commit f29709478f3492741803cf8ce100d6aa843de6be) - -commit d680a29621d81e4bd99a79c20474ff275eb364ee -Author: Hugh Waite -Date: Wed May 29 14:40:06 2013 +0100 - - db_flatstore: Fix TOC in documentation - (cherry picked from commit 86b0c38c38822c93ccd3f2a80f629f35c83877bf) - -commit 2483b36569ca27db9e1952afdf9de6a838de3b4b -Author: Hugh Waite -Date: Wed May 29 14:40:31 2013 +0100 - - iptrtpproxy: Fix TOC in documentation - (cherry picked from commit aaa7c1ca5b61ab156dc548647b5021cdfce79df8) - -commit f281fc57de32fe4ed23e5cfc44039ec4d83b43e3 -Author: Hugh Waite -Date: Wed May 29 14:40:54 2013 +0100 - - malloc_test: Fix TOC in documentation - (cherry picked from commit fa90c51bb3c1eace5ca3ef75bb0656ad00512081) - -commit f2d0437086f2208036affbf4a6a43fd5c47f27aa -Author: Hugh Waite -Date: Wed May 29 14:41:28 2013 +0100 - - mangler: Fix TOC in documentation - (cherry picked from commit 0587120366a1e434c4b037aa9aea13ad47c00949) - -commit 88ba330fff5556d893a426acc1c1b96b1443ca72 -Author: Hugh Waite -Date: Wed May 29 14:41:51 2013 +0100 - - prefix_route: Fix TOC in documentation - (cherry picked from commit 0fec2b0e212a3578474ce4eb7165d218a5008741) - -commit 2b73d4a7a584891e3ce4087002418039bfcfa842 -Author: Hugh Waite -Date: Wed May 29 14:42:05 2013 +0100 - - print: Fix TOC in documentation - (cherry picked from commit 2a7b143ac5e16da2ef5a1b249a041a009fe2403c) - -commit 36fcb32c129a43bd8056a7b8bc3e0b44e0f266d0 -Author: Hugh Waite -Date: Wed May 29 14:42:20 2013 +0100 - - print_lib: Fix TOC in documentation - (cherry picked from commit c6a6057ad0a121b5fb756c05ebe7ae8819ad1eea) - -commit adaa412871b4e489ff41ba585365711cf2df5965 -Author: Hugh Waite -Date: Wed May 29 14:42:35 2013 +0100 - - sanity: Fix TOC in documentation - (cherry picked from commit 0428706c4c8ebb8ab55e29acea02e574a3f7301f) - -commit 461b1e248f0d3f749282f2145c4176bb979b5e66 -Author: Hugh Waite -Date: Wed May 29 14:42:54 2013 +0100 - - sl: Fix TOC in documentation - (cherry picked from commit 47c467fd2ea2351112acadd1f2b7317b97a15a86) - -commit de89f88a99ce546c73a4dcf52c37c42078dce972 -Author: Hugh Waite -Date: Wed May 29 14:43:09 2013 +0100 - - sms: Fix TOC in documentation - (cherry picked from commit 30a01b64344ae050a79cce83f56de56032580138) - -commit d115fa0291aa927f2ff8ceec67f29732c7faa69b -Author: Hugh Waite -Date: Wed May 29 14:43:24 2013 +0100 - - textopsx: Fix TOC in documentation - (cherry picked from commit ec8c442d890d875cc412b24fdfafc4bac2d43d7e) - -commit 07f8341cc900dcb3b1c794f90d661619ce9d96bf -Author: Hugh Waite -Date: Wed May 29 14:43:42 2013 +0100 - - timer: Fix TOC in documentation - (cherry picked from commit e7b02dfc716f39465600170059559af042642062) - -commit b66db21b7ece75e8ab241a2c3e910c606bca8519 -Author: Hugh Waite -Date: Wed May 29 14:43:57 2013 +0100 - - tls: Fix TOC in documentation - (cherry picked from commit 935607223847032559156c22e0a0988fd32e9d17) - -commit 04b1687078f26fceb7b50384c0b2f1f4a349e4a1 -Author: Hugh Waite -Date: Wed May 29 15:10:38 2013 +0100 - - tm: Fix TOC in documentation - -commit 7e3b141db106062141e18365601039ed382125e7 -Author: Hugh Waite -Date: Wed May 29 14:44:28 2013 +0100 - - xmlops: Fix TOC in documentation - (cherry picked from commit 285142447f23aa317a0a0d5b3e6e57d3afa78961) - -commit 5b0dc97812273d4f2cde2e4fd63df5c29c84165b -Author: Hugh Waite -Date: Wed May 29 14:44:45 2013 +0100 - - xprint: Fix TOC in documentation - (cherry picked from commit 3a1c8104aca76ee1d0f3565c1179c67685d5e838) - -commit fc0b618fe2dfc8c54093e61c763bd3052fb27a86 -Author: Hugh Waite -Date: Wed May 29 14:45:28 2013 +0100 - - uid_auth_db: Fix TOC in documentation - (cherry picked from commit 740e37bd1f6e2370bae02b5e8d6d4fab8e89eaa9) - -commit 665573c8561aa69641b64062b2b5cd720914c925 -Author: Hugh Waite -Date: Wed May 29 14:45:49 2013 +0100 - - uid_avp_db: Fix TOC in documentation - (cherry picked from commit bdfb7274ffeffaf99ad8b4aeebf9b9493685f7b7) - -commit 6e996037deb698e8cb40a010c45004136ce74f7f -Author: Hugh Waite -Date: Wed May 29 14:46:04 2013 +0100 - - uid_domain: Fix TOC in documentation - (cherry picked from commit a20b97560d35f367b0a8d8b203e9566e42acde52) - -commit 0f1f2f37546f6c4b0f7c7a27df684a81c8e5a8fa -Author: Hugh Waite -Date: Wed May 29 14:46:24 2013 +0100 - - uid_gflags: Fix TOC in documentation - (cherry picked from commit 396363a78875af7fc6444705d5482d579d5ac0c5) - -commit 27e630e4fa8346b19f712ee5b7c5028bbfbf20ef -Author: Hugh Waite -Date: Wed May 29 14:46:40 2013 +0100 - - uid_uri_db: Fix TOC in documentation - (cherry picked from commit 10d5ed156a59d8e8a000bd7cecec5bf968853c69) - -commit 817d5dfdd8fbae905c64c41672f197143b6f563c -Author: Daniel-Constantin Mierla -Date: Wed May 29 10:49:40 2013 +0200 - - topoh: safety check for Via header when removed from script - - - reported by Guillaume Bour, FS#300 - (cherry picked from commit b480ac55508e5d9b92cc9560e0b1d338d04f3b11) - -commit 3a431ed6b79762162a907164d4fa3b76c6b6aaa6 -Author: Klaus Darilion -Date: Mon May 27 10:48:00 2013 +0000 - - modules/dialog: regenerate README - -commit 59adebfe3ae6f18a337833d0df62ee67e161bff5 -Author: Klaus Darilion -Date: Mon May 27 10:44:03 2013 +0000 - - modules/dialog: improve documentation of DID matching - (cherry picked from commit 68209cc2b15c2c0674d7cf4529607e148e3fc1b4) - -commit 533f2238d9d14ed8ef0a367ce574aef8052c0452 -Author: Daniel-Constantin Mierla -Date: Sun May 26 16:14:51 2013 +0200 - - topoh: safety check for SIP messages - - - received callback can be executed for non-sip messages - - reported by Julia - (cherry picked from commit 352a7dccf2570af857d7e2e50fed600c4762278d) - -commit b5f362f4ddbc932daad611996d3e9abf2d91cd12 -Author: Daniel-Constantin Mierla -Date: Thu May 23 12:06:45 2013 +0200 - - auth: add chapter tag around sections for Admin Guide - - - the ToC isn't properly generated otherwise - - reported by Andrew Pogrebennyk - (cherry picked from commit 76c883eb88359f6075712f648a1dfc675872487a) - -commit 721b0adc4addad2ed2da1579af21fc9b66915ddc -Author: Klaus Darilion -Date: Tue May 21 12:39:15 2013 +0000 - - modules/auth_db: detailed documentation of URI checking in auth_check function - -commit 9a75da1e9a302868729b171ad76dcf15404487e5 -Author: Vicente Hernando -Date: Fri May 17 12:34:54 2013 +0200 - - modules/uac: update README after avoiding adding quotes in uac_replace_* functions - -commit 5eced6635b0a2165c9c107fb6031901459159b2d -Author: Vicente Hernando -Date: Thu May 16 12:06:55 2013 +0200 - - modules/uac: avoid adding double quotes in uac_replace_* functions - - - updated uac doc with a note and examples. - (cherry picked from commit 251c0218e7d5e09f43a2b834a5450c20bb4f6d60) - -commit 55f7def6b4ed889a27a19164faa0dd7f854fa983 -Author: Ovidiu Sas -Date: Thu Apr 25 14:50:41 2013 -0400 - - snmpstats: fix cross-compilation - (cherry picked from commit 5e96920289cbf448ac684d8cb1333d75f65a729a) - -commit 70ab195f753956a3f891d992787a76c2c4ff643b -Author: Olle E. Johansson -Date: Sat Apr 6 22:04:51 2013 +0200 - - snmpstats fix typo in Makefile. - (cherry picked from commit bddf66407ef7521f3d1f1e941b4c1e104e59d1ef) - -commit f86be5e0aa282dc58680f28d01161437901fa2c8 -Author: Olle E. Johansson -Date: Sat Apr 6 22:02:48 2013 +0200 - - snmpstats Add disabled section in Makefile for compilation on Centos systems - - Net-SNMP and snmpd can be built with embedded perl and libwrap support. If that's - the case on your system you need to enable the EMBEDDED_PERL section in the - Makefile. Maybe this could be enabled automatically. - (cherry picked from commit 7bbf8fece2cc93c5b1ddd2c3dcc12e8a920dd54d) - -commit f92eee8eecab6d0fa505011b20a57dea242fa982 -Author: Ovidiu Sas -Date: Wed Mar 20 13:16:27 2013 -0400 - - kamailio/utils/sercmd: remove unused but set variable - (cherry picked from commit 67609608aa4306de9a34a28a3a31880ad0d17e8e) - -commit 320bf55cbfea89b145d41c938f75a7bf70f40613 -Author: Ovidiu Sas -Date: Wed Mar 20 13:15:08 2013 -0400 - - kamailio/utils/sercmd: remove unused but set variable - (cherry picked from commit b7a41ef47ad5d7fa90e577673cc2f38ab5ef2237) - -commit 24e4d3dbd79ccb2e42aabcaaa17e391dc60d36d9 -Author: Ovidiu Sas -Date: Wed Mar 20 13:13:27 2013 -0400 - - kamailio/utils/sercmd: remove unused but set variable - (cherry picked from commit ff94115921a08ba4da29baf2761db47bd0b7f8f5) - -commit 5f9d169e797425b0501de42ba2af196018166c71 -Author: Ovidiu Sas -Date: Wed Mar 20 13:23:49 2013 -0400 - - p_usrloc: commenting out unused db_timer_udomain() to get rid of compiler warnings - -commit 56b8856f84aebd86c4e78232f8f2f37fead7b4f3 -Author: Ovidiu Sas -Date: Sat Apr 13 15:37:18 2013 -0400 - - tls: fix compiler warning - - tls_config.c:61:19: warning: ât.val.sâ is used uninitialized in this function [-Wuninitialized] - -commit 3a18564eb905d93b85b9e0527fa40cd85eb2e3b7 -Author: Ovidiu Sas -Date: Wed Mar 20 13:02:16 2013 -0400 - - auth_diameter: remove unused but set variable - (cherry picked from commit 387adace552c22eaf15a049b23694bcd79cea3a8) - -commit 68021c3247b096fabc287fc6d129bce463cbfa97 -Author: Ovidiu Sas -Date: Wed Mar 20 13:00:27 2013 -0400 - - auth_diameter: remove unused but set variable - (cherry picked from commit 941c48ae6909994ae090c9d52766cd4dd5d4f938) - -commit b654a0d650af61bd4ec7212b48d71ccf7243e473 -Author: Ovidiu Sas -Date: Thu Apr 18 16:03:50 2013 -0400 - - seas: fix warning [-Wunused-result] - - ignoring return value of write, declared with attribute warn_unused_result [-Wunused-result] - (cherry picked from commit e3c0a3abb6045e841fbb4b1b61a518b2b87a217d) - -commit d3999770dec8628a214423bcdcc510d90a39dc40 -Author: Ovidiu Sas -Date: Thu Apr 18 16:01:16 2013 -0400 - - seas: fix compiler warning [-Wunused-but-set-variable] - (cherry picked from commit c0f4b6cf664ac552d0c994e99adb13991a37ef28) - -commit 3141c87bc4270ca2534250500dfdefa66c79a48f -Author: Ovidiu Sas -Date: Thu Apr 18 15:54:14 2013 -0400 - - seas: fix compiler warning [-Wunused-but-set-variable] - (cherry picked from commit 12cd241d95b8d38cea6e60676b752f8ef8a2ed8c) - -commit 2fe9c5d1f7b0640b1e50976f4187d7362d6a3343 -Author: Ovidiu Sas -Date: Thu Apr 18 15:51:50 2013 -0400 - - seas: fix compiler warning [-Wunused-but-set-variable] - (cherry picked from commit 21e51107a5a08b182abc7bffbac1fec1be27950b) - -commit 250b90ed1ec6ee34e883a4cbf6ff55865752a2d9 -Author: Ovidiu Sas -Date: Thu Apr 18 15:50:25 2013 -0400 - - seas: fix compiler warning: - - warning: variable flags set but not used [-Wunused-but-set-variable] - (cherry picked from commit 2abf2d4a42c05004319e682d2ad07d69bf2fc89e) - -commit cb971e61a573d2a024ada52b6036a1cdc56ee68e -Author: Ovidiu Sas -Date: Thu Apr 18 15:48:03 2013 -0400 - - seas: fix compiler warning: - - warning: variable flags set but not used [-Wunused-but-set-variable] - (cherry picked from commit 21386829d819c06c42871cf5b68d0d3a63ef0222) - -commit 15ec4ac4c0e815d648bbdf0e676227b93860f290 -Author: Ovidiu Sas -Date: Thu Apr 18 15:45:50 2013 -0400 - - seas: fix compiler warning - - warning: variable flags2 set but not used [-Wunused-but-set-variable] - (cherry picked from commit 200eddad28abd6bc51da3285dd52d5f8c88c4e56) - -commit d74129f1d80a38e29b152351d1c0cf4c1faffce4 -Author: Ovidiu Sas -Date: Thu Apr 18 15:42:40 2013 -0400 - - seas: fix compiler warning: - - warning: variable falgs set but not used [-Wunused-but-set-variable] - (cherry picked from commit 63736be1e4d2d6e82a0f7be6a85a96ee66c10146) - -commit 9374ee177e5c962eee8c47a1ff30683596114c7b -Author: Ovidiu Sas -Date: Thu Apr 18 14:09:09 2013 -0400 - - dns_cache.c: fix compiler warnings - - warningâsr_sums[*].r_sum may be used uninitialized in this function [-Wuninitialized] - - warningâsr_sums[*].rr may be used uninitialized in this function [-Wuninitialized] - (cherry picked from commit b3c8f92fe48ac90802c989c74c3a34cfea065861) - -commit e7a8752ad427f8f23df25edc6bd2e7ba531ac6c4 -Author: Juha Heinanen -Date: Fri May 3 19:53:12 2013 +0300 - - modules/rls: added support for escaped chars in rls-services document - (cherry picked from commit fa9b8664a3b7c7a035c738a37b8ef0ef44190cb8) - -commit 19bcbfcacbc442488e93f8c684fd815323d3fcf7 -Author: Richard Fuchs -Date: Mon Apr 29 11:26:18 2013 -0400 - - db_mysql: add cast to remove compile warning - -===================== 2013-04-25 Version 4.0.1 Released ===================== - -===================== Changes Since Version 4.0.0 =========================== - -commit d293977786ae7831f89f7b8a09d22516775778b0 -Author: Daniel-Constantin Mierla -Date: Thu Apr 25 16:50:15 2013 +0200 - - Makefile.defs: version set to 4.0.1 - -commit 62188fa05724c4eafb4a5f192b070d9ffe22f5ae -Author: Daniel-Constantin Mierla -Date: Thu Apr 25 12:10:47 2013 +0200 - - pkg/rpm: updated version to 4.0.1 in rpm specs - -commit aed7548d393f1562824a851d656d7b2789991cc9 -Author: Daniel-Constantin Mierla -Date: Thu Apr 25 12:08:49 2013 +0200 - - pkg/deb: updated version to 4.0.1 in deb specs - -commit 4fdc69e6eb8b03c4a28c2cfea1d0ee37b26207e2 -Author: Klaus Darilion -Date: Thu Apr 25 08:12:07 2013 +0000 - - sipcapture/siptrace: set default db_url to read-write URL - (cherry picked from commit 81f622b9ef7d32434659f1e6d9a21c8013cefec7) - -commit 2c290ee29696f9c0c44fcaf04b8abd91d10c04a1 -Author: Daniel-Constantin Mierla -Date: Thu Apr 25 09:55:16 2013 +0200 - - modules/*: README regenerated for updates to db_url and wiki - -commit 88a0733ed03ecd2f16aa32ba00d146d8b395a8f6 -Author: Daniel-Constantin Mierla -Date: Wed Apr 24 17:26:15 2013 +0200 - - usrloc: update call-id value in db when matching record by ruid - (cherry picked from commit 0125cdf0e75271a8478a3eadacc54ea1c1eb4da0) - -commit d87b33178e432726819e2b4c73a032d67d4a1d82 -Author: Daniel-Constantin Mierla -Date: Wed Apr 24 15:41:34 2013 +0200 - - usrloc: documented db_ops_ruid parameter - (cherry picked from commit e66842c2fc34d8dc8980efa821f7039685edef87) - -commit 102a1108b9e3ed9415e4b25d45542faa2643329d -Author: Daniel-Constantin Mierla -Date: Wed Apr 24 15:34:16 2013 +0200 - - usrloc: option to do db update/delete ops using ruid - - - new parameter db_obs_ruid - if set to 1, db update/delete operations - are done using ruid value - - if paramter set to 0 (default) the old style using aor, contact and - call-id is done - (cherry picked from commit 61e08282c905c2ee03a2be618b1e700fc0acbdeb) - -commit 744a6dc1c93c8b16750f4ab25deb57a02889f1d0 -Author: Daniel-Constantin Mierla -Date: Wed Apr 24 13:36:08 2013 +0200 - - registrar: added debug message to print generated ruid for contact - - - formatted condition to fit 80 char long line - (cherry picked from commit 735f83d6346c97d6f7b1da26a2fee1b6270872b1) - -commit 17b858ac9b88de8859f9f1cbc76da146d8f125db -Author: Daniel-Constantin Mierla -Date: Wed Apr 24 10:26:49 2013 +0200 - - sqlops: use one char buf for empty strings in db results - - - safe for the parts of code that want to access it even for write - (cherry picked from commit a74980270b655124c276279e54b8f82965f3f4b8) - -commit 224cc7ee5c9b6349cbd9755341898a94d97fd958 -Author: Daniel-Constantin Mierla -Date: Tue Apr 23 13:02:49 2013 +0200 - - usrloc: re-init sruid struct for each child - - - avoid overapping values for xmlrpc handling - (cherry picked from commit 20646b530baa1a2807e52048a8d99d31d2171bb6) - -commit 484444f4f90c725567a759252e2b3c11d53c8756 -Author: Daniel-Constantin Mierla -Date: Tue Apr 23 11:58:17 2013 +0200 - - docbook: uptdated wiki link in entities file - (cherry picked from commit 2b97e81b281802283ebc665da6f9190f0a9705ab) - -commit 137bb73470ba78fc7761f7c786abcb0de5c54cc8 -Author: Daniel-Constantin Mierla -Date: Sun Apr 21 16:06:56 2013 +0200 - - acc: updated link to pseudo-variables cookbook - (cherry picked from commit f0c467f64c044de0b0f37addccb97d3ccff78706) - -commit 20fedafc2d10b8911b03dce9d5100f00ee5e3b9a -Author: Daniel-Constantin Mierla -Date: Sun Apr 21 16:07:34 2013 +0200 - - pv: updated link to wiki site - (cherry picked from commit ebeb18ffed8e81ae472b4c07097b58fbea115b5b) - -commit 66ebdf5bc5075874b2a791c042b7221e493d72be -Author: Daniel-Constantin Mierla -Date: Thu Apr 18 21:22:47 2013 +0200 - - xlog: link to wiki updated - (cherry picked from commit 343379957ab783a32c48822de479a9d8c2dafdf3) - -commit 11f031d4570c124fbb01a01b6c7ce0757e032a84 -Author: Daniel-Constantin Mierla -Date: Sun Apr 14 10:11:29 2013 +0200 - - auth: skip processing of PRACK in consume_credentials() - - - report and patch suggestions by Jorj Bauer - (cherry picked from commit 2a77ed2bdc9341ecf7d7200e420a1f49e4e9b6ab) - -commit a06c5b31f3a30c405a87bdd7be269152edf14c7b -Author: Peter Dunkley -Date: Wed Apr 24 22:01:59 2013 +0100 - - modules/presence_xml: fixed issue with parsing some pres-rules documents - - - pres-rules that contain external links in a node don't - have to have nodes in the node. - - Kamailio returns an error when it finds a node with - no node inside it. - - Kamailio doesn't support external links, but it should skip over - the nodes that contain them rather than return - an error as later nodes may contain entries it can - work with. - (cherry picked from commit ac99219b0a850e0305eaf661b028536cfc28e2cb) - -commit a8991ef4b63c575a32807c3aacc7a076ae22d40d -Author: Klaus Darilion -Date: Wed Apr 24 09:09:25 2013 +0000 - - core: fix default read-only DB URL - (cherry picked from commit fdb6c8cbafec7849367f16f5dc56ffa20885bef4) - -commit 9d39d8b86576ca9784b96ebb43161c3174754876 -Author: Juha Heinanen -Date: Tue Apr 16 14:28:59 2013 +0300 - - modules/usrloc: init _ul_sruid also in mi_child_init - (cherry picked from commit 2190c572cd1bc4b57a3c2dd5241e556b834c728c) - -commit a49467e98dc721a1e4dbd9ba547d72aa38018883 -Author: Daniel-Constantin Mierla -Date: Fri Apr 12 00:50:24 2013 +0200 - - core: safety check for content-lenght size in tcp read - - - avoid getting negative - - upon a report by Kevin Wojtysiak - (cherry picked from commit 3c54420914c011bdd874a97c4c40ee9dacb59788) - -commit b2b26c811a7275dbdba90236f3cfc874fd117681 -Author: Daniel-Constantin Mierla -Date: Tue Apr 9 00:15:47 2013 +0200 - - rr: use port.len to check for buffer overflow instead of max port len - - - reported by Kevin Wojtysiak - (cherry picked from commit 28a8b87885e373bee8cc81985277ae718973fdfd) - -commit 95903a0f12e10e4852316eb52c8097fb8b30a308 -Author: Daniel-Constantin Mierla -Date: Tue Apr 9 00:21:44 2013 +0200 - - .gitignore: added protoshoot binary the ignore list of git - (cherry picked from commit a177a33b9938a36cfaedbce61734a1525e5b1665) - -commit 31f76fc50ec838b301dede678c97676d63355b4b -Author: Daniel-Constantin Mierla -Date: Tue Apr 9 00:18:35 2013 +0200 - - parser: safety check for max port length in URI - - - can't be longer than 5, a port being 16b value - - reported by Kevin Wojtysiak - (cherry picked from commit 13fd48f89555f5421e8285669e303bcefe44f149) - -commit 118da22f979dfa8e97a7c029ff34251ba72b6833 -Author: Daniel-Constantin Mierla -Date: Fri Apr 5 21:30:06 2013 +0200 - - rr: added missing s in sips for record route - - - reported by Sander van Grieken - (cherry picked from commit 0ecde91fe6e911997b1f5ee33eb50fa6778b7a89) - -commit 1e36ce594fa1c3ae180870025d79987fbfc90878 -Author: Daniel-Constantin Mierla -Date: Sat Mar 30 20:59:24 2013 +0100 - - dialog_ng: set kamailio mod interface always - - - it breaks rpc list generation otherwise - (cherry picked from commit 11bc294a9d64e31014ccb836290467984c28ce65) - -commit 1d6e63967ba8eaa5e1cf0d63081ec38439f0bcaa -Author: Daniel-Constantin Mierla -Date: Sat Mar 30 09:24:19 2013 +0100 - - core: set TOS for tcp IPv6 sockets - (cherry picked from commit b9476db0c1e1ce869c1da2f87dfaf411edf69277) - -commit 77c275383c509d34ba0300182ace889a4f1d7963 -Author: Daniel-Constantin Mierla -Date: Sat Mar 30 09:15:00 2013 +0100 - - core: set TOS for IPv6 sctp sockets - (cherry picked from commit b57f64533dbc538f3d5282d0196598062f0b4652) - -commit 060c8cd03ee745aa48b21d946ebfa9e3671d89c3 -Author: Daniel-Constantin Mierla -Date: Fri Mar 29 11:02:31 2013 +0100 - - usrloc: use NULL domain for updating ul attributes for use_domain=0 - - - use counter var for db matching keys - (cherry picked from commit 50b116cf4c9c33c4f23c1d5b66fd313a7f40c572) - -commit e83d6d4c34fb04223f5754fff1248286e1345e7d -Author: Daniel-Constantin Mierla -Date: Wed Mar 27 20:53:00 2013 +0100 - - core: set TOS for IPv6 UDP sockets - - - reported by Klaus Feichtinger, FS#179 - (cherry picked from commit 084be456bc0fab015cf9964ac85651fa60ea77c9) - -commit 22b614d06590f8c9adcadf9302882fba3e8f1d1b -Author: Daniel-Constantin Mierla -Date: Sun Mar 24 12:38:45 2013 +0100 - - msrp: fix compile warning of argument type in dbg message - - - reported by Olle E. Johansson - (cherry picked from commit 7339d847adfd098c58426e96e5e3730ad580d543) - -commit 5ab5edc4bba76f7a46d243fb7b9ce329b31835b6 -Author: Daniel-Constantin Mierla -Date: Sat Mar 23 10:44:31 2013 +0100 - - rr: use sips to build RR headers of R-URI has sips - - - reported by Hugh James, FS#277 - (cherry picked from commit 1826a5f4e3a981e30956da61e11ea551aae0b714) - -commit c7ef60e6c960c029b49bca01a89498a5dcdeec19 -Author: Daniel-Constantin Mierla -Date: Sat Apr 13 11:26:48 2013 +0200 - - xcap_server: init etag variable for PUT operations - - - the function xcaps_get_db_etag() may not found a record to db and will - not initialize it, resulting in bogus value passed to - check_preconditions() - - reported by Juha Heinanen, FS#283 - (cherry picked from commit 2d27dd1080cd490e93646b38d3912dcbe3761ca5) - -commit 5e5ba673fa4d2351047eadeaec655017c962424d -Author: Richard Fuchs -Date: Wed Apr 10 09:34:49 2013 -0400 - - db_mysql: fix segfault when recursive queries are made - - The MySQL result object (MYSQL_RES) should not be stored within the - srdb1 connection object, but rather within the srdb1 result object. - Otherwise recursive queries overwrite each other's result sets, which - results in segfault. - - Conflicts: - modules/db_mysql/km_my_con.h - -commit 5ba5a0a5bb6fc5080604e1abaef6cd41148911de -Author: Richard Fuchs -Date: Wed Apr 10 09:33:53 2013 -0400 - - srdb1: add new db-private generic pointer to struct db1_res - -commit 3b9347e41195587c323f5d6d643c1807a9905941 -Author: Vicente Hernando -Date: Wed Apr 10 13:55:57 2013 +0200 - - modules/pipelimit: check correctly for all arguments in mi_set_pipe - (cherry picked from commit d17b02ed5014b4e32bd0060f32cabd750956779c) - -commit c907eff8140bd07022aaf028741392322892b2f4 -Author: Vicente Hernando -Date: Tue Apr 9 01:03:49 2013 +0200 - - modules/ndb_redis: b/f redisc_exec returns false if redis server is down. - -commit 0e7d000a9c73b0fd06132e458f838cc78abddbed -Author: Vicente Hernando -Date: Mon Apr 8 11:47:51 2013 +0200 - - modules/ndb_redis: b/f restore correctly last char in argument strings. - -commit 1d009c3dad2352784b48ec821732e4cca1078497 -Author: Jon Bonilla -Date: Sat Mar 30 11:45:12 2013 +0100 - - Set lucid version to 4.0.0 - -commit 71dbcc196db780d5d8ca2960130850ace956ceca -Author: Peter Dunkley -Date: Fri Mar 29 23:35:39 2013 +0000 - - modules/outbound: changed some INFO level output to DBG - (cherry picked from commit ce0c420ba30388256e958a0bdf6d8f37138c3f97) - -commit eedf78559a0f289f695cdff40c581ec37c712502 -Author: Juha Heinanen -Date: Fri Mar 29 16:30:51 2013 +0200 - - modules/registrar: changed instance related INFO to DBG - (cherry picked from commit 33108f4843fdef6d45773849089446b0c408ecf3) - -commit c3f2d14337093843a81353aef34c078dc7e53787 -Author: Peter Dunkley -Date: Fri Mar 29 01:08:02 2013 +0000 - - modules/outbound: updated edge proxy example in README - (cherry picked from commit 60953cd884af7d070ce44844a874f2bd75833998) - -commit 291900478f16272222b7c9138685ef871ece0875 -Author: Peter Dunkley -Date: Wed Mar 27 16:51:52 2013 +0000 - - modules/outbound: further improvement to the use_outbound() check - (cherry picked from commit a5f8f4cd4da60168fd73d7999c09181582ec5943) - -commit 1a8843319ac00020ed291d2904b202698c3bb1c8 -Author: Peter Dunkley -Date: Wed Mar 27 16:33:17 2013 +0000 - - modules/rr: copy the flow-token for "incoming" messages when using outbound - (cherry picked from commit 0c1725c8ccb08280a9c161e34fa9e43347cae7b0) - -commit 9df1edfb18f1ec0846ca474f510532050b55fc80 -Author: Peter Dunkley -Date: Wed Mar 27 16:32:59 2013 +0000 - - modules/outbound: improved check for outbound - (cherry picked from commit b2fb355fe5c9c64727d873cbe8d6fd883ebd2537) - -commit 70217018e5a72c80cee37bc5a722b769890fc64c -Author: Peter Dunkley -Date: Wed Mar 27 15:43:02 2013 +0000 - - modules/rr: only use flow-token for routing if it doesn't point to the source of the request - (cherry picked from commit 874669f483e1efba032bd695eb6cee4275673874) - -commit 00c4469624392cb252d65ecf0e53dd64cfb9bb87 -Author: Peter Dunkley -Date: Fri Mar 15 15:04:07 2013 +0000 - - modules/outbound: Warn during mod_init() if STUN is not built or enabled - - - STUN is required for outbound with UDP. Don't want to stop Kamailio starting - when the outbound module is loaded and STUN is not available - but a warning - seems appropriate. - (cherry picked from commit 85b26219f9e4c3c8c7c990a4897d40645b4ad6e7) - -commit 527db661fa3f3bc3899eaf9c264c9080cc757318 -Author: Peter Dunkley -Date: Fri Mar 15 14:54:41 2013 +0000 - - modules/outbound: free shared memory for flow-token key during shutdown - (cherry picked from commit 9d9d51438acd1d534f14ecbc8eb0030b45333177) - -commit ac9f143b3cd2422a3fb2c3ca5e29724ed65ab43d -Author: Peter Dunkley -Date: Fri Mar 15 14:07:04 2013 +0000 - - modules/outbound: Fixed bug in outbound mod_init - (cherry picked from commit c924645fcfb706fc20ed715a00531d785f99cbde) - -commit 6acbeef9ff574c079aaeeea72924905a0426c922 -Author: Peter Dunkley -Date: Fri Mar 15 12:14:31 2013 +0000 - - modules/outbound: The flow-token key is now automatically generated - - - Uses OpenSSL RAND_bytes() to select 20 cryptographically strong pseudo-random - bytes for the key. - - Flow-token key can no longer be manually set. - (cherry picked from commit f474e85616f6f98a6ac193c7425f6c85af8efa20) - -commit 3c6f137ab904166cff791fab98008da2f5ebdc84 -Author: Peter Dunkley -Date: Fri Mar 29 01:15:13 2013 +0000 - - Revert "index on 4.0: 9a57697 rtpproxy: fix spelling error in docs, reported from Victor V. Kustov, coyote at bks dot tv (cherry picked from commit a0b01f77de163cf7ea9d71d5293a1bfa20d31fa6)" - - This reverts commit 368b07fc76ee2bb0c292b7be4f06c7646036b605. - -commit b2a5e9dce705309ec1700ae10aa45663197c81de -Merge: 9a57697 368b07f -Author: Peter Dunkley -Date: Fri Mar 29 01:11:15 2013 +0000 - - WIP on 4.0: 9a57697 rtpproxy: fix spelling error in docs, reported from Victor V. Kustov, coyote at bks dot tv (cherry picked from commit a0b01f77de163cf7ea9d71d5293a1bfa20d31fa6) - -commit 368b07fc76ee2bb0c292b7be4f06c7646036b605 -Author: Peter Dunkley -Date: Fri Mar 29 01:11:14 2013 +0000 - - index on 4.0: 9a57697 rtpproxy: fix spelling error in docs, reported from Victor V. Kustov, coyote at bks dot tv (cherry picked from commit a0b01f77de163cf7ea9d71d5293a1bfa20d31fa6) - -commit 9a57697e07824071cdce1b9ae65338771c7e32a2 -Author: Henning Westerholt -Date: Tue Mar 19 15:32:25 2013 +0100 - - rtpproxy: fix spelling error in docs, reported from Victor V. Kustov, coyote at bks dot tv - (cherry picked from commit a0b01f77de163cf7ea9d71d5293a1bfa20d31fa6) - -commit a189e7fd3e6e4915c762dd6c429e68f3d9d6b49a -Author: Andrew Mortensen -Date: Mon Mar 18 15:03:24 2013 -0400 - - modules/sca: seize appearance for SCA callee answering w/o Call-Info - - - Yealink firmware 7.70.0.130 doesn't include a Call-Info header with - 200 OK response to INVITE. - -commit 65d3fc0ac958128d99448966951de64a01f72b58 -Author: Andrew Mortensen -Date: Mon Mar 18 10:32:45 2013 -0400 - - modules/sca: cast logging of time_t to long int to quiet warnings. - - - Report from Olle Johansson. Latent Y2K38 problem, but that needs a - project-wide solution. - -commit 6d61484c6302bfd2ad74b3b92621e541405c3240 -Author: Andrew Mortensen -Date: Sat Mar 16 16:35:29 2013 -0400 - - modules/sca: fix -Waddress warnings caused by static strs in SCA_STR_EMPTY - - - Tested on Ubunut 12.04 LTS. Report from Konstantin Mosesov. - -commit e446aa58a89c60ef9449fc8f79492232c7ed6f7f -Author: Juha Heinanen -Date: Sat Mar 16 06:33:13 2013 +0200 - - modules/registrar: outbound_mode=1 fix - - outbound_mode=1 now accepts REGISTER requests that either contain - or do not contain a Supported: outbound header. - - a Supported: outbound header is always added to 200 OK reply and if - request contained a Supported: outbound header, also a Require: outbound - header is added. - -commit 86f3f2755bcf63a97a8eabb8a72a06614c2dbf5a -Author: Daniel-Constantin Mierla -Date: Fri Mar 15 09:03:26 2013 +0100 - - ims_icscf: fix include list for BSD - - - patch by Victor V. Kustov - (cherry picked from commit e930f94b71d2e5c40fa44d78738ce5efb747c5b1) - - -===================== 2013-03-11 Version 4.0.0 Released ===================== - -===================== Changes Since Version 3.3.0 =========================== - -commit 33e0d0ec6a370bfe580dddbb473ff4e0c1b2e746 -Author: Daniel-Constantin Mierla -Date: Mon Mar 11 16:00:01 2013 +0100 - - Makefile.defs: version set to 4.0.0 - - - new major release - -commit 146d08078b64f3a40e01bb8dba4f4de8a50a857b -Author: Daniel-Constantin Mierla -Date: Mon Mar 11 15:57:31 2013 +0100 - - Makefile.dirs: updated the list with module directories - (cherry picked from commit c72aabf37beb308f99b46f764ee9c01b0d875da3) - -commit bd0099263cf693a2a890450d8696c6d6fd17ae00 -Author: Olle E. Johansson -Date: Mon Mar 11 11:43:49 2013 +0100 - - NEWS Update with reference to Wiki - (cherry picked from commit 697a272672e434b017cd7e3c6782c5cefa0f2de8) - -commit dbfa3769a3d50607126a5ad99b4e730c8be41514 -Author: Olle E. Johansson -Date: Mon Mar 11 11:36:54 2013 +0100 - - INSTALL update for release - (cherry picked from commit 220b782018c3158a05f695eac5b1bff0f7ad239f) - -commit 4f084e251742f64ac423c5d266f0ea0dc1e33926 -Author: Olle E. Johansson -Date: Mon Mar 11 11:13:36 2013 +0100 - - README - last minute release fixes - -commit b6040e7c14a9562d58649859a407f9f1f5b3a8cc -Author: Daniel-Constantin Mierla -Date: Mon Mar 11 09:38:37 2013 +0100 - - tm: set proper buffer len when Max-Forward header is not added - - - reported by Juha Heinanen - (cherry picked from commit 2d38b046b6202a35c0adf4c8b61f0d665432dd4f) - -commit 5111813177bce534bbfbc158e3c90cfd381c0b63 -Author: Daniel-Constantin Mierla -Date: Sun Mar 10 22:46:50 2013 +0100 - - pkg: deb specs updated for v4.0.0 - (cherry picked from commit a349d9aab2d95b9b1cbc58870ead9a7294bcdcaa) - -commit 080db7fd62fcf3c941fce2e1e0552a6584572c3e -Author: Daniel-Constantin Mierla -Date: Sun Mar 10 23:53:26 2013 +0100 - - core: try to detect ipv6 addresses only when USE_IPV6 is used - - - reported by Juha Heinanen - (cherry picked from commit b035aa9f2cc19d387b1b8f33a7888ffee27a4138) - -commit de672e729c52f27252c78759c9b68b5ca09dfbdc -Author: Daniel-Constantin Mierla -Date: Sun Mar 10 22:07:11 2013 +0100 - - INSTALL: updates for v4.0.0 - (cherry picked from commit b4ebc4a8164cfee995fb3ed0570702ae0547c0ce) - -commit 73106e703c3e2ad031f9c875a52ecf9b99750c39 -Author: Daniel-Constantin Mierla -Date: Fri Mar 8 23:22:06 2013 +0100 - - ChangeLog_k: removed obsolete file - (cherry picked from commit ff04edd6ee7ddc213b346afffeec04a995bf16fa) - -commit 69c3909a8701bf47fc31105e29382ae09d383943 -Author: Daniel-Constantin Mierla -Date: Fri Mar 8 23:20:06 2013 +0100 - - ChangeLog: updated content to prepare for v4.0.0 - (cherry picked from commit 28111e7943f209ed936a6e9f1d5278d6235cedbb) - -commit 71101a73000e2e00c9c7ce38d1bcc3efa94e58fc -Author: Peter Dunkley -Date: Thu Mar 7 02:11:35 2013 +0000 - - pkg/kamailio/(centos|fedora): added docbook2X build requirement - (cherry picked from commit dd2ef87af7dac6fb1411d58a0dd2e6125b99da80) - - Conflicts: - pkg/kamailio/fedora/17/kamailio.spec - -commit 57664f03123de808aa21f0ddc01548db4a069048 -Author: Peter Dunkley -Date: Thu Mar 7 00:10:54 2013 +0000 - - pkg/kamailio/(centos|fedora): updated .spec in preparation for release - -commit 6d44534858831b00a6036d66c23b11ea2d046f04 -Author: Peter Dunkley -Date: Wed Mar 6 11:08:32 2013 +0000 - - pkg/kamailio/(centos|fedora): re-added perl files - (cherry picked from commit df1af285d60e2d066c2753e8f3815a7dc4f97684) - - -commit 58d937f34d90a812a44435b46e3185bea8eebb7e -Author: Daniel-Constantin Mierla -Date: Tue Mar 5 18:35:08 2013 +0100 - - Makefile.groups: fixed typo in the name of perl mods list - - - reported by Peter Dunkley - (cherry picked from commit f4a4ad8effe41a30705a49da3097818c83d3be6e) - -commit 7ad1c63c53c0f85c5d06830dc52d8cb96105a003 -Author: Peter Dunkley -Date: Tue Mar 5 17:25:18 2013 +0000 - - pkg/kamailio/(centos|fedora): updated .spec to match latest changes - -commit 4f905e5998e2517d5382ee05411463af9df028d4 -Author: Peter Dunkley -Date: Tue Mar 5 15:51:56 2013 +0000 - - pkg/kamailio/(centos|fedora): updated release tag in .spec - -commit 13531b47c66f87ce1a3d21f11b1a32379d264821 -Author: Daniel-Constantin Mierla -Date: Tue Mar 5 17:11:51 2013 +0100 - - Makefile.groups: mi_xmlrpc has a dedicated pkg grpup depending on xmlrpc-c library - (cherry picked from commit 49251e62da99bf05f257e12306cafec614feb408) - -commit 1933eef816241d157fa980709dc2b87dfb1f21d0 -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 23:41:31 2013 +0100 - - Makefile.groups: restored outbound as packaging group - (cherry picked from commit 6375044137494f1203f26580e16f63c92225c596) - -commit 9fd2a4cb210e08f576092a6a049570c1a9d0b27f -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 20:06:53 2013 +0100 - - Makefile.defs: version set to 4.0.0-rc1 - -commit 3fd1ec548504b574522cc2b3a2c623366612ffb7 -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 19:56:54 2013 +0100 - - usrloc: added missing state from AoR contact dump - (cherry picked from commit 068e6e5903801ca7cb7d1ca304d35bca70a34b58) - -commit 5591cce6007b6d770fbf7e10309caa3593798684 -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 16:30:34 2013 +0100 - - dispatcher: release lock instead of destroy when cleaning active calls hash table - - - this could happen when dispatcher list was reloaded - - reported and fix by Dmitry, closes FS#275 - (cherry picked from commit d83b9aefd5afa25b2d18a8bf92357fbd33d627bf) - -commit c390d7ed3bf1072ddfa8c1b3ac240359ea0a466e -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 16:19:20 2013 +0100 - - Makefile.groups: refer to pkg groups instead of K - (cherry picked from commit 3cf821d9983418d68ca33edc35ff5eb2e592d16f) - -commit d8606ec25cc4083a9c425639f14f0bbe26768f7a -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 16:14:42 2013 +0100 - - db_postgres: handle prepare statements in DB APIv2 - - - patch by Markus Bucher, closes FS#272 - (cherry picked from commit 09c7b67beee9529d6a7c06e600c7f294bf453eda) - -commit 31219de430f48fc15bbf58cde5d6073cd5625ef5 -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 16:09:36 2013 +0100 - - Makefile: updated the groups of modules - - - they are kept in Makefile.groups to keep main Makefile cleaner - - most of modules are in lists groupped mostly by dependency - - compilation and packaging groups are build using the lists - - exclude_modules list is automatically built from all modules without - those part of lists with external dependencies - (cherry picked from commit b5024f320b578c831d3ee13b077bb87954bc61b0) - -commit dc15e648b398ef7d8052181b822c9756bed95013 -Author: Daniel-Constantin Mierla -Date: Mon Mar 4 10:46:01 2013 +0100 - - Makefile.defs: -DWITH_AS_SUPPORT is on by default - - - it was for kamailio flavour only - - can be disabled with WITHAS=0 and exclude_modules+=seas - (cherry picked from commit 01cbe8bf98d6ad1ef8cf7e0b9f646fde81831fc6) - -commit c40939ad2aae3dfb7d33ed8016223da9038f1ca7 -Author: Daniel-Constantin Mierla -Date: Sun Mar 3 23:53:14 2013 +0100 - - Makefile: split module groups definitions in Makefile.groups - - - the part was quite big and it is more config related than build rules - - it has to be updated with the current list of modules - (cherry picked from commit 23a22e2c8d73843798d66ec1bebe22cf7702213b) - -commit 0d6e0778ef4d86ebd06671333f86f45fc2ec375d -Author: Daniel-Constantin Mierla -Date: Fri Mar 1 18:12:23 2013 +0100 - - rtpproxy: proper fixup function for rtpproxy_manage(...) - - - second parameter was resolved as spve type, although fixed as str - - reported by Markus Bucher, FS#273 - (cherry picked from commit b23510e0adb6060a257c8662700450ed7faef080) - -commit e239cb78c6a16e94c8ef42530a89f1a734e89afa -Author: Daniel-Constantin Mierla -Date: Wed Feb 27 09:24:52 2013 +0100 - - Makefile.defs: version set to 4.0.0-rc0 - - - branch for release series 4.0.x has been created - -commit 9365c5c19cb0b9d4300fa5b0a220bf19738c808f -Author: Daniel-Constantin Mierla -Date: Mon Feb 25 11:19:15 2013 +0100 - - core: parser - function to proper handling multipart bodies with same content type - - - closes FS#170, based on a patch by Luis Martin - -commit 45b2ea3018cc84f8bcf9e687dcc0a03e81597711 -Author: Daniel-Constantin Mierla -Date: Sun Feb 24 20:04:51 2013 +0100 - - siputils: completed the function to return RURI parameter value - - - closes FS#238, based on a patch by Luis Martin - -commit 39bffdd7db9c3118045eae9640659997bac4bf4e -Author: Olle E. Johansson -Date: Sun Feb 24 22:17:25 2013 +0100 - - snmpstats add support for ws, wss and sctp transports - -commit 4547a28b077b5bdaf9128e98fd4e1ee9a8c11847 -Author: Olle E. Johansson -Date: Sun Feb 24 17:53:27 2013 +0100 - - snmpstats Add missing SIP response codes - - And switch from Wikipedia to the IANA list as a master list. - -commit 7952711e6079e02a07ad027c6d8840e755c6e528 -Author: Olle E. Johansson -Date: Sun Feb 24 10:25:38 2013 +0100 - - snmpstats fix typo - -commit 402e44861c489d4246a0fe1f57bc2cc5fe7a70c9 -Author: Marius Zbihlei -Date: Sat Feb 23 14:58:07 2013 +0000 - - Added own _strnstr method as strnstr is BSD only - - This cause the tm module to not be loaded on non-BSD (i.e. Linux) system - Problem reported by Joel Vandal. - -commit 09dcd2353773b011bcce9f24886ab35a47409ff1 -Author: Andrew Mortensen -Date: Fri Feb 22 14:45:58 2013 -0500 - - sca: return true if no Contact header is found in an INVITE packet - - - stop spurious log messages when receiving a 100 Trying with no Contact. - -commit 8fbcb1d1003b3ff3c28cf18aa6791f191a831cea -Author: Andrew Mortensen -Date: Thu Feb 21 22:56:37 2013 -0500 - - sca: log at debug level when reporting lack of Contact header - -commit 9cb26a2eefe93e0ca162db917e34e784e703770a -Author: Andrew Mortensen -Date: Thu Feb 21 22:32:23 2013 -0500 - - sca: ensure SCA caller has correct callee CLI when callee is non-SCA. - - - previously only set when callee was also SCA - -commit 86771e45a92f6262a9fee1bd698c8e9dbe3b0b70 -Author: Andrew Mortensen -Date: Thu Feb 21 18:55:02 2013 -0500 - - sca: remove misleading comment. - - - suggestion in comment has long since been implemented - -commit 3c5b0019bbe1589410d8744545b64a278a222761 -Author: Konstantin Mosesov -Date: Fri Feb 22 00:51:33 2013 +0200 - - app_python: Bugfix for rewrite_ruri - - *) Fixed a bug in msg_rewrite_ruri discovered by "V Tone" . - *) Removed 'python exception' when do_action returns error. Reason: it is not an exception. - *) Removed abort() if first_line type is invalid. - -commit 3bae735a5e38414bd53738928ba531a329290777 -Author: Andrew Mortensen -Date: Thu Feb 21 17:00:31 2013 -0500 - - sca: prevent possible NULL-dereference in log message when NOTIFY fails. - - - sub struct may be NULL outside of else block. Use non-shmem req_sub from - incoming SUBSCRIBE packet instead. - -commit 0fd954bc6a8f94ac5e8087f6b8abdba372505c6e -Author: Daniel-Constantin Mierla -Date: Thu Feb 21 11:34:25 2013 +0100 - - kamailio.cfg: fixed typos to speeddial - - - patch by Thilo Bangert, FS#268 - -commit 77f99fc7c0252c5fa71ad5939f048742592f1d43 -Author: Daniel-Constantin Mierla -Date: Thu Feb 21 11:25:39 2013 +0100 - - tm: add Max-Forwards header to local requests if not given as parameter - - - add the header to local generated CANCEL and ACK - - based on a patch by Morten Tryfoss - -commit 9e6f0268097d81c0e06c7fe33599d0763ed38179 -Author: Daniel-Constantin Mierla -Date: Thu Feb 21 10:40:07 2013 +0100 - - core: dns - prevent queries for IPv4/6 address literals - - - prevent A queries for IPv6 address literals or AAAA queries for IPv4 - address literals - - patch by Simon Perreault - -commit 4439b188634deeb3c0745a7a9664de8745d9272e -Author: Daniel-Constantin Mierla -Date: Wed Feb 20 11:29:06 2013 +0100 - - Makefile.defs: version set to 4.0.0-pre2 - -commit 164b8167855415771a82715ef59a300af8c2bafa -Author: Peter Dunkley -Date: Wed Feb 20 09:59:56 2013 +0000 - - modules/outbound: Fix core dump crash - - - Reported by oej - -commit 8d10bcd44834fd6f2a0c41238fd2dc197143c06e -Author: Peter Dunkley -Date: Wed Feb 20 09:49:44 2013 +0000 - - modules/outbound: Fixes the crash but is logically incorrect for outbound - - - Not sure why the crash happened at all - but this fix breaks the outbound logic - - Revert "outbound Fix core dump crash" - - This reverts commit 6369444761d44526ded2620e33438abb182d2bdc. - -commit 6369444761d44526ded2620e33438abb182d2bdc -Author: Olle E. Johansson -Date: Tue Feb 19 23:08:13 2013 +0100 - - outbound Fix core dump crash - - When we got a CANCEL without Contact the parse_contact was sent a null - pointer. Changing the "or" to "and" fixed this and Kamailio no longer cores - on Cancel coming on over websockets from jssip. - - Tested at SIPit 30. Core dumps and backtraces available. - Pdunkley - please check this patch - -commit 8524f32bc07bd121326369f432eb29a257856f41 -Author: Olle E. Johansson -Date: Mon Feb 18 22:36:45 2013 +0100 - - maxfwd The default value is not 256, it's 16 in the source code. - -commit 3f05697f6503f682274fce7bd93eeeaaa9b58188 -Author: Richard Good -Date: Mon Feb 18 09:48:22 2013 +0200 - - dialog_ng: changed LM_ERR to LM_DBG in dlg_hash.c - - - dlg_set_leg_info() line 416 was incorrectly logged as ERR when it should be only DBG - -commit 2e58de7e16203c849cf1c445dfb33d304ffd3507 -Author: Ovidiu Sas -Date: Fri Feb 15 21:13:29 2013 -0500 - - rtpproxy: when adding ICE relay candidates, always include RTCP candidate - -commit 05d02fd85b12f8e529f088e28cd1923351631e31 -Author: Ovidiu Sas -Date: Fri Feb 15 20:12:56 2013 -0500 - - sdp: fix TABS and whitespaces - -commit b6e2a5c152de3f13251bca6a4f52f8bc9f725018 -Author: Ovidiu Sas -Date: Fri Feb 15 12:08:20 2013 -0500 - - xhttp_rpc: cosmetic updates to header's web page - -commit c3db1a1b598416d1380d54e1a21e9991070a075b -Author: Ovidiu Sas -Date: Fri Feb 15 11:27:15 2013 -0500 - - xhttp_pi: fix default value for xhttp_pi_root param - -commit 8066d290b69a472fc46df248ae861487c932f738 -Author: Ovidiu Sas -Date: Tue Feb 12 15:13:05 2013 -0500 - - xhttp_pi: remove unused variable - -commit 36d0763385605c8174a538297dd8dfa94092e9c5 -Author: Ovidiu Sas -Date: Tue Feb 12 14:38:53 2013 -0500 - - xhttp_pi: remove unused variable - -commit 0a56f3b4c08236265dc66965e61d1a36a7594b36 -Author: Alexandr Dubovikov -Date: Tue Feb 12 10:44:46 2013 +0100 - - modules:sipcapture fixed LM_ERR. Sorry :-( - -commit 1690eafbb599842f0507ad41c1590fcbba8c7630 -Author: Daniel-Constantin Mierla -Date: Mon Feb 11 23:40:53 2013 +0100 - - msrp: return proper value for $msrp(code) - - - internally there is an offset of 10000 to the value in the msrp reply - - reported by Peter Dunkley - -commit ae0183fe5af84ce986baa36b0e6a33f4e06f6803 -Author: Konstantin Mosesov -Date: Sat Feb 9 16:39:49 2013 +0200 - - app_python: fixed compilation errors and warnings. - -commit f38eaeda810730a10a0b67ee42ae629642cdebc2 -Author: Olle E. Johansson -Date: Fri Feb 8 22:13:17 2013 +0100 - - imc README updates. Configuration files works with 4.0.0 now. - -commit a0c0b57d0bcede9144b8ddf71556f4bdb58baebd -Author: Olle E. Johansson -Date: Fri Feb 8 21:58:50 2013 +0100 - - db_text change "openser" and minor edits - -commit d4f64eb262f73e316772955afc4153b84ba74954 -Author: Olle E. Johansson -Date: Fri Feb 8 21:41:11 2013 +0100 - - maxfwd Update README, fix typos - -commit 88b25387f5ddd83a6cb211a4e650191d268fd893 -Author: Olle E. Johansson -Date: Fri Feb 8 21:33:37 2013 +0100 - - mangler Update README for readability - -commit 022935946d2b66ab74d2fb3c4601b340cd57fe34 -Author: Olle E. Johansson -Date: Fri Feb 8 21:32:39 2013 +0100 - - ldap Add the README - -commit 28ee292ca10a8fc8428ac8cff763dbf57ed19db3 -Author: Olle E. Johansson -Date: Fri Feb 8 21:21:02 2013 +0100 - - ldap Convert an "a" to an "o" - -commit 3ce0e28280d4b7a5f4b991af861455114b829976 -Author: Olle E. Johansson -Date: Fri Feb 8 21:12:52 2013 +0100 - - kex Fix copy/paste typos and minor edits for readability - -commit a9ca3f4a05d0655b11ba90bc64d68b53c4ba039c -Author: Olle E. Johansson -Date: Fri Feb 8 21:03:07 2013 +0100 - - ipops Minor updates to README - -commit 63653d7d18a7124ff3a33991f3db4cd8271a9e24 -Author: Olle E. Johansson -Date: Fri Feb 8 20:56:06 2013 +0100 - - mi_fifo Typo fixes mostly - -commit beb5537e70bc36f459223633109d31306ae600f8 -Merge: e4ffcaf 80e8407 -Author: Olle E. Johansson -Date: Thu Feb 7 22:05:42 2013 +0100 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router - - Arrrggh. My mistake. - * 'master' of ssh://git.sip-router.org/sip-router: - registrar: Fixed typo in event_route name, 'usrloc:expired-contact' - -commit e4ffcaf671c93222a5aed846cf89fefaf72b2b4a -Author: Olle E. Johansson -Date: Thu Feb 7 22:05:05 2013 +0100 - - outbound - Fix typos in example configuration - -commit 80e8407dedb06d386167924a40fbf47119708336 -Author: Giacomo Vacca -Date: Tue Feb 5 17:16:18 2013 +0000 - - registrar: Fixed typo in event_route name, 'usrloc:expired-contact' - - - (Instead of changing all the related documentation that refers to usrloc:contact-expired) - -commit 1c643eb26a25880669a719a29c1c8e984e32983d -Author: Olle E. Johansson -Date: Thu Feb 7 11:04:00 2013 +0100 - - siptrace Fix bug in documentation - - The default database URL was mysql, not "", which caused me some strange issues. - -commit fcbf4a0329adab01b079d72408582c2b5d4390e6 -Author: Olle E. Johansson -Date: Thu Feb 7 10:39:17 2013 +0100 - - sipcapture - update example configuration - -commit 7f5b6c26d4bf1f50b1890d177121f4c4fd65428c -Author: Ovidiu Sas -Date: Wed Feb 6 23:39:27 2013 -0500 - - xhttp_pi: documentation updates - -commit 0c970537a2d2aa66d24650e07efb587acd9edfc0 -Author: Ovidiu Sas -Date: Wed Feb 6 23:37:53 2013 -0500 - - xhttp_rpc: documentation updates - -commit ce5aa2416d93d3626db8d69651530edf4575a569 -Author: Richard Fuchs -Date: Wed Feb 6 18:05:05 2013 -0500 - - Revert "nathelper: add new option sipping_disable_bflag" - - This reverts commit dc9a06f7b33a758cb3a44fbc1d018e1a81a794a5. - -commit 23b84739a72c5cca1fd397fbe1a7468a621cc2e6 -Author: Daniel-Constantin Mierla -Date: Wed Feb 6 23:08:02 2013 +0100 - - msilo: safety check for freeing tmp_extra_headers - - - it can be a static empty buffer - - reported by Stoyan Mihaylov - -commit 1d6b2ce07c6b661ed3e3a1c31b8ec408d68ed4e9 -Author: Olle E. Johansson -Date: Wed Feb 6 20:42:50 2013 +0100 - - xhttp_rpc Fix typo and minor formatting in README - -commit dc9a06f7b33a758cb3a44fbc1d018e1a81a794a5 -Author: Richard Fuchs -Date: Wed Feb 6 11:38:57 2013 -0500 - - nathelper: add new option sipping_disable_bflag - - sipping_disable_bflag can be set on a per-registration basis - to disable NAT pings completely - -commit da298e85166b873f4825e4baa96db0d317771e20 -Author: Peter Dunkley -Date: Wed Feb 6 12:55:55 2013 +0000 - - modules/msrp: Fixed typos in MSRP README and added extra event_route example - -commit f56e82a286e00a17dbf02e9a5056ef73488b89b1 -Author: Peter Dunkley -Date: Wed Feb 6 12:36:52 2013 +0000 - - modules/msrp: Fixed error in msrp_cmap_lookup() - -commit 1e16eb9c892358a972ae71f05ec138fbe0d23126 -Author: Juha Heinanen -Date: Wed Feb 6 11:21:11 2013 +0200 - - modules/lcr: treat lcr_gw/ip_addr empty string value same as null value - -commit 62cd05a469f657b5371ecd1538f9c9b224f7e589 -Author: Ovidiu Sas -Date: Tue Feb 5 10:06:47 2013 -0500 - - xhttp_pi: documentation updates - -commit af7d4496febf95e56b604849a8f818e688b21f53 -Author: Ovidiu Sas -Date: Mon Feb 4 10:59:10 2013 -0500 - - lib/srdb1: while converting strings to int/bigint check for invalid characters - -commit 47276cf597ab941016fd49dbcfaaab3da8802834 -Author: Ovidiu Sas -Date: Sun Feb 3 23:36:26 2013 -0500 - - ims_icscf: getting rid of "defined but not used" compiler warning - -commit d474abbb3d93c992ccff561909402ca1b52297bd -Author: Ovidiu Sas -Date: Sun Feb 3 10:50:47 2013 -0500 - - ims_usrloc_pcscf: remove unused variables - -commit 7d6d016c7556a3241d47801b0480c022ca2dd3c8 -Author: Ovidiu Sas -Date: Sun Feb 3 10:31:55 2013 -0500 - - ims_usrloc_scscf: remove unused variables - -commit 622b01719bb8a95c5995c8412cd040787f0cd0a6 -Author: Ovidiu Sas -Date: Fri Feb 1 19:45:28 2013 -0500 - - xhttp_pi: new commands in the pi_framework_sample: - - add - - update - - delete - -commit 60e60e26cebeea2d8e07ec4ffd036ab1f35e2f12 -Author: Andrew Mortensen -Date: Fri Feb 1 11:45:32 2013 -0500 - - sca: restore correct table version number in db creation files. - - - Had been reverted by commit f636e215089a9b14daa113d93025831e827192b5 - because the schema xml file had the wrong version number. - -commit 36c7b450889a8005af3f14b0edb55f4ede6f98a1 -Author: Peter Dunkley -Date: Fri Feb 1 10:14:26 2013 +0000 - - modules/websocket: moved example WebSocket configuration file to examples directory - -commit cdd23170e8fd6da4817619ee82ded0fa27936081 -Author: Andrew Mortensen -Date: Wed Jan 30 15:17:28 2013 -0500 - - sca: db table version incremented to 1 - - - should have been part of commit adding record_route to table. - -commit 2eeb686ea57ce569d3c5eb05430c78d0fdbdd4eb -Author: Olle E. Johansson -Date: Wed Jan 30 13:26:35 2013 +0100 - - tls Small modificiation in tls configuration example - -commit 147430e2f5849996fcfff4933795ef212fdfb83a -Author: Carsten Bock -Date: Wed Jan 30 12:17:50 2013 +0100 - - Fix: We trust the IP in the media for calls from the network to the user - Fix: Rx-Configuration updates - -commit 50a041f5c04ef79d8812d5871903931b120c0812 -Author: Carsten Bock -Date: Wed Jan 30 11:55:42 2013 +0100 - - Fix linking for the IMS-QOS module - -commit 6729c79d7fe3778a889ef7e6777c0bbe2e011528 -Author: Carsten Bock -Date: Tue Jan 15 11:17:45 2013 +0100 - - Cleanup of example I-CSCF config. - -commit ef63f7cd1a6966e3309d8f83e88a7e62b41bd4ed -Author: Daniel-Constantin Mierla -Date: Mon Jan 28 16:54:44 2013 +0100 - - kamailio.cfg: use route(RELAY) instead of t_relay() - - - coherent exit from config when sending out - -commit a21750ff6fcf87d8e3f54597bdd3f1171846e6cb -Author: Alex Hermann -Date: Mon Jan 28 13:08:02 2013 +0100 - - modules/sqlops: Check if pv_spec is available before trying to use it. - - Instead of segfaulting when the script writer has not specified enough PV - specs to hold all the query's result columns, bail out with an error message. - -commit ebe16f75b38c76dab141ca9583b10b67e4f45f57 -Author: Alex Hermann -Date: Mon Jan 28 13:06:08 2013 +0100 - - lib/srdb1: Fix compilation warning on 32-bit architectures - - On "bits-challenged" architectures, long != 64 bits. - Use long long instead, seems to work on 64-bit archs too. - -commit a0968999375227bf187bca374e544e359a9c4c5f -Author: Olle E. Johansson -Date: Sun Jan 27 19:55:49 2013 +0100 - - tls README: Change "ser" and "sip-router" to "kamailio" - -commit e59acd4d006e5048610e75f2cfc2df30b2f7c968 -Author: Olle E. Johansson -Date: Sun Jan 27 14:33:13 2013 +0100 - - tls Update README with RPC commands - - The selects are still missing. - -commit 6b212dc881dae76ab872c79e39f96b21ee4e6687 -Author: Olle E. Johansson -Date: Sat Jan 26 21:10:03 2013 +0100 - - tls Update of README - -commit 78f0c33c3793a7c586860c65ed84e8442808d580 -Author: Olle E. Johansson -Date: Sat Jan 26 17:56:51 2013 +0100 - - dispatcher - Fix typo in README and add return value information for ds_select_dst - - The return value was used in the example, but not documented. - -commit bc507d28e1168313772142925721b32e1a7b634a -Author: Philippe Sultan -Date: Fri Jan 25 20:59:23 2013 +0100 - - kamctl: added command for management of uid_domain records - -commit 9cb173699b25bc420ff5938214b3df81ed18a4ba -Author: Daniel-Constantin Mierla -Date: Fri Jan 25 17:30:42 2013 +0100 - - core: made a wrapper forward_reply_nocb() - - - it forwards a reply without calling the callbacks from modules for sip - response handling - - fixes the issue of sl_forward_reply() looping when used in TM onreply - routes - -commit 0636b8a70109ee44b46ec0cc76d4513c87c18e3f -Author: Daniel-Constantin Mierla -Date: Fri Jan 25 17:29:46 2013 +0100 - - sl: use forward_reply_nocb() for sl_forward_reply() - - - otherwise it gets to looping if the function is used from TM onreply - routes - -commit d2d6b4b932c7df6e6620a256692be5ef049356a3 -Author: Daniel-Constantin Mierla -Date: Fri Jan 25 11:38:38 2013 +0100 - - core: end simple pv name (e.g., $xy) at end of line - - - cfg parser was throwing error if last token in a line was $xy as pv - with \n was not found - -commit c3987b2ef44c26b781d9b026d86370184e2a4ae3 -Author: Anca Vamanu -Date: Thu Jan 24 13:45:18 2013 +0200 - - db_cassandra: Replaced 'openser' with 'kamailio' - -commit 139ae7966a0ff8e5e46a902d9e14dc8840934bd0 -Author: Daniel-Constantin Mierla -Date: Thu Jan 24 11:45:31 2013 +0100 - - core: default compatibility set to SR_COMPAT_MAX - - - means that $xy is tried first as pv and if not, then is considered avp - (was default compat mode for default flavour in the past) - - you can still use: - - #!KAMAILIO in config to force SR_COMPAT_KAMAILIO (i.e., $xy must - be a pv, otherwise is error) - - #!SER is config to force SR_COMPAT_SER (i.e., $xy is avp/attr) - -commit 216029a609630a7d18ce3b77d3d9ae95f45d662c -Merge: 2d129b5 f1b5145 -Author: Matthew Williams -Date: Wed Jan 23 11:27:54 2013 -0800 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router - -commit 2d129b5538b64acea788b502dcf97c5ffffdf949 -Author: Matthew Williams -Date: Wed Jan 23 10:49:52 2013 -0800 - - correct url to libjson in json and jsonrpc-c module docs - -commit f1b514596856889fa2a8e4b164178998177d7b59 -Author: Peter Dunkley -Date: Wed Jan 23 13:42:52 2013 +0000 - - pkg/kamailio/(centos|fedora): Removed old FC16 build - - - Fedora 18 is now out and I only plan to keep this .spec correct - for CentOS and Fedora working for current and previous OS releases. - -commit cb56b67788fc61f8de65d0335c6364c7aba15759 -Author: Daniel-Constantin Mierla -Date: Wed Jan 23 12:55:51 2013 +0100 - - lib/srdb1: update custom sql functions for uid tables - -commit 9a1d64bddbf3ec931d39a0e47370e8d46ec2aeb9 -Author: Daniel-Constantin Mierla -Date: Wed Jan 23 12:49:16 2013 +0100 - - kamctl: added option to grant sql access from a remote host - - - set DBACCESSHOST in kamctlrc - -commit 1fd2b4ec865cbe738d92e72259fed27380d252ab -Author: Daniel-Constantin Mierla -Date: Wed Jan 23 00:45:17 2013 +0100 - - kamctl: added option to creat uid-related tables - - - few more options to be able to create database only, grant or revoke - privileges from command line - - the extensions were added for mysql - -commit 71d1f9b233559e12970019819323cdfb9427b836 -Author: Daniel-Constantin Mierla -Date: Tue Jan 22 23:09:47 2013 +0100 - - kamctl: cleaned db creation - -commit 15e1ae6720136a698326a0b53f6db8eef73e3e5a -Author: Richard Brady -Date: Tue Jan 22 17:19:31 2013 +0100 - - json: proper handling of empty values for json documents - -commit 3e580e1ee24f9b9ec4b1fa151b23ebc84f3db1cb -Author: Alexandr Dubovikov -Date: Tue Jan 22 15:45:38 2013 +0100 - - modules:sipcapture Added PSQL schema, fixed columns length, fixed id column for PostgreSQL - - Thanks Ovind Kolbu for schema and patch - -commit f76bd09d4800ea63552c11002d7f6f72569e78ed -Author: Daniel-Constantin Mierla -Date: Tue Jan 22 13:40:11 2013 +0100 - - pua_reginfo: fix setting lengths of contact attributes - - - fix also for warning from FS#255 reported by Ovidiu Sas - -commit ff22a1cbc2b817d63611b3da967d8245e11cb84c -Author: Richard Brady -Date: Tue Jan 22 12:19:53 2013 +0100 - - siputils: fix decode2format fuction to handle ; in userpart - -commit 58417e5f23c50a1892584d368e49373c579af31e -Author: Alexandr Dubovikov -Date: Tue Jan 22 11:41:43 2013 +0100 - - modules:sipcapture Changed authorization column to "auth". Now PostgreSQL should be happy. - - for old schema please use: - - modparam("sipcapture", "authorization_column", "authorization") - -commit c579bce3e6fa4efc29cf4fd8681f471a768a8e7c -Author: Ovidiu Sas -Date: Mon Jan 21 15:10:39 2013 -0500 - - kamdbctl: fix presence tables provisioning - -commit da007aaf6a2296c62189d30c6991e5cdb9f8a4ec -Author: Konstantin Mosesov -Date: Mon Jan 21 19:40:19 2013 +0200 - - app_python: reverted changes (dlflags) - -commit 36013e021dde6362bb335bbcadd41b6838151a45 -Merge: f50e910 288c597 -Author: Peter Dunkley -Date: Sun Jan 20 20:13:40 2013 +0000 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router - -commit f50e910b9710fd1055aae7e445a0504b841413a3 -Author: Peter Dunkley -Date: Sun Jan 20 20:04:45 2013 +0000 - - pkg/kamailio/fedora: added build files for Fedora 18 - -commit 288c597bfba2ffba4c49e691488cee574d714a97 -Author: Olle E. Johansson -Date: Sun Jan 20 16:58:59 2013 +0100 - - README remove "modules_k" - -commit 41fab9cb21af174734ef820da4bbf6d19d34d56a -Author: Olle E. Johansson -Date: Sun Jan 20 16:55:23 2013 +0100 - - README-MODULES - merge listing of modules into one combined - - Thanks to Daniel for merging the directories. - -commit 4cc713182c4f5b53a00a8d2d6d3a21afca589b77 -Author: Konstantin Mosesov -Date: Sun Jan 20 17:38:06 2013 +0200 - - app_python: - - fixed runtime warning: exports dlflags interface is deprecated and it will not be supported in newer versions; consider using mod_register() instead - - python routines can be called in any routes. - -commit 1d29c95e982244a5140f93c8ae886c8d457d8e24 -Author: Peter Dunkley -Date: Sun Jan 20 15:07:59 2013 +0000 - - pkg/kamailio/(centos|fedora): updated kamailio.spec - -commit d934a2acd31408ae6afdf31007f2ebe4527d1f3d -Author: Peter Dunkley -Date: Sun Jan 20 14:23:17 2013 +0000 - - modules/db_postgres: Fixes - - - Fixed submit_query() retry mechanism - connection errors now detected and retried. - - Fixed memory leak when raw queries contain > 1 SQL command. - - Fixes by Hugh Waite @ Crocodile RCS - -commit c059041a71a1b7175243c366316108ce370fffa7 -Author: Peter Dunkley -Date: Sun Jan 20 14:18:55 2013 +0000 - - core: fixed bug in PV caching that broke the use of the $$ symbol - - - Found and fixed by Hugh Waite @ Crocodile RCS - -commit 9a3b3229e0b0f39489feca8da3c0a7aeeaae600e -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 14:28:57 2013 +0100 - - Makefile.defs: version set to 4.0.0-pre1 - -commit fedd38e03f6fcc4851d738cf2bd274b5290ae1ae -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 14:19:11 2013 +0100 - - Makefile: updated the names for perl modules - -commit e5e821150f53135e8c288f71ddd95c6c23e8d8d9 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 14:18:02 2013 +0100 - - perlvdb: module renamed to db_perlvdb - - - it is a database driver module - -commit 63a09d8562a1ac3679dc34c409a37f1d6617e430 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 13:26:01 2013 +0100 - - modules/*: updated include paths - -commit 1abe29004193a348a1dcca72665fef1d390610b0 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 12:57:52 2013 +0100 - - modules_k/*: moved k modules in directory modules/ - -commit dbe58f4cff868f069bc417b3002c7ac75ce484a1 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 12:51:29 2013 +0100 - - modules_k/: added placeholder for an empty directory - -commit ba3fa594f3ade8f8afd69606f92d1e4fa4685ede -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 12:47:08 2013 +0100 - - app_perl: perl module moved and renamed to modules/app_perl - - - same naming pattern as for the other embedded interpreters - -commit 0533e3f86bb605d4ce68ae60b80013dcf8540903 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 12:14:41 2013 +0100 - - perl: samples and documentation updated to use package Kamailio - -commit e3f78196b345ab22eaba8f4ade7492e660782485 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 11:59:00 2013 +0100 - - perl: xs file updated to use Kamailio instead of OpenSER - -commit 1be653e243b02094a93ef20509fc98326f160284 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 11:53:36 2013 +0100 - - perl: Perl packages renamed from OpenSER::* to Kamailio::* - - - part of patch from Stoyan Mihaylov - -commit f448282ec6775857f4bef733f4785dd571bfe081 -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 11:47:48 2013 +0100 - - perl: renaming openser to kamailio in C source files - -commit 9d5cc7085e916bf348ba52828d5c9519652c61ae -Author: Daniel-Constantin Mierla -Date: Sun Jan 20 11:34:20 2013 +0100 - - perl: renamed files and directory from openser to kamailio - - - part of patch from Stoyan Mihaylov - -commit 4e939748186c6dcff6744d36439b9620fe41a196 -Author: Olle E. Johansson -Date: Sat Jan 19 22:33:18 2013 +0100 - - iptrtpproxy Documentation cleanup - - And a missing file from sanity module - -commit 80dc9107c5cd47cab24786a12d2612c25f714ff3 -Author: Olle E. Johansson -Date: Sat Jan 19 20:07:08 2013 +0100 - - sanity Sanitize XML file names and formats - -commit 396de50105c29c102da1afb9fabe8ea1324a7282 -Author: Olle E. Johansson -Date: Sat Jan 19 19:57:50 2013 +0100 - - xmlops Updating xml formats - -commit 67a0aafe4933d6ccbc04e6a86a21c34f62bae7fb -Author: Richard Fuchs -Date: Fri Jan 18 10:21:50 2013 -0500 - - tmrec: fix example given in docs - -commit 3cec800fb8e48b6f2dbc880c5a991e9d636c9f5c -Author: Jason Penton -Date: Fri Jan 18 14:33:53 2013 +0200 - - modules_k/statistics: fixed bug when using pvar as stat value (fixup function was broken) - -commit a865b622be84ddc1dacff35401adbb6937ec86b3 -Author: Olle E. Johansson -Date: Fri Jan 18 13:32:55 2013 +0100 - - README - converted to Kamailio - -commit 5b6231d2d85f2a5a07b09e7e534f25e16f5e43b2 -Author: Olle E. Johansson -Date: Fri Jan 18 09:41:42 2013 +0100 - - Update to current module set for 4.0 - -commit ebde66ba5f97ff5587e36b8e952b19a1becd08ab -Author: Ovidiu Sas -Date: Thu Jan 17 19:19:37 2013 -0500 - - carrierroute: fix cross-compilation - -commit 83eafc8d8f767f4705d5f76ad0ffd4349a06c927 -Author: Daniel-Constantin Mierla -Date: Wed Jan 16 22:37:08 2013 +0100 - - dialog: fix for is_in_profile() - - - function was broken, reported by Klaus Darilion - -commit ac2a3acddef3d5dd3a8033859f8a245624944d8e -Author: Daniel-Constantin Mierla -Date: Wed Jan 16 22:28:30 2013 +0100 - - Revert "First commit (raw code) of new module: app_java (Java Native Interface support for Kamailio)." - - This reverts commit 3cc85a3915ed69471966cf741d7cf2adee4f3b0b. - - - code in master is frozen for v4.0.0 - -commit ebaab480a74fdde6036b471ec1175c4ad294c758 -Author: Daniel-Constantin Mierla -Date: Wed Jan 16 22:27:34 2013 +0100 - - Revert "app_java:" - - This reverts commit db74e5230a26fdfebbf88f9575ea8a7636719743. - - - code is master is fronzen for v4.0.0 - -commit db74e5230a26fdfebbf88f9575ea8a7636719743 -Author: Konstantin Mosesov -Date: Wed Jan 16 21:08:42 2013 +0200 - - app_java: - - code cleanup - - changed all *alloc to pkg_*alloc - - added examples module configuration file - -commit 3cc85a3915ed69471966cf741d7cf2adee4f3b0b -Author: Konstantin Mosesov -Date: Wed Jan 16 20:43:29 2013 +0200 - - First commit (raw code) of new module: app_java (Java Native Interface support for Kamailio). - -commit 588a1a4280840e40beaae77345533b40ef1c710d -Author: Ovidiu Sas -Date: Wed Jan 16 11:38:18 2013 -0500 - - xhttp_pi: adding note about using the provisioning interface with db_text - -commit c065b24620a9475a70a19de95231a814076eefae -Author: Ovidiu Sas -Date: Wed Jan 16 10:48:25 2013 -0500 - - xhttp_pi: more documentation updates - -commit 0f59c52cb1d21d07654f815af3636330dc02e164 -Author: Ovidiu Sas -Date: Wed Jan 16 10:37:30 2013 -0500 - - xhttp_pi: documentation updates - - reported by Philippe Sultan - -commit 32e73f99a3bab4bc673504d316831f0a8ff1f48c -Author: Olle E. Johansson -Date: Tue Jan 15 09:46:22 2013 +0100 - - Starting to prepare README/INSTALL files for release - -commit 241681f6a2bc9d9647251963eee5f65386717edb -Author: Carsten Bock -Date: Tue Jan 15 09:03:25 2013 +0100 - - b/f: If no parameter is given, the "fixup_lir" method will never get called... - -commit 7f7e0d046cbaf59170605c21070eb476a28fbc18 -Author: Carsten Bock -Date: Tue Jan 15 08:18:52 2013 +0100 - - b/f: Need to link librt (on OS non-Darwin) - -commit 04b1b6c94a69da8b4bf5134d890edfaf0c0ad153 -Author: Carsten Bock -Date: Mon Jan 14 19:28:27 2013 +0100 - - b/f: Modify IMS-Group Modulenames to reflect module-name changes. - -commit b87c9b03499e58d481cf6fe02302a378051272a0 -Author: Carsten Bock -Date: Mon Jan 14 17:46:08 2013 +0100 - - b/f: Do not remove lib*, only "real" libs - -commit b926764c5cfb6737407b2090a6c5659b46373237 -Author: Daniel-Constantin Mierla -Date: Sat Jan 12 13:10:18 2013 +0100 - - registrar: fix event route execution warning - -commit a797eab732be6b17e3727ee604d21fcaddd5b35e -Author: Olle E. Johansson -Date: Sat Jan 12 08:45:11 2013 +0100 - - xmlrpc Modify doc structure to kamailio-like - -commit 9bfc37fcc95da2d0b970efb6a3333e6d8e5f5bde -Author: Olle E. Johansson -Date: Sat Jan 12 08:33:25 2013 +0100 - - usrloc(k) Fix compiler warnings - - Thanks to juha for the reminder - -commit 4af97738081da634643f0fdfd681e7a94740a6d0 -Author: Ovidiu Sas -Date: Fri Jan 11 19:14:15 2013 -0500 - - xhttp_pi: make sure that cfg directory exists during install - -commit 11cedccfbc11c9efde566ecd2afb883246c64ba7 -Author: Ovidiu Sas -Date: Fri Jan 11 15:59:31 2013 -0500 - - lib/ims: fix cross compilation - -commit 35ba820e82840661d23c93e10bd289b8a6e14f5f -Author: Ovidiu Sas -Date: Fri Jan 11 15:20:11 2013 -0500 - - sqlops: remove unused variable `sv' - -commit c8878c0c702173d44dd4d9fad263ea8e329e6897 -Author: Ovidiu Sas -Date: Fri Jan 11 15:13:16 2013 -0500 - - permissions: remove unused variable `count' - -commit 35d8fd13382fc5fa6256f17a0f43c396be7c638d -Author: Ovidiu Sas -Date: Fri Jan 11 14:13:53 2013 -0500 - - outbound: fix cross-compilation - -commit 7bf23bc79b3ace2348c94bf284aac13dd917c3ab -Author: Ovidiu Sas -Date: Fri Jan 11 14:13:36 2013 -0500 - - osp: fix cross-compilation - -commit d18997cd35d3ac03f446a61a7f198eb1b0704bd0 -Author: Ovidiu Sas -Date: Fri Jan 11 14:13:07 2013 -0500 - - websocket: fix cross-compilation - -commit c16ae05d5b91984a9d17ce6b643f29cf7b92cd75 -Author: Ovidiu Sas -Date: Fri Jan 11 14:12:49 2013 -0500 - - tls: fix ssl cross-compilation - -commit c9d8a66071efb77428ae74572d453c5b4ded4764 -Author: Ovidiu Sas -Date: Fri Jan 11 14:12:10 2013 -0500 - - auth_identity: fix ssl cross-compilation - -commit f350ec8cd45819ed6f60947bca2ac6e747f86541 -Author: Klaus Darilion -Date: Fri Jan 11 14:22:57 2013 +0100 - - modules_k/uac: document RR append_fromtag requirement in auto mode - -commit 37c43f695fae346fde83690596150a84192ad0db -Author: Peter Dunkley -Date: Fri Jan 11 10:54:00 2013 +0000 - - pkg/kamailio/(centos|fedora): updated release tag in .spec - -commit 5a78a8b8ec104550a37d8e2ae9005bf87d21e00f -Author: Anca Vamanu -Date: Fri Jan 11 11:07:45 2013 +0200 - - dialog: fix bug when detect_spirals enabled - - If detect_spirals enabled and the caller sent an Invite which received a - negative response and then immediately sent another Invite with the - same callid and tag, the module did not create a dialog record for the - second Invite. It wrongly concluded that the Invite is spiraled. This - resulted in missing CDR for that call. - Behavior observed if the first Invite has a small Session-Timer interval - and receives a 422 reply. When the phone sent the second Invite with a - larger Session-Timer, which could have been successful, it was not recorded - by the dialog module. - -commit a1a197aa27a62426599d908870c60749e9941a03 -Author: Jason Penton -Date: Fri Jan 11 10:47:44 2013 +0200 - - modules/ims_qos: update to correct binding name for ims_usrloc_pcscf - -commit b414cb1d7dc92e24ea98e5624060f9ba25726602 -Author: Daniel-Constantin Mierla -Date: Fri Jan 11 09:32:12 2013 +0100 - - Makefile.defs: version set to 4.0.0-pre0 - - - marking pre-release phase - -commit 622640b85cbf681055c1a9c28d3f3ab61c13b36e -Author: Ovidiu Sas -Date: Thu Jan 10 16:53:12 2013 -0500 - - ims_registrar_scscf: fix cross-compilation - -commit 2c70b76e122d061b62058623e85e42872cd003ac -Author: Ovidiu Sas -Date: Thu Jan 10 16:43:29 2013 -0500 - - ims_registrar_pcscf: fic cross-compilation - -commit 7b483c4cd97d61c8eefc484d31ffb3ba43d03ca5 -Author: Ovidiu Sas -Date: Thu Jan 10 16:43:05 2013 -0500 - - ims_isc: fix cross-compilation - -commit f1e6a00c93f18871c5c069a08aac77fe783fd6cd -Author: Ovidiu Sas -Date: Thu Jan 10 16:42:34 2013 -0500 - - ims_icscf: fic cross-compilation - -commit 5799a797c7e4d0e84aca20618ef61dbf1a33692c -Author: Ovidiu Sas -Date: Thu Jan 10 16:42:08 2013 -0500 - - ims_auth: fix cross-compilation - -commit 52a773fb8bcd9a07f12dcb0de9bff8744ab386d3 -Author: Klaus Darilion -Date: Thu Jan 10 22:45:09 2013 +0100 - - kamailio.cfg: describe log levels - -commit 6d34982c99060436bc9a3a07058eb805488fc34d -Author: Olle E. Johansson -Date: Thu Jan 10 21:45:09 2013 +0100 - - mtree Add RPC command mtree.summary - -commit 52331c6ba80f2eb862405e7987ab21d6f55549e0 -Author: Olle E. Johansson -Date: Thu Jan 10 20:10:49 2013 +0100 - - mtree Bug fix - save number of nodes in mtree data structure at load - - Otherwise MI function doesn't report anything but zero nodes and memory - -commit 222166ef3a20c0c4a98a3c810112901c71ef275d -Author: Peter Dunkley -Date: Thu Jan 10 19:01:47 2013 +0000 - - modules/rtpproxy: allowing rtpproxy_manage to take the flags parameter as a pseudo-variable - - - Feature added by Hugh Waite @ Crocodile RCS - -commit ef2b3a6ee84f75bd49a06635a486807eeaebc08a -Author: Ovidiu Sas -Date: Thu Jan 10 12:50:06 2013 -0500 - - kamdbctl: new command - kamdbctl pframework create - - creates a provisioning framework for the installed db tables - -commit 2793567c9f4f31e2d58e23faa092750f0d71a0c1 -Author: Alex Hermann -Date: Thu Sep 29 18:47:46 2011 +0200 - - modules_k/cfgutils: add locking around gflags - - gflags are stored in shared memory and must thus be protected against - concurrent access. - - Reads from an int are atomic on most (all?) real world hardware, so only - modification of the flags is placed under the protection of the lock, not - reads. - -commit 6f0f560ec9bf67d93e18f932f572aa8b526ac955 -Author: Peter Dunkley -Date: Thu Jan 10 16:00:46 2013 +0000 - - pkg/kamailio/(centos|fedora): updated .spec - -commit 3b575a618545dcd65362ea6de972222703d824d9 -Author: Richard Good -Date: Thu Jan 10 16:28:07 2013 +0200 - - modules/ims_qos: Added documentation - - Added admin documentation and README for ims_qos module - -commit e7b5f667a4b094c1aa1c426fe33648db782f9190 -Author: Richard Good -Date: Thu Jan 10 16:08:54 2013 +0200 - - modules/ims_usrloc_pcscf: Updated documentation - - Updated documentation and added README for ims_usrloc_pcscf module - -commit 743c1f7f9645ce760f5f1892fbee187f96c8513a -Author: Richard Good -Date: Thu Jan 10 15:50:01 2013 +0200 - - modules/ims_auth: Updated documentation - - Updated documentation and added README for ims_auth modules - -commit 0b476ea4981b750e3f5974f5fd1e3b8fb39ed8fa -Author: Richard Good -Date: Thu Jan 10 15:40:00 2013 +0200 - - modules/ims_icscf: documentation updated - - Documentation for IMS ICSCF modules updated and README added - -commit 06fb17e57e871e99eb251e3243f70652e92a013d -Author: Jason Penton -Date: Thu Jan 10 15:25:56 2013 +0200 - - modules/ims_qos: Added IMS QoS module - - This module provides Diameter Rx IMS interface between PCSCF and PCRF - functions - -commit cbf2cb0c1d0301d63154834fbd9220e334b9c64c -Author: Jason Penton -Date: Thu Jan 10 14:33:54 2013 +0200 - - parser/sdp: fast-access pointer for raw SDP stream string - - basically a pointer to the raw SDP stream - -commit f0cb7735b766e14ba142a45064e254d82d079746 -Author: Richard Good -Date: Thu Jan 10 14:29:38 2013 +0200 - - modules/ims_isc: documentation added - - Added documentation including README for ims_isc module - -commit 8fb8b261fa76e5c3497b602f6b850fe02e5db48f -Author: Alex Hermann -Date: Tue Jan 8 19:09:48 2013 +0100 - - core: make database version table name configurable from script - - When kamailio is part of a bigger project and is sharing its database with - it, it is nice to have a less generic table name than "version". - - Also usefull when upgrading kamailio, where the new version has (backwards - compatibel) changes in the database definition. If each kamailio version uses - its own version table, they can all use the same database. - -commit 89a9db548f01eea54eb11ae57b76abcfb5e5c5f6 -Author: Alex Hermann -Date: Mon Nov 5 13:33:27 2012 +0100 - - modules_k/kex: call pkg_proc_stats_destroy in module destroy function to free memory - -commit 2628e120432001c118eb89ac1b7023a9f5e795ad -Author: Alex Hermann -Date: Mon Oct 29 15:25:21 2012 +0100 - - modules_k/tmx: Add $T_reply_last, returning last reply code - - Make the last/previous reply on a branch available to the script via - $T_reply_last. Only available in TM_ONREPLY_ROUTE. - -commit a2d09db983aa0b9a54ee78d5a910ba92140b05f8 -Author: Alex Hermann -Date: Thu Oct 11 18:43:07 2012 +0200 - - modules/rtpproxy: Add 'b' flag to add a branch specific string tot the call-id - - In a forking call, sometimes it is needed that each branch uses different - options to the rtpproxy. This patch adds a parameter that makes each - rtpproxy session unique to a branch by appending the value of a PV to the - call-id rtpproxy parameter. - -commit f11f35045f6eaffd153d767946399fbb397bc3eb -Author: Alex Hermann -Date: Mon Jul 4 17:33:50 2011 +0200 - - modules/avpops: avp_db_query: treat BIGINT result as INT, disregarding the most significant 32 bits. - -commit 457d075d3aabcaff6b6d14b6dfbc01c8a91734ec -Author: Alex Hermann -Date: Thu Oct 11 18:28:34 2012 +0200 - - modules/tm: Remember per-branch onreply_route and onfailure_route settings - - The onreply and onfailure routes were set only per transaction. This means - that when the onreply and/or failure route is changed in failure route (serial - forking), late replies to earlier branches would use the new onreply and - failure route instead of the routes set for them. - - This commit copies the transaction's onreply and failure routes to the branch, - so the route set when the request is sent out is always chosen, no matter - how late the reply arrives. - - Because the per-branch setting is copied after running onbranch_route, it is - now also possible to set the routes per-branch instead of per-transaction. - -commit 0b9f84519dd018159d67bb827d7e5c7e1e4431e2 -Author: Alex Hermann -Date: Mon Aug 29 18:44:20 2011 +0200 - - modules/tm: add option to check callid when matching transactions - - Use this if you don't want replies/requests from broken clients, which - send a mangled Call-ID, to match the transaction. For example when - the UAC won't recognise the response anyway because of changed - Call-ID, this setting will prevent accounting records to be created - or failure_route to be skipped. - -commit 9ff6a40fce5160f23a385693d79df508759f1a31 -Author: Alex Hermann -Date: Thu Aug 25 11:16:18 2011 +0200 - - modules_k/trusted: no not open DB connections if db_mode==1. - - For cached operation, childs (except MI) do not need DB access - -commit d1a85fbb01a9ae5b23c7b4f58de4ec584295d611 -Author: Alex Hermann -Date: Fri Aug 26 11:16:45 2011 +0200 - - modules_k/nathelper: add return value 2 to fix_nated_sdp() indicating no ip's have been replaced - -commit 358f0b859cdb15afa0c1079009a67b7aa9349f2e -Author: Alex Hermann -Date: Fri Aug 26 13:08:39 2011 +0200 - - modules_k/pv: make individial flags accessible via $Mf(idx), $Bf(idx) and $Sf(idx) - - The parameter is the flag number (or registered name). If present - allows setting and reading the corresponding flag. As each flag is - now available as separate PV, it can be used in logging, transformations - and, last but not least, in loading/storing individual flags - from/to a database with sql_pvquery(). - - When setting, any value != =0 will set the flag, 0 will clear it. When reading - a set flag returns 1, cleared flag 0. - - example: - - xlog("flags: 0x$mF / $Mf(15) / $Mf(16)"); - setflag(15); - xlog("flags: 0x$mF / $Mf(15) / $Mf(16)"); - $Mf(16) = 1; - xlog("flags: 0x$mF / $Mf(15) / $Mf(16)"); - $Mf(15) = 0; - xlog("flags: 0x$mF / $Mf(15) / $Mf(16)"); - - output: - - flags: 0x00000000 / 0 / 0 - flags: 0x00008000 / 1 / 0 - flags: 0x00018000 / 1 / 1 - flags: 0x00010000 / 0 / 1 - -commit 847ea5b2bc81749a44de34b35e5ef8516819951a -Author: Alex Hermann -Date: Tue Aug 30 13:35:55 2011 +0200 - - modules_k/trusted: Free memory of old trusted list when the list has been reloaded - -commit 1411a5789139cc302179b7d9f3a2b678e2caef9c -Author: Alex Hermann -Date: Fri Sep 16 13:48:59 2011 +0200 - - modules/mtree: Do not log an error when prefix not found. - - A not found prefix is already represented as a negative return code. - No need to log an error, as it may be perfectly valid that a prefix does not - exists. - -commit 58e81b6c42cc48bd2b4afe84491a1a12d9d4b973 -Author: Alex Hermann -Date: Thu Sep 22 15:59:23 2011 +0200 - - lib/srdb1: store BIGINT result also as 32-bit integer if it fits - - BIGINT is always converted to string. Additionally it is now stored as INT too. - - MySQL (at least on 64-bit) is returning BIGINT for all "generated" INT values, - like COUNT(*). By storing thee results as INT (if possible), the config script - will be compatible with both 32-bit and 64-bit column values. - -commit d5898510adbe9c45d16a770531a3e7c95061956b -Author: Alex Hermann -Date: Mon Oct 3 15:55:42 2011 +0200 - - modules_k/tmx: Add active_transactions statistics - - An active transaction is a transaction that is still waiting for a reply. - If it has seen a reply but is existing just to collect retransmissions, - it is not counted (in contrast to inuse_transactions). - -commit 74c1a6224a0d55735f01e0b0800206eec002fab0 -Author: Alex Hermann -Date: Tue Mar 27 16:44:23 2012 +0200 - - modules_k/dialog: Allow unset_dlg_profile also in REQUEST_ROUTE - - even if the function has no use in normal REQUEST_ROUTE, the route block - may be called from other route blocks like failure_route. - -commit 1109a4ff6c68d9b2a619198cf1150b3431565bf0 -Author: Alex Hermann -Date: Mon Jan 7 15:35:46 2013 +0100 - - modules_k/sqlops: eleminate string copy in sql_exec_xquery() - - xavp api will make a copy in shmem, no need to make a private copy first. - - Thanks to Juha heinanen and Daniel-Constantin Mierla for finding this - inefficiency. - -commit 9b3d4e192859d83d8ec990751a5ead29ff72dab1 -Author: Alex Hermann -Date: Thu Nov 29 11:47:10 2012 +0100 - - modules/pv: Fix $snd(ip) for IPv6 - - Result was always an empty string surrounded by []. Converted to use ip_addr2a(). - This also prevents the surrounding [], which are not part of an IPv6 address. - -commit 0ba54b551aa5dd7c13d4c6c4c275fd4cba3b17b0 -Author: Alex Hermann -Date: Thu Feb 23 23:48:16 2012 +0100 - - modules_k/htable: don't return expired values - - If an item has expired, it will be treated as non-existent. - -commit 87d10dc1dce72d5c6b3a658f1d1193d16633eb6c -Author: Alex Hermann -Date: Mon Feb 27 14:14:44 2012 +0100 - - modules_k/perl: Fix resetting of flags in sv2int_str - - According to the functions comments and its usages in the same file, the flags would only be or'red, not reset - - This fixes setting an string named avp with an integer value: - - OpenSER::AVP::add("string", 12345); - -commit dfe3f66fc7969a5c479f78b1ec000914c48bd9ff -Author: Alex Hermann -Date: Tue Feb 28 11:39:10 2012 +0100 - - modules/sanity: Fail if request uri can't be parsed - -commit 1be860ef1a766bf271e7f7f7efcdc1006fe5bde9 -Author: Alex Hermann -Date: Thu Jun 7 14:20:01 2012 +0200 - - modules_k/pua_mi: when checking for 0-length string, check s.len, not s.s - -commit 1e1202d3a710eeec5f534fc11f0406ba3e449df6 -Author: Alex Hermann -Date: Mon Jul 16 15:24:37 2012 +0200 - - modules/auth: replace ser_time() wih time() - - The values returned by ser_time() deviate so much from time() (and thus - system time) that the module was creating expired nonces in challenges - and rejected valid nonces as being "from the future". - - See also FS#243 - -commit bf7c1ee6d77e781e846504970a1c2d3ef9544908 -Author: Alex Hermann -Date: Tue May 15 12:29:14 2012 +0200 - - modules/rtpproxy: return -3 when no more rtpproxy nodes can be found - - Provide a unique error code for the case when no (more) proxy nodes - are availave in the set. This allows the script recognize it from - the more general errors (all -1) and do special processing (failover - to another set) - -commit d0d17a8b9c20bfd9e8ce78931dd9f52254242a74 -Author: Alex Hermann -Date: Mon Jan 7 15:16:27 2013 +0100 - - modules_k/uac: regenerate README - -commit f310fd10bda2da682dee9eaa91474c704ffd8c2c -Author: Alex Hermann -Date: Tue Jul 10 12:41:45 2012 +0200 - - modules_k/uac: uac_reg: add reg_retry_interval parameter - - The new parameter allows to retry failed registration attempts. - Instead of unconditionally marking the entry as disabled, the - registration will be retried after the set interval. Setting it - to 0 (default) retains the old behaviour. - -commit 7432aa5ee180851dd5d6d933cbfe7ced93396566 -Author: Alex Hermann -Date: Tue Feb 28 15:23:17 2012 +0100 - - modules_k/uac: uac_reg: skip realm checking if realm is empty - - When realm is the empty string, do not check the realm, but accept anything - the UAS throws at us. - -commit 0507b848d0257b478b422b49eb339ade7b801579 -Author: Alex Hermann -Date: Tue Feb 28 13:10:23 2012 +0100 - - modules_k/uac: skip realm matching when realm pv for uac_auth is empty or null - - This can be used if the realm used by the upsteam UAS isn't known in advance. - -commit eb1abe66b9f97a4f98386d294b538a53ec05c9a6 -Author: Alex Hermann -Date: Tue Feb 21 12:35:18 2012 +0100 - - modules_k/uac: Add reg_db_table parameter to specify table name for registrations - -commit d2bdfd325665a0bc2652cdaa237d0afda9e4e8f8 -Author: Alex Hermann -Date: Fri Sep 2 09:36:43 2011 +0200 - - modules_k/tmx: add t_is_reply_route() - - Function to determine if the top executed route block is a reply. - In line with t_is_failure_route() and t_is_branch_route(). - -commit 87bce89fe77942146d03ce4a44e6330e4a8149e7 -Author: Alex Hermann -Date: Thu Sep 1 17:18:03 2011 +0200 - - modules_k/tmx: add $T_reply_reason PV - - Especially for internally generated (faked) replies it was hard to - get the reason phrase. This PV provides just that. - -commit 43533b41f2a4fb23b24bcf98b01fca223c605cd9 -Author: Alex Hermann -Date: Mon Jan 7 17:10:18 2013 +0100 - - Makefile: add corex module to kstandard group - -commit 14ef60cf93f2e7d2a458f8a3ce287e52f1b497d6 -Author: Alex Hermann -Date: Mon Jan 7 14:04:57 2013 +0100 - - modules/tmx: set $T_branch_idx to sane values for more route types - - $T_branch_idx will now return a branch number (0-based) in more route types. - - BRANCH_ROUTE and TM_ON_REPLY_ROUTE: currently handled branch number - REQUEST_ROUTE and FAILURE_ROUTE: next branch number, will be increased by - every append_branch - - In FAILURE_ROUTE, the branch number of the winning reply can be retreived - with $T_rpl($T_branch_idx) - - All other route types will result in (the invalid) branch number -1. - -commit 397ef369d7092aa670d63f81aa86657daee47071 -Author: Alex Hermann -Date: Fri Oct 12 14:06:33 2012 +0200 - - modules/tm: Set branch_index to T_BR_UNDEFINED when outside BRANCH_ROUTE or TM_ONREPLY_ROUTE. - - The inconsistent value of $T_branch_idx between BRANCH_ROUTE and - TM_ON_REPLY_ROUTE was fixed in an earlier commit, but now the value 0 has a - double meaning (branch 0 or invalid branch). This patch makes the invalid - branch distinguishable by setting it to -1. - - Now $T_branch_idx will return the branch number (0-based) in BRANCH_ROUTE - and TM_ON_REPLY_ROUTE and -1 in other route types or if the message is not - part of a transaction. - -commit e23e51ee2d5390b903b9f3029b01181c0dc5a7ba -Author: Alex Hermann -Date: Thu Oct 11 16:53:55 2012 +0200 - - modules/tm: Make branch_index consistent in all route types - - The branch index was set one to high in BRANCH_ROUTE, leading to - inconsistent branch numbers in reply routes. - -commit aa454db1818220d6b05699b9ee6e01a8237ffcb1 -Author: Olle E. Johansson -Date: Wed Jan 9 22:21:45 2013 +0100 - - siptrace Typo after test compilations. Bad luck. +===================== Changes Since Version 4.0.0 =========================== -commit a59b5bc19b2cc672794c959ee6eb4e42c461a3e9 -Author: Olle E. Johansson -Date: Wed Jan 9 21:20:17 2013 +0100 +commit 4ffd05e4664ca0af4dd101bedf12b40b251446aa +Author: Daniel-Constantin Mierla +Date: Wed Dec 4 15:33:14 2013 +0100 - cdp Documentation updates + Makefile.defs: version set to 4.1.0 - Read my lips: It's configuration, not confiuaragion or confirtuaration... :-) - -commit a6b038332e38e6f60fee32896ffd610cf76e11ee -Author: Olle E. Johansson -Date: Wed Jan 9 20:43:00 2013 +0100 - - avp XML doc updates - -commit c79c33f14d9cf15444cdd024551c788679cf71bb -Author: Olle E. Johansson -Date: Wed Jan 9 20:42:12 2013 +0100 - - avp Documentation typo fix and update (SER => Kamailio) + - new major release -commit 66560d5ad5c136aa833db57ed32283d788f56611 -Author: Olle E. Johansson -Date: Wed Jan 9 20:18:42 2013 +0100 +commit 3ad1f6afffe8250a3695ac8233bdb746bcfdcecf +Author: Daniel-Constantin Mierla +Date: Wed Dec 4 15:02:22 2013 +0100 - outbound(k) Minor edit of documentation. + doc/rpc_list: regenerated the lists of rpc commands - Please ignore, keep calm and carry on. - -commit 226c92425b266f1c1a5efb2286cf067ce0b7df22 -Author: Olle E. Johansson -Date: Wed Jan 9 20:13:26 2013 +0100 + (cherry picked from commit 2ffeea75931600e2da70d696a9965a5b7329211b) - siptrace(k) Fixing a bad change in docs... - -commit 9b1c23481551ef74b6efeb0118c1119470a08826 -Author: Olle E. Johansson -Date: Wed Jan 9 20:09:39 2013 +0100 +commit ab21be6c76bc2b3010d937bbf1d0b2d2fd3a7e7b +Author: Daniel-Constantin Mierla +Date: Wed Dec 4 14:34:04 2013 +0100 - siptrace(k) Add RPC command for turning on/off - - Copying the functionality of the existing MI command. + doc/rpc_list: added sctp in the list of modules exporting rpc commands - Also, setting the value of the trace_flag to 0 by default, as - documented in the documentation. - -commit fd77c500050073e019b0366fdcd3a6c125a20cb9 -Author: Olle E. Johansson -Date: Wed Jan 9 20:04:29 2013 +0100 - - sipcapture: Fix typo in XML markup - -commit 9af31f9c44cc35a4cbe74accf79513c7272ec93c -Author: Olle E. Johansson -Date: Wed Jan 9 19:50:12 2013 +0100 - - sipcapture Small cleanup in docs - -commit ba12e3893787a8340d21aa18ab6faa81e825713f -Author: Olle E. Johansson -Date: Wed Jan 9 18:38:54 2013 +0100 + (cherry picked from commit 56c772fbd1490a7cef3f748c61d1c7d7be3167a3) - sipcapture Small typo - -commit 8ebf2dbe6cc0e51b47c423227f5dcff14c7af4c3 -Author: Olle E. Johansson -Date: Wed Jan 9 18:37:43 2013 +0100 +commit 8f488c2ec4919052dfb12e8135b672411957c44e +Author: Daniel-Constantin Mierla +Date: Fri Nov 15 10:08:12 2013 +0100 - sipcapture Add RPC command to turn on/off or check status + app_perl: docs updated with reset_cycles parameter and rpc commands - Kamailio RPC rocks - much more than IMS ;-) - -commit 70ca23583a136f2a401ce57d4b9f110e2f4db1fe -Author: Richard Fuchs -Date: Wed Jan 9 12:34:27 2013 -0500 - - pv(k): Remove read-only empty strings that might be attempted to be written to + (cherry picked from commit b1f4dbeef93511563164de2f030f510f5a2cf2d9) -commit 2207618978f5d61c3afe65007c3460a2e1ef0d37 -Author: Olle E. Johansson -Date: Wed Jan 9 16:53:07 2013 +0100 +commit c1b11585f72c5b80efdf6c79d0b76391a4dbdef1 +Author: Daniel-Constantin Mierla +Date: Fri Nov 15 09:52:29 2013 +0100 - usrloc(k) Add RPC for AOR lookup + app_perl: added rpc commands to set/get the value for reset_cycles - Copied from mi interface. RPC rocks! - -commit 875c5e71cf1ac077f17eb15030ce8cfb0d299e89 -Author: Olle E. Johansson -Date: Wed Jan 9 15:29:48 2013 +0100 - - usrloc(k) Reveal existing rpc command in README - -commit e1306157b324d2ad21d97af0edf14072769787d7 -Author: Olle E. Johansson -Date: Wed Jan 9 14:00:32 2013 +0100 - - db_cassandra Minor edits and typo fixes to README + (cherry picked from commit de2c39a1857d74443c6b1fa4f06cbb18d3dd8026) -commit 8341030426fbe1f48e527b52d694b188ecdd48dc +commit 6a654f18f579aaf812a325a0b1a678ace5236051 Author: Daniel-Constantin Mierla -Date: Wed Jan 9 14:55:46 2013 +0100 +Date: Fri Nov 15 09:28:25 2013 +0100 - registrar: execute event route when a contact expires + app_perl: added mechanism to avoid leaks specific to persistent perl interpreter - - the name of the routing block is event_route[usrloc:contact-expired] - -commit ff18475e9fd3c6d4da4ca2e85c045fc761eb48e5 -Author: Anca Vamanu -Date: Wed Jan 9 15:44:38 2013 +0200 - - db_cassandra: updated documentation + - it is not easy to track the scope of variables, especially in libs, + the solution being to re-init the interpreter + - new module parameter reset_cycles to specify the number of execution + cycles after which the interpreter is reset. Default is 0 - don't + reset at all - - added URLs for Thrift library and Cassandra - -commit b7fde2349a28e22cd9e02412d914d07ee8654f79 -Author: Anca Vamanu -Date: Wed Jan 9 14:19:06 2013 +0200 - - db_cassandra: Improved documentation and config file example + (cherry picked from commit b5527627601c9e41ebbfaccb98bc2cf0bc003bdb) -commit b2e1fdd5df2e52d1393ebe592869e54fb6ee734f -Author: Anca Vamanu -Date: Wed Jan 9 12:52:13 2013 +0200 - - dbcassandra Added schema files for domain module - -commit 3b9de69fcc60bf918413a8b79fb475067c1852b3 -Author: Daniel-Constantin Mierla -Date: Tue Jan 8 22:38:35 2013 +0100 - - dialog(k): bridge contact address can be set via parameter - -commit 644902198d7727d8c283109d84de36babf5544ad +commit 8991684e94def6efa74d827753c2fe1c3e6d9d97 Author: Daniel-Constantin Mierla -Date: Tue Jan 8 22:34:00 2013 +0100 +Date: Thu Nov 14 23:00:32 2013 +0100 - dialog: add contact header in REFER for dlg_bridge() + app_perl: declare extern environ variable - - some UAs reject the REFER if there is no contact header - -commit 0574a4833122a6f4c0b70e84dfbe7bb2f0f821ce -Merge: fca96b0 d923afb -Author: Jason Penton -Date: Wed Jan 9 11:18:48 2013 +0200 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router - -commit fca96b0b6383198bbd95f0421e66bfb9cb1956f3 -Author: Jason Penton -Date: Wed Jan 9 11:17:03 2013 +0200 - - modules_k/rr: updated README - -commit d923afb1737651cbb7e4aac2517445afd4625c6c -Merge: d645d52 ead5275 -Author: Richard Good -Date: Wed Jan 9 10:35:22 2013 +0200 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router - -commit d645d525cc6e67ef17af31cbe7a54099134794e7 -Author: Richard Good -Date: Wed Jan 9 10:34:05 2013 +0200 - - examples/scscf/kamailio.cfg - fixed IMS modules names + - without it doesn't compile on darwin and it is recommended way to do + - provide some fake argc and argv to PERL_SYS_INIT3() to avoid compile + warnings - Updated SCSCF example cfg to use new IMS module naming convention + (cherry picked from commit 34ad8c295b45bc52cc5a071bf2b5651865389f94) -commit ead52752c9b61c0fcadd95d3d39042498068c73c -Author: Jason Penton -Date: Wed Jan 9 10:31:51 2013 +0200 +commit 99c4af0c61994e59d902defcf985a865a8d6b8f0 +Author: Victor Seva +Date: Wed Dec 4 11:46:29 2013 +0100 - modules_k/rr: added feature to set custom username for Record-Route URI - - this is an AVP param that can be used to customise the default - username (Request-URI) added to the Record-Route URI before - calling record_route. + pkg/kamailio/deb: update changelog -commit 9d394f9844b6043372b72539c69e9d56b0861d6d -Author: Richard Good -Date: Wed Jan 9 10:29:25 2013 +0200 +commit fb7e342ce500cc21e9f15a15f51e3b0ecad29310 +Author: Victor Seva +Date: Wed Dec 4 09:10:37 2013 +0100 - examples/pcscf/kamailio.cfg - fixed IMS modules names + pkg/kamailio/deb: add new modules - Updated PCSCF example cfg to use new IMS module naming convention + (cherry picked from commit e043c3a44b163e511e62af5c7290fb587141b400) -commit d3dee2b4579310fde42cfc727ebd5dc7537d8446 -Author: Richard Good -Date: Wed Jan 9 10:19:47 2013 +0200 +commit 983a1b29096c5bd2ef0db6f5cab80bfc1a5d326a +Author: Victor Seva +Date: Tue Dec 3 16:46:32 2013 +0100 - examples/icscf/kamailio.cfg - fixed IMS modules names + pkg/kamailio/deb: add jessie release - Updated ICSCF example cfg to use new IMS module naming convention + (cherry picked from commit daee150595e6fabdf53aa66425d32234ec7bbde7) -commit 68d7468cf77e1831186ea0017ead15adb73c1328 -Author: Olle E. Johansson -Date: Wed Jan 9 08:37:41 2013 +0100 +commit 6fc672fc4153c85c3742928d7c7e897f1f7387c7 +Author: Victor Seva +Date: Tue Dec 3 16:11:00 2013 +0100 - snmpstats(k) Change from OpenSER to Kamailio + pkg/kamailio/deb: Add dnssec module ( jessie only ) - Note: Apart from code name changes, the MIB files and the objects - has changed names. This will affect all systems monitoring your - SIP server as you upgrade to 4.0.0 + (cherry picked from commit 50b1c3a52c150201a563060cd1059a49ada89af2) -commit 2b09c72457a1c84508d74feb9dbc2d86f682508c -Author: Olle E. Johansson -Date: Wed Jan 9 07:56:14 2013 +0100 +commit c11fb2733024d7739e183c842cef4a386e090131 +Author: Victor Seva +Date: Tue Dec 3 15:51:41 2013 +0100 - htable(k) Add new RPC htable.listTables + pkg/kamailio/deb: add new modules app_java, autheph, sctp - This RPC list all defined tables and their settings + (cherry picked from commit 450d7ecb49a64e71dd28273b470911bd933bc209) -commit 85ee107929a80b54d47eaabef6f25d7b2f0659e7 -Author: Carsten Bock -Date: Tue Jan 8 20:58:03 2013 +0100 +commit 0a9055c1989aee3878d11a931daad8c971b15835 +Author: Victor Seva +Date: Tue Dec 3 16:42:06 2013 +0100 - Added sample configuration files for Kamailio IMS Setup. IMS Rocks! + pkg/kamailio/deb/debian: fix mono deps - Greetings from the Dolomites, Italy, Carsten - -commit d21c7e32ceb52a90a9106fb3bba66cdd357a1fa6 -Author: Ovidiu Sas -Date: Tue Jan 8 14:30:17 2013 -0500 - - pipelimit: fix documentation typo - -commit 3f8d1e2bdba6650d2541261a2184a0bef5b88b07 -Author: Ovidiu Sas -Date: Tue Jan 8 14:21:46 2013 -0500 - - pipelimit: enhance return codes for pl_check() function - -commit 16784302104e5fc40b3873019938d140c402eff6 -Author: Ovidiu Sas -Date: Tue Jan 8 13:08:44 2013 -0500 + (cherry picked from commit f17c51fe48149a6b7634cee2e36ee463e1ee9fef) - module*/*/Makefile: libcurl dependencies build fixes - -commit 66cc4397e04591fd5b2af9798a1ab22d3dbaf7b6 -Author: Arnout Vandecappelle (Essensium/Mind) -Date: Tue Jan 8 12:42:40 2013 -0500 - - module*/*/Makefile: libpcre dependencies build fixes - -commit 79295e7a5820921646846eec062e1ff7c27fec9d +commit a3169d02d7527110941fab8de25ba75aae759ce1 Author: Daniel-Constantin Mierla -Date: Tue Jan 8 18:41:35 2013 +0100 - - kamailio.cfg: mention v4.0 in the header of config file - -commit ea4daadd16ff3d45c0c35d90df38bfcc33e8bfbe -Author: Peter Dunkley -Date: Tue Jan 8 16:21:19 2013 +0000 - - pkg/kamailio/(centos|fedora): Updated .spec file - -commit 60f177ba77647fb7203f5c3b92d34a196f237a09 -Author: richard -Date: Tue Jan 8 17:32:11 2013 +0200 - - modules/usrloc_pcscf and modules/usrloc_scscf - removed unnecessary junk files - -commit 36a0cb38bcafcb4d4e2bfbc0977e0c1f25e74d14 -Author: richard -Date: Tue Jan 8 17:23:29 2013 +0200 - - modules/ims* and modules/dialog2 - changed modules name to prepend ims_ to all IMS modules - - As per mailing list and offline discussions have prepended _ims to all IMS modules and renamed dialog2 dialog_ng - New modules name: - dialog_ng - ims_auth - ims_icscf - ims_isc - ims_registrar_pcscf - ims_registrar_scscf - ims_usrloc_pcscf - ims_usrloc_scscf - -commit 4c7ba37b7d8bf55d1983950812a3ae060e5ee3e4 -Author: Jason Penton -Date: Tue Jan 8 16:47:13 2013 +0200 - - modules/cdp: Added kcore link for statistics - -commit 1ee54a1e511b98848fd2a6a5075009e2e0b4df06 -Author: Olle E. Johansson -Date: Tue Jan 8 12:52:44 2013 +0100 - - permissions(k) Add RPC function calls that match functionality in old modules_s module - -commit 82303dfad79c601767bb8e1a115fd30d1fb3a282 -Author: Peter Dunkley -Date: Tue Jan 8 11:27:11 2013 +0000 - - modules_k/outbound: updated documentation - - - Fixed some mistakes in the Edge Proxy example - - Filled in more detail in the Registrar example - -commit f57ac2ddaf1a4bbb8178f9fdc2fc408819d41228 -Author: Peter Dunkley -Date: Tue Jan 8 11:02:09 2013 +0000 +Date: Tue Dec 3 23:38:41 2013 +0100 - modules_k/rr: fixed typo in a diagnostic + core: don't increment failed dns query counter for reverse dns lookup at startup - - Thanks to oej for pointing this out - -commit a20893dd6cbf1a5fc7f48d9e8fd1823bbb1ba07f -Author: Peter Dunkley -Date: Tue Jan 8 11:01:31 2013 +0000 - - modules_k/outbound: downgraded and ERR diagnostic to INFO - - - Thanks to oej for pointing this out - -commit 5fc244a81ff4749bd8cb0196a1baecd8a721191a -Merge: ecba6cf 9a10ed3 -Author: Jason Penton -Date: Tue Jan 8 11:01:37 2013 +0200 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router - -commit ecba6cf229f849dd6390bbb2b9e9e70628fd0bd7 -Author: Jason Penton -Date: Tue Jan 8 11:00:16 2013 +0200 - - modules/cdp: added omitted statistics files - -commit 9a10ed3334804f520ecdab03f1019a19e13e0494 -Author: Peter Dunkley -Date: Tue Jan 8 00:24:47 2013 +0000 - - modules_k/registrar: documented new "flow_timer" modparam - -commit e18905ea53c2c5d4a565de596e2c2913ede6466f -Author: Peter Dunkley -Date: Tue Jan 8 00:24:13 2013 +0000 - - modules_k/registrar: Added modparam to allow Flow-Timer: to be set in 200 OK response to REGISTER requests - -commit 2aa85480330e368154e2d1c407380ba06f66d3f5 -Author: Juha Heinanen -Date: Mon Jan 7 21:59:18 2013 +0200 - - modules/rtpproxy: removed LM_DBG that caused compiler warnings - -commit 329db6c3ace5e93a3b7ab7155481f2e9705119b3 -Merge: e7bb3af c9de09b -Author: Peter Dunkley -Date: Mon Jan 7 16:11:05 2013 +0000 - - Merge branch 'master' of ssh://git.sip-router.org/sip-router + - it can happen before counters are intialized, thus check that before + - reported by Hugh Waite, FS#375 - * 'master' of ssh://git.sip-router.org/sip-router: - core: when printing the listening sockets on startup print also the advertise-port - -commit e7bb3af61bea673af801a5b9280f50ec13958a3b -Author: Peter Dunkley -Date: Mon Jan 7 16:10:46 2013 +0000 - - modules_k/outbound: Updated the module documentation + (cherry picked from commit 89c6d73dd51eb9b96f50d3f04219612fa7725224) -commit 4cb23b43c246cb227282474d2b7bd6d6ff9c2033 -Author: Peter Dunkley -Date: Mon Jan 7 16:10:17 2013 +0000 - - modules_k/registrar: Updated registrar module documentation to describe the outbound_mode parameter - -commit c486a9358f146ac2b3e5047021c197c3eb6b41d8 -Author: Peter Dunkley -Date: Mon Jan 7 16:08:13 2013 +0000 +commit a165fa668378da5c312a0c268aaf158ff583127f +Author: Daniel-Constantin Mierla +Date: Tue Dec 3 23:38:08 2013 +0100 - modules_k/registrar: New outbound_mode parameter + core: added function to check if counters have been initialized - - Controls whether outbound options-tag is required in REGISTER - requests and whether they are added to responses to REGISTER requests. - - Needed so that an Outbound Edge Proxy can add a Flow-Timer: header - to 200 OK responses (to REGISTERs) that contain a Requires: header with - the outbound options-tag. - -commit c9de09b99b417aebb8fe84d44dec6c1bff1d8849 -Author: Klaus Darilion -Date: Mon Jan 7 16:22:38 2013 +0100 - - core: when printing the listening sockets on startup print also the advertise-port + (cherry picked from commit 8161152b320f3b430523ea08e86a56f79405c2f4) -commit da1d8d1a9315d187b050468aa33772253f10e47b -Author: Jason Penton -Date: Mon Jan 7 12:47:11 2013 +0200 - - modules/sipcapture: fixed defines for Solaris - -commit ff1c7f3756bf7c2175b7209ccc13ab0cbf6cb4f8 -Author: Jason Penton -Date: Mon Jan 7 11:02:06 2013 +0200 +commit 48a3412afe166f5cbd41a057a22a3333337a2856 +Author: Hugh Waite +Date: Tue Dec 3 13:00:55 2013 +0000 - md5.h: fixed types for Sun Solaris + websocket: Set pointers to NULL when freeing ws connection strcutures + - Fixes double free crash FS#364 + - Reported by Vitaliy Aleksandrov + (cherry picked from commit 95749afb7129e2909b449b79706f0de5d06a3c5d) -commit 3dd44561692657027289ff320709ce5d4bff210e -Author: Jason Penton -Date: Mon Jan 7 09:56:24 2013 +0200 +commit a31988d657edef079525fa68096dc537e78708c5 +Author: Daniel-Constantin Mierla +Date: Tue Dec 3 12:54:00 2013 +0100 - modules/cdp: housekeeping - - corrected copyright - - fixed timer code (latency thresholds) - - changed to KAMAILIO module interface + stun: refreshed readme file -commit 0b108c83ba7138c760fa86c9274633c92b7193a1 -Merge: 9f63684 94e9bd8 -Author: Peter Dunkley -Date: Sun Jan 6 19:37:22 2013 +0000 +commit 41cc8aa248ea1e736bb3d069b32430cc1e54c0af +Author: Daniel-Constantin Mierla +Date: Tue Dec 3 12:50:29 2013 +0100 - Merge branch 'master' into outbound + stun: updated docs to reflect that it no longer depends on external libs - * master: - pkg/kamailio/(centos|fedora): Updated ver and rel in .spec - sl: fix compilation warnings in sl_forward_reply() - dialog: fixed ka_timer linking - core: command line option -v replaced with -K - msrp: new parameter use_path_addr - msrp: added rpc command to list active connections - msrp: added internal map table to track msrp connections - pipelimit: implemented support for RPC commands - Makefile.defs: major version base updated to 4.0.0 - sl: new function sl_forward_reply(...) - core: added function to remove an exiting lump structure from internal list - dialog2: generate and add missing README for dialog2 module - Do not bind with libser_cmd, this is not required. - Added Debian-Packaging for IMS modules - - Add group for IMS modules - Added convenience rule to build packages for current debian-stable - ims modules: don't link with -lrt on macosx - auth_ims: don't link with -lrt on darwin os - kamailio.cfg: xhttp left only in kamailio-oob.cfg - modules/rtpproxy: rtpproxy_manage can now add ice relay candidates - parser/sdp: fixed freeing of ice attributes - -commit 94e9bd8f15e192ee8b1c14d759129992b35435bf -Author: Peter Dunkley -Date: Sun Jan 6 19:36:39 2013 +0000 - - pkg/kamailio/(centos|fedora): Updated ver and rel in .spec - -commit 9f636841675f9cdd5a4baf768784564be71660b0 -Author: Peter Dunkley -Date: Sun Jan 6 19:32:45 2013 +0000 - - modules_k/outbound: Updates to outbound module documentation - -commit 539e606d4ab88b837207fbe5a921f05756eba8a5 -Author: Peter Dunkley -Date: Sun Jan 6 19:32:29 2013 +0000 - - modules_k/outbound: Fixes to outbound code arising from testing + (cherry picked from commit 305e7b5693e71d2027f8e6462129f8c9f01ad76d) -commit b0ee720bec6d188615b98e8b107100fc5158e839 -Author: Peter Dunkley -Date: Sun Jan 6 19:32:04 2013 +0000 - - modules_k/rr: Updates to rr module documentation for outbound - -commit a9d425f4aa8fe0fdc4aac3e158b6c98fd59a5776 -Author: Peter Dunkley -Date: Sun Jan 6 19:31:41 2013 +0000 - - modules_k/rr: Fixes to loose.c from outbound testing - -commit 3f0f60d22d5577965b50821b1c7d0835c898c3f9 -Author: Daniel-Constantin Mierla -Date: Sun Jan 6 15:28:28 2013 +0100 +commit 3c491913dac5060639278f1e645205b1a3959ad3 +Author: Peter Dunkley +Date: Tue Dec 3 01:34:52 2013 +0000 - sl: fix compilation warnings in sl_forward_reply() - - - reported by Juha Heinanen + pkg/kamailio/centos: Updated rel in .spec in preparation for 4.1.0 release -commit ddcef074088df261ce3fb98adfbb1b76b73c30a6 +commit 23b582a7ea67c6a6fd8347533020e8b4c0de2dbd Author: Daniel-Constantin Mierla -Date: Sun Jan 6 15:24:39 2013 +0100 +Date: Mon Dec 2 23:21:24 2013 +0100 - dialog: fixed ka_timer linking - - - patch by Rinor Hoxha + kamailio.cfg: updated the comment about kamailio version -commit 70d6cae27153d6641b2a781634aeb585b741d3a0 +commit 5dc07807bf08aca8b600c90f9d700b49ef0ad454 Author: Daniel-Constantin Mierla -Date: Sun Jan 6 00:00:40 2013 +0100 +Date: Mon Dec 2 22:01:34 2013 +0100 - core: command line option -v replaced with -K + kamailio.cfg: use set_contact_alias() instead of add_contact_alias() - - -v was exposing to misusage for -V (version), now is aliased to it + (cherry picked from commit 66ed11c90e38d948fd75f908b3edd409bca74134) -commit 830af85c45933b3cdc3c48152667162fcf969a55 +commit 284f4ef38c3928516e9c4a78b4768de716b850b7 Author: Daniel-Constantin Mierla -Date: Sat Jan 5 23:51:07 2013 +0100 +Date: Mon Dec 2 20:42:12 2013 +0100 - msrp: new parameter use_path_addr + mem: malloc(0) should return a valid pointer for free according to specs - - specify host and port for usage in Use-Path header + (cherry picked from commit f61ff34aac7c7bae3a96fb698a899c8a0e692a9f) -commit bc8b005ba4d4c89afa6152dd212eda9b6689bb86 +commit 0d0d230ab09da4cd2e6d8331d1feed5b6172cfa1 Author: Daniel-Constantin Mierla -Date: Sat Jan 5 23:36:43 2013 +0100 +Date: Mon Dec 2 19:40:04 2013 +0100 - msrp: added rpc command to list active connections + Makefile.defs: version set to 4.1.0-rc2 -commit ea3cacb10d2cc15f23c3a0c7fead151939873951 +commit f7ed69d75746dc55e5a48a7a18602124e73cd3cd Author: Daniel-Constantin Mierla -Date: Sat Jan 5 22:00:55 2013 +0100 +Date: Sun Nov 24 16:06:41 2013 +0100 - msrp: added internal map table to track msrp connections + tmx: backup and restore existing T and branch pointers for t_cancel_callid() - - initial version - - the table can be enabled via config parameters - -commit f432022f943ad4f72d3643974f065c6007af6589 -Author: Ovidiu Sas -Date: Fri Jan 4 21:34:50 2013 -0500 - - pipelimit: implemented support for RPC commands - -commit e03be11d30abd9f6a5a756ae142444395f09df93 -Author: Daniel-Constantin Mierla -Date: Fri Jan 4 19:29:30 2013 +0100 - - Makefile.defs: major version base updated to 4.0.0 + - reported and initial patch by Guillaume Bour - - development version is now 4.0.0-dev8 + (cherry picked from commit 60372d613544af1f8f06122eb77fa2a9636a6c3a) -commit d01b11b0cbbbfb84ae3d10fb90c05aedf07c9ccc +commit 09fb0aae62761ce4f251ab22c6ab9cde55e2c663 Author: Daniel-Constantin Mierla -Date: Fri Jan 4 19:26:21 2013 +0100 +Date: Sun Nov 24 16:05:49 2013 +0100 - sl: new function sl_forward_reply(...) + tm: exported set_t() and get_t_branch() viam tm api - - forward the received reply fron configuration, before it would be done - by the core. It has the option to change the status code and reason - phrase - - the forwarding is statelessy, not affecting the tm states - -commit 7fd561975706676e61bb3d90968652edcb96f35c -Author: Daniel-Constantin Mierla -Date: Fri Jan 4 19:25:05 2013 +0100 - - core: added function to remove an exiting lump structure from internal list - -commit d2b805c8b13943f82240276f98f78145ac7572f9 -Author: Henning Westerholt -Date: Thu Jan 3 16:44:03 2013 +0100 - - dialog2: generate and add missing README for dialog2 module - -commit 2ce18eee8cfb85d7c88187a419c8d3f81228a1f8 -Author: Carsten Bock -Date: Thu Jan 3 16:24:59 2013 +0100 - - Do not bind with libser_cmd, this is not required. - -commit 9cb6a84106aca0c998084c25b8b05d9d34a35ff2 -Author: Carsten Bock -Date: Thu Jan 3 15:03:46 2013 +0100 - - Added Debian-Packaging for IMS modules - -commit fc1706e0c3b53500a321c13bc3450a4ccbe6dd6c -Author: Carsten Bock -Date: Thu Jan 3 15:02:40 2013 +0100 - - - Add group for IMS modules - - Added convenience rule to build packages for current debian-stable - -commit 539f97bdaa4b6c12fec3a943b6adb7902b748827 -Author: Daniel-Constantin Mierla -Date: Wed Jan 2 14:38:22 2013 +0100 - - ims modules: don't link with -lrt on macosx + - allows to backup and restore pointers to T and branch - - define MAXINT on mac os x + (cherry picked from commit 777dd5e28ff6b4fcc3b1c44e841eb415c974075f) -commit cf93bf2097660c093645550f1d3b54fdc1154288 +commit f06c0421f2d08aa9ec15330dbe7c270b7c67eef4 Author: Daniel-Constantin Mierla -Date: Wed Jan 2 14:22:39 2013 +0100 +Date: Thu Nov 21 17:37:33 2013 +0100 - auth_ims: don't link with -lrt on darwin os + tm: propagate reply/failure route indexes to local uac branch + + - affects the updates done in event_route[tm:local-request] + - reported by Pawel Sternal, FS#371 + + (cherry picked from commit 715ba52de2031786fd9f05832d5bf73d17d46e47) -commit 8660e2f031a159d0ac1edb87e20738f50a87d5c6 +commit d3a6f48d379097afc649b16237df46581b251084 Author: Daniel-Constantin Mierla -Date: Wed Jan 2 14:09:53 2013 +0100 - - kamailio.cfg: xhttp left only in kamailio-oob.cfg - -commit 75fde552f1c4cdea736baa72ff1aa36e527e0215 -Author: Juha Heinanen -Date: Wed Jan 2 13:00:31 2013 +0200 +Date: Mon Dec 2 18:17:34 2013 +0100 - modules/rtpproxy: rtpproxy_manage can now add ice relay candidates + tls: clarified licensing based on development history - - The feature is activated by defining ice_candidate_priority_avp module - parameter. - -commit 35bc07e6a13e12aba519be8bde1a1e1dc06a1d94 -Author: Juha Heinanen -Date: Wed Jan 2 09:13:00 2013 +0200 - - parser/sdp: fixed freeing of ice attributes - -commit a117147b4c6563be21c0403eeeacf5ff0f3ba709 -Author: Peter Dunkley -Date: Tue Jan 1 20:46:18 2013 +0000 - - modules_k/outbound: updated example - -commit 0a528b23bc39eabfaaf2874a74ce529955c21ff5 -Author: Peter Dunkley -Date: Tue Jan 1 20:45:49 2013 +0000 - - modules_k/rr: outbound fixes + - some were c&p as they refered to files related to components that were + developed later than the (c) year (e.g., selects) + - added openssl exception to gpl parts based on agreement from the + developers of those components - most of the code was released long time + ago under BSD by iptelorg. Code was rewrote for 3.1 when asynchronous + support was developed. - - Use the OUTBOUND address in RR when using outbound - -commit 9b5c3a991942da005b8c56b049a1ebde5596042b -Author: Peter Dunkley -Date: Tue Jan 1 20:45:24 2013 +0000 - - modules_k/outbound: fixes to use_outbound() + (cherry picked from commit 7771e9cdb58ea1cef008e2a70f53c5f183c26ebe) -commit e2d144bd76f327ce7c52914ed0462f415e7d06a7 -Merge: 4a41827 ddfbbd7 -Author: Peter Dunkley -Date: Mon Dec 31 17:12:01 2012 +0000 +commit 4ff3866652be6752e5167071ce02b888acda0e75 +Author: Federico Cabiddu +Date: Mon Dec 2 17:05:35 2013 +0100 - Merge branch 'master' into outbound + permissions: re-init db connection for reload cmd - * master: - parser/sdp: added check on body length when looking for 'a=candidate:' - parser/sdp: added 'a:remote-candidates' media stream attribute - -commit 4a418276b50212feb3ef4d659c42e6772fc9fcd7 -Author: Peter Dunkley -Date: Mon Dec 31 17:11:30 2012 +0000 - - modules_k/outbound: first draft of outbound module documentation - -commit 72d8e454f29174673cc80f9795ac8d564c2ca1bb -Author: Peter Dunkley -Date: Mon Dec 31 17:11:14 2012 +0000 - - modules_k/outbound: Corrected check on flow_token_key length - -commit ddfbbd7c0eb7fc1c7ffbb07d6260271ded8b42b3 -Author: Juha Heinanen -Date: Mon Dec 31 18:18:05 2012 +0200 - - parser/sdp: added check on body length when looking for 'a=candidate:' + - some workers for specific mi/rpc commands may not have a db connection from the start + + (cherry picked from commit cb23be9456c178957399ec9d8ce8a1420d50fc32) -commit 88a8eb348359f05a1ff14371f8e323cf086d6497 -Author: Juha Heinanen -Date: Mon Dec 31 18:16:23 2012 +0200 +commit a5f8d36ac011be12a9582999a8d6480541106439 +Author: Camille Oudot +Date: Tue Nov 26 16:08:35 2013 +0100 - parser/sdp: added 'a:remote-candidates' media stream attribute + modules/ims_registrar_pcscf: fix log -commit 5214a6e617bfc8f2471fcf0d02d8fa5cf0a9ce3b -Merge: e00d77f 945b1fd -Author: Peter Dunkley -Date: Mon Dec 31 16:08:59 2012 +0000 +commit 424711ec889661a1212e63f9b0e9761a6e4ed069 +Author: Vicente Hernando +Date: Thu Nov 28 12:16:05 2013 +0100 - Merge branch 'master' into outbound + modules/ndb_redis: solved bug in second call to redisvCommand. - * master: - pkg/kamailio/(centos|fedora): Added IMS modules to RPM builds - parser/sdp: added partial parsing of a=candidate attributes - modules/sipcapture README: added HEPv2/v3 to supported protocols - modules:siptrace changed include to hep.h - Added HEPv3 (UDP) support for sipcapture. - modules/registrar_pcscf: firs commit of registrar_pcscf module - registrar for P-CSCF functionality - modules/registrar_scscf: first commit of registrar_scscf - Registrar functionality for S-CSCF servers - modules/isc: first commit of ISC module (IMS Service Control) - modules/usrloc_scscf: first commit of usrloc_scscf modules - usrloc functionality for S-CSCF servers - modules/usrloc_pcscf: first commit of usrloc_pcscf module - modules/auth_ims: first commit of auth_ims module - This module provides IMS specific authentication/authorisation functionality. - modules/icscf: added I-CSCF module. - modules/dialog2: first version of dialog2 - lib/ims: added some info to README on IMS library - IMS Internal Lib: added internal kamailio library for IMS extensions + (cherry picked from commit 52a34d269931f6f3a50b3fc532405624b9e38d23) -commit 945b1fd62e1bb5c9d4aa066666d64ae63731c94a -Author: Peter Dunkley -Date: Mon Dec 31 16:08:20 2012 +0000 +commit 0b85493f3c1bc7c6cbd48f39aea9d3ecc135d4ff +Author: Richard Fuchs +Date: Tue Nov 26 10:36:18 2013 -0500 - pkg/kamailio/(centos|fedora): Added IMS modules to RPM builds + rtpproxy-ng: remove trailing double \r\n from multipart SDP -commit e00d77f710fe36dca08f099306c837ef7e53309f -Author: Peter Dunkley -Date: Mon Dec 31 15:36:00 2012 +0000 +commit 553d6aff9eecaec38547910d4dd46fcd71b57583 +Author: Hugh Waite +Date: Fri Nov 22 09:39:40 2013 +0000 - modules_k/outbound: filled in use_outbound() function + modules/avpops: Fix 'uninitialised variable' warning + (cherry picked from commit 54020b00893ee259baee714d7d17adc6d31f9112) -commit 488bf3c94b2498e7539638202ee878c237fde567 -Author: Peter Dunkley -Date: Mon Dec 31 15:35:32 2012 +0000 +commit 20822c5227962508d13bce48a653e594cbfaeff1 +Author: Hugh Waite +Date: Fri Nov 22 09:35:55 2013 +0000 - core: added parsing of ;ob for URIs and Contact: headers + modules/usrloc: Update contact field when updating a contact in the DB + - Fixes FS#368 + (cherry picked from commit a55018deb431ef32ee2bcd45610903327850757d) -commit b7a1ea4c8a88eea873bf6b4bfac5e1f477a19073 -Author: Juha Heinanen -Date: Mon Dec 31 15:51:53 2012 +0200 +commit 18afdc79aeb2b46c6eda4b66e40efae49d524701 +Author: Hugh Waite +Date: Fri Nov 22 09:28:38 2013 +0000 - parser/sdp: added partial parsing of a=candidate attributes + modules/registrar: Invalidate temporary GRUUs when the Call-ID changes for a sip.instance + - Fixes FS#368 + (cherry picked from commit 27eba09b603b265ce4213d238c132249189ae6e8) -commit 9d9394d63c3ccdfa3ce7ba067ef29c4657f0eb37 -Author: Peter Dunkley -Date: Mon Dec 31 13:44:19 2012 +0000 +commit b6c109a38f8fca82005166ed73d370a2f974a3db +Author: Daniel-Constantin Mierla +Date: Thu Nov 21 20:24:20 2013 +0100 - modules_k/rr: handle outbound failing and outbound just not being used as separate cases + sl: README updated -commit dccab57430d0014b386a8f97ca6c8506a81402e7 -Author: Peter Dunkley -Date: Mon Dec 31 13:43:15 2012 +0000 +commit 93428405a7d9bba3aee3bf317ea76f232739c9af +Author: Daniel-Constantin Mierla +Date: Thu Nov 21 19:14:17 2013 +0100 - modules_k/outbound: decode_flow_token() returns different values when an error occurs and when the string obviously isn't a flow-token + sl: docs updated to reflect usage of send_reply() + + (cherry picked from commit e7b73f7e0160eac1ca445201fbf796df0dd13ce0) -commit a0a23aacc9a2d19b30f62702811c1eadc5671d98 -Author: Peter Dunkley -Date: Mon Dec 31 13:28:06 2012 +0000 +commit 6125176d04c75d3a3f0b57119696eca2f63c3645 +Author: Daniel-Constantin Mierla +Date: Thu Nov 21 19:09:43 2013 +0100 - modules_k/rr: updated documentation for outbound support + sl: allow send_reply() in the route block types supported by t_reply() and sl_send_reply() + + - reported by Juha Heinanen, FS#362 + + (cherry picked from commit c77aaf38eafe1d3549d266feebf76ac0b50738ea) -commit 7d6d7f177f465e184e1ef612a82a7406ccadd45a -Author: Peter Dunkley -Date: Mon Dec 31 13:25:36 2012 +0000 +commit 7e74944eb6a55a5e9a817a894af1ebbbc8ce9733 +Author: Timo Teräs +Date: Fri Nov 15 16:06:25 2013 +0200 - modules_k/rr: fixed typos in diagnostics and comments + modules/sca: fix hash entry deletion + + sca_hash_table_slot_kv_delete_unsafe() uses internally sca_hash_entry + but incorrectly called sca_hash_table_slot_kv_find_unsafe() to + initialize the entry. That function returns the node value, not the + node itself. Use instead sca_hash_table_slot_kv_find_entry_unsafe(). + + Should fix the crash in FS#366. + + (cherry picked from commit 56e4f4518028e73f9ebd053242a100a5c3b7eb53) -commit a0dd2a75dc763ebb5907573aac3b8653c5faf93a -Author: Peter Dunkley -Date: Mon Dec 31 13:25:01 2012 +0000 +commit 85e9202d14eda0a43d566aa14c0df47a78eb24f3 +Author: Ovidiu Sas +Date: Fri Nov 15 09:08:03 2013 -0500 - modules_k/path: fixed a typo in a diagnostic message + usrloc: fix crash while printing error log + - fix a copy/paste error that lead to a NULL pointer + (cherry picked from commit 10115f88637d1371a8ddeb5fe9c36c31ada49fc4) -commit 6141b16fc5f619938472f6f56d0fb2e0e5456aee -Author: Peter Dunkley -Date: Mon Dec 31 12:55:06 2012 +0000 +commit 82d4a39a4f7cd81afbcaed8de8bec0e3a7747e53 +Author: Daniel-Constantin Mierla +Date: Thu Nov 14 16:12:27 2013 +0100 - modules_k/rr: tidied up error handling and comments relating to outbound + Makefile.defs: version set to 4.1.0-rc1 + + - dedicated brach 4.1 has been created for release series 4.1.x -commit 5ceef3cb48fc4b1e9c75abf91ba45f59f5125751 -Author: Peter Dunkley -Date: Mon Dec 31 12:54:37 2012 +0000 +commit 8c7aa83346e18792d9a622c63c83cff81dcc144b +Author: Jason Penton +Date: Wed Nov 13 15:12:48 2013 +0200 - modules_k/outbound: tightened up error handling in decode_flow_token() + modules/dialog_ng: fixed double shm memory free + - happens when calling get_dlg function from cfg file -commit 680173cfc89bc051ce026ddf4a62dab494aa20a0 -Author: Alexandr Dubovikov -Date: Mon Dec 31 00:33:16 2012 +0100 +commit 1710c596b9a9383d2aa48d3432b6ada429981863 +Author: Daniel-Constantin Mierla +Date: Wed Nov 13 10:38:17 2013 +0100 - modules/sipcapture README: added HEPv2/v3 to supported protocols + Makefile.defs: version set to 4.1.0-pre2 -commit 13889dfc3274f86352c719276b52fd8a458c243f -Author: Alexandr Dubovikov -Date: Mon Dec 31 00:27:22 2012 +0100 +commit 644ffab0450d49aa36cfa803a41eff9db1ddb13a +Author: Daniel-Constantin Mierla +Date: Wed Nov 13 10:37:17 2013 +0100 - modules:siptrace changed include to hep.h + Makefile.defs: enabled memory debugging + + - to be kept for the rest of testing period to spot eventual buffer + overflows -commit 6eda5e28355df2f1085f0ab9d303309965c4cd4f -Author: Alexandr Dubovikov -Date: Mon Dec 31 00:21:02 2012 +0100 +commit 254d0c43a84ec87801e58b4f990a2029c0e27c6f +Author: Daniel-Constantin Mierla +Date: Tue Nov 12 21:03:01 2013 +0100 - Added HEPv3 (UDP) support for sipcapture. + tm: init sock_str to null value if no sock pointer is set in branch - Many many thanks Dragos Dinu for your help! - - Happy New Year! Glückliches neues Jahr! С Ðовым Годом! La MulÈ›i Ani! + - case of creating branches from a 3xx reply + - reported by juliabo [at] gmail + - identation made coherent with tm module style -commit bd26883f8cf782a09dd115389b1a5cc60fdd2f83 -Author: Jason Penton -Date: Sun Dec 30 22:40:27 2012 +0200 +commit 5d80155a69f3c9865196e377ac0ecef16cd39cfe +Author: Charles Chance +Date: Tue Nov 12 17:28:51 2013 +0000 - modules/registrar_pcscf: firs commit of registrar_pcscf module - - registrar for P-CSCF functionality + memcached: add section ids in documentation -commit d274ee387a3aa27be808b11b879311793f840a40 -Author: Peter Dunkley -Date: Sun Dec 30 19:31:24 2012 +0000 +commit a65ee19108b1cdff31ec93b25020af0c9eab8080 +Author: Charles Chance +Date: Tue Nov 12 17:28:15 2013 +0000 - modules_k/rr: Fixed return from process_outbound() + dmq: add section ids in documentation -commit 4bbd8718667d5fed76b7b97b3e915647cf80e611 -Author: Peter Dunkley -Date: Sun Dec 30 19:27:24 2012 +0000 +commit 35ae624ba939b736bb2f52cd5fb4908deec0a133 +Author: Daniel-Constantin Mierla +Date: Tue Nov 12 15:50:51 2013 +0100 - modules_k/rr: added decoding and using of flow token to loose_route() + pua_reginfo: fixed typo related to module name in docs example + + - reported by Marius Pedersen -commit 200082fd140bcebc7cdbf1d5511f51aa6e6f304e -Author: Jason Penton -Date: Sun Dec 30 20:39:58 2012 +0200 +commit a9fc979c839b44411e3c34076591c64c16d2fe87 +Author: Øyvind Kolbu +Date: Tue Nov 12 15:47:30 2013 +0100 - modules/registrar_scscf: first commit of registrar_scscf - - Registrar functionality for S-CSCF servers + core: respect order field in NAPTR, as required by RFC 2915 + + - the beaviour is controlled by core parameter dns_naptr_ignore_rfc + - default is 1, preserving current behaviouf to ignore rfc requirements + (for backward compatibility) -commit 49ef3f0279491020a334d93aeb7c76e723305564 -Author: Jason Penton -Date: Sun Dec 30 20:36:41 2012 +0200 +commit 96e021babe6da540ac8e47f35b30bb0fd7146245 +Author: Richard Fuchs +Date: Mon Nov 11 12:40:05 2013 -0500 - modules/isc: first commit of ISC module (IMS Service Control) + rtpproxy-ng: remove code artifact that broke IPv6 received-from addresses -commit f08bc36d878529410dcfafa69753f80ade261f6f -Author: Jason Penton -Date: Sun Dec 30 20:34:44 2012 +0200 +commit 3bcf5579c8e47422378fcf6dfaa361e3fd126ce5 +Author: Daniel-Constantin Mierla +Date: Mon Nov 11 12:23:29 2013 +0100 - modules/usrloc_scscf: first commit of usrloc_scscf modules - - usrloc functionality for S-CSCF servers + ChangeLog: set the content with changes since branching for 4.0 -commit eda0f25661a153dde09c91a371cd7e02e18d7b26 -Author: Jason Penton -Date: Sun Dec 30 20:33:00 2012 +0200 +commit 7436e3f66782597d66d052ee9c87bdb3b91756ef +Author: Daniel-Constantin Mierla +Date: Mon Nov 11 11:21:21 2013 +0100 - modules/usrloc_pcscf: first commit of usrloc_pcscf module + kamctl: regenerated db schema scripts + + - updated after mohqueue default date change -commit 5e844cf90c0d288a4038f5b2ff7cbebeab856488 -Author: Peter Dunkley -Date: Sun Dec 30 18:31:07 2012 +0000 +commit 8ebd2350ef97c6bac856850a3230ed3e245bd3ed +Author: Hugh Waite +Date: Fri Nov 8 20:30:08 2013 +0000 - modules_k/outbound: changed some errors to info + tls: TLSv1.1 supported since openssl v1.0.1 -commit 1ecbbbbe2c2ee63553b47316f454ede3633a2189 -Author: Jason Penton -Date: Sun Dec 30 20:29:22 2012 +0200 +commit 55dd8073c7d06f3af37cded55e520e64457c2b42 +Author: Victor Seva +Date: Fri Nov 8 16:41:30 2013 +0100 - modules/auth_ims: first commit of auth_ims module - - This module provides IMS specific authentication/authorisation functionality. + rtpproxy-ng: ids to sections in documentation -commit 29e841d41f57fa24d79fef10ff1e20943fa068ec -Author: Jason Penton -Date: Sun Dec 30 20:26:09 2012 +0200 +commit 4060340d3af8112ad73ea881ab79270c06544476 +Author: Victor Seva +Date: Fri Nov 8 16:32:35 2013 +0100 - modules/icscf: added I-CSCF module. + debugger: ids to sections in documentation -commit 651dafa718cb96c15781134ed280812c664bd9dc -Author: Jason Penton -Date: Sun Dec 30 20:19:10 2012 +0200 +commit 5f1d6744aa20dc5774c8403bf918a9543afe6c75 +Author: Victor Seva +Date: Fri Nov 8 16:28:19 2013 +0100 - modules/dialog2: first version of dialog2 + avp: ids to sections in documentation -commit b4189892a8fb61670da8d8c6a4fb91110e889799 -Author: Jason Penton -Date: Sun Dec 30 20:10:53 2012 +0200 +commit 3e6bef55f91206d7cf956a61e0b426bab5469e7b +Author: Victor Seva +Date: Fri Nov 8 16:03:25 2013 +0100 - lib/ims: added some info to README on IMS library + avpops: ids to sections in documentation -commit acc9e5a3dde72aedbb1eeba561987c5faf80800f -Author: Peter Dunkley -Date: Sun Dec 30 17:56:55 2012 +0000 +commit 0e676d0062d7db0875ccc97053304807cbc5747e +Author: Victor Seva +Date: Fri Nov 8 15:56:33 2013 +0100 - modules_k/rr: add flow token to Record-Route: headers when needed + usrloc: ids to sections in documentation -commit d55cce8e5f2558560bf38a8ff25ddbb80f697284 -Author: Peter Dunkley -Date: Sun Dec 30 17:40:08 2012 +0000 +commit a88f9d4b79a40221e058c31bbdd21c8c25ba5003 +Author: Victor Seva +Date: Fri Nov 8 15:21:58 2013 +0100 - modules_k/rr: do not double RR when outbound is in use for a request + app_lua: ids to sections in documentation -commit b4f41ed842766e047d286da1ceefb783f6791a5b -Author: root -Date: Sun Dec 30 19:38:57 2012 +0200 +commit ae0e9eef521fa39ae306a2c64e4add61d5e8af6f +Author: Robert Boisvert +Date: Wed Nov 6 14:12:10 2013 -0500 - IMS Internal Lib: added internal kamailio library for IMS extensions + mohqueue: remove call from queue if caller does not exist -commit 7c79ef5875787a1c05d263a83c803299489308fd -Author: Peter Dunkley -Date: Sun Dec 30 17:20:52 2012 +0000 +commit 456c387e08ce40ea2c0f1e5e5f94b367ff9fa361 +Author: Robert Boisvert +Date: Tue Oct 29 18:10:25 2013 -0400 - modules_k/rr: bind rr to outbound module + mohqueue: remove sql table call_time column's default value + + it is not supported in some database properly, and it is not + really needed. -commit 724847a226cd3a5e8c2aa766a17890f06d30d6ce -Merge: 3efe73d 3d2c78d -Author: Peter Dunkley -Date: Sun Dec 30 17:08:43 2012 +0000 +commit 04b457735f0bafa6ff214cb2d69afbe721d89bf1 +Author: Andrew Mortensen +Date: Thu Nov 7 14:52:29 2013 -0500 - Merge branch 'master' into outbound + modules/sca: restore correct check for NULL in SCA_CALL_INFO_EMPTY. - * master: - uid_gflags: default table for global attrs prefixed with uid_ - libsrdb1/kamctl: added uid_global_attrs table - libsrdb1/kamctl: added uid_domain and uid_domain_attrs tables - srdb1/kamctl: added uid_uri and uid_uri_attrs tables - uid_avp_db: default table name prefixed with uid_ - srdb1/kamctl: added definition of table uid_user_attrs - libsrdb1/kamctl: added definition of uid_credentials table + - should also suppress -Waddress error without relying on gcc _Pragma. -commit 3d2c78df699a047d97f016a14c275c5559553fe5 -Author: Daniel-Constantin Mierla -Date: Sat Dec 29 16:42:09 2012 +0100 +commit 0fbdb8cf7a7687d6ecc8049dfdcb1244abd726af +Author: Hugh Waite +Date: Wed Nov 6 10:34:01 2013 +0000 - uid_gflags: default table for global attrs prefixed with uid_ + tls: Fix minor typo in documentation -commit e5831f5896e79ad5b878208a408d61fb374f2715 -Author: Daniel-Constantin Mierla -Date: Sat Dec 29 16:39:29 2012 +0100 +commit fe914e16945caf6c5c11b81514dff89a0739b30e +Author: Richard Good +Date: Wed Nov 6 09:14:45 2013 +0200 - libsrdb1/kamctl: added uid_global_attrs table + modules/dialog_ng: Fix "CRITICAL bogus event 6 in state 2" problem + Use TM callback TMCB_RESPONSE_READY instead of TMCB_RESPONSE_OUT to prevent race condition resulting in bogus event -commit 5eaaaf9827bb951add1f45bc5d635a4889954f73 +commit cb66f43187ea3bcac36681b82630456deeabc64c Author: Daniel-Constantin Mierla -Date: Sat Dec 29 16:29:17 2012 +0100 +Date: Tue Nov 5 15:10:29 2013 +0100 - libsrdb1/kamctl: added uid_domain and uid_domain_attrs tables + kamctl: added shortcuts for dialog mi commands -commit 907e13b7080c3ecbbbf8fa35c1adb4b3d9137ff5 +commit 082a6c43938cf8e3839d46fd070e391bd522d4ed Author: Daniel-Constantin Mierla -Date: Sat Dec 29 16:15:07 2012 +0100 +Date: Tue Nov 5 10:33:55 2013 +0100 - srdb1/kamctl: added uid_uri and uid_uri_attrs tables + dialog: init cseq to 0 if not available yet for one side + + - based on a report by Morten Isaksen -commit c8b3aa436455314cc5b5591224cc2336c3060d9c +commit 8d6a981543a044fddc3448c93dba9ed35afac0c0 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 16:00:27 2012 +0100 +Date: Tue Nov 5 10:15:13 2013 +0100 - uid_avp_db: default table name prefixed with uid_ + pua_dialoginfo: fixed code formatting + + - patch by Kristian Høgh, FS#360 -commit 4d060c204cb5d526b3e05d50131a725d2f931b39 +commit d48d36df40dee374e63ef9b6a6c1bafc4af0e8b0 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 15:58:06 2012 +0100 +Date: Tue Nov 5 09:41:04 2013 +0100 - srdb1/kamctl: added definition of table uid_user_attrs + dispatcher: typo and ids to sections in documentation -commit 008f9242fd996d3c853b6844fa724473c4ffd4d9 +commit f33076415561d3efbfa9d804d00a4b0784898f50 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 15:36:51 2012 +0100 +Date: Mon Nov 4 21:46:34 2013 +0100 - libsrdb1/kamctl: added definition of uid_credentials table - -commit 3efe73dc002b4e02147a2f950c3058998f658a23 -Merge: 8f0ab91 8c512a5 -Author: Peter Dunkley -Date: Sat Dec 29 01:22:27 2012 +0000 - - Merge branch 'master' into outbound + sl: fix startup detection of event route - * master: - modules_s/usrloc: moved to obsolete folder - modules_s/registrar: moved to obsolete folder - modules_s/.gitkeep: added a placeholder to keep empty modules_s folder for a while - Makefile: make TAGS skips the obsolete folder - usrloc(k): fixed position of xavp_contact parameter in docs - usrloc: store per-contact attributes in database - core: fixed xavp level cloning function - core: added a fuction that adds an xavp with an xavp value - kamctl: regenerated database creation scripts - lib/srdb1: added location_attrs table + - patch by Sergey Okhapkin -commit 8c512a504402594c3d78da8e3ebdbe05e7561a2f +commit 90227fbf44ddc67bfb49f8f7e8fd7e1b33189349 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 00:19:53 2012 +0100 +Date: Mon Nov 4 14:26:19 2013 +0100 - modules_s/usrloc: moved to obsolete folder + presence_dialoginfo: check relevance of the state for single dialog notification - - use instead the other module with same name + - rework from a patch in tracker, FS#341 -commit f39b8bd436571b7f3ac40740a4a938739f9c6ad9 +commit 27a73a806cece55bc7c707735856770137c2d680 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 00:18:25 2012 +0100 +Date: Mon Nov 4 11:21:27 2013 +0100 - modules_s/registrar: moved to obsolete folder - - - use instead the other module with same name + Makefile.defs: version set to 4.1.0-pre1 -commit 96efc37844a8c128d520b9873aacb3633231e33f +commit 8a246b06838b99e63d86fe186b23a23f57347548 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 00:17:10 2012 +0100 +Date: Mon Nov 4 10:04:35 2013 +0100 - modules_s/.gitkeep: added a placeholder to keep empty modules_s folder for a while + pua_reginfo: reflect use domain from usrloc - - it may be useful if some modules from obsolete folder are wanted back - (in the repo, or just locally) + - avoid duplicate contacts if domain is not considered + - patch by Wonbin Cho, FS#350 -commit 8d5f8bbc2edaee9ccbe935d5f44fe4601281f060 +commit 16649609796ec336278b073d86045f72a9dd7886 Author: Daniel-Constantin Mierla -Date: Sat Dec 29 00:09:47 2012 +0100 +Date: Sun Nov 3 13:23:32 2013 +0100 - Makefile: make TAGS skips the obsolete folder - - - use make TAGS-ALL to include all the folders + tls: ifdef to use TLSv1.1 only for openssl/libssl v1.0.0+ -commit 27570b56727e788da939fedc84304cf87fc1e179 +commit f4bf810a5af5b2d133df30e625691cc7b6ad2cf5 Author: Daniel-Constantin Mierla -Date: Fri Dec 28 22:25:29 2012 +0100 +Date: Sun Nov 3 13:15:31 2013 +0100 - usrloc(k): fixed position of xavp_contact parameter in docs + tls: refreshed the README -commit 5463e46f9c3fa2e3aa8345eceb79936de63b7222 +commit 1e2bb79a135bef9936fb5d5e0fb9a708589452b9 Author: Daniel-Constantin Mierla -Date: Fri Dec 28 22:20:15 2012 +0100 +Date: Sun Nov 3 13:14:31 2013 +0100 - usrloc: store per-contact attributes in database - - - attributes table is the name of table used for save/lookup plus suffix - '_attrs' (e.g., location_attrs) - - feature enable only if xavp_contact parameter is set + tls: listed TLSv1.1 and TLSv1.2 as values for tls_method parameter -commit 88dd1f30481d088b56a97a6fbb84a88f94261eb9 +commit ea32bf9d3cf36c3562ca34d572bbf07ed144e105 Author: Daniel-Constantin Mierla -Date: Fri Dec 28 22:17:03 2012 +0100 +Date: Sun Nov 3 12:55:08 2013 +0100 - core: fixed xavp level cloning function + tls: extended supportd tls methods - - new function introduced recently for usrloc usage + - TLSv1.1 and TLSv1.2 (from openssl 1.0.1e on) added to the internal + list -commit aea4043106b7b3e44529385293616b7af640c892 -Author: Daniel-Constantin Mierla -Date: Fri Dec 28 19:21:28 2012 +0100 +commit 26fa46a421e0bb5e00e32115b610100481e64e6d +Author: Peter Dunkley +Date: Sat Nov 2 21:45:04 2013 +0000 - core: added a fuction that adds an xavp with an xavp value + pkg/kamailio/centos: Improvement to the CentOS init.d script -commit f636e215089a9b14daa113d93025831e827192b5 +commit 039f52deb384c71ecfb578e2cd648153dd9937d1 Author: Daniel-Constantin Mierla -Date: Fri Dec 28 19:18:09 2012 +0100 +Date: Sat Nov 2 19:28:36 2013 +0100 - kamctl: regenerated database creation scripts - - - target on location_attrs table - - affected xhttp_pi and sca + tls: include dprint.h where log functions are used + +commit 25ee7ea17b6553ce44eda6c0665ff80cfc41db35 +Author: Juha Heinanen +Date: Fri Nov 1 21:27:31 2013 +0200 + + modules/mtree: added 'multi' param to mtree definition + - new 'multi' param makes it possible to store both integer and string + typed mtrees into single db table + +commit 66185905850cd2ac9ab933776184da0f0882e5ac +Author: Victor Seva +Date: Fri Nov 1 15:33:08 2013 +0100 + + registrar: clean static values at pack_ci + +commit f67171cf3be1ade0e1c9dd013d560c87b3fd4359 +Author: Victor Seva +Date: Thu Oct 10 15:21:47 2013 +0200 + + usrloc: db_update contact by instance + reg-id -commit 060734a2acf96333ffaef8207812cc27bc127c76 +commit bc66a385e8a282638c8d5cfa566f971c62cd341b Author: Daniel-Constantin Mierla -Date: Fri Dec 28 14:55:35 2012 +0100 +Date: Fri Nov 1 09:39:32 2013 +0100 - lib/srdb1: added location_attrs table + uac: reset registration authentication flag - - store per contact attributes + - reported by rene montilva (fs#352) -commit 8f0ab9130af20ed1709b03fff8e831695cbdc64f -Author: Peter Dunkley -Date: Fri Dec 28 08:03:50 2012 +0000 +commit 1cc0144e434fdcf76013e9424d31928c260d4377 +Author: Daniel-Constantin Mierla +Date: Wed Oct 30 22:11:04 2013 +0100 - modules_k/path: only add ";ob" parameter when it is the the first hop + kamctl: updated dispatcher command to current db table fields + + - parameters flags, priority, attrs and description are optional -commit 7fce787c316de12fd3294ca2a70d79d71ff2ad1b -Merge: 11b7630 b2e5040 -Author: Peter Dunkley -Date: Wed Dec 26 14:25:44 2012 +0000 +commit bfc2215d71734b09a1d7acd4dbdbe919b234c30f +Author: Juha Heinanen +Date: Wed Oct 30 20:49:26 2013 +0200 - Merge branch 'master' into outbound + Revert "modules/mtree: when loading data from db, load each tree separately" - * master: - core: check for IP in no_naptr_srv_sip_resolvehost() - core: try all srv protocols when not already set - registrar(k): restore the location contact xavp upon lookup - usrloc(k): option to store xavp per contact - core: extended xavp api - registrar(k): use only pre-existing branches in lookup_branches() - p_usrloc: clean memory in case of malloc error - Revert "Changing to kamcmd" - kamcmd changes - Changing to kamcmd - kamcmd Updating docs - Change "sercmd" to "kamcmd" in module documentation files - README - kamctl Fix typo that causes the "trusted" help to be printed twice and "address" zero times - kamctl Change "sercmd" to "kamcmd" in help texts - Fixing compiler warnings + This reverts commit 6fc84c2cf610791939ba73e38b8b5b3c0b5cd047. -commit 11b7630b3f3423dd5697b9c1938f34ee851d325e -Author: Peter Dunkley -Date: Wed Dec 26 14:24:58 2012 +0000 +commit 6fc84c2cf610791939ba73e38b8b5b3c0b5cd047 +Author: Juha Heinanen +Date: Wed Oct 30 17:31:04 2013 +0200 - modules_k/path: Updated module documentation for outbound + modules/mtree: when loading data from db, load each tree separately -commit b27311b5ecc189b8324075a3387382c144ad438b -Author: Peter Dunkley -Date: Wed Dec 26 14:15:48 2012 +0000 +commit f0751ffa2d1d99c0a54707cfe22926bea9c07123 +Author: Hugh Waite +Date: Wed Oct 30 17:12:05 2013 +0000 - modules_k/path: Added outbound support to add_path() + modules/rls: Fix memory leak in rls + - Leak would occur in two error cases + - Also improved diagnostics to display uri on various failures -commit a1501f0b44975057e752d0337fb074ed53fd6a54 -Author: Peter Dunkley -Date: Wed Dec 26 14:15:18 2012 +0000 +commit 76536ec5332d7897cd4259b271508cc9d4e2bc2e +Author: Daniel-Constantin Mierla +Date: Wed Oct 30 16:08:47 2013 +0100 - modules_k/outbound: Added some includes to api.h + kamailio.cfg: removed modules_k from path for modules -commit b2e5040fa324fa8c95c5b44a5fcab58ed84a4c55 -Author: Daniel-Constantin Mierla -Date: Wed Dec 26 12:32:00 2012 +0100 +commit 328350a0d718990f8a87f25f8c12f1c85d61220f +Author: Richard Good +Date: Wed Oct 30 12:50:04 2013 +0200 - core: check for IP in no_naptr_srv_sip_resolvehost() - - - catch IP addresses before attempting to do SRV query + modules/ims_charging: fixed failed reservation bug + - Reservation checks dialog integrity with h_entry < 0 + - The hash that creates h_entry can return 0 - this check should be <= 0 -commit 17b3c70ea9cd21b71b44062dfff20cea7e67b349 -Author: Daniel-Constantin Mierla -Date: Wed Dec 26 11:20:46 2012 +0100 +commit a7037aad9963678347bf2b1c15c4994e95570f86 +Author: Richard Good +Date: Wed Oct 30 12:49:26 2013 +0200 - core: try all srv protocols when not already set - - - patch to commit by Mihály Mészáros + modules/ims_charging: code clean up, removed duplicate timer init and dlg bind -commit b21b5125c7c60775226a7a86dc411863477ed799 -Author: Daniel-Constantin Mierla -Date: Mon Dec 24 10:04:15 2012 +0100 +commit a3db949272db7dbda4fa5fd1ad68d23d56deacc0 +Author: Richard Good +Date: Wed Oct 30 09:15:51 2013 +0200 - registrar(k): restore the location contact xavp upon lookup + modules/tm: code cleanup removed unused method faked_resp and free_faked_resp -commit e6ad428f6699621b7ee622984eeea3e3e2f6cb80 +commit 15a14440f07f787501e116ab4901ab5a53668f4a Author: Daniel-Constantin Mierla -Date: Mon Dec 24 10:03:10 2012 +0100 +Date: Tue Oct 29 22:00:18 2013 +0100 - usrloc(k): option to store xavp per contact - - - stored only in memory for the moment - - the xavp can contain a list of xavps - - new config parameter to specify the name of xavp + kamctl: added new db tables in kamdbctl lists -commit 6f31c603d1e540b1cd7ca7e81648e024acbd1388 -Author: Daniel-Constantin Mierla -Date: Mon Dec 24 10:02:01 2012 +0100 +commit 2e033c85d2c66c47de15f355298012f012adb15c +Author: Richard Fuchs +Date: Tue Oct 29 15:30:36 2013 -0400 - core: extended xavp api + rtpproxy-ng: fix extraction of multipart SDP body - - functions to add an avp last in a list or inserted at a specific - position, to extract an avp from top of the list + reported by: Jasmin Schnatterbeck -commit be0f77ec7fa86f9387393609fbdffafd65a1afe3 -Author: Daniel-Constantin Mierla -Date: Sun Dec 23 19:32:03 2012 +0100 +commit 355ab783a99e413eb96a385ab067336316aaafda +Author: Richard Good +Date: Tue Oct 29 12:40:42 2013 +0200 - registrar(k): use only pre-existing branches in lookup_branches() + modules/cdp/acctstatemachine.c: fixed incorrect reservation expiry warning + First check if acc state is OPEN before sending reservation expiry warning -commit c50a8ba36aee8ae53d66a8128300085934d1a3f0 +commit c4a4b4f599ba428330899e804877e85d3fdcc3a4 Author: Daniel-Constantin Mierla -Date: Sun Dec 23 17:19:21 2012 +0100 +Date: Tue Oct 29 11:08:49 2013 +0100 - p_usrloc: clean memory in case of malloc error + kamctl: updated db creation scripts -commit 7f7605bd38f76ab9adf1335b4a1de6fa40708486 -Author: Olle E. Johansson -Date: Sun Dec 23 16:26:16 2012 +0100 +commit ecc6e35b31d59e6e9995a03c6ab00f21a23b1be9 +Author: Daniel-Constantin Mierla +Date: Tue Oct 29 11:07:03 2013 +0100 - Revert "Changing to kamcmd" + srdb1: drop unique constrant on alias user+domain in dbaliases - This reverts commit 90432f0e672c5fb11b1e47b9655768bf20e45b89. + - it doesn't work for multiple branches when use_domain is set, reported + by Vassilis Radis -commit 5c4bb10fc7a534b92b0dcd9c229ea1392da34cee -Author: Olle E. Johansson -Date: Sun Dec 23 10:22:56 2012 +0100 +commit da3d48de7d52df83fcb568530441e7ac6475baae +Author: Daniel-Constantin Mierla +Date: Tue Oct 29 10:08:04 2013 +0100 - kamcmd changes + pua_publish: more verbose output for error case when sending publish -commit 90432f0e672c5fb11b1e47b9655768bf20e45b89 -Author: Olle E. Johansson -Date: Sun Dec 23 10:22:19 2012 +0100 +commit 73d509f04029dddc94bedba23460d43c81acc13a +Author: Richard Good +Date: Tue Oct 29 10:51:32 2013 +0200 - Changing to kamcmd + modules/ims_registrar_pcscf: replaced incorrect LM_ERR with LM_DBG -commit 9b745fbb0a065cf30b8069e950b4e6e9f2d8b20c -Author: Olle E. Johansson -Date: Sun Dec 23 10:17:36 2012 +0100 +commit 41a9fbf38ba84e542a546893a6ce9c48f14f3aa3 +Author: Jason Penton +Date: Tue Oct 29 10:31:52 2013 +0200 - kamcmd Updating docs + modules/tm: fixed placement of variable declarations to top of scope block -commit 922e7f4a9a56b4c02b5fedb93bd3684b2c410881 -Author: Olle E. Johansson -Date: Sun Dec 23 09:31:28 2012 +0100 +commit 716932aa77a0f22f00d2ccee8a89cd84b6674f0a +Author: Jason Penton +Date: Tue Oct 29 09:49:42 2013 +0200 - Change "sercmd" to "kamcmd" in module documentation files - README + modules/tm: cosmetic fixes and comment fixes -commit 334b6e7a2c0804a7ee4ce30761fc911a31682876 -Author: Olle E. Johansson -Date: Sun Dec 23 09:05:50 2012 +0100 +commit a7d9ea3ceda6b933807f0345e327849e60d0fa57 +Author: Jason Penton +Date: Tue Oct 29 09:42:45 2013 +0200 - kamctl Fix typo that causes the "trusted" help to be printed twice and "address" zero times + modules/tm: last pkg_mem leak resolved for async replies (nonshm lumps) -commit 3eeaa5af9107f3795aee714ac47380cfb2ef45c3 -Author: Olle E. Johansson -Date: Sun Dec 23 09:01:01 2012 +0100 +commit 3022220043bcc9c421ac175b2a3290950014a7fc +Author: Daniel-Constantin Mierla +Date: Tue Oct 29 08:34:29 2013 +0100 - kamctl Change "sercmd" to "kamcmd" in help texts + kamctl: regenerated db script for mohqueue tables -commit 95805adb74fbc17fe38f89bf9ec8dd57f31e9d91 -Merge: 35683cf 9b2cb40 -Author: Olle E. Johansson -Date: Sun Dec 23 08:49:50 2012 +0100 +commit 3eeeed2aeeb924afeabc3fc8337561624f0c41d0 +Merge: 946e1f0 b5638f7 +Author: Jason Penton +Date: Mon Oct 28 15:03:08 2013 +0200 Merge branch 'master' of ssh://git.sip-router.org/sip-router - - Do not read this message. It's not needed. Just a stupid swede making mistakes. - Do not read this message. It's not needed. Just a stupid swede making mistakes. - Do not read this message. It's not needed. Just a stupid swede making mistakes. - Do not read this message. It's not needed. Just a stupid swede making mistakes. - - * 'master' of ssh://git.sip-router.org/sip-router: - modules_s/permissions: moved to obsolete folder - modules_s/textops: moved to obsolete folder - textopsx: added functions that operate on header value - modules_k/domain: bind_domain api function takes one param - modules_k/htable: removed unused variable - nathelper(k): new test 128 to check port in contact against source port - modules_s/nathelper: moved to obsolete folder - nathelper(k): added the select for rewriting the contact - core: proper pv buffer reinitialization - dialog(k): Reworked dlg_set_timeout_by_profile() code to change dialog timeouts outside of a profile lock. - modules/app_lua: Updated app_lua to support URI lookup in registrar - modules_k/registrar: Extended C-API to include a URI lookup - pkg/kamailio/(centos|fedora): Added more modules moved from modules_s to modules to the build - -commit 35683cfb90e68719205bef377a8bedad3e633f9d -Author: Olle E. Johansson -Date: Sun Dec 23 08:49:23 2012 +0100 - Fixing compiler warnings - -commit b6b3acf9e2cf3283684773df325eb8ac6d2226c3 -Merge: 0c3d25f 9b2cb40 -Author: Peter Dunkley -Date: Sat Dec 22 17:03:25 2012 +0000 +commit 946e1f01889c67a835583f4df2c773d227693ea7 +Author: Jason Penton +Date: Mon Oct 28 14:51:12 2013 +0200 - Merge branch 'master' into outbound - - * master: - modules_s/permissions: moved to obsolete folder - modules_s/textops: moved to obsolete folder - textopsx: added functions that operate on header value + modules/tm: fixed pkg memory leak in TM which happens in async reply processing -commit 0c3d25f4fba43ee66a6f1edf88b1abfde97668c8 -Author: Peter Dunkley -Date: Sat Dec 22 17:02:01 2012 +0000 +commit b5638f712711deb8413d7e585369adf8f4a421ee +Author: Richard Good +Date: Mon Oct 28 14:41:22 2013 +0200 - modules_k/outbound: Improved flow token encode/decode. Now should work properly with IPv4 and IPv6 + modules/ims_qos: memory optimisation + Fixed pkg memory allocation for framed IP AVP and flow buffer AVP + Instead of repeatedly alloc'ing and free'ing pkg memory we allocate once and re-use + Results in better pkg memory overhead -commit 9b2cb40fdb0660b61e9d9bb2086100c54ac7066e +commit 3856e9e81c8410b220b893a0dfe7114bba6bdc0d Author: Daniel-Constantin Mierla -Date: Sat Dec 22 14:29:55 2012 +0100 +Date: Sun Oct 27 16:59:32 2013 +0100 - modules_s/permissions: moved to obsolete folder + core: handle pv comparison with $null as when defined is used - - use the other module with same name + - reported by Victor Seva, closes FS#358 -commit 29b41dfd405f5e7de607b97d14f9481d4d91babb +commit 3d716a94b620e0115381b164595ef0398c816856 Author: Daniel-Constantin Mierla -Date: Sat Dec 22 14:28:23 2012 +0100 +Date: Sat Oct 26 08:59:09 2013 +0200 - modules_s/textops: moved to obsolete folder + kamctl: use a variable to set the now() function or a replacement for it - - use the other textops module or textopsx - - use config variable format ($varname(x)), instead of former xlog style - with % - -commit ba6119e3b4d84d8ba656c2a44fdafe3a2c31595f -Author: Daniel-Constantin Mierla -Date: Sat Dec 22 14:26:18 2012 +0100 + - sqlite uses instead the string returned by 'date' call, as it doesn't + have now() + - reported by Peter Dunkley, FS#356 - textopsx: added functions that operate on header value - - - imported from modules_s/texops and replaced the xlog-% style with - pvar-$ style +commit 2a046e5fd3c47bc7753190425b911b4114667563 +Author: Peter Dunkley +Date: Thu Oct 24 20:44:03 2013 +0100 -commit 1db38af24d8808a9a2045c7bac25581199717a2b -Author: Peter Dunkley -Date: Sat Dec 22 13:07:58 2012 +0000 + pkg/kamailio/centos: added app_java to CentOS RPMs - modules_k/outbound: Filled in functions to encode and decode flow tokens +commit 9c765e89ea7647b1e9c5e36eb0b324eec1d92b7d +Author: Peter Dunkley +Date: Thu Oct 24 20:13:11 2013 +0100 -commit 83d07c9a0f883ba08f863103127b96893d1bc92b -Merge: 68e07fa 1a09692 -Author: Peter Dunkley -Date: Sat Dec 22 11:04:04 2012 +0000 + modules/app_java: updated Makefile so that it builds on CentOS 6 - Merge branch 'master' into outbound - - * master: - modules_k/domain: bind_domain api function takes one param - modules_k/htable: removed unused variable - nathelper(k): new test 128 to check port in contact against source port - modules_s/nathelper: moved to obsolete folder - nathelper(k): added the select for rewriting the contact - core: proper pv buffer reinitialization - dialog(k): Reworked dlg_set_timeout_by_profile() code to change dialog timeouts outside of a profile lock. - -commit 1a09692be74ef8c4f0dc56801bce6a2fb351536d -Author: Juha Heinanen -Date: Sat Dec 22 12:26:29 2012 +0200 +commit 9a67a730df4f6c6584e8c52934d5feb16f86ee2e +Author: Richard Fuchs +Date: Thu Oct 24 12:34:05 2013 -0400 - modules_k/domain: bind_domain api function takes one param + tm: fix possible segfault in cancel_branch() -commit a60a7ca8010a66703a90768b42ae16342c50107d -Author: Juha Heinanen -Date: Sat Dec 22 11:33:13 2012 +0200 +commit 9ca1648fbf167748bcf9155794f703632ca87503 +Author: Charles Chance +Date: Thu Oct 24 16:36:01 2013 +0100 - modules_k/htable: removed unused variable + htable: ht_dmq_handle_msg() - do not call parse_headers on cloned message -commit bf3acaf0895d900c15e3455cba225226f3debf62 -Author: Daniel-Constantin Mierla -Date: Sat Dec 22 09:42:35 2012 +0100 +commit 2c990487a780bce2ee2fe64e155ec3f1bc1bdebf +Author: Charles Chance +Date: Thu Oct 24 16:15:10 2013 +0100 - nathelper(k): new test 128 to check port in contact against source port - - - used for nat_uac_test() - - imported from ser flavour + memcached: revert earlier doc change regarding minimum library version (we now have backward compatibility built in) -commit f7ef4b3d54dd462648330dfa4522d067376178ce -Author: Daniel-Constantin Mierla -Date: Sat Dec 22 09:28:18 2012 +0100 +commit fc4f2216f867b00a6685abdf51b8165572f24f69 +Author: Carlos Ruiz Diaz +Date: Thu Oct 24 11:05:17 2013 -0300 - modules_s/nathelper: moved to obsolete folder - - - use the other module with same name - - pings from config can be done with uac module, uac_req_send() + ims_charging: fixed deadlock when interim CCA timeout occurs -commit b2ef844bfdcce46d6a1b88f60ff2fe4d1de30855 -Author: Daniel-Constantin Mierla -Date: Sat Dec 22 09:24:11 2012 +0100 +commit b0797b765af78f19d942a87ea978037027da57c3 +Author: Peter Dunkley +Date: Thu Oct 24 13:10:08 2013 +0100 - nathelper(k): added the select for rewriting the contact + pkg/kamailio/centos: added memcached package to .spec - - exsting in the ser flavour version + - Also: + - updated README to remove memcached from list of unbuilt modules + - moved auth_identity into the tls package + - List of modules not built for CentOS is now: + - app_java: should be buildable but Makefile needs work + - app_mono: needs newer version of mono-devel than available in base or EPEL + - db_cassandra: needs specific versions of thrift (thrift not in base or EPEL + at all anyway) + - db_oracle: requires non-free Oracle client SDK + - iptrtpproxy: obsolete + - jabber: obsolete + - osp: requires OSP Toolkit which is not available in base or EPEL -commit d52371ec0a6ce6f1fff4f4fc91df3a89e5983228 -Author: Daniel-Constantin Mierla -Date: Sat Dec 22 08:32:31 2012 +0100 +commit adfa299a1a01aba1c69c1129d78170056d50db42 +Author: Charles Chance +Date: Thu Oct 24 12:14:38 2013 +0100 - core: proper pv buffer reinitialization - - - reported by Olle Johansson, FS#259 + memcached: added alternate memory management wrappers for backwards compatibility with older libmemcached versions and added preprocessor check for the correct ones to use based on installed version. -commit c9957ad5bf1b672a2661f4faeb9b781820a1f636 -Author: Alex Balashov -Date: Fri Dec 21 21:08:39 2012 -0500 +commit a067a3d33ad67c260a3bc377cd4203d41880ca6b +Author: Daniel-Constantin Mierla +Date: Thu Oct 24 07:44:03 2013 +0200 - dialog(k): Reworked dlg_set_timeout_by_profile() code to change dialog - timeouts outside of a profile lock. + tm: use internal flags field to mark suspended replies with FL_RPL_SUSPENDED - This is in order to avoid deadlock complications arising from lock/ref - count operations upstream. It appears that when update_dlg_timer() - fails, it does not relinquish control back to the calling function, which - created problems with unreleased profile locks. + - it was set on cfg flags, resulting in messing up with what was used in + config file + - reported by Juha Heinanen -commit 68e07faf94e6aa8664f3d7116026d136062136b1 +commit 6b8b8a050e4490302d1f1f940a7fda95784cce46 Author: Peter Dunkley -Date: Fri Dec 21 23:38:28 2012 +0000 +Date: Wed Oct 23 14:53:04 2013 +0100 - modules_k/outbound: Removed nat_test from here + modules/xcap_server: fixed fetching of an element (GET with XPath) - - Will just use the one from nathelper when required. + - This is a mandatory part of XCAP and DELETE/PUT of elements (using XPath) + is supported in xcap_server. + - The code to get a node from a document was all in there but never called. -commit 064120b137e05e3799399664dbc48d0d1d5ba01b -Merge: 7b31e98 72bee68 -Author: Peter Dunkley -Date: Fri Dec 21 23:34:35 2012 +0000 +commit 3b028d308fac3a4f7ae1e74021882657753f2ee8 +Author: Charles Chance +Date: Wed Oct 23 12:01:27 2013 +0100 - Merge branch 'master' into outbound - - * master: (592 commits) - modules/app_lua: Updated app_lua to support URI lookup in registrar - modules_k/registrar: Extended C-API to include a URI lookup - pkg/kamailio/(centos|fedora): Added more modules moved from modules_s to modules to the build - db_text More instructive error message - modules_s/maxfwd: moved to obsolete folder - maxfwd(k): max_limit module param can be changed at runtime - uid_avp_db: fixed include from uid_domain module - app_python: fixed complilation warnings [-Wformat] - modules_s/uid_uri_db: moved to modules folder - modules_s/uid_domain: moved to modules folder - modules_s/uid_gflags: moved to modules folder - modules_s/uid_avp_db: moved to modules folder - modules_s/uid_auth_db: moved to modules folder - modules_s/pike: moved to obsolete folder - modules_s/uri_db: renamed to uid_uri_db - modules_s/gflags: renamed to uid_gflags - modules_s/domain: renamed to uid_domain - uid_auth_db: updated doc file to the new name - modules_s/avp_db: renamed to uid_avp_db - modues_s/auth_db: renamed to uid_auth_db - ... - - Conflicts: - modules_k/nathelper/nathelper.c - pkg/kamailio/centos/6/kamailio-build.appl - pkg/kamailio/centos/6/kamailio.appl - pkg/kamailio/fedora/16/kamailio-build.appl - pkg/kamailio/fedora/16/kamailio.appl - pkg/kamailio/fedora/16/kamailio.spec - pkg/kamailio/fedora/17/kamailio-build.appl - pkg/kamailio/fedora/17/kamailio.appl + dmq: Fixed bug/error in original code where sip_msg was parsed after cloning to shm, leading to memory errors. Also fixed several memory leaks. -commit 72bee685f57ccd0637e1bc97093c9e5731c2d40f -Author: Peter Dunkley -Date: Fri Dec 21 23:10:05 2012 +0000 +commit eb97ddb20368c019b331cfd09e793a0431d49940 +Merge: f6d530e 58a3069 +Author: Jason Penton +Date: Tue Oct 22 20:59:26 2013 +0200 - modules/app_lua: Updated app_lua to support URI lookup in registrar - - - Enhancement added by Hugh Waite @ Crocodile RCS + Merge branch 'master' of ssh://git.sip-router.org/sip-router -commit 18a4a8a33939edc6e5d74fdc21c33d9835a62f61 -Author: Peter Dunkley -Date: Fri Dec 21 23:09:23 2012 +0000 +commit f6d530e68ffe9db11f5f148c51f8bff0b542f028 +Author: Jason Penton +Date: Tue Oct 22 20:57:52 2013 +0200 - modules_k/registrar: Extended C-API to include a URI lookup - - - Enhancement added by Hugh Waite @ Crocodile RCS + modules/cdp: allow CDP child processes to respond to dynamic cfg changes + - this for example allows dumping pkg memory using core cfg variables similar to SIP workers, etc -commit 8030130f6b5819804dbe4d563abe197e13d1a54f -Author: Peter Dunkley -Date: Fri Dec 21 22:52:55 2012 +0000 +commit 58a3069927a2e37c327256cd3475d7a7f8a2f5c4 +Author: Peter Dunkley +Date: Tue Oct 22 11:08:08 2013 +0100 - pkg/kamailio/(centos|fedora): Added more modules moved from modules_s to modules to the build + pkg/kamailio/centos: updated README to remove mi_xmlrpc from the set of unbuilt modules -commit 242527fe5b94902ed4e20adad054c16f1732d9fd -Author: Olle E. Johansson -Date: Fri Dec 21 23:11:40 2012 +0100 +commit d79cffa79ab740bc3e724fc0e9b8fc9f7236af44 +Author: Peter Dunkley +Date: Tue Oct 22 11:07:40 2013 +0100 - db_text More instructive error message + pkg/kamailio/centos: updated .spec to add mi_xmlrpc to xmlrpc package -commit 3852f46576eab51198ebd089e555bf67d3b46eb0 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 22:49:08 2012 +0100 +commit 05f0ed6d77602f3ee1a2cfc8cee1c760dc2f6800 +Author: Peter Dunkley +Date: Tue Oct 22 10:45:56 2013 +0100 - modules_s/maxfwd: moved to obsolete folder + modules/mi_xmlrpc: fixed compilation warning -commit 9a9cbdc8257e1782f74aa393d7c0b2f4d7888f98 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 22:43:54 2012 +0100 +commit b3dedff1053a1d35e803f3824042732f07532b77 +Author: Muhammad Shahzad +Date: Tue Oct 22 10:43:43 2013 +0100 - maxfwd(k): max_limit module param can be changed at runtime + modules/mi_xmlrpc: patched so that it now builds for CentOS - - changed to use cfg param reload framework - - added aliases to existing functions to make them compatible with ser - flavour - - config functions can take variables as parameters - -commit 5374337d3b3504247b5846a37c998a4f1c61d4d8 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 22:43:14 2012 +0100 - - uid_avp_db: fixed include from uid_domain module + - Patch by Muhammad Shahzad + - Committed by Peter Dunkley -commit 221da0463d31534c0103dc87931324ae0b3acc72 -Author: Konstantin Mosesov -Date: Fri Dec 21 22:21:42 2012 +0200 +commit 11abcfd96f30aa5f0032385ac5893c27bdf6315b +Author: Charles Chance +Date: Mon Oct 21 14:40:10 2013 +0100 - app_python: fixed complilation warnings [-Wformat] + memcached: added minimum libmemcached version required to documentation -commit 9b5c2fec96a37069af9ede4ddc30e6303c1113a2 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 20:52:03 2012 +0100 +commit 4bffd1950e4481a734141ae6cf755458f341f45b +Author: Peter Dunkley +Date: Mon Oct 21 13:40:46 2013 +0100 + + pkg/kamailio/centos: updated README that explains which modules are not built for CentOS + + - The modules not built at this time are: + - app_java + - app_mono + - db_cassandra + - db_oracle + - iptrtpproxy + - jabber + - memcached + - mi_xmlrpc + - osp + +commit e3524fb816c1fad04b3c855e3fe88151b33e24c8 +Author: Peter Dunkley +Date: Mon Oct 21 13:37:45 2013 +0100 + + pkg/kamailio/centos: updated .spec to build packages with dependencies that can be met by EPEL + + - This means the computer building the RPMs needs to have access to EPEL and + the appropriate dependencies installed from it. However, there will be + no need to have EPEL dependencies installed on a running instance _unless_ + you want to use one of the modules with an EPEL dependency. + - The modules supported with EPEL are: + - acc_radius, auth_radius, misc_radius, peering + - carrierroute + - dnssec + - geoip + - json, jsonrpc-c + - ndb_redis + +commit 9f08b58f58585559646b470ae9f4b9801617ba73 +Author: Peter Dunkley +Date: Sun Oct 20 23:52:23 2013 +0100 - modules_s/uid_uri_db: moved to modules folder + pkg/kamailio/centos: updated rel in .spec -commit 3f535ff25cb67ef4f0f12ca1d8230fadaa3a832e -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 20:51:33 2012 +0100 +commit ce9f46a3778cd6c79f2411b5934e3ad320cf6de4 +Author: Peter Dunkley +Date: Sun Oct 20 23:46:35 2013 +0100 - modules_s/uid_domain: moved to modules folder + pkg/kamailio/centos: removed out-of-date BoxGrinder appliance files -commit 9f6d4d0797074ec37a629af974df97bfdafda68a -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 20:50:15 2012 +0100 +commit 0de2ae72410f0672f174a8cae34d4ac12798a188 +Author: Peter Dunkley +Date: Sun Oct 20 23:27:58 2013 +0100 - modules_s/uid_gflags: moved to modules folder + pkg/kamailio/centos: updated documentation -commit 1316bb1cd42cf34f03f9072037d6a138e2e10db4 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 20:49:36 2012 +0100 +commit 61ad39509ca1d739d00d0386ab5a991cf54477d8 +Author: Øyvind Kolbu +Date: Sun Oct 20 22:04:16 2013 +0200 - modules_s/uid_avp_db: moved to modules folder + fix dns srv failover when no UDP record is present + + - refactored code for srv lookup to have less code duplication -commit b092e88730367444559408100a2c8d159259d6ed -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 20:49:02 2012 +0100 +commit 820046b04c2218273a11f905dc798812d7ca0ca6 +Author: Jason Penton +Date: Fri Oct 18 09:21:02 2013 +0200 - modules_s/uid_auth_db: moved to modules folder + modules/ims_registrar_scscf: added outstanding documentation -commit 1183a546bd287c90cc485573df585fe9f624a7ab +commit 37f284d2d9bbe6dac4888600d0b99ccc58d22eb9 Author: Daniel-Constantin Mierla -Date: Fri Dec 21 20:47:53 2012 +0100 +Date: Thu Oct 17 18:18:17 2013 +0200 - modules_s/pike: moved to obsolete folder - - - use the other module with same name + Makefile.defs: version set to 4.1.0-pre0 -commit b79303dbfd781de9218f73b98ca72f25cf1d1054 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 19:51:19 2012 +0100 +commit 324e458ad68e97edaf2240e0f79b7380e77d268c +Author: Richard Good +Date: Thu Oct 17 16:46:09 2013 +0200 - modules_s/uri_db: renamed to uid_uri_db + modules/ims_qos: second iteration of ims_qos module + - module now support media authorization over Diameter Rx (between P-CSCF and PCRF) -commit bc780f6769581fd6260ba8d3f207ca2dd305970d -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 19:43:53 2012 +0100 +commit d5c482ca06ff4b8529ea00d421484addd0203c37 +Author: Richard Good +Date: Thu Oct 17 16:44:46 2013 +0200 - modules_s/gflags: renamed to uid_gflags - - - script flag functions got an 'u' in name to allow usage together with - cfgutils module + modules/tm: Edited documentation to show that t_suspend/continue can now be used on SIP responses -commit e4eb153efa0e2d0c6e1478fbe664df87aa93c7ec -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 19:38:51 2012 +0100 +commit 16e763c32d7a2b9fc451185e028a90b3be758f65 +Author: Richard Good +Date: Thu Oct 17 16:41:15 2013 +0200 - modules_s/domain: renamed to uid_domain + modules/tm: extended tm async support to SIP responses + -t_suspend and t_continue functions now work with SIP responses as well as requests -commit 6e8d115d48193c07977bf07638f237ff8518cf0e -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 18:45:25 2012 +0100 +commit 8b8132c17c126ff4edb2f5c9544dbd30894f6108 +Author: Richard Good +Date: Thu Oct 17 16:40:07 2013 +0200 - uid_auth_db: updated doc file to the new name + parser: defined new FL_RPL_SUSPENDED used for suspend on reply -commit a5daf1797ff4edbb456d0d0b70138ce422d65d86 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 18:42:26 2012 +0100 +commit cc8bc36c67a0b8e7317c06c50a88e8e6aa15d790 +Merge: 217e508 2f368b6 +Author: Carsten Bock +Date: Wed Oct 16 14:12:51 2013 +0200 - modules_s/avp_db: renamed to uid_avp_db + ims_charging: Merge branch 'ims_charging' into master -commit 0440bae1fd24700d83bd4728f662deea250ed716 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 18:35:19 2012 +0100 +commit 2f368b676acb026bf4647af02108a24e49e30581 +Author: Carlos Ruiz Diaz +Date: Fri Oct 11 00:07:18 2013 -0300 - modues_s/auth_db: renamed to uid_auth_db + ims_charging: fixed bug causing dialog cb function to be called more than once - - the module is using uid based database schema + - removed possible race condition in dialog cb + - improved the way locking was performed -commit 2eb7894a6d2b9ca0e62eb83865d5cf955366ce9c -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 18:02:21 2012 +0100 +commit 217e5089df327215dd5078a72dd5b14526640191 +Author: Jason Penton +Date: Thu Oct 10 16:04:49 2013 +0200 - modules_s/print_lib: moved to modules folder + modules/ims_charging: restored an unlock that will cause deadlock if omitted -commit bd263eea88e942a077dd0ef70138d1bbc704219f -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 18:01:51 2012 +0100 +commit bae7fcb9be9a4cf88693e6c4180e3c1e6f4b6c1d +Author: Jason Penton +Date: Thu Oct 10 15:36:59 2013 +0200 - modules_s/print: moved to modules folder + modules/ims_charging: fixed bug not initialise AVP string value for success CCA -commit 8e806d4cb02049ffb447e3781d0ce864bb2bffb7 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 17:57:12 2012 +0100 +commit 6ccca97cba61e75e9da0b6d36f1ee38fc88e94f3 +Merge: db618dd 83add48 +Author: Jason Penton +Date: Thu Oct 10 15:01:07 2013 +0200 - modules_s/print_lib: added readme and xml docbook files + Merge branch 'master' of ssh://git.sip-router.org/sip-router -commit 306459af5d4698e598a6842668faf701fe9b85f3 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 17:42:46 2012 +0100 +commit db618ddbdc2ec92a508acd913f2f847a4fb59cae +Author: Jason Penton +Date: Thu Oct 10 14:59:23 2013 +0200 - modules_s/rr: moved to obsolete folder - - - k version offers the ability to work behind nat and preset route set - - adding params to record-route headers can be done with add_rr_params() - which has dynamic parameter - - accessing the route parameters can be done via script variables + modules/ims_charging: corrected default termination cause code to DIAMETER_LOGOUT + - also corrected typo + - added other termination cause code defines for future use -commit b3773e4ae594fcff9de95a869695d2441d9628b8 -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 13:28:44 2012 +0100 +commit 83add48b7c1cdf0d9f64c24bcc134195699daac1 +Author: Robert Boisvert +Date: Thu Oct 10 08:25:05 2013 -0400 - modules_s/cpl-c: moved to obsolete list + mohqueue: fixes - - use the other cpl-c module + * cleaned up all error paths (fixed crashes) + * added support for INVITEs that get stuck + * adjusted code to avoid compiler warnings + * PRACK only invoked if Require: 100rel set + * fixed bug that allowed a new call to be created more than once + + Documentation + * updated NOTES -commit 69a7abb8703fab795071130b5f4cd7412124aab2 +commit ac5835c0aff657cae169432466851c9f2cbca8ad Author: Daniel-Constantin Mierla -Date: Fri Dec 21 12:39:00 2012 +0100 +Date: Thu Oct 10 12:45:45 2013 +0200 - cpl-c: added an optional parameter to cpl_run_scritp() to provide the URI + cfgutils: init probability pointer to NULL - - the parameter will be used instead of taking the URI from headers or - R-URI + - otherwise it can be an attempt to free it when the kamailio does not + start due to config errors + - reported by Dragos Oancea -commit a403bd541bbca60fff6ab24a62c7bd2b31c6707e -Author: Peter Dunkley -Date: Fri Dec 21 10:29:54 2012 +0000 +commit a3bddf300ff82b9d811acb5dd6ec2e25f0eab07c +Author: Jason Penton +Date: Wed Oct 9 17:55:20 2013 +0200 - pkg/kamailio/(centos|fedora): Added moved modules from modules_s to the build - - - db2_ldap, db2_ops, and timer + module/tm: changed log level from WARN to DBG for informational message -commit c2e4b20ecc2598bf5a440a50762e9dbd6a2ed61c -Merge: 2930038 35a427c -Author: Olle E. Johansson -Date: Fri Dec 21 11:19:33 2012 +0100 +commit 2dc78738af4a0693e0a4d3f77e2174586d53d90b +Author: Carlos Ruiz Diaz +Date: Tue Oct 8 15:52:09 2013 -0300 - Stupid Merge branch 'master' of ssh://git.sip-router.org/sip-router - - * 'master' of ssh://git.sip-router.org/sip-router: - Makefile: db2_ldap added to excluded modules list + ims_charging: removed session unlock function call when no lock was acquired -commit 2930038a7e4ccf9abb1fe2465d1e59f3dfe9012f -Author: Olle E. Johansson -Date: Fri Dec 21 11:18:55 2012 +0100 +commit dcce66b2a3db3aeaa5de1a87429320731ab3795c +Merge: 121e828 639ce58 +Author: Carsten Bock +Date: Tue Oct 8 18:43:14 2013 +0200 - db_text: Minor correction in error message. - - Tell the user what's wrong, not just that it's wrong. + ims_charging: Merge branch 'ims_charging' into Master. -commit 35a427c6d452477478228885e1b2a2104633ce5d -Author: Daniel-Constantin Mierla -Date: Fri Dec 21 11:10:20 2012 +0100 +commit 121e828e2bedd3f76a1343f7257978153e78fc8f +Author: Peter Dunkley +Date: Tue Oct 8 02:37:43 2013 +0100 - Makefile: db2_ldap added to excluded modules list + pkg/kamailio/centos: added mohqueue to CentOS build -commit 9b9562a2bdc71e350702e21e25129444e6b805aa -Author: Olle E. Johansson -Date: Fri Dec 21 10:07:52 2012 +0100 +commit 03dbfd4c97290028212ddb04eea5faf5ef4ba007 +Author: Peter Dunkley +Date: Tue Oct 8 02:27:24 2013 +0100 - htable Minor correction to RPC docs + modules/mohqueue: created text README file from doc source -commit 6ff072a307ddf0735ca9c38c1bc0c3ebdbc57a2b -Author: Olle E. Johansson -Date: Fri Dec 21 09:40:06 2012 +0100 +commit a39adb3497b5b095126e835104d637669dee2a7e +Author: Carsten Bock +Date: Mon Oct 7 16:17:53 2013 +0200 - htable Add RPC command for listing one item - - Also, add documentation for existing RPC commands. + ims_charging: Add statistic ccr_timeouts -commit b6e2034d84dcb77bfda256af0de0c434cc83dbb7 -Author: Olle E. Johansson -Date: Fri Dec 21 09:05:15 2012 +0100 +commit e4e84c80232a5acc60b64adb541b54b6967189f6 +Author: Timo Teräs +Date: Mon Oct 7 17:09:59 2013 +0300 - pike: Add error on bad argument + mohqueue: fix build error due to get_debug_level api change - Reported by Ovidiu Sas on the sr-dev list. Bug ported from modules_s/pike :-) + Should have tested better before merging. Should probably remove the + whole debug print helper and use core functions directly now that + the core supports per-module debugging. -commit 7f532c2994a824c33c2e9e2348a10df734c1d3a7 -Author: Olle E. Johansson -Date: Thu Dec 20 20:59:59 2012 +0100 +commit 62860094af838710ee5b9892cfb9f99f615055f6 +Author: Hugh Waite +Date: Mon Oct 7 10:01:56 2013 +0100 - sl Minor README updates (file name changes) + tm: Restore ruid value in sip_msg struct after creating transactions from branches + + - Fixes crash when freeing memory -commit 6c8c42c92de26912c3c15007114967deca6bdc89 -Author: Olle E. Johansson -Date: Thu Dec 20 20:57:07 2012 +0100 +commit a4370dc336e5552b93d32314249d4d613d77ef99 +Author: Jason Penton +Date: Mon Oct 7 12:49:00 2013 +0200 - mangler: Minor doc update + modules/tm: missing lock initialisation for async_lock + - related to commit 5ab44c7c2fc78038302bf455ff49e374fc79550b -commit d36d4de28ad52763ef4e637393997bca44dc6fea -Author: Olle E. Johansson -Date: Thu Dec 20 20:56:17 2012 +0100 +commit ca060f98bbecb407d5d29cbe19cec821d3990330 +Merge: 6e19deb 24f66ec +Author: Timo Teräs +Date: Mon Oct 7 11:18:02 2013 +0300 - sanity Minor README updates + Merge branch 'tteras/mohqueue' -commit cbdadf3bff04e7837698ad84466fea2aed39b9c9 -Author: Olle E. Johansson -Date: Thu Dec 20 20:48:19 2012 +0100 +commit 6e19debdf9b240c71ca90bfd6cadd46f0f57ace8 +Author: Carsten Bock +Date: Mon Oct 7 10:15:11 2013 +0200 - prefix_route doc file name changes + examples/pcscf: Removed dependency to Presence-User-Agent and SQLite. -commit 75e18bc92fedc4d5a4ab0599ad16526928523b41 -Author: Olle E. Johansson -Date: Thu Dec 20 20:45:40 2012 +0100 +commit c9395e690435cdb8fc62b7fb13b378fe0a6ca8e5 +Author: Charles Chance +Date: Mon Oct 7 07:52:21 2013 +0100 - mangler Minor README edits + htable: update documentation for dmq integration -commit 0156d9e3e46e592c951acbbe8924840b3ca7860f -Author: Olle E. Johansson -Date: Thu Dec 20 20:40:19 2012 +0100 +commit 6a20bf80ae014801667c5a23782b33af5467c409 +Author: Charles Chance +Date: Mon Oct 7 07:44:38 2013 +0100 - malloc_test Minor README edits + htable: initial dmq integration -commit 326772a1524e3ad6e7c5927cf6edee1f85bc5a5b -Author: Olle E. Johansson -Date: Thu Dec 20 20:37:09 2012 +0100 +commit 24f66ecc72064c9bf40deeb324e666b6b95dfa83 +Author: Timo Teräs +Date: Mon Oct 7 08:41:37 2013 +0300 - db_flatstore Minor README edits + mohqueue: remove handwritten .sql, it is now autogenerated -commit c060369e85e279c3eba8fe5caddc3be7a860d512 -Author: Olle E. Johansson -Date: Thu Dec 20 20:31:50 2012 +0100 +commit 1af34ca5b9f799b83242a9ecddf8abe9521114dd +Author: Robert Boisvert +Date: Thu Oct 3 11:36:08 2013 -0400 - blst Minor README updates + mohqueue schema files -commit 98b4fd46fa5fb42422346793cad5406220f3992e -Author: Olle E. Johansson -Date: Thu Dec 20 20:28:34 2012 +0100 +commit f8f3d34ba5471742676831b22b1c872823a31cba +Author: Andrew Mortensen +Date: Sat Oct 5 13:14:09 2013 -0400 - avp Minor README xml file changes + modules/sca: fix compiler warning for macro. + + - correct "always evaluates to true" when using address of stack variable. -commit c9497bf0653ffca09bd180ea01d7089a14f8f0e2 -Author: Olle E. Johansson -Date: Thu Dec 20 20:26:12 2012 +0100 +commit 2f0043b153c60380e35c8ec4c33a9bbc7fb2b05c +Author: Andrew Mortensen +Date: Thu Sep 19 13:49:24 2013 -0400 - auth_identity README updates + modules/sca: fix return value of sca_call_info_uri_update() + + - return value of 0 can bubble up as return value of sca_call_info_update(), + causing early script termination (exported function returning 0 in script + is equivalent to "exit") + - report and patch from Timo Teräs -commit bcb10c2952cbcd5e3aa500815b11d7cf45de47a2 -Author: Olle E. Johansson -Date: Thu Dec 20 20:20:58 2012 +0100 +commit 2efe3e365e1670cc3ac8b4900a1104c3720d44fb +Author: Andrew Mortensen +Date: Tue Aug 20 15:54:17 2013 -0400 - auth Documentation filename changes + modules/sca: AoR should not be treated as SCA if there are no subscribers. -commit 78e1f3667d8fa553abde60d9078f395b9c4dcb9a -Author: Olle E. Johansson -Date: Thu Dec 20 20:18:34 2012 +0100 +commit 58a47ac21d09bf6feb1431bbe490643e9827c876 +Author: Andrew Mortensen +Date: Tue Aug 20 15:14:26 2013 -0400 - cfg_db README edits + modules/sca: improved handling of host-only Contact URIs -commit 88e55397a3036880d2af43aa44fda473c9284011 -Author: Olle E. Johansson -Date: Thu Dec 20 20:13:37 2012 +0100 +commit 3b1f87523bdc53538c1b6f409ba9470048572701 +Author: Andrew Mortensen +Date: Mon Jul 22 00:48:46 2013 -0400 - pike: README edits + modules/sca: restore missing prototype. + + sca_subscription_aor_has_subscribers -commit e0ef312d376d7b7d3d7e8b8c522544e0fae865bd -Author: Olle E. Johansson -Date: Thu Dec 20 20:12:42 2012 +0100 +commit 97653df1d93636771c7b2fa8e4f9aef002ee7e5b +Author: Andrew Mortensen +Date: Mon Jul 22 00:42:18 2013 -0400 - iptrtpproxy Minor README edits + modules/sca: detect when an AoR is no longer SCA. + + Don't, for example, create an appearance for callees that do not send + a Call-Info header, and whose AoR also has no subscribers. -commit e175629e7522350991bc4325f5141ecb68b05c3f -Author: Olle E. Johansson -Date: Thu Dec 20 20:11:59 2012 +0100 +commit a6f80374c4dd3d09fa7e25a8e6c59dab0bf2fae5 +Author: Andrew Mortensen +Date: Mon Jul 22 00:37:32 2013 -0400 - xmlrpc Documentation minor edits. + modules/sca: Clear stale line-seize appearances via timer. + + Some badly behaved/buggy UAs don't know when to say when. -commit bf42fb7b6deef7926816c5ec8f9a4d0bf7393aed -Author: Olle E. Johansson -Date: Thu Dec 20 20:07:58 2012 +0100 +commit 84d1981ce059fcdd7a5113428b0227fbb0b977ab +Author: Andrew Mortensen +Date: Thu Jun 13 16:06:10 2013 -0400 - xmlops: Move to "book" and rename files to avoid collissions + modules/sca: fix regression: restore purge expired timer -commit bb5527557c9d54f4ba63ddd491e4487b3fa0b063 -Author: Daniel-Constantin Mierla -Date: Thu Dec 20 19:25:10 2012 +0100 +commit c0fb2a67a699e30fd3274c9f864918e6e02e1926 +Author: Andrew Mortensen +Date: Thu Jun 13 15:34:00 2013 -0400 - db2_ldap: defined -DLDAP_DEPRECATED to enable the old ldap api + modules/sca: clear appearance on receipt of out-of-dialog SUBSCRIBE - - reported by Ovidiu Sas + - If a call-info SUBSCRIBE with no To-tag arrives from a subscriber + with an active subscription, release any appearances owned by the + subscriber, on the assumption that the subscriber has lost track + of SCA (reboot, power/network loss). -commit 2eee368b72c48e36af8af0f17fb29dc5d6310b08 -Author: Daniel-Constantin Mierla -Date: Thu Dec 20 19:13:13 2012 +0100 +commit ef9b12d213416f910e0c11bdeecf9112032939f8 +Author: Andrew Mortensen +Date: Thu Jun 13 15:30:40 2013 -0400 - core: added prototype of no_naptr_srv_sip_resolvehost() to resolv.h + modules/sca: detect and clear orphaned appearances caused by answer glare - - fix compile warning, reported by Ovidiu Sas + - set appearance state created by SCA callee answer to ACTIVE_PENDING, + and promote to ACTIVE on ACK from caller. If no ACK from caller is + received within 30 seconds (enough time for retransmission to fail), + the ACTIVE_PENDING appearance will be cleared by the + sca_appearance_purge_stale timer. -commit e964ce8f377cd368b1326ef42bc9bef36d192179 -Merge: 3ad60fe 80697ca -Author: Olle E. Johansson -Date: Thu Dec 20 18:52:33 2012 +0100 +commit 1ef4587612806a94c7a81aac4f768b9bbe472b43 +Author: Andrew Mortensen +Date: Wed May 15 16:13:23 2013 -0400 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/sca: reconcile Contact and From URIs in ACK callback. - Arrggh. Need to clean up my working directory before xmas. - * 'master' of ssh://git.sip-router.org/sip-router: - modules_s/timer: moved to modules folder + - fix Music-on-Hold in Polycoms when SCA caller has MoH enabled and SCA callee + does SCA hold/pickup with identical To & From URIs. Previously, module would + end up looking up an appearance for callee in ACK callback instead of caller. -commit 3ad60fe1e229b3c1fc3a854d57eac223094294ad -Author: Olle E. Johansson -Date: Thu Dec 20 18:51:52 2012 +0100 +commit 185bd40d1a197709d28d9b966ed8fd4b4c00faf9 +Author: Andrew Mortensen +Date: Tue May 14 16:25:06 2013 -0400 - pike: Import pike.top rpc call from modules_s/pike + modules/sca: improved BYE handling. - Thanks to Ovidiu for pointers in the right direction. - -commit 80697ca8ab8fd06bb348fd9d9b17d8db39f9e274 -Author: Daniel-Constantin Mierla -Date: Thu Dec 20 15:18:23 2012 +0100 - - modules_s/timer: moved to modules folder + - Clear appearances for both legs on BYE request if possible. -commit 1c35849b76ea9257162d5977e839399027c9659b -Author: Olle E. Johansson -Date: Thu Dec 20 13:44:59 2012 +0100 +commit 36ad80745607fca859578b8423cbd767f4c5b095 +Author: Andrew Mortensen +Date: Tue May 14 16:23:46 2013 -0400 - uac: Add note about only using uac_replace once in the same request + modules/sca: free previous appearance owner, callee, dialog if non-NULL. -commit b56e823ed8e7ac2f88d1020677f5e94546a91516 -Author: Mihály Mészáros -Date: Sun Dec 16 13:03:18 2012 +0100 +commit bb21b5e0bc7aaf001799e259b81aebe28168afb1 +Author: Andrew Mortensen +Date: Thu May 2 15:12:16 2013 -0400 - core/dns: fix an issue when using it without dns cache + modules/sca: change logging level for failed lookup by appearance-index. - - fixing an issue what caused that without dns cache we have to use a different function for srv resolution. + - appearance-index won't be found yet if SCA callee is answering, logging + at WARN is misleading. -commit 61cae424125c4af11a69092cbf7b6870dbf26af0 -Author: Mihály Mészáros -Date: Wed Dec 5 12:55:24 2012 +0100 +commit 98b8ba06dfaec49331dbfc3164e02a490e0db214 +Author: Andrew Mortensen +Date: Tue Apr 30 23:31:12 2013 -0400 - core: dns resolver patch bugfix - - - a small bug fixed. - Many thanks to Daniel (miconda@gmail.com) for reporting it. + modules/sca: space-separate dialog tags in sca.all_appearances output -commit 63ef5f0edcfebe86cffe7489f3524186ed3400d4 -Author: Mihály Mészáros -Date: Mon Nov 12 16:02:48 2012 +0100 +commit 002dc46fee94edf8b7086d7d3bb0286979213532 +Author: Andrew Mortensen +Date: Tue Apr 30 23:10:10 2013 -0400 - core/dns: dns SRV lookup, if no NAPTR available + modules/sca: track appearance times. - - Resolving the first most preferred and available SRV record if no NAPTR found. - It reuse the dns protocol preference scores. Sort protocols based on this preference. - -commit 7702ef8c2ec0fca97e11c621532bb9af3160dba7 -Author: Daniel-Constantin Mierla -Date: Thu Dec 20 12:25:15 2012 +0100 - - modules_s/db2_ldap: moved to modules folder + Include time of last state chance in sca.all_appearances output. -commit bebb0665ac795ea234e329a8a5b785ce5678da62 -Author: Daniel-Constantin Mierla -Date: Thu Dec 20 12:21:39 2012 +0100 +commit ac298442533c048e5ccacf6b3ad0cb36d52c2eff +Author: Andrew Mortensen +Date: Wed Apr 24 11:30:35 2013 -0400 - modules_s/db2_ops: moved to modules directory + modules/sca: add sca.subscription_count to rpc exports list. -commit bdb2368e5abd6dad0b203b67676701e515d59ae8 -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:23:50 2012 +0100 +commit 815d70e5156c2a878e59c59182ffa957f1d75a80 +Author: Andrew Mortensen +Date: Wed Apr 24 01:18:27 2013 -0400 - modules_s/uri: moved to obsolete list + modules/sca: RPC: fix sca.show_subscription, add sca.subscription_count - - use siputils module instead + - sca.subscription_count will eventually be subsumed by sca.stats. -commit e6a8bc85079389314f86cc4141cf827ecabeaf4a -Author: Olle E. Johansson -Date: Thu Dec 20 08:56:56 2012 +0100 +commit 2e0af20cd7a5b3e46ceb36ef3919df78c1bdf1df +Author: Andrew Mortensen +Date: Thu Apr 18 13:52:10 2013 -0400 - iptrtpproxy Documentation updates (SER => kamailio) + modules/sca: fall back to tag lookup if lookup by index fails. + + - Fix appearance tracking for SCA implementations with inconsistent + Call-Info header inclusion. -commit 5919b3b6c4078db7675c71d98f671feb58c68a2a -Author: Olle E. Johansson -Date: Thu Dec 20 08:46:24 2012 +0100 +commit a6f038343de57ca6bd257e442af41feae2b18c4d +Author: Andrew Mortensen +Date: Mon Apr 15 20:16:36 2013 -0400 - ctl Updating documentation + modules/sca: add SCA_DB_DEFAULT_FETCH_ROW_COUNT -commit 8b967b4b96765057bb0b8f62ee1dd5b04442b52d -Author: Olle E. Johansson -Date: Thu Dec 20 08:41:00 2012 +0100 +commit 562e49dc6e6fb9adb47adecbda8bfb94f12d86aa +Author: Andrew Mortensen +Date: Mon Apr 15 20:11:08 2013 -0400 - counters Updating documentation to "book" from "section" + modules/sca: use DB fetch queries when restoring subscribers from database. - Renaming files to avoid collission when aggregating documentation. + - Previously used standard query, exhausting pkg memory when subscriber + count is high. -commit 6fd7eb7440e864df872a56ad9b2076614c08222e -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:11:56 2012 +0100 +commit 92114b530e6a206af1fe173a948cb542a62717c2 +Author: Andrew Mortensen +Date: Mon Apr 15 20:09:01 2013 -0400 - modules_s/acc_syslog: moved to obsolete list - - - use acc module instead + modules/sca: only check if callee is SCA if callee_aor has a value. -commit 12e1b5eab148559d00ce4461a7126e227ab7ae33 -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:10:41 2012 +0100 +commit 1e9708462f0e709e795813490d56897d0f44997c +Author: Andrew Mortensen +Date: Mon Apr 15 17:17:05 2013 -0400 - modules_s/acc: moved to obsolete list + modules/sca: add check for empty AoR in lock_shared_appearance calls. - - use acc module instead + - Sanity checking -commit 7487c62ea79cdddb468f2090aeba39b1df0747cc -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:06:53 2012 +0100 +commit 6cdc9c4f3e915fbad5da1112b9e0553726e877f2 +Author: Andrew Mortensen +Date: Thu Apr 11 22:34:10 2013 -0400 - modules_s/uri_radius: moved to obsolete list + modules/sca: clear appearance on t_reply with error after receiving 18x. - - use misc_radius module instead + - Receiving a 18x provisional reply triggers line-seize subscription + termination. Releasing the seized appearance while processing a t_reply + with an error status *after* getting a 18x would fail because + sca_subscription_terminate could not find a matching line-seize + subscription. In that case, look up appearance by tags and release it. -commit 685f526aa6d5b171a6731cec5aa67a97e12da1fc -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:04:38 2012 +0100 +commit 28978be4d825e08a455387209af6dda4aa4bdfde +Author: Charles Chance +Date: Fri Oct 4 18:40:42 2013 +0100 - modules_s/auth_radius: moved to obsolete list - - - use the other module with the same name + dmq: fix memory leak in dmq_send_message() -commit 38d126621a09b3a149bcc10e3d07a176ba84068b -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:02:49 2012 +0100 +commit cf4275d4cb16dce4cbac48ca946a66e9f1626c35 +Author: Charles Chance +Date: Fri Oct 4 14:57:39 2013 +0100 - modules_s/avp_radius: moved to obsolete list - - - use misc_radius to fetch attributes per user from radous server + memcached: fix memory leak, discovered on a report by Dragos Oancea -commit d7e1ff882bcca3369edd74a7540cf252ef08760c -Author: Daniel-Constantin Mierla -Date: Wed Dec 19 21:01:11 2012 +0100 +commit 0f3a566dd699090cf6a558edc3aefac2c41e24e5 +Author: Henning Westerholt +Date: Fri Oct 4 14:47:06 2013 +0200 - modules_s/acc_radius: moved to obsolete list + memcached: comment clarification for wrapper for libmemcache callbacks -commit 51cba8039863a92a5050b6932bb8a9155edcf39b -Author: Alex Balashov -Date: Wed Dec 19 13:23:09 2012 -0500 +commit 0978c77d694cecd1b7813775a498f6495ae844dc +Author: Henning Westerholt +Date: Fri Oct 4 14:22:39 2013 +0200 - dialog(k): Fixed typo in loop in set_dlg_timeout_by_profile() so that - _all_ the dialogs actually get killed, not just the first one. + avpops: add a note to the docs that avp_db_query is deprecated and sqlops is better -commit 27e5fdc60110c4c89cee642317f5d92b7f0b734d +commit 673243a06200b8961756ebe3957bf9bd9059c2bb Author: Daniel-Constantin Mierla -Date: Wed Dec 19 12:52:13 2012 +0100 +Date: Fri Oct 4 13:11:23 2013 +0200 - kamailio-oob.cfg: new config file to collect more out-of-the-box use cases - - - the file can be used to add more complex routing logic and show how to - use various features of kamailio - - it should offload kamailio.cfg from getting too complex as a starting - point + nathelper: updated docs with udpping_from_path -commit f1449adfb91727112e2a44f406e7de63965595d6 -Author: Juha Heinanen -Date: Wed Dec 19 12:17:19 2012 +0200 +commit 565ba8d4b71ae5a43027c51e3caf06f20a10b14d +Author: Daniel-Constantin Mierla +Date: Fri Oct 4 13:07:44 2013 +0200 - modules/mediaproxy: README fix and edits + nathelper: new mod param - udpping_from_path - - AVPs are available in Kamailio reply routes without setting any tm param. + - enable sending UDP pings with raw sockets from Path address + - patch by Marcus Hunger -commit 70b3ea024d9eb42f974b4de37a555bcb384405e9 -Author: Peter Dunkley -Date: Wed Dec 19 01:48:17 2012 +0000 +commit 9bb88b5b22901b258fdbcd874264b823a8443869 +Author: Juha Heinanen +Date: Fri Oct 4 14:04:22 2013 +0300 - pkg/kamailio/fedora/17: Updated boxgrinder appliance + dialplan: improved debug messages so that used dpid is shown -commit c5b67ce5965d37c4851b6c33b9020cf88a4b85f3 +commit 88e2da3c54a1cef967d96a5753b1f7f014ba689e Author: Daniel-Constantin Mierla -Date: Tue Dec 18 23:29:21 2012 +0100 +Date: Fri Oct 4 12:14:25 2013 +0200 - modules_s/ldap: renamed to db2_ldap + acc: time_format parameter documentation - - it is a SRDBv2 API database driver + - eclosed exaples in dotted lines like in most modules to highlight them + on text output -commit 3e3b0350cd5408822cb7c35aa83d1c3e305a98c1 +commit df4fbc220efd333fa638831167dd4fe5e69a89a2 Author: Daniel-Constantin Mierla -Date: Tue Dec 18 23:23:38 2012 +0100 +Date: Fri Oct 4 12:02:32 2013 +0200 - modules_s/db_ops: renamed to db2_ops + acc: new parameter acc_time_format - - it implements only SRDBv2 API + - specify the format to print time as string for acc_time_mode=3 (using + localtime) and acc_time_mode=4 (using gmtime) + - default value is "%Y-%m-%d %H:%M:%S" -commit c38b4361c35ce4bf2abcc6b2480d76ca3029abfd +commit fed0a07d86c9e4d365cb7a5e25d4aaacb4b9adf2 Author: Daniel-Constantin Mierla -Date: Tue Dec 18 23:11:26 2012 +0100 +Date: Thu Oct 3 10:00:22 2013 +0200 - modules_s/oracle: moved to obsolete folder + dialog: fixed typos in log messages -commit d1bf22612ce24f20ba360a5f1077fa5ce3c1e27e +commit f12aa1b3c16b475029f0a3474b30f3b17ea18056 Author: Daniel-Constantin Mierla -Date: Tue Dec 18 23:05:10 2012 +0100 - - modules_s/bdb: moved to obsolete folder +Date: Thu Oct 3 09:58:04 2013 +0200 -commit 7f5d581b42139a16f6c3730ed9c54b1d36f6b58a -Author: Ovidiu Sas -Date: Mon Dec 17 15:17:28 2012 -0500 - - modules/db_cassandra: no need to link against kmi library - - no MI commands exported + dialog: decode alias parameter from contact address and use it as dst uri + + - makes dialog module to work with set_contact_alias() as first hop + after a nat router -commit 928dab69601e1bb56e3abbc81a1ed55d77e8b298 -Author: Ovidiu Sas -Date: Mon Dec 17 15:06:49 2012 -0500 +commit a41cb60d5171566e13f18b45f50d173f38d206c0 +Author: Daniel-Constantin Mierla +Date: Thu Oct 3 09:37:54 2013 +0200 - modules/db_flatstore: replace mi command flat_rotate with rpc command flatstore.k_rotate + nathelper: documentation for set_contact_alias() -commit 53b6903007caf13ea9543be6c545a4d9cd6d437f -Author: Olle E. Johansson -Date: Mon Dec 17 21:10:48 2012 +0100 +commit 58659b0cabb623c6420c186755c968b4550ff09c +Author: Daniel-Constantin Mierla +Date: Thu Oct 3 09:16:38 2013 +0200 - blst Update docbook XML to "book" from "section" + nathelper: set_contact_alias() new function for adding alias parameter to contact uri - Trying to standardize the documentation into one format + - similar to add_contact_alias(), but this works like + fix_nated_contact(), in the way that new contact uri is immediately + visible to other modules (e.g., dialog, presence) -commit 1f28ea63990f016a5828321f3514a029c5a2a18a -Author: Olle E. Johansson -Date: Mon Dec 17 20:58:57 2012 +0100 +commit 217f9fddbca31e06075132dd75a645d612d7af93 +Author: Daniel-Constantin Mierla +Date: Thu Oct 3 09:13:39 2013 +0200 - avp Modifying docbook to "book" + core: helper functions to add or restore alias parameter to an uri -commit 1e0ee74dae6da3a962f46f8d3305368c0754d56d -Author: Olle E. Johansson -Date: Mon Dec 17 20:56:25 2012 +0100 +commit 639ce584258f2c2ad4331bbd9ae2599a86edc80b +Author: Carlos Ruiz Diaz +Date: Thu Oct 3 11:56:13 2013 -0400 - auth_identity Moving to "book" + ims_charging: read diameter AVP MAC value dynamically from $avp + + - $avp(ro_mac_value) can be either present or not. In case it is not, default value is used + - $avp(cca_result_code) now supports interpolation -commit f3f279234622c18ab847fc5ff0e8473f3cd23fd4 -Merge: 52a9f00 5519cae -Author: Olle E. Johansson -Date: Mon Dec 17 20:52:34 2012 +0100 +commit 753e93d3ad1658c104963c208c4e36b23c1dd307 +Author: Robert Boisvert +Date: Thu Oct 3 09:22:54 2013 +0300 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/mohqueue: pull changes from upstream - Sorry. Sorry. + Merges up to upstream commit a3f679430d853d5b1b71ba92d8547ca2c86509ec. - * 'master' of ssh://git.sip-router.org/sip-router: - modules_k/drouting: documentation updates for mi -> rpc command migration + Changes in code: + * fixes RTP stop not being sent + * use pcbp->req instead of -> in rtp_destroy + * fixed uninitialized varbs + * use close_call () for no response on INVITE + * changed to return handled if reINVITE sent + * switched to using fixup_svpe functions + + Documentation: + * added comment about rtpproxy limit + * adjusted to remove hold sequence in transfer out -commit 52a9f00806de700f1b0288ea22b388a27ab707c0 -Author: Olle E. Johansson -Date: Mon Dec 17 20:52:03 2012 +0100 +commit 9978906d39071908234f0236ea8693844a3c5ba1 +Author: Charles Chance +Date: Thu Oct 3 05:59:09 2013 +0100 - auth: Converting to book docbook format + dmq: regenerated readme -commit 0d41e1ba82c22a6e62f997add0a266ef4b2ed0ed -Author: Olle E. Johansson -Date: Mon Dec 17 20:42:47 2012 +0100 +commit 3f6445f4620e3866dc859b9cfb6710e28bd407e5 +Author: Charles Chance +Date: Thu Oct 3 05:54:01 2013 +0100 - xprint: Change to docbook book, instead of section + dmq: add content-type header -commit 502675ecb60f6943ca4fa8480b057a4bfef9dc2b -Author: Olle E. Johansson -Date: Mon Dec 17 20:40:33 2012 +0100 +commit 127bf3d5be959a1287ae0fac91cf89e27ed01f42 +Author: Peter Dunkley +Date: Wed Oct 2 22:14:15 2013 +0100 - xmlrpc: Modify docbook format to book and add title + pkg/kamailio/centos: put core files in /tmp on CentOS -commit 5519caedc2ebcfb44a660bcd13e4033116e24f50 -Author: Ovidiu Sas -Date: Mon Dec 17 13:37:16 2012 -0500 +commit b2c5c598a38c770c2c4a7aef7c8267ad43fc6cd7 +Author: Juha Heinanen +Date: Wed Oct 2 20:39:22 2013 +0300 - modules_k/drouting: documentation updates for mi -> rpc command migration + modules/db_mysql: use autocommit var to start and stop transactions -commit d4733ab7e27be0cf472db7157dcdbe6390e269b6 -Author: Ovidiu Sas -Date: Mon Dec 17 13:04:42 2012 -0500 +commit f5aec1db89664ad3b1a5d20ac81da4acda7d1d92 +Author: Carsten Bock +Date: Wed Oct 2 17:21:11 2013 +0200 - drouting: mi commands migrated to rpc + ims_charging: docs: Fixed linebreaks in examples, regenerated README -commit 745e44e7555d0df789ecfae3b460650a43ecbf8c -Author: Ovidiu Sas -Date: Mon Dec 17 12:04:49 2012 -0500 +commit 6faf12653c1db9f011b1826061824c831bda3f58 +Author: Daniel-Constantin Mierla +Date: Wed Oct 2 16:43:35 2013 +0200 - module_k/db_text: making some error probes visible + memcached: use pv buffer to clone the memcache value in pv strucutre + + - avoid leak occured by usage of pkg_str_dup() + - reported by Dragos Oancea -commit b7f51d5d2b24063037ae18e82fb046b066cc52a0 -Author: Ovidiu Sas -Date: Mon Dec 17 12:03:11 2012 -0500 +commit 9909e05d46d0cdd22227b3b8c1b1d60253a135e2 +Author: Daniel-Constantin Mierla +Date: Wed Oct 2 16:43:12 2013 +0200 - modules_k/db_text: documentation updates for db_text.dump rpc command + memcached: use pkg-config if available for flags and libs in Makefile -commit 82a03cb5af01c1275bc9a1664643cf3645c4b87a -Author: Ovidiu Sas -Date: Mon Dec 17 12:01:49 2012 -0500 +commit 3f3c865ed04e1b0b8eb3762622662a76ce92b2e2 +Author: Daniel-Constantin Mierla +Date: Wed Oct 2 14:23:53 2013 +0200 - modules_k/db_text: new rpc command 'db_text.dump' - - allows forcing a write back to disk for modified tables + core: helper function to get source address as uri or proxy format -commit 5ece7e315ee8d3c3529eed94179fcb4e08d41c66 -Author: Richard Fuchs -Date: Mon Dec 17 11:56:24 2012 -0500 +commit 5db86a941a909c17a0f9ee1b04febbe4c60033bd +Author: Daniel-Constantin Mierla +Date: Wed Oct 2 14:15:18 2013 +0200 - parser/digest: use next_sibling_hdr() instead of hand-rolling it + core: skip dns srv for websocket after check if domain is ip + + - reported by Peter Dunkley -commit 624a9bbf777a1c1d44400eec78911a9714872977 -Author: Richard Fuchs -Date: Sun Dec 16 15:06:32 2012 -0500 +commit 49720ce99e72ded34c67a9ee4d17a9cedaf0a0f4 +Author: Hugh Waite +Date: Wed Oct 2 10:04:35 2013 +0100 - parser/digest: Fix hunting for Auth header in rare cases + xcap_server: Fix memory allocation check bug in xcap_misc - Fix a bug where find_credentials() would fail to find the correct - Auth header when multiple headers are present, the one being looked - for isn't the first and the full message had been parsed already. + - Would cause crash if out of package memory -commit 3cfaf089c1472f1397580a365360579c671c7796 -Author: Ovidiu Sas -Date: Fri Dec 14 13:55:39 2012 -0500 +commit 93af236644058b4e97162eae689f9b32b8076691 +Author: Timo Teräs +Date: Wed Oct 2 09:05:22 2013 +0300 - xhttp_pi: properly handle NULL values + mohqueue: new module + + module to queue up calls in music-on-hold and then retrieve them + + imported from https://github.com/rdboisvert/mohqueue + commit f796f259ed1728e19adb31d76af5f6c3f548f021 + + excluding LICENSE which is redundant now that the module is part + of the kamailio source tree. -commit ec617a27352ba719184cf617bb564631d5152df5 -Author: Ovidiu Sas -Date: Fri Dec 14 13:47:08 2012 -0500 +commit fd9fcd75c222b73a2b70793e5d79c7494f757a1e +Author: Peter Dunkley +Date: Wed Oct 2 01:30:37 2013 +0100 - xhttp_pi: fix query operation for db w/o fetch support (like db_text) + modules/auth_ephemeral: Added MI commands for shared secret management + + - Can add, remove, and display shared secrets with MI commands + - This means you can add/revoke secrets without a restart -commit 7fc74e46a5d5b4e2b0cbbe5bdc1627e672867164 -Author: Daniel-Constantin Mierla -Date: Fri Dec 14 00:43:04 2012 +0100 +commit 6c7a0f3cdaee5ea0300d014f07e4d68f45c6e20b +Author: Peter Dunkley +Date: Wed Oct 2 01:29:45 2013 +0100 - dialog(k): reset default value for optional parameter + modules/websocket: tidied up MI commands - - some rpc transports set a static string for missing optional - parameters, causing invalid value - - dlg.bridge_dlg proper handling of optional parameters return code + - Fixed leak in error situations + - Improved error responses -commit 840d23197e91c70f7b02072e144ec396f5f8f386 +commit 1c74725dc14fc40d9b553950e212241821351878 Author: Daniel-Constantin Mierla -Date: Fri Dec 14 00:20:08 2012 +0100 +Date: Tue Oct 1 23:18:07 2013 +0200 - dialog(k): fixed dlg.end_dlg rpc command - - - missing of the optional paramter causes negative return code + core: don't attempt srv lookup for proto ws or wss -commit c1fa174ddc4d499548bdc3d5f75e36125541ade9 +commit 2934e46a18d9cfba05e657bc1dbbaa559a31b103 Author: Daniel-Constantin Mierla -Date: Thu Dec 13 22:52:39 2012 +0100 +Date: Tue Oct 1 23:03:32 2013 +0200 - modules_s/exec: moved to obsolete directory + registrar: fix compile warning after previous patch -commit dab6e5b5af4d7b98553ee620d2f9114d17592c9a -Author: Andrew Mortensen -Date: Thu Dec 13 16:10:31 2012 -0500 +commit 6cfd13cbddd1869ffbc947fdecd77d18a3fcb886 +Author: Peter Dunkley +Date: Tue Oct 1 10:52:01 2013 +0100 - sca: fix regression omitting call-info NOTIFYs on INVITE 200 reply. + core: fix TCP connection leak - - Restore call-info NOTIFY with appearance-state=active when callee answers. - - Reported by Robert Boisvert. - -commit 7e8913d0a8a8f1865777615cdf53f71adfd94baa -Author: Peter Dunkley -Date: Thu Dec 13 17:48:16 2012 +0000 - - pkg/kamailio/(centos|fedora): Added xhttp_pi README to installation + - patch provided by Vitally Aleksandrov -commit 63b5065ccf776ce3bbc5b51f19f72041442467cb -Author: Henning Westerholt -Date: Thu Dec 13 17:47:57 2012 +0100 +commit b5b570f278124bf0456d43a36a7c0eb5eaa9efe6 +Author: Daniel-Constantin Mierla +Date: Tue Oct 1 09:34:17 2013 +0200 - xhttp_pi: add missing README + tm: added t_use_uac_headers() to documentation -commit 4509d6ce4160083959cd152887c47290a6753889 -Merge: 8997007 3198bec -Author: Peter Dunkley -Date: Thu Dec 13 16:43:15 2012 +0000 +commit 0e71fec1e108e1c9b97486ced8c1328738ca13c2 +Author: Daniel-Constantin Mierla +Date: Tue Oct 1 09:27:46 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + tm: new function t_use_uac_headers() - * 'master' of ssh://git.sip-router.org/sip-router: - modules/mediaproxy: restrict opening of dispatcher connection + - set internal flags to tell tm to use UAC side for building headers for + local generated requests (ACK, CANCEL) - useful when changing From/To + headers using other functions than uac_replace_[from|to]() -commit 8997007145ad777d9967589cefb1477843541efb -Author: Peter Dunkley -Date: Thu Dec 13 16:42:29 2012 +0000 +commit 5ac033cf85921b4c364d6d463bc75ebd22c5721a +Author: Peter Dunkley +Date: Mon Sep 30 23:38:56 2013 +0100 - pkg/kamailio/(centos|fedora): Updated kamailio.spec to install xhttp_pi framework examples + pkg/kamailio/centos: Added ims_charging module to .spec + + - Removed cdp package and put cdp and cdp_avp modules into ims package -commit 3198beccbc2ce350bb0af2a1cedec72ccb7c9277 -Author: Juha Heinanen -Date: Thu Dec 13 13:57:46 2012 +0200 +commit 576dce3cfdbf3cfa36fcac4f26aa3312f4add37a +Merge: 1c3e761 f96c7f5 +Author: Carsten Bock +Date: Mon Sep 30 22:38:42 2013 +0200 - modules/mediaproxy: restrict opening of dispatcher connection + ims_charging: New module for Diameter-Ro-Operations (IMS-Charging), Merge into Master - - restrict opening of dispatcher connection to sub-processes (patch - provided by Emil Kroymann) + Credits go to: + - Jason Penton (jason.penton@gmail.com) + - Carlos Ruiz Diaz (carlos@ng-voice.com) + + Merge branch 'ims_charging' -commit c837bba9f6808141e6d23daaecdea06fee39fa8a -Author: Peter Dunkley -Date: Thu Dec 13 11:58:34 2012 +0000 +commit f96c7f5a44e510dbc0e3483d98c8484a6a603c23 +Merge: 8b3d53b 792fc3c +Author: Carsten Bock +Date: Mon Sep 30 22:36:35 2013 +0200 - modules/websocket: Fixed resource leak and infinite loop in websocket module + Merge branch 'tmp/ims_charging' of ssh://git.sip-router.org/sip-router into ims_charging - - Can occur when TCP connections go away without the WebSocket being - closed properly. + Conflicts: + modules/ims_charging/README + modules/ims_charging/doc/ims_charging.xml + modules/ims_charging/doc/ims_charging_admin.xml + modules/ims_charging/mod.c -commit 4daf033f3a8e98834cef39d9a339a007f1e1f217 -Author: Juha Heinanen -Date: Thu Dec 13 07:56:51 2012 +0200 +commit 8b3d53b35f22c2de2203450af23dd8282ba8a7bc +Author: Carsten Bock +Date: Mon Sep 30 20:46:30 2013 +0200 + + ims_charging: Beautified XML-Doc for IMS-Charging + +commit 1200242cadb445988b7e582fe62a3662caf99586 +Author: Carlos Ruiz Diaz +Date: Mon Sep 30 14:40:54 2013 -0400 + + ims_charging: added some stats + + - billed_secs + - ccr_avg_response_time + - ccr_responses_time + - failed_final_ccrs + - failed_initial_ccrs + - failed_interim_ccr + - final_ccrs + - initial_ccrs + - interim_ccrs + - killed_calls + - successful_final_ccrs + - successful_initial_ccrs + - successful_interim_ccr + +commit 4a050987a20a7489f08d9b7e88566439a764d013 +Author: Carsten Bock +Date: Mon Sep 30 13:30:41 2013 +0200 - modules/tm: updated README on serial forking related vars and functions + ims_charging: Regenerated README after documentation update -commit ca450b4be77150ce23ce825d795d697b4dea808f -Author: Ovidiu Sas -Date: Wed Dec 12 17:33:56 2012 -0500 +commit a0bdd980634635ca00a3ce87ac0ea03070b2a6ea +Author: Carsten Bock +Date: Mon Sep 30 13:30:38 2013 +0200 - xhttp_pi: install framework samples + ims_charging: Fixed minor typos in ims_charging-documentation -commit c3c84162a96f6ff110c575d151543ec28b827752 -Author: Ovidiu Sas -Date: Wed Dec 12 17:10:01 2012 -0500 +commit e9c7039efe2df811ba6e09829e7b713e5a25a808 +Author: Carsten Bock +Date: Mon Sep 30 13:24:51 2013 +0200 - xhttp_pi: new target for makefile to generate framework templates + ims_charging: Regenerated README after documentation update -commit c976e9e0f360da6696eefdc5b39bf019b004d3f4 -Author: Ovidiu Sas -Date: Wed Dec 12 17:07:34 2012 -0500 +commit 46e1160be51d5c731fa1380f23d9d6dd0ca76f26 +Author: Carsten Bock +Date: Mon Sep 30 13:23:05 2013 +0200 - xhttp_pi: generate templates for all kamailio tables + ims_charging: Fixed minor typos in ims_charging-documentation -commit aa8e96f45c875b714336d121a3f89ba8e381030d -Author: Peter Dunkley -Date: Wed Dec 12 16:09:20 2012 +0000 +commit c689a44ad13b430ac425e0efd46badf4ad021950 +Author: Carsten Bock +Date: Mon Sep 30 13:21:04 2013 +0200 - pkg/kamailio/(centos|fedora): Updated .spec file - - - Added mangler module to build - - Tidied up make commands used to build and install + ims_charging: Fixed minor typos in ims_charging-documentation -commit 1c36a534096e6ba37395e2ce1676526a02d1dac3 -Merge: 8ec3068 2d53d99 -Author: Peter Dunkley -Date: Wed Dec 12 15:25:53 2012 +0000 +commit 5b3ef601025eeeda556b433b6257beaf88a7ee91 +Author: Carsten Bock +Date: Mon Sep 30 13:20:04 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router - - * 'master' of ssh://git.sip-router.org/sip-router: - modules/tm: forgot to commit new version of t_funcs.c + ims_charging: Fixed minor typos in ims_charging-documentation -commit 8ec30688617a260d478402e59ef465c69e8247d9 -Author: Peter Dunkley -Date: Wed Dec 12 15:24:38 2012 +0000 +commit ad7fb226901ca6ebc6119df0994054ba51100951 +Author: Carsten Bock +Date: Mon Sep 30 13:16:20 2013 +0200 - parser/sdp: Fixed double free - - - Found and fixed by Hugh Waite @ Crocodile RCS + ims_charging: Fixed minor typos in ims_charging-documentation -commit 2d53d99abcf9ae218fa547d572aee3f55dbba79b -Author: Juha Heinanen -Date: Wed Dec 12 17:03:42 2012 +0200 +commit b9c8f31cfba447326869c32c87cb728c04ec0e28 +Author: Carsten Bock +Date: Mon Sep 30 12:58:56 2013 +0200 - modules/tm: forgot to commit new version of t_funcs.c - - - reported by Peter Dunkley. + ims_charging: Documentation updates. -commit 9c7edfe9edc02ea8b62c40349262b035f0b21510 -Author: Juha Heinanen -Date: Wed Dec 12 16:59:12 2012 +0200 +commit 792fc3cbc1a1181a482659ea5743681f1a52b911 +Author: Carlos Ruiz Diaz +Date: Mon Sep 30 15:57:23 2013 -0400 - modules/tm: forgot to commit new version of t_funcs.h - - - reported by Peter Dunkley. + ims_charging: updated documentation -commit 74a9baf6fd2903efc874edc48dd99d6a11afc83b -Author: Juha Heinanen -Date: Wed Dec 12 16:11:50 2012 +0200 +commit 6fdc83ecd7fa5313635a0041e76498704b0c8225 +Author: Carsten Bock +Date: Mon Sep 30 20:46:30 2013 +0200 - modules/tm: added outbound support to t_load_contact()/t_next_contacts() - - - added new function t_next_contact_flows() - - readme not updated yet + Beautified XML-Doc for IMS-Charging -commit 89ac4ae40234e02d71f619c2f750ed34333c9d5d -Author: Juha Heinanen -Date: Wed Dec 12 16:10:34 2012 +0200 +commit ef073a82f81af6e51dff19dcadfe4a8cb760c07d +Author: Carlos Ruiz Diaz +Date: Mon Sep 30 14:40:54 2013 -0400 - modules_k/registrar: lookup now handles also instance and reg_id + ims_charging: added some stats + + - billed_secs + - ccr_avg_response_time + - ccr_responses_time + - failed_final_ccrs + - failed_initial_ccrs + - failed_interim_ccr + - final_ccrs + - initial_ccrs + - interim_ccrs + - killed_calls + - successful_final_ccrs + - successful_initial_ccrs + - successful_interim_ccr -commit 55e7820686cbfb6392e707e0ee4fae96b22670bb -Author: Juha Heinanen -Date: Wed Dec 12 16:06:52 2012 +0200 +commit 1c3e761fbd087ee578ce305d89f6b8ee4e9ab79d +Author: Daniel-Constantin Mierla +Date: Mon Sep 30 16:49:26 2013 +0200 - parser: added instance and reg_id fields to sip_msg_t + app_perl: use local buffer to print dynamic string in pv_sprintf() - - also added set_instance and reset_instance functions + - avoid pkg malloc for temporary need + - fix leak in case of fmt parse error, discovered on a report by Dragos + Oancea -commit dccf5ede42eaf2b2f030d8c5a730418ce0517ec2 +commit 0696e668d75be14922980dbc9f67aa91eaf688fd Author: Daniel-Constantin Mierla -Date: Wed Dec 12 11:08:45 2012 +0100 +Date: Mon Sep 30 15:54:44 2013 +0200 - core: added comments to xavps structures + registrar: simplified getting value for max_contacts xavp -commit bb1894ed7b868862402a63b858f52165d5deb463 +commit 308f2920df586065e0bf8ef02d7c77b1c94a4836 Author: Daniel-Constantin Mierla -Date: Tue Dec 11 22:39:01 2012 +0100 +Date: Mon Sep 30 15:49:10 2013 +0200 - modules_s/mangler: moved to common modules directory + registrar: option to take the socket from an xavp + + - child named "socket" of xavp named by xavp_cfg parameter -commit a4b0267cd57255a2f5c24bf466181e592841b6f7 +commit 89bd52a84d5e0d75572caff61346d0c3750c868a Author: Daniel-Constantin Mierla -Date: Tue Dec 11 22:36:14 2012 +0100 +Date: Mon Sep 30 15:47:30 2013 +0200 - modules_s/eval: unused module moved to obsolete directory + core: helper functions to get xavp child nodes - - use core config expressions + - one function to get the $xavp(rootname=>childname) in code + - wrappers for child node, child node with int value and child node with str value -commit 5028c86d306a3f9ccec6e46d1fcf5f6a03f1d6ee -Author: Elena-Ramona Modroiu -Date: Tue Dec 11 22:17:14 2012 +0100 +commit e266b01116513a4fcea5df1c761ef1981e17f8f8 +Author: Carsten Bock +Date: Mon Sep 30 13:30:41 2013 +0200 - modules_s/options: moved to obsolete/ folder + Regenerated README after documentation update -commit 47a9b7cf8b0d9f178f8905afc9434f0cd2d8f2f1 -Author: Elena-Ramona Modroiu -Date: Tue Dec 11 21:44:45 2012 +0100 +commit e98012e859ea6dd2c198d650f272d3e489758a22 +Author: Carsten Bock +Date: Mon Sep 30 13:30:38 2013 +0200 - modules_s/speeddial: moved to obsolete/ folder + Fixed minor typos in ims_charging-documentation -commit fc486d312ea11b6ff26c091e8649d9fe2228f931 -Author: Elena-Ramona Modroiu -Date: Tue Dec 11 21:30:41 2012 +0100 +commit 1265420b8b700eec9c96fd7752a5c3d528a51c32 +Author: Carsten Bock +Date: Mon Sep 30 13:24:51 2013 +0200 - modules_s/uac: moved to obsolete/ folder + Regenerated README after documentation update -commit cc9b6cad1130891c54b94b44bebb2b6cdf397b1a -Author: Konstantin Mosesov -Date: Tue Dec 11 16:29:30 2012 +0200 +commit bcdc27641fbec8176cea19fd4cefad1830a5c4db +Author: Carsten Bock +Date: Mon Sep 30 13:23:05 2013 +0200 - mod_python: Changed Loggers.py to use recent changes (python abstraction layers). + Fixed minor typos in ims_charging-documentation -commit 63f0618dd47975afafb7757fe9e156534f05d468 -Merge: 230919a 669dc7b -Author: Konstantin Mosesov -Date: Tue Dec 11 16:08:25 2012 +0200 +commit ba0299bd965de8d513d70151c11bf13c4ec11560 +Author: Carsten Bock +Date: Mon Sep 30 13:21:04 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + Fixed minor typos in ims_charging-documentation -commit 669dc7b72f76af715b2f34a0fbe64350202f8aff -Author: Daniel-Constantin Mierla -Date: Tue Dec 11 14:57:24 2012 +0100 +commit e8a054d0e684b8f73bd0733d7d00d5e6b5e9b23f +Author: Carsten Bock +Date: Mon Sep 30 13:20:04 2013 +0200 - modules_s/msilo: moved to obsolete folder + Fixed minor typos in ims_charging-documentation -commit 230919ad2e414f0c070a710cb85b3b2b3dfea741 -Author: Konstantin Mosesov -Date: Tue Dec 11 14:24:08 2012 +0200 +commit 364dc576f602db40e93f446443e278290609237b +Author: Carsten Bock +Date: Mon Sep 30 13:16:20 2013 +0200 - app_python: Moved all python scripts to 'python_examples' folder. - app_python: Applied a few recent patches for better stack trace. - app_python: Fixed a possible segfault on double free. - app_python: Added python abstraction layers Router.Core, Router.Ranks, Router.Logger. - app_python: Moved all logging stuff to layer Router.Logger, e.g., Router.Logger.LM_ERR(...). - app_python: Added 'ranks' constants and moved to Router.Ranks, e.g., Router.Ranks.PROC_MAIN. + Fixed minor typos in ims_charging-documentation -commit 5a3bc7a8f37a16f8194d117b7642ee532ee9e177 -Author: Olle E. Johansson -Date: Tue Dec 11 09:04:29 2012 +0100 +commit 4af2d9a46f1b7be273c079040989bd0d0c884feb +Author: Carsten Bock +Date: Mon Sep 30 12:58:56 2013 +0200 - debugger: Minor README edits + Documentation updates. -commit 27d02adf7bd3405cd67d2331ab7aa05b53d97c50 -Author: Andrew Mortensen -Date: Mon Dec 10 17:08:51 2012 -0500 +commit 3c7f8ba5e3febe4dc2c8eec003436492efefdf2d +Merge: 5ab44c7 b50888c +Author: Jason Penton +Date: Mon Sep 30 11:21:31 2013 +0200 + + Merge branch 'master' of ssh://git.sip-router.org/sip-router + +commit b50888cf447ea3a3315e665c97f71a07bb687337 +Author: Øyvind Kolbu +Date: Mon Sep 30 11:15:13 2013 +0200 - sca: ignore transport parameter in RURI when processing SUBSCRIBEs. + core: resolve down to A/AAAA records when no naptr records - - Fix AoR hash lookups when client subscribes over TCP, TLS or SCTP. - - Report from Robert Boisvert. + - try all protocols, not only UDP -commit 7a86ec5e7f9d4ef6a72da741b336c909109f3c88 -Author: Olle E. Johansson -Date: Mon Dec 10 13:55:13 2012 +0100 +commit 5ab44c7c2fc78038302bf455ff49e374fc79550b +Author: Jason Penton +Date: Mon Sep 30 11:14:54 2013 +0200 - ratelimit: Adding a reference to the pipelimit module in README + modules/tm: extended async usage + - enables resuming of tx in orginal route block tx was suspended, not only failure route + - dedicated lock to prevent multiple invocations of suspend on tz (reply lock used to be used) + - extra flag (T_ASYNC_CONTINUE) to mark a transaction that is being execute post suspend -commit 4ff67e61e5b94fd5c842cf94b71dd723d41e7bf1 -Author: Juha Heinanen -Date: Mon Dec 10 11:26:25 2012 +0200 +commit 6cdae87e29bc4c62651cf843ace680e9a6999d66 +Author: Peter Dunkley +Date: Sat Sep 28 00:30:50 2013 +0100 - modules_k/usrloc: added +sip.instance and reg-id to mi_usrloc_show_contact + pkg/kamailio/centos: updates to CentOS 6 build + + - Improved startup scripts + - Updated .spec + - README listing and explaining which Kamailio modules are not built for + CentOS -commit 4f8d9b589df0c40f88fb34658f3735a222b0f545 -Author: Peter Dunkley -Date: Sun Dec 9 20:01:55 2012 +0000 +commit 32e26c3e914366636e4dcc6e8872eea16740e090 +Author: Carlos Ruiz Diaz +Date: Fri Sep 27 16:05:17 2013 -0400 - pkg/kamailio/(centos|fedora): Updated .spec + ims_charging: added async support - - Changed rel to dev7 - - Moved xlog from modules_k to modules - - Added avp, sca, and xprint modules + - Ro_ccr is now called asynchronously and resumed on an external custom cfg route + - Interim and final CCR are now also async -commit a3ad00fea92f54aacf2425a0c2aaa9f78046d38e -Author: Elena-Ramona Modroiu -Date: Sat Dec 8 18:22:15 2012 +0100 +commit 257ca31bb89cb4cb74cad226998574469873bc3b +Author: Peter Dunkley +Date: Thu Sep 26 23:59:53 2013 +0100 - modules_s/pdt: moved the module to obsolete folder + pkg/kamailio/centos: updated .spec for CentOS 6 - - pdt(k) has support for multidomain + - Added gzcompress + - Updated rel to dev9 -commit bfa4d86a7a18b321a14b65c90d32c5aed32c10d3 -Author: Elena-Ramona Modroiu -Date: Sat Dec 8 14:20:43 2012 +0100 +commit ac5d846e2e472b1c097992bc2bdcfb58100c6eaa +Author: Peter Dunkley +Date: Thu Sep 26 23:27:31 2013 +0100 - pdt(k): added pdt.list command to dump memory structure via rpc + xhttp: cache the URL string when performing transformations so sequential transformations on the same string do not require a reparse. -commit 6904d8c80b2089d01a69c3c0217c76c8e0132bac -Author: Elena-Ramona Modroiu -Date: Sat Dec 8 14:19:30 2012 +0100 +commit 96c9a85b607e5c42ec0f0709a2807a60e7d5b1c4 +Author: Peter Dunkley +Date: Thu Sep 26 23:26:38 2013 +0100 - dispatcher(k): use the right pointer to rpc context + pv: tweaked {param.} transformation so that if the (optional) delimiter parameter is changed between runs the param string is reparsed -commit ad5cbdc7aa6156e072f0dd859421fc36b66227c0 -Author: Olle E. Johansson -Date: Sat Dec 8 18:19:43 2012 +0100 +commit ed23dbde621a4b60d35639d3c61284b658fb6ad1 +Author: Carsten Bock +Date: Thu Sep 26 20:21:11 2013 +0200 - ratelimit: Typo fixes, minor edits + Move assert_identity to ims_usrloc_pcscf as we may have more than one IMPI per Port/IP/Proto -commit 181561c7dc50c0c4e6ac84b53b33d8a5bc6dd053 -Author: Juha Heinanen -Date: Sat Dec 8 16:09:40 2012 +0200 +commit 78d25dd11a64f36c5372cff3fe5d8a65a0e13396 +Author: Daniel-Constantin Mierla +Date: Thu Sep 26 15:10:22 2013 +0200 - modules_s: migrated append_branch in cpl-c, exec, and registrar modules + db_mysql: unlock tables at the end of transaction if they were locked -commit e8210c30ef79a5a6f6fa88a2cb47bf29ca50bfe0 -Author: Juha Heinanen -Date: Sat Dec 8 16:00:34 2012 +0200 +commit 8e35cef8716bbd0caa406a5080e93acb3c881c41 +Author: Daniel-Constantin Mierla +Date: Thu Sep 26 13:23:46 2013 +0200 - modules_k/pv: fixed compilation error in define - - - removed extra ';' from km_append_branch define - - thanks to Daniel-Constantin Mierla for reporting + presence_xml: updated docs about integrated_xcap_server -commit 440bcec4b5694ac79cd8dfb134defd472e96c60e -Merge: 1cfa90d ca7b188 -Author: Olle E. Johansson -Date: Sat Dec 8 14:12:15 2012 +0100 +commit baa4fccc2870df102a66089d6e9b6ca1ff47fc25 +Author: Daniel-Constantin Mierla +Date: Thu Sep 26 12:59:59 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + mi_rpc: compatibility with libxmlrpc-c3 library on wheezy - Sorry, still can't fix this. Working on it. :-) - * 'master' of ssh://git.sip-router.org/sip-router: - core: restored USER_AGENT and SERVER_HDR defines + - patch by Muhammad Shahzad -commit 1cfa90d171a72ad5e2b224ae0d6f2eb92d3eeb55 -Author: Olle E. Johansson -Date: Sat Dec 8 14:10:48 2012 +0100 +commit 378bd71de3b035b497469f89a640931d0792ce4f +Author: Peter Dunkley +Date: Wed Sep 25 16:12:50 2013 +0100 - nathelper: add force_socket documentation (moved from rtpproxy module) - - The rtpproxy module did not have a force_socket parameter, but nathelper did. + xhttp: added transformation to break a URL into "path" and "querystring" -commit ca7b18825ed478b2d23a092f681939a233183003 -Author: Juha Heinanen -Date: Sat Dec 8 14:44:38 2012 +0200 +commit 454a28dad2fef3f1adaf0acec9a7f1c320fe6571 +Author: Peter Dunkley +Date: Wed Sep 25 16:11:57 2013 +0100 - core: restored USER_AGENT and SERVER_HDR defines + pv: updated param transformations so that you can (optionally) specify what the parameter delimiter is - - they were changed by accident by previous commit + - default behaviour unchanged + - this allows HTTP URL parameters to be decoded -commit 571e4e3fceeff5b4d32d1ac34649e9c4031d6543 -Author: Juha Heinanen -Date: Sat Dec 8 14:17:46 2012 +0200 +commit e0abe290c6ff287574e2abcadcc7a0f11197e268 +Author: Peter Dunkley +Date: Wed Sep 25 16:11:23 2013 +0100 - core and several modules: instance and reg_id in branch_t - - - added instance and reg_id fields to branch_t - - added instance and reg_id arguments to append_branch function - - modified append_branch calls in core and several modules - - did not touch obsolete or modules_s modules (which are to be - removed from next release) + core: updated parse_param so that the delimiter for parameters can be user-defined -commit 21b42fc14562758ac1dec5946a7b07a127054f47 -Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:28:40 2012 +0100 +commit b6b5b7bf5d08ad20cc00cf89ef3d2f03e913c882 +Author: Victor Seva +Date: Mon Sep 23 21:30:32 2013 +0200 - modules_s/dialog: moved to obsolete folder + avpops: refresh README -commit d560a18e44a9822fb1afa7f2047c82338838962e -Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:26:33 2012 +0100 +commit 3abb169001022567aa0be629677b9e445d1c3ca5 +Author: Victor Seva +Date: Sat Sep 21 11:26:45 2013 +0200 - modules_s/fifo: moved to obsolete + avpops: update avp_check documentation related to xavp vars as parameters -commit 46f2a4300c1d9d96057d239dda1dc24c7caaf4d8 -Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:25:49 2012 +0100 +commit dd049bad86eca2371b8f6ae1fd73656ff56e4e15 +Author: Victor Seva +Date: Sat Sep 21 10:49:57 2013 +0200 - modules_s/unixsock: moved to obsolete folder + avops: avp_check() xavp as first parameter -commit 04d77c20b80337019f71228dd0d9efe30d62db60 +commit 8a6a4f5d38ac693e7a79e0e761521375f3f5405b Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:17:11 2012 +0100 +Date: Mon Sep 23 20:06:20 2013 +0200 - modules_s/dispatcher: moved to obsolete folder + gzcompress: removed empty section in functions chapter + + - use deflate overall config example -commit f817987eb7f50de7f6d0666620c6bb7fb50462fd +commit 65783f24859f5da45678f2c8a005ca867cc02b86 Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:14:53 2012 +0100 +Date: Mon Sep 23 19:01:10 2013 +0200 - modules_s/osp: moved to obsolete folder + gzcompress: added a small usage example in docs -commit a40cea9f419b25aaeaabcd550ccf9106e9a029d7 +commit 3c65fd74f2473e857996ae1abf2d8fb8dcfaaaab Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:13:25 2012 +0100 +Date: Mon Sep 23 18:50:14 2013 +0200 - modules_s/xcap: moved to obsolete directory + gzcompress: readme updated to reflect default encoding value to deflate -commit 8d70ccaf18683c0d594a00e804f5f43df2f50b7d +commit d1263e418b7acbcc6ac798e25fc8bbcd8483fcec Author: Daniel-Constantin Mierla -Date: Fri Dec 7 23:08:11 2012 +0100 +Date: Mon Sep 23 18:49:06 2013 +0200 - presence_b2b: moved to obsolete directory + gzcompress: default encoding header value set to deflate + + - it is what UA use for this zlib compression algorithm -commit 860c45f34190b57adfade0539f807fb1134662f9 +commit adf32ec8b3e6329d1c75f158a11395a077fc54ea Author: Daniel-Constantin Mierla -Date: Fri Dec 7 22:56:24 2012 +0100 +Date: Mon Sep 23 18:42:54 2013 +0200 - modules_s/diversion: moved to obsolete + core: aliased http_reply_hack to http_reply_parse - - modules_k/diversion is including its features and some extra ones + - a more relevant name for the core parameter that enables parsing http + replies -commit a1c1fb0ab72a51fcfa9907e53e2b14cb79fdddc0 +commit d84a95b2dff1c373add8822ae7f1d9da495b5cd5 Author: Daniel-Constantin Mierla -Date: Fri Dec 7 22:53:21 2012 +0100 +Date: Mon Sep 23 18:41:51 2013 +0200 - modules_s/dbtext: moved to obsolete directory + gzcompress: enable compression for http messages - - not maintained, it does not compile + - tested replying with compressed body to an HTTP request from FireFox -commit 08c872ed6935396cd6ea87af52af6393987d6d7d -Author: Juha Heinanen -Date: Fri Dec 7 02:05:49 2012 +0200 +commit 33557b2de1631601be9b03447e3167d06e8ce1cb +Author: Daniel-Constantin Mierla +Date: Mon Sep 23 18:40:48 2013 +0200 - modules_k/registrar_k: added check that reg-id is not zero + parser: added macros to check if it is a SIP or HTTP reply -commit d684d1ac49f740d32df5f82add584aeb396e26a4 -Author: Juha Heinanen -Date: Fri Dec 7 01:33:52 2012 +0200 +commit bd716593efb83d4124c0c0cb824bf158d547ca0d +Author: Daniel-Constantin Mierla +Date: Sat Sep 21 00:10:43 2013 +0200 - modules_k/registrar: ignore reg-id if instance-id is not included + gzcompress: new module to compress/decompress SIP message body using zlib -commit 5d3e8b9ff526246a8abe768a1d970dce70658dbe -Author: Andrew Mortensen -Date: Wed Dec 5 16:59:50 2012 -0500 +commit dcfa15de586e28a025e34590e800571b0e3abddf +Author: Charles Chance +Date: Fri Sep 20 21:07:30 2013 +0100 - sca: update sample kamailio.cfg in README with small CANCEL fix. - - - Reported by Robert Boisvert + dmq: code cleanup, remove redundant includes -commit 86c499e249bf43571d1cebca08821d30bff12dad -Author: Andrew Mortensen -Date: Wed Dec 5 16:22:47 2012 -0500 +commit 4b53052e3c912c927927529cd98a05957e02ab18 +Author: Ovidiu Sas +Date: Thu Sep 19 09:19:16 2013 -0400 - sca: add missing braces for CANCEL handling in sample config. - - - t_check_trans() if-block for CANCEL had no braces, but needs them - after addition of route(SCA) before t_relay of CANCEL. - - Reported by Robert Boisvert + presence_conference: fix what it looks like a copy/paste error -commit 69dec26c718928f2cfc08bbae98658e145f8b04b -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 21:00:45 2012 +0100 +commit 1af47db737d8ca6fcfc43f4abb3d3768f5a8257c +Author: Ovidiu Sas +Date: Thu Sep 19 09:01:04 2013 -0400 - modules_s/textops: updated path to xprint module + pdb: fix warning dereferencing type-punned pointer will break strict-aliasing rules [-Wstrict-aliasing] -commit e722ab91eb90003741d236a9fecc6bbe954e21d3 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:59:27 2012 +0100 +commit 6592870dbd2b388b3884d85b9cc69e323f1d175a +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 15:00:14 2013 +0200 - modules_s/eval: updated path to xprint module + sl: use global variable for event route index for local response + + - rt should have been no longer used after previous commit + - reported by Ovidiu Sas -commit ff7bd782a6e5f4c18f15ac429af313b54be38936 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:55:17 2012 +0100 +commit 8ca99e58442becd4513bb03730806c37f86f0d8f +Author: Victor Seva +Date: Fri Sep 20 13:38:29 2013 +0200 - modules_s/db_ops: path to xprint module updated + pv: use pv_get_buffer on pv_core -commit 556c1e19ae5fd6139c6b0d7d3a5055d949583438 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:47:25 2012 +0100 +commit 039081166803f4be4226026e51f43ee9793876a3 +Author: Victor Seva +Date: Thu Sep 19 13:27:21 2013 +0200 - modules/avp_db: moved back to modules_s/ because it depends on local domain module + pv: get all values for second key for xavp -commit b17e84ad3e5f781b83b1a8a80572ea4d24835b56 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:37:39 2012 +0100 +commit 16f87ae1b1f78938ed56a7c9a336a2853022b86c +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 13:39:15 2013 +0200 - modules_s/avp_db: moved to modules/avp_db + sl: lookup event route for local response at startup + + - group lookup of sl event routes in one function -commit 171f3dcf4287b7104a47b75e125174c374a457d5 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:34:25 2012 +0100 +commit f8697d13be92a79bdfcfd6a824d5e312f7b0d9e0 +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 11:20:42 2013 +0200 - modules_s/avp: moved to modules/avp + Makefile.defs: version set to 4.1.0-dev9 -commit 66840add8c37c110a8d08674f6a5f42d75a40287 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:33:40 2012 +0100 +commit e35fe9c6095361414565b1099dea1ad5950fb38d +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 11:18:09 2013 +0200 - modules_s/xprint: moved to modules/xprint + registrar: note about empty value for received_param -commit 3d9ee6962f1ceeacbffd903064aa0779199f7ee6 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:32:29 2012 +0100 +commit 2f213e313a86e16665f6d0acfec959bf23f72b7d +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 11:15:16 2013 +0200 - modules_k/xlog: moved to modules/xlog + registrar: if rcv_parm value is empty, don't add received to contacts in 200ok reply + + - otherwise results in malformed value -commit d91d49a026aba9092e9feda1d561d03c32f37e6d -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:25:16 2012 +0100 +commit 664b2f30de6518636085d676a32247c7d46bd2da +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 11:09:15 2013 +0200 - modules_s/osp: internal occurences of xlog changed to xprint + registrar: list of allowed route blocks updated for save() -commit 1d76de2a046e0d978e0b0155008dbed75dfc1067 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:24:54 2012 +0100 +commit e2376e34fbabd929d0736bddb8e82ceb25cc3738 +Author: Daniel-Constantin Mierla +Date: Fri Sep 20 11:07:31 2013 +0200 - modules_s/ldap: internal occurences of xlog changed to xprint + registrar: relax usage of save() for failure route -commit c560c7a6d0eeba3231e9f7caa0b5135160f75efe -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:24:36 2012 +0100 +commit 0968ce561b3bb8ea2ad2c7c53c03091e8518a6fe +Author: Victor Seva +Date: Fri Sep 20 11:08:52 2013 +0200 - modules_s/timer: internal occurences of xlog changed to xprint + avpops: allow xavp semantics on second parameter -commit 7cf360fd63904e70441470f50164352b8867c9bd -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:24:21 2012 +0100 +commit df472fa9bdaa1a796dd220c99a64b1539c8854b5 +Author: Victor Seva +Date: Fri Sep 20 11:07:14 2013 +0200 - textops: internal occurences of xlog changed to xprint + pv: Move pv_xavp_name_t declaration to core pvar.h -commit 4c5c75ee46c38d47e01839eb6f1a8bc73441a507 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:24:02 2012 +0100 +commit 5acf191aee9d10b26b730df20d622e527c656db3 +Author: Ovidiu Sas +Date: Wed Sep 18 17:10:10 2013 -0400 - modules_s/permissions: internal occurences of xlog changed to xprint + xcap_client: fix what it seems to be an old copy/paste error -commit f74575e551672d4defd2d7d34ef29cf285bcf9ec -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:23:26 2012 +0100 +commit 11ea7e73f0b541c2759d89a125b69a23cecb9ba9 +Author: Ovidiu Sas +Date: Wed Sep 18 16:57:56 2013 -0400 - modules_s/eval: internal occurences of xlog changed to xprint + xcap_client: fix what it seems to be an old copy/paste error -commit 307a97dbd735e0a337b1019a6309c14e260f25c9 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:23:00 2012 +0100 +commit e45df83ddb68a90e91cc99fcdbb364f7b09ea541 +Author: Peter Dunkley +Date: Thu Sep 19 18:15:21 2013 +0100 - modules_s/avp_db: internal occurences of xlog changed to xprint + modules/auth_ephemeral: many improvements + + - Some general tidying up of the code + - Support for both draft-uberti-rtcweb-turn-rest format usernames + and the original format + - New non-digest authenticate function that can be used to authenticate + WebSocket handshakes (based on URL and Cookie: contents) - this means no SIP + level authentication is required for WebSocket traffic + - Check functions to verify that the From:/To: URIs match the user-string part + of ephemeral usernames + - Check function so you can re-check the timestamp (for example, when caching the + ephemeral username during WebSocket handshakes you may want to check it is still + valid when a SIP request arrives) -commit cf49d5daf9a29c44224472ae52bd7a6017cfbeee -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:22:25 2012 +0100 +commit f7fe8b68ffb100fbaa27344e4bee7ba69c760584 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:59:18 2013 +0200 - modules_s/db_ops: internal occurences of xlog changed to xprint + pkg: kamailio - provide -f $CFGFILE to init.d config check function + + - reported by Grant Bagdasarian -commit 6909bcae92e5f50fc247fd46eaf4b2b71d295c6b -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 20:21:39 2012 +0100 +commit 7730b5c3cf6b889f34de6004ce87341c746968ca +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:50:29 2013 +0200 - modules_s/avp: internal occurences of xlog changed to xprint + core: msg_ldata_t field is memset to 0 in the shm clone -commit 5144b151340da72272c0272bd0f45d0d4864173c -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:58:34 2012 +0100 +commit 859a322a1f664fcdd9563619fa0448be2911aa07 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:49:48 2013 +0200 - modules_s/xprint: more of xlog rename to xprint + outbound: updated access cached flow through local data structire in sip_msg_t -commit 948558abe33913fefd44d7601a14bac3d8594871 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:13:39 2012 +0100 +commit 4b99ad9e3bc364745d21eef11a392168eeb17077 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:49:17 2013 +0200 - modules_s/xprint: internal log messages updated to reflect module name + tm: reset local data structure for faked request after failure handlers -commit 5e2290c6625049ea42eaccc21c8686756f3a4156 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:11:31 2012 +0100 +commit 949e1f3c3e1f1afa02c696403399a093905c3f0a +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:45:43 2013 +0200 - modules_s/textops: bind to xprint API + parser: refactored a bit sip_msg_t struct for extra fields needed per process + + - a new structure to keep cached decoded flow for outbound, previously + was declared inline + - easier to reset it for shm clone and tm faked environment + - new fields that are needed inside the sip_msg_t but not cloned in shm, + must be added in the msg_ldata_t structure, accessible via ldv field -commit 1a1337be4b9f2612375488d072301f43ce71e91c -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:11:05 2012 +0100 +commit a3a8457e9bfe4dea48c0acd7421952014346a907 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:17:38 2013 +0200 - modules_s/eval: updated for xlog(s) to xprint rename + core: fix for warning dereferencing type-punned pointer will break strict-aliasing rules + + - related to timer list operation -commit 88b7ea9f926605c98676dd6b039965dff295d9c7 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:09:37 2012 +0100 +commit 10cc1dd7a3f4481c677022e7ff0da87f004077f0 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 15:12:29 2013 +0200 - modules_s/db_ops: use xprint module instead of xlog + parser: added note about new fields in sip_msg_t -commit ceb2d50ff29d8b9f95660e4b520f458bb74853e2 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:09:04 2012 +0100 +commit 659b920399ee2a75973c610f5dec4c6292903f67 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 13:25:41 2013 +0200 - modules_s/avp: switched to usage of xprint module + core: set to NULL the pointers to several sip msg fileds in cloned structure + + - instance, ruid and location_ua are reset to null for the clone in shm, + otherwise they point to pkg and the shm can be used from other + process, resulting in crash + - reported and credits for testing and troubleshooting to Alex Balashov -commit c26533bb2b7f06e72366f2d920dc1e63d3eb159f -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:03:25 2012 +0100 +commit cebbacc3167f0fd4a4f3fd96393b5cf85e13d861 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 13:24:57 2013 +0200 - modules_s/xprint: update defined value in header file + tm: faked request fields are freed using wrapper functions from core -commit 3a1625d021d9ee46ad7beeb49c9d5ae2c933f970 -Author: Elena-Ramona Modroiu -Date: Wed Dec 5 19:00:10 2012 +0100 +commit cae9659766c84e9451e4ea41e61bf85337c89693 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 13:23:53 2013 +0200 - modules_s/xlog: renamed to xprint + parser: use wrapper functions to reset fields in sip_msg_t - - the modules is used by other ser modules for evaluation of strings - with %spec specifiers - - for printing log messages, better use the xlog module from now on - - xlog/xdbg functions are now xplog/xpdbg + - used for freeing the structure -commit 6d0f635b0bbf338fca0ddc2c7d8e79bc686e5040 -Author: Andrew Mortensen -Date: Wed Dec 5 14:00:12 2012 -0500 +commit deb007275ae6444037e74c82a48fc879a0cc98ad +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 12:34:33 2013 +0200 - sca: modify SCA_STR_EMPTY macro to fix -Waddress compiler warnings. - - - Reported by Ovidiu Sas + parser: ppi/pai - fix warning dereferencing type-punned pointer will break strict-aliasing rules -commit c8772fc3eea75f5caad64770c6bbe6823ad7f1ef -Author: Ovidiu Sas -Date: Wed Dec 5 13:24:20 2012 -0500 +commit aa9f500c80cb5372c40f1eb7f18b4e33dcd6acf5 +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 12:27:35 2013 +0200 - modules_s/domain: remove unused variable + core: a bit of cleaning in sip_msg_t comments -commit 753d1d885d7c2f0e1a30df939455fcb4349a7506 -Author: Ovidiu Sas -Date: Wed Dec 5 13:17:23 2012 -0500 +commit 8bb61ea287ccf670ef9cfe990d319249eafbe7c5 +Author: Hugh Waite +Date: Wed Sep 18 21:58:12 2013 +0100 - modules_s/registrar: remove unused variable + modules/app_lua: Fix off-by-one error in modf + + - Fixes calling sr.modf with additional parameters -commit 96c39e3c31f416bbe42b434a8bbf3ece88a8ab52 -Author: Ovidiu Sas -Date: Wed Dec 5 13:12:02 2012 -0500 +commit 771e9093e343951e12f4875692e9ecc567a277a1 +Author: Hugh Waite +Date: Wed Sep 18 21:34:16 2013 +0100 - qos: remove unused variable + modules/sdpops: Check for valid sdp body in sdp_remove_line_by_prefix + + - Fixes crash when used on requests with no body -commit 263aae0a48f3a92a0e8c0ce43a7d6f610ea8a239 -Merge: 8b73129 e819eaa -Author: Peter Dunkley -Date: Wed Dec 5 15:13:48 2012 +0000 +commit b9c6e70871085e63add429984eac8ee7afc9e49e +Author: Daniel-Constantin Mierla +Date: Thu Sep 19 00:09:55 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + README: updated version number - * 'master' of ssh://git.sip-router.org/sip-router: (268 commits) - xcap_client: fix cross-compilation - utils: fix libcurl dependency - core: print debug message instead of info message when trying to resolve something that is not domain name. - Makefile: adding xhttp_pi to the list of excluded modules (depends on libxml2) - xhttp_pi: fix installation of the pi_framework.xml file - sca: fix DB updates - sca: sca_subscription_print now logs at debug level - tls: fix cross-compilation - Makefile: fixed the option of setting some variables from command line - Makefile.defs: version set to 3.4.0-dev7 - Makefile: default FLAVOUR set to kamailio - sca: more cleanup of SCA example kamailio.cfg - sca: include sample kamailio.cfg in docs, update function examples - sca: move working example SCA kamailio.cfg to doc subdirectory - app_python: better printing stacktrace - app_lua: fix cross-compilation - app_python: expand log facilities - sca: remove public IP from example cfg - sca: add working example kamailio.cfg - carrierroute: fix cross-compilation - ... + - bits of formatting for ToC -commit e819eaa0b0be61b3a818422c0ced244b5250295c -Author: Ovidiu Sas -Date: Wed Dec 5 09:23:45 2012 -0500 +commit 89969601d66422fd4dab50b0bb303bb17465c193 +Author: Daniel-Constantin Mierla +Date: Wed Sep 18 22:23:41 2013 +0200 - xcap_client: fix cross-compilation + pua_reginfo: documented the parameter for reginfo_handle_notify() + + - reported in FS#340 -commit a1e462c1695013d3c74e1c1ec443df7697bb6607 -Author: Ovidiu Sas -Date: Wed Dec 5 09:16:15 2012 -0500 +commit 9ee44c6079c8d30138ece619295974e17993aa04 +Author: Daniel-Constantin Mierla +Date: Wed Sep 18 22:17:55 2013 +0200 - utils: fix libcurl dependency + pua_reginfo: add ruid for location records + + - patch by Wonbin Cho, FS#339 -commit 87456bae50b55501c25f33a6728f4469639e0599 -Author: Juha Heinanen -Date: Wed Dec 5 10:26:29 2012 +0200 +commit ed6884e854cdae63c4f62871a32bdcdcddb8853e +Author: Daniel-Constantin Mierla +Date: Wed Sep 18 22:02:04 2013 +0200 - core: print debug message instead of info message when trying to resolve - something that is not domain name. + pua_reginfo: unlock udomain only when aor is set + + - patch by Wonbin Cho, FS#338 -commit 205e8545dca12bebf742b23eba592d2713623a66 -Author: Ovidiu Sas -Date: Tue Dec 4 17:03:15 2012 -0500 +commit 3bc87f139bc9635e23a4e92b03d24e00b97706dd +Author: Carlos Ruiz Diaz +Date: Wed Sep 18 13:39:23 2013 -0400 - Makefile: adding xhttp_pi to the list of excluded modules (depends on libxml2) + ims_registrar_scscf: fixed bug caused by uninitialized global variable + + - "rerrno" variable was not initialized and caused corruption in transaction states -commit 7a63bbed0ccc1a2a85b26d127e775f832efaa2a7 +commit 96e760147469a385a0b5512f74afcff8f56cafd1 Author: Ovidiu Sas -Date: Tue Dec 4 16:18:12 2012 -0500 +Date: Tue Sep 17 09:24:51 2013 -0400 - xhttp_pi: fix installation of the pi_framework.xml file + dispatcher: fix mi/rpc reload command -commit 5871982d3c76a4b42cd05e4b8dfb0e6128acb799 -Author: Andrew Mortensen -Date: Tue Dec 4 17:04:11 2012 -0500 +commit 5e775ff328b73b816e61a0a4718b194591a98251 +Author: Victor Seva +Date: Wed Sep 18 14:15:17 2013 +0200 - sca: fix DB updates - - - if a subscription were updated before being inserted into the DB, the - next DB sync call would incorrectly try to UPDATE instead of INSERT. - - no effect on SCA functionality, but subscriptions are no longer lost - across restarts. + avops: use pv_cache_get instead of pv_parse_spec. -commit a289c6167f39f14af85d78392a8bef91da81d858 -Author: Andrew Mortensen -Date: Tue Dec 4 16:47:39 2012 -0500 +commit 519de2cdd1ed7fb969d3bb2cf5792d4180078cbb +Author: Juha Heinanen +Date: Wed Sep 18 08:18:33 2013 +0300 - sca: sca_subscription_print now logs at debug level + modules/lcr: fixed checking of IPv4 address in to_any_gw_2 function - - previously logged at info level for every incoming SUBSCRIBE. - -commit 389bbe3410018e6d58befb486f0db2ec4ff7ece6 -Author: Ovidiu Sas -Date: Tue Dec 4 15:58:03 2012 -0500 - - tls: fix cross-compilation + - Patch was provided by Reinier Boon. -commit e5dbe686bcbf15ac59ebbcb84f3bb9b17568c030 +commit af8923703276bb41ea269cc19a7812fea325a250 Author: Daniel-Constantin Mierla -Date: Tue Dec 4 21:59:16 2012 +0100 +Date: Tue Sep 17 15:00:37 2013 +0200 - Makefile: fixed the option of setting some variables from command line + debugger: reset_msgid parameter was in functions sections - - resulted in mixing names for config files - - issue added in previous commit - - reported by Ovidiu Sas + - added some section ids -commit 94dde4a5b0f146914d124367ef73c5940cbb7d97 +commit 2710177c2673034d3f026dfa79432e986b8c3a90 Author: Daniel-Constantin Mierla -Date: Tue Dec 4 10:48:23 2012 +0100 +Date: Tue Sep 17 14:55:07 2013 +0200 - Makefile.defs: version set to 3.4.0-dev7 + debugger: documentation for cfgpkgcheck parameter -commit 4af2262b88918c316ee3bb9b45a716504f2f8db4 +commit d1e456b251602e1336e4dbede1e9f8b5d1c19415 Author: Daniel-Constantin Mierla -Date: Tue Dec 4 10:28:03 2012 +0100 +Date: Tue Sep 17 14:47:49 2013 +0200 - Makefile: default FLAVOUR set to kamailio - - - switching to the flavour with packages and docs + debugger: new parameter cfgpkgcheck to do pkg memory check before each action -commit b8007d985660b4df5ea9d5ea4347adf65b7f90fa -Author: Andrew Mortensen -Date: Mon Dec 3 23:59:50 2012 -0500 +commit af7c3a816529cde599af9a62bfd174b2de3a2fb6 +Author: Ovidiu Sas +Date: Sun Sep 15 18:10:06 2013 -0400 - sca: more cleanup of SCA example kamailio.cfg - - - remove unused xhttp event route + xmlrpc: fix warning: âc.lenâay be used uninitialized in this function [-Wmaybe-uninitialized] -commit a635a80df762e13373ad59a6d746530c2163c2a6 -Author: Andrew Mortensen -Date: Mon Dec 3 23:59:51 2012 -0500 +commit 78a1c7e972b66c882e9466404d1cb6c08982eb91 +Author: Ovidiu Sas +Date: Sun Sep 15 18:06:18 2013 -0400 - sca: include sample kamailio.cfg in docs, update function examples + ipops: fix warning: variable âtâet but not used [-Wunused-but-set-variable] -commit 0a2fc3f7490088b02861d9dace0f039ceab54af7 -Author: Andrew Mortensen -Date: Mon Dec 3 23:59:49 2012 -0500 +commit aa15067b8a1f44d57551f646acd5058c08abe41f +Author: Mikko Lehto +Date: Sun Sep 15 16:55:04 2013 -0400 - sca: move working example SCA kamailio.cfg to doc subdirectory - - - will also be included in README and xml docs for convenience. + rtpproxy(-ng): patch: has_sdp() does not exist -commit 97fe5fec90999491d455b10b1fea7529e786719b -Author: Konstantin M -Date: Mon Dec 3 22:35:21 2012 -0500 +commit d1219dc0d0c5e2eab0672a439aa7ce6486c31ba3 +Author: Ovidiu Sas +Date: Sun Sep 15 16:38:34 2013 -0400 - app_python: better printing stacktrace + xhttp_pi: fix crash when checking bad configs -commit d41c9a91afdd7a5a2c5e689f3302211c6bbeffb6 -Author: Ovidiu Sas -Date: Mon Dec 3 18:39:19 2012 -0500 +commit a68e48bc3c322be79a608d91f40d10329c2e9664 +Author: Daniel-Constantin Mierla +Date: Mon Sep 16 20:31:44 2013 +0200 - app_lua: fix cross-compilation + corex: new pv $cfg(key) - return attributes for config file + + - $cfg(line) - the line of the current action. + - $cfg(name) - the name of the current conf file + + Example of usage: + + append_to_reply("P-Cfg-Line: $cfg(line)\r\n"); -commit acbeda46ac94e6c5c215a03bd803e10b2c7540db -Author: Konstantin M -Date: Mon Dec 3 18:26:36 2012 -0500 +commit ca568ee6996cc93e8518f277cf34111bc0c78299 +Author: Daniel-Constantin Mierla +Date: Mon Sep 16 09:53:15 2013 +0200 - app_python: expand log facilities + core: added wrapper functions to return cfg line and name for current action -commit 5b63e94e49feb0a35b093a5eb3a86c9e5c1a0ba7 -Author: Andrew Mortensen -Date: Mon Dec 3 17:15:47 2012 -0500 +commit 4294b7bf3b67f1405869e865c171e268e60d5ee7 +Author: Daniel-Constantin Mierla +Date: Sun Sep 15 22:35:38 2013 +0200 - sca: remove public IP from example cfg + core: store current executed cfg action in a global variable + + - can be retrieved by module to access name of config file and the line -commit c40883a7aa96a1a7fab1060bf9dfab2987971c89 -Author: Andrew Mortensen -Date: Mon Dec 3 17:14:14 2012 -0500 +commit e63af00eaa92eed106356cbb1dd6afd8b09f3e69 +Author: Charles Chance +Date: Sun Sep 15 23:38:56 2013 +0100 - sca: add working example kamailio.cfg + dmq: added dmq_load_api to exported functions -commit f9c0980c4f85d8b728eb36e6b5768173750c6964 -Author: Ovidiu Sas -Date: Mon Dec 3 12:55:25 2012 -0500 +commit 923d09f0c1ece04c8d3c2755b5b201b3a2cd2deb +Author: Charles Chance +Date: Sun Sep 15 23:38:45 2013 +0100 - carrierroute: fix cross-compilation + dmq: regenerated readme -commit 175934a802cf863f26f84f9e11a2eec4606ecfd1 -Author: Ovidiu Sas -Date: Mon Dec 3 08:43:01 2012 -0500 +commit b44f00adbf57cb4306a0dcde7a8a1425afe40a8f +Author: Charles Chance +Date: Sun Sep 15 23:38:30 2013 +0100 - db_postgres: fix cross-compilation + dmq: updated documentation -commit e09b92893fd35baf672541143951337b103bb65b -Author: Olle E. Johansson -Date: Mon Dec 3 08:10:34 2012 +0100 +commit 102074ce6085f963ac03dcb087e1c00941c0337d +Author: Daniel-Constantin Mierla +Date: Sat Sep 14 09:46:50 2013 +0200 - mqueue: README update + tm: readme regenerated -commit c29773967e83c4b3977b76a43805dd622bc018a9 -Author: Olle E. Johansson -Date: Mon Dec 3 08:06:27 2012 +0100 +commit f328b864418020b1e166b13804fe173110500d75 +Author: Daniel-Constantin Mierla +Date: Sat Sep 14 09:46:23 2013 +0200 - mqueue: minor edits to README + tm: added missing documentation for t_check_status() -commit 287c02de1491019fbf085742b82fc7040ea72886 -Author: Olle E. Johansson -Date: Mon Dec 3 08:01:06 2012 +0100 +commit 6a51d9e87ac2e51a3c0473e11b3347739ec33dd8 +Author: Daniel-Constantin Mierla +Date: Fri Sep 13 13:47:00 2013 +0200 - corex: minor documentation edits + textops: free result of subst transformation when is larger than target buffer -commit 6a45c8eba310afa9b8173c0522d77e7a574ddc52 -Author: Konstantin M -Date: Sun Dec 2 22:21:05 2012 -0500 +commit 56d02f02627bb1d2eca7befaaefbed17ced1f52f +Author: Daniel-Constantin Mierla +Date: Fri Sep 13 11:08:48 2013 +0200 - app_python: fix compiler warnings - - patch provided by "Konstantin M " + usrloc: fixed xml tags and regenerated readme -commit 10fc575cc383093953d71c69e8d9a0065f33bdfe -Author: Ovidiu Sas -Date: Sun Dec 2 16:00:17 2012 -0500 +commit 605360798fbad43cbd3ef1aca3ae76cd9c95c50f +Author: Vitaliy Aleksandrov +Date: Fri Sep 13 11:05:07 2013 +0200 - lcr: fix cross-compilation + usrloc: update connection id for registration refresh -commit 291df73af6f35526e4c43c1c7d8b8ea15e93aa64 -Merge: 9b67242 e1faa05 -Author: Olle E. Johansson -Date: Sun Dec 2 21:27:22 2012 +0100 +commit f3190358e02141c98304c4c0019bba95490da32c +Author: Peter Dunkley +Date: Thu Sep 12 22:54:35 2013 +0100 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + pkg/kamailio/centos: moved stun from it's own RPM to the main RPM - * 'master' of ssh://git.sip-router.org/sip-router: - xcap_server: fix cross-compilation - regex: fix cross-compilation - pua_xmpp: fix cross-compilation - pua_usrloc: fix cross-compilation - pua_reginfo: fix cross-compilation - pua_dialoginfo: fix cross-compilation - pua_bla: fix cross-compilation - pua: fix cross-compilation - presence_xml: fix cross-compilation - presence_reginfo: no need to link against libxml2 - -commit 9b67242978cb6aab702ccf4715e9152ac8f719c8 -Author: Olle E. Johansson -Date: Sun Dec 2 21:26:54 2012 +0100 + - stun no longer has external dependencies and doesn't need to be in its own + RPM + +commit 291d6ece47d164d64487c8545de87c64fdc31718 +Author: Peter Dunkley +Date: Thu Sep 12 22:41:37 2013 +0100 - auth: README update + Makefiles: moved stun to the standard module group now that it has no external dependencies -commit 25600feab7d5d3b30420a05fd4c899f0bbbff667 -Author: Olle E. Johansson -Date: Sun Dec 2 21:24:13 2012 +0100 +commit 42722f3e70d3316b7c6881907b626b02303d58a6 +Author: Peter Dunkley +Date: Thu Sep 12 16:36:28 2013 +0100 - auth: Documentation corrections + modules/stun: removed dependency on OpenSSL -commit e1faa0591c05482be95eb81016c37b9a5be57d14 -Author: Ovidiu Sas -Date: Sun Dec 2 15:09:24 2012 -0500 +commit 0d0c4cc11022a62edfcf5041b36fe4cf5ca95a4d +Merge: 5651be2 6cea922 +Author: Carsten Bock +Date: Thu Sep 12 17:16:09 2013 +0200 - xcap_server: fix cross-compilation + Added support for HTTP-Post to utils: http_query + + Merge branch 'carstenbock/utils_post' -commit 50f4cd86ccebab713c2b9895cdffbd619e84955e -Author: Ovidiu Sas -Date: Sun Dec 2 15:07:28 2012 -0500 +commit 5651be2fa5a5d923a89aa70a050d23bcbfda9c38 +Author: Peter Dunkley +Date: Wed Sep 11 13:09:31 2013 +0100 - regex: fix cross-compilation + pkg/kamailio/centos: CentOS build updates + + - CentOS .spec is now separate from Fedora .spec. This is because I no + longer have a Fedora system to test/maintain this on. Old .spec with + Fedora support is in pkg/kamailio/fedora and can be taken on by + someone else if needed. + - Updated rel in .spec to dev8 -commit beb3425e309b0f7d1b2bccee942c35f541a2dd7d -Author: Ovidiu Sas -Date: Sun Dec 2 14:53:44 2012 -0500 +commit 0f7bc9da0d132720531f3176ee216466f5877146 +Author: Peter Dunkley +Date: Wed Sep 11 11:30:50 2013 +0100 - pua_xmpp: fix cross-compilation + core: Raspberry-pi builds now work without needing to specify extra flags -commit c9d7fc58a19afdeb77fb3b496068d3f79ef95c67 -Author: Ovidiu Sas -Date: Sun Dec 2 14:52:16 2012 -0500 +commit 6f17209a70e84d91976ea42b476ae248b9b37501 +Author: Daniel-Constantin Mierla +Date: Tue Sep 10 14:14:52 2013 +0200 - pua_usrloc: fix cross-compilation + kamdbctl: added missing dbuid tables group creation + + - patch by elactrum [at] jamailca.com -commit e5a49d909d582fe601cabbccf4f9ce2efa814414 -Author: Ovidiu Sas -Date: Sun Dec 2 14:47:33 2012 -0500 +commit abf0026782c0ba4643feb25ded022e8c12725584 +Author: Victor Seva +Date: Mon Sep 9 16:52:47 2013 +0200 - pua_reginfo: fix cross-compilation + uac_redirect: get_redirect() check reason value before using it. + + This fix a core dump when get_redirects() config fuction is called with just + the one parameter. -commit 417c7d9f4ba5e709e8bf65aa413584ad2bcae277 -Author: Ovidiu Sas -Date: Sun Dec 2 14:44:52 2012 -0500 +commit 774752e4d12bd03f01362af55a5e422eade690b2 +Author: Carsten Bock +Date: Thu Sep 5 19:10:15 2013 +0200 - pua_dialoginfo: fix cross-compilation + Another Fix for the ims_charging Module: + - Use P-Asserted-Identity instead of From-Header + + fixed by Carlos Ruiz Díaz (carlos@ng-voice.com) -commit d4f5465efae12c0ef66cb519ece3b3558b10ea5f -Author: Ovidiu Sas -Date: Sun Dec 2 14:42:19 2012 -0500 +commit 6dc04484e39ceab4887b375d2510f35892d695eb +Author: Daniel-Constantin Mierla +Date: Thu Sep 5 11:54:03 2013 +0200 - pua_bla: fix cross-compilation + acc: for time_mode=1, save timestamp in time_attr and microsecs in time_exten + + - database records stores time as datetime value + - new parameter time_exten to allow customization of attribute name -commit 528d518494c73883fd77acd8e438bb16d2de5d3e -Author: Ovidiu Sas -Date: Sun Dec 2 14:38:42 2012 -0500 +commit 367a0e72be1d5e5de0fa84ca2a8d11f7d5b54abe +Author: Daniel-Constantin Mierla +Date: Thu Sep 5 11:08:17 2013 +0200 - pua: fix cross-compilation + acc: fixed c&p typo of parameter name in docs -commit d749894cae84112b4ffcc47d385d877961787a46 -Author: Ovidiu Sas -Date: Sun Dec 2 14:35:15 2012 -0500 +commit a722cee262664162f183e00788c2d53c4c98b217 +Author: Daniel-Constantin Mierla +Date: Thu Sep 5 10:04:57 2013 +0200 - presence_xml: fix cross-compilation + kamctl: added scripts to define table acc_cdrs -commit 8a5164c47ac85e87dd092eb2ac56c0161759861c -Author: Ovidiu Sas -Date: Sun Dec 2 13:56:36 2012 -0500 +commit b91f07fce16f5feb0c31f7af59ab9351e274221f +Author: Daniel-Constantin Mierla +Date: Thu Sep 5 10:04:14 2013 +0200 - presence_reginfo: no need to link against libxml2 + lib/srdb1: added id for definition of column start_time in acc_cdrs table -commit 3aa1929ac18d747b24a14b6e9f6decbf7ed1a137 -Author: Ovidiu Sas -Date: Sat Dec 1 23:27:44 2012 -0500 +commit dd3c6f19c18cf0c2844f2b2ce155e3f5d7af447a +Author: Daniel-Constantin Mierla +Date: Thu Sep 5 10:02:01 2013 +0200 - presence_conference: fix cross-compilation + lib/srdb1: initial db schema for acc_cdrs table -commit b19700f17de38e1bffd93bbbd897044e0c696d40 -Author: Ovidiu Sas -Date: Sat Dec 1 23:25:50 2012 -0500 +commit 9b44e4b48862947f2ea634c6dd611ce7c07546a2 +Author: Daniel-Constantin Mierla +Date: Wed Sep 4 22:59:13 2013 +0200 - presence_dialoginfo: fix cross-compilation + registrar: reset r-uri pointer after backup in lookup_branches() + + - otherwise can be invalidated by next branch lookup -commit 46ce25ceda08916a355328682768699b6cff4d36 -Author: Ovidiu Sas -Date: Sat Dec 1 23:24:06 2012 -0500 +commit 37e63951b2b05875f07a1d30b8352e3f10a99072 +Author: Carsten Bock +Date: Wed Sep 4 18:20:20 2013 +0200 - presence: fix cross-compilation + Bug-Fixes: + - Use P-Asserted-Identity instead of From-Header as User in CCR + - Store RURI in the ro_session structure (it may have been changed by an Application-Server) + + Fixed by: Carlos Ruiz Díaz (carlos@ng-voice.com) -commit 5ffd8eda41567f12c7224d68e32a1a20779d22a6 -Author: Ovidiu Sas -Date: Sat Dec 1 23:21:44 2012 -0500 +commit 96c85efbc40a6d0571e8122cbad30410d2274b24 +Author: Carsten Bock +Date: Wed Sep 4 14:27:47 2013 +0200 - rls: fix cross-compilation + Initial structure for the docs of the IMS-Charging module (incomplete) -commit 58bfbd3259587b29b7b509a360aa889924dec8de -Author: Ovidiu Sas -Date: Sat Dec 1 23:18:47 2012 -0500 +commit 20399521b7df9e808f0999275132cc5460a0104b +Author: Carsten Bock +Date: Wed Sep 4 14:00:01 2013 +0200 - cpl-c: fix cross-compilation + add IMS-Charging to Makefile.groups -commit bc9dca0a9d05915a0f4634b7014b26958e81e21b -Author: Ovidiu Sas -Date: Sat Dec 1 16:59:56 2012 -0500 +commit 29cb7be4445995f73e9f425d99c9c5ee818c92de +Author: Hugh Waite +Date: Wed Sep 4 12:04:18 2013 +0100 - db_mysql: fix cross-compilation + modules/rtpproxy-ng: Allow PV in second rtpproxy_manage parameter + + - Incorrect fixup function caused a crash when the second parameter was given -commit c31fd10ee20ff09115ae745792db4a0e03eb9e07 -Author: Ovidiu Sas -Date: Sat Dec 1 16:54:38 2012 -0500 +commit 362d374a61953aee3cf9f96eadaef63c5f22763e +Author: Daniel-Constantin Mierla +Date: Wed Sep 4 13:04:23 2013 +0200 - cdp: un-used variable commented out + topoh: safety check for missing To header + + - based on a patch by Michel de Weerd, FS#303 -commit 8321d1fadb50017b52bcfebd1857982a60915dfe -Author: Ovidiu Sas -Date: Sat Dec 1 16:52:19 2012 -0500 +commit acbbae2af3cb2ad1a5b07a7305c5f9761bc78389 +Author: Jason Penton +Date: Wed Sep 4 12:52:16 2013 +0200 - cdp: fix cross-compilation + modules/ims_charging: new module for IMS charging + - currently supports Ro interface -commit e45d706ba82ff9a36602cc7c2a28a55502abf99f -Author: Ovidiu Sas -Date: Sat Dec 1 16:46:10 2012 -0500 +commit 7abd496560c6274680d451f49355ad1f6a14a6a7 +Author: Daniel-Constantin Mierla +Date: Wed Sep 4 12:33:45 2013 +0200 - xhttp_pi: fix cross-compilation + db_postgres: use variable for make tool in module Makefile + + - fixes builds in BSD systems + - patch by Victor (coyote), FS#335 -commit 7abf33373b0bfa0bc709286b01e9a7da2200659b -Author: Ovidiu Sas -Date: Sat Dec 1 16:42:15 2012 -0500 +commit 2aa5095252f9434c7c2a63ecb130bdaf1346fde9 +Author: Daniel-Constantin Mierla +Date: Wed Sep 4 11:44:23 2013 +0200 - dialplan: fix cross-compilation + rtpproxy: updated rtpproxy_manage() to handle PRACKs with sdp -commit 8b6f3c51d7636905ea8a6f4754673ba569404cd7 -Author: Ovidiu Sas -Date: Sat Dec 1 16:38:16 2012 -0500 +commit 72996942662b944b74e6632e1670c989402bf8af +Author: Vitaliy Aleksandrov +Date: Wed Sep 4 09:56:28 2013 +0200 - cdp_avp: there's no xml dependecy for cdp_avp + usrloc: detect lost tcp connnections on timer and set associated contact as expired + + - new module parameter to control this feature: handle_lost_tcp + - at this moment it is not implemented for db only mode -commit 10de949af0f9f01b0585db0fd53d53452f97e067 -Author: Olle E. Johansson -Date: Sat Dec 1 11:18:08 2012 +0100 +commit 392a59ab1c12efee1072581f9519fc258444d086 +Author: Vitaliy Aleksandrov +Date: Wed Sep 4 09:55:23 2013 +0200 - sqlops: Fixing typo in documentation, minor edits + registrar: propagate tcp connection id in contact info structure -commit 99521dafd452e56d7974fcbf8c32bd3679ccc4c9 -Author: Olle E. Johansson -Date: Sat Dec 1 11:05:57 2012 +0100 +commit ea45a9b0ff6851d01e09aa62dfe9e7e006552609 +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 23:16:50 2013 +0200 - pua_usrloc: Minor edits, typo fix + pua: basic framework for handling xcap-diff event -commit fe6508d6d56a7f739c7fc0ae2220e509abb337e1 -Author: Olle E. Johansson -Date: Sat Dec 1 10:49:11 2012 +0100 +commit 0c15125767f8a9001e9c892fee18df3dbad56d2f +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 23:15:55 2013 +0200 - sdpops: Typo fix, minor edits + presence_xml: basic framework for handling xcap-diff event + + = can be diabled via modparam disable_xcapdiff -commit a7522f0d648470e36a82357660fc169628b2f506 -Author: Olle E. Johansson -Date: Sat Dec 1 09:50:31 2012 +0100 +commit 70ec02cfc9a203ea100d6550be3aa5f51f4fa473 +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 16:16:30 2013 +0200 - utils: Minor update to README + acc: option to write dialog-based cdrs to database - XML changes already committed. + - new module parameter cdrs_table has to be set and classic db + accounting enabled at compile time and db_url set + - cdr_log_enable - new parameter to turn off writing cdrs to syslog, + cdr_enable being now used as top level control flag for both cdrs to + syslog or db -commit 4fda56162c3b174033ea81ffd7c2af4a6e7f10f2 -Author: Ovidiu Sas -Date: Sat Dec 1 01:30:24 2012 -0500 +commit 4812b91a3c00e71a3ac9636b88bc75e5368fa657 +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 15:11:47 2013 +0200 - xmlrpc: fix cross-compilation + acc: increment crt position when adding extra time value -commit c4b91489ac3f2e2fcbe16413f56ef8cb8e7e2dde -Author: Ovidiu Sas -Date: Sat Dec 1 01:28:03 2012 -0500 +commit 4c917438596852b3870ce0236bad8cbd04961270 +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 14:31:58 2013 +0200 - utils: fix cross-compilation + Makefiles.defs: version set to 4.1.0-dev8 -commit a419c74d065156a2c9626b2475beaf08e130137e -Author: Ovidiu Sas -Date: Sat Dec 1 01:24:24 2012 -0500 +commit ea6514c2af00561643af6a2b671fbd4411048ca1 +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 13:47:24 2013 +0200 - xmlops: fix cross compilation + acc: updated readme with the new parameters -commit 983dd207a51be5ea2bd2a71d546280f8e4389408 -Author: Ovidiu Sas -Date: Sat Dec 1 00:12:34 2012 -0500 +commit ede2d6747aabf32538797dfedf13682c5c242831 +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 13:35:08 2013 +0200 - kamailio.cfg: adding xhttp modules to the default config - three new defines: WITH_XHTTP, WITH_XHTTP_RPC, WITH_XHTTP_PI + acc: cast to double for safer conversion in time_mode==2 -commit 209317a81d845ba781964205242849ab12bbc0c2 -Author: Andrew Mortensen -Date: Fri Nov 30 21:38:48 2012 -0500 +commit d7884500e89d32bffd34e915b473458645c6dedf +Author: Daniel-Constantin Mierla +Date: Tue Sep 3 13:28:54 2013 +0200 - sca: fix snprintf buffer size for Expires header in replies to SUBSCRIBE. + acc: new parameter time_mode - - reported by Robert Boisvert. + - store additional time value in time_attr attribute/db column + - if time_mode==1, then time_attr stores the microseconds + - if time_mode==2, then time_attr store the seconds.miliseconds + (proposed by FS#163) + - if time_mode==0 (default), then it is like now, only timestamp stored + - time_attr value can be set via parameter with same name - it + represents syslog value or db table column + - for db accounting, when time_mode==1, the type of column has to be + int, and for time_mode==2, the type of column has to be double + - features implemented only for syslog and db accounting -commit 8632a265c3703e19cad9253f84527a913ee9cdd5 -Author: Andrew Mortensen -Date: Fri Nov 30 14:42:19 2012 -0500 +commit 1cec15e057bdec4455e70af951def19e36a78e8e +Author: Daniel-Constantin Mierla +Date: Mon Sep 2 14:09:18 2013 +0200 - sca: support Record-Route + kamctl: added commands to set extra columns in subscriber table - - Save Record-Route values from SUBSCRIBEs to ensure NOTIFYs traverse - correct path to subscriber. - - Update SCA DB schema & creation scripts: add record_route column, - increment sca_subscriptsion table version. + - useful to deal with columns added for load_credentials of auth_db + module + - 'sets' - sets a column with string value + - 'setn' - sets a column with numeric value + +commit 7e44ff0be6cbb48c9360bee8601ec3dbff050c02 +Author: Carlos Ruiz Diaz +Date: Sun Sep 1 19:56:57 2013 -0400 + + Fixed potential bug in exceptional condition when max-time updated is called -commit 1da2a76be4e374ddb4296a1d54963fe344dc0970 +commit 2685cd9bb6933c2d4b4b97e3b4ed6b98005255c9 +Author: Juha Heinanen +Date: Thu Aug 29 17:05:41 2013 +0300 + + parser/fline.c: syslog message cleanup when request line parsing fails + +commit fbcee0221cd6e22477dc9d1d5a7767c1e572235a Author: Richard Fuchs -Date: Fri Nov 30 14:00:09 2012 -0500 +Date: Wed Aug 28 15:03:01 2013 -0400 - core/corex: move send()/send_tcp() to corex module - - As suggested by miconda on sr-dev, move send() and send_tcp() out of core - and into the new corex module in order to make them support pseudo variables. - This changes: + rtpproxy-ng: fix possible segfault in rtpproxy_manage - - drops SEND and SEND_TCP tokens from config parser - - remove related config parser code relying on SEND_T and SEND_TCP_T - - augment corex module to provide the functions removed from core - - update corex docs + Reported by Hugh Waite -commit 3376e3b8c54a7c9bc13f87368baeaaa145a9ced5 -Author: Olle E. Johansson -Date: Fri Nov 30 09:31:47 2012 +0100 +commit e0e0a753d1365d340c17f33bd868085bee304910 +Author: Daniel-Constantin Mierla +Date: Wed Aug 28 12:02:34 2013 +0200 - htable: Update documentation on mod-init - - Based on Daniel's answer in sr-dev on a question about lua. The Lua environment - is initialized in child processes, so it's not reachable in mod-init. + dialog: fixed typo related to module name inside log message -commit cf97967489f1b61c5bf0a841f9f650e40fc9911e -Merge: d02070d 514875d -Author: Olle E. Johansson -Date: Thu Nov 29 22:01:05 2012 +0100 +commit bf68c071723bda24b07e64660f77872e2bceff1b +Author: Victor Seva +Date: Tue Aug 27 18:43:39 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + permissions: fix ws support on allow_trusted function. - * 'master' of ssh://git.sip-router.org/sip-router: - kamctlrc: adding sca to the list of extra modules + Thanks to Alex Hermann + Reminder: Never commit with more than one glass of wine. -commit d02070dbef121525b320487d4ad2fbfda55aa62d -Author: Olle E. Johansson -Date: Thu Nov 29 22:00:19 2012 +0100 +commit 14835f89fc2b761f73a0caad67d229ec3fedba29 +Author: Daniel-Constantin Mierla +Date: Tue Aug 27 14:44:17 2013 +0200 - ipops: Minor documentation changes + core: set to-params pointer to null after freeing - Use the IPv6 documentation address in examples if possible - 2001:DB8::/32 + - avoid potential double freeing issues or invalid pointer access -commit 514875de53e19cfd4a208da3d778e454ce12a6f4 -Author: Ovidiu Sas -Date: Thu Nov 29 15:42:26 2012 -0500 +commit 727aa357d9ee8abcb8471733e22886d2cff386db +Author: Daniel-Constantin Mierla +Date: Tue Aug 27 14:00:17 2013 +0200 - kamctlrc: adding sca to the list of extra modules + kamdbctl: new command add-tables + + - creates only tables that are groupped under same id, thus have the sql + script in a file + - syntax: kamdbctl add-tables + - there has to be a -create.sql script + - eg: kamdbctl add-tables lcr -commit 14333d9360273c073473c144c198496a314e2e73 -Author: Olle E. Johansson -Date: Thu Nov 29 21:18:14 2012 +0100 +commit a075383454c92bed225b7904920090f515a938d5 +Author: Daniel-Constantin Mierla +Date: Tue Aug 27 11:16:52 2013 +0200 - utils: Fixing typos + kamctl: use FIFOPATH instead of OSER_FIFO in kamctlrc - Typos that I missed in the first check... + - no longer relation to former project name, however OSER_FIFO can still + be set to keep the compatibility with older deployemnts, but will be + used only when FIFOPATH is not explicitely set -commit 1ab39cf866600ce155db3d5454981167d001d285 -Author: Olle E. Johansson -Date: Thu Nov 29 21:15:53 2012 +0100 +commit 8097c2bccb2161f63900bbd5fb87a10eacdd282c +Author: Victor Seva +Date: Tue Aug 27 00:07:58 2013 +0200 - utils: Minor documentation changes + permissions: update allow_trusted documentation. -commit 010ea5d4b71308cb18cd759db70ac48f081a672e -Author: Olle E. Johansson -Date: Thu Nov 29 20:52:27 2012 +0100 +commit 573c9031a44168df356818f572f10f69791a1458 +Author: Victor Seva +Date: Tue Aug 27 00:03:49 2013 +0200 - LDAP minor documentation changes + permissions: fix ws support on allow_trusted function. -commit aca01e149445a0c6f87a9ed97974bcba612e426f -Author: Ovidiu Sas -Date: Thu Nov 29 09:57:48 2012 -0500 +commit b2a536f0f577026ffa57d0b603c60e6232bc8e78 +Author: Daniel-Constantin Mierla +Date: Fri Aug 23 21:04:06 2013 +0200 - sca: adding missing sca db utils files + tm: readme regenerated -commit cc3bc9669a2c528db9a8ada5e13cd553be9d2f1e -Author: Andrew Mortensen -Date: Wed Nov 28 23:23:48 2012 -0500 +commit ef9b69bbb54302e9985dd37d79831b6f80463fc1 +Author: Daniel-Constantin Mierla +Date: Fri Aug 23 21:03:13 2013 +0200 - sca: remove old SQL table creation file - - - use make dbschema to generate sql from xml table schema instead. + tm: removed note about no-implentation for no-reply flag for t_relay_to() -commit 7575c853b1786fc09965238ea68bca4400bd7c5f -Author: Andrew Mortensen -Date: Wed Nov 28 22:50:30 2012 -0500 +commit 6073949aa224ea7a973058891a88a58cc0841860 +Author: Daniel-Constantin Mierla +Date: Fri Aug 23 21:02:24 2013 +0200 - sca: add db schema files and kamctl table create SQL file. + tm: updated xml docs with t_set_disable_internal_reply() -commit eddd6b80432a3feda925ccb629bf55892d4b175f -Author: Olle E. Johansson -Date: Wed Nov 28 12:02:53 2012 +0100 +commit 0f2f9c85eff0b6ad35b4c58dfcde74c8a65559d6 +Author: Daniel-Constantin Mierla +Date: Fri Aug 23 20:53:55 2013 +0200 - group: Minor changes to documentation + tm: re-added the option for no-internal reply on error + + - new function t_set_disable_internal_reply(0|1) to disable|enable this + option per transaction + - t_relay_to() flags re-enabled for this option -commit 7b5f56e05482ea060dc1c093db599fd8cda22f9e -Merge: 2536a10 358cfb7 -Author: Andrew Mortensen -Date: Tue Nov 27 15:13:21 2012 -0500 +commit 7255693f73bae008e5c7b6b560c52394f7c85308 +Author: Carsten Bock +Date: Fri Aug 23 17:29:43 2013 +0200 - Merge branch 'master' of git+ssh://git.sip-router.org/sip-router + Very basic DNS-Zone file-example for IMS (for use in the online-tutorial on howto install IMS with Kamailio) -commit 2536a10c516b7c569d04e431b74bbd88964603a7 -Author: Andrew Mortensen -Date: Tue Nov 27 14:06:23 2012 -0500 +commit 6cea9227c7dc973757d03150685e322fcff115b9 +Author: Carsten Bock +Date: Thu Aug 22 16:36:48 2013 +0200 - sca: fix potential leak of parsed To body - - - if msg->to wasn't parsed, sca_subscription_from_request called parse_to, - but never called free_to_params. - - make the subscription to-tag independent of the parsed to_body with a - pkg_malloc'd copy, freed in the caller. + Define missing fixup_functions. -commit 358cfb781a4854a3943b96ede552e46ccb1ccc77 -Author: Ovidiu Sas -Date: Tue Nov 27 13:28:03 2012 -0500 +commit b23a74a4732f276315176d9b438bd2596e616799 +Author: Carsten Bock +Date: Wed Aug 21 20:14:16 2013 +0200 - modules_k/dmq: add newline at end of file (peer.c) + Fix fixup functions. -commit 9ef5345481a526e2417ce59ebc13f19132e02934 -Author: Ovidiu Sas -Date: Tue Nov 27 13:25:12 2012 -0500 +commit 8017fa7c67dbb3dd4bdd937be9b841097a44674e +Author: Carsten Bock +Date: Wed Aug 21 20:02:23 2013 +0200 - modules/tm: add newline at end of file (test.c) + Add support for sending POST-Requests to http_query() method. -commit 777c3e3e388f4267744cd5368956900cea296b07 -Merge: 141fc56 5908a9e -Author: Andrew Mortensen -Date: Tue Nov 27 00:32:43 2012 -0500 +commit 134158df11ebf9b6c3deaf71b6010588535eb386 +Author: Peter Dunkley +Date: Thu Aug 22 20:39:41 2013 +0100 - Merge branch 'admorten/sca' + pkg/kamailio/(centos|fedora): Added rtpproxy-ng module to the build -commit 5908a9e88242a166c71b03bce77b326c2f27f5a6 -Author: Andrew Mortensen -Date: Tue Nov 27 00:28:28 2012 -0500 +commit c2ccd37891167fb691b2aabc44e12c45cea7d1da +Merge: fd68623 dd76f37 +Author: Richard Fuchs +Date: Thu Aug 22 14:19:31 2013 -0400 - sca: move to modules directory + rtpproxy-ng: adding module - - moved after removal of usrloc dependency per miconda's request on sr-dev + Merge branch 'rfuchs/rtpproxy-ng' -commit 95cf6e358b2be210b61e6d060df0604e3e36a043 -Author: Andrew Mortensen -Date: Tue Nov 27 00:24:11 2012 -0500 +commit fd68623bebb7053f4b652d7fe58d676b6a019d7c +Author: Daniel-Constantin Mierla +Date: Thu Aug 22 17:51:49 2013 +0200 - sca: update docs + core: efectively run the event_route[core:receive-parse-error] - - "domain" modparam no longer required. - - usrloc no longer a dependency. + - reported by Juha Heinanen -commit 959b2c423a70395c97437d0bcef7950762c4a9b5 -Author: Andrew Mortensen -Date: Tue Nov 27 00:09:06 2012 -0500 +commit 0efe5a4d9adb08575938d2c4eb83ec3a79d38e20 +Author: Carlos Ruiz Diaz +Date: Thu Aug 22 11:16:31 2013 -0400 - sca: remove dependency on usrloc. + Added support for max-time update of monitored calls - - usrloc callbacks in practice were only useful for expired - registrations, and even in that case our expired subscription - timer is likely to have purged the stale subscription. + - updated example config file + - updated documentation -commit 141fc56f5a46f26e40e8e19e4f5eb02844d192d7 -Author: Ovidiu Sas -Date: Mon Nov 26 23:18:02 2012 -0500 +commit 86bdfaa3efe7804bcfde3da4f63b252c74e417b7 +Author: Daniel-Constantin Mierla +Date: Thu Aug 22 15:44:05 2013 +0200 - socket_info: add #include "linux/types.h" + core: fix condition to lookup envet_route[core:receive-parse-error] + + - reported by Juha Heinanen -commit 0af64c92263b82dc4b487c4da5199c8b150b0517 -Author: Andrew Mortensen -Date: Mon Nov 26 16:50:43 2012 -0500 +commit 2d826efb7dbcf9b3b49c376bcd079ab1e7642a44 +Author: Daniel-Constantin Mierla +Date: Thu Aug 22 13:01:55 2013 +0200 - sca: eliminate need for "domain" modparam + core: execute event_route[core:receive-parse-error] block on error of initial sip message parsing - - Extract domain to be used in idle appearance from subscription AoR instead. + - note that the SIP message is broken in this case, but it gets access + to source and local socket addresses (ip, port, proto, af) as well as + the whole message buffer and its size -commit 76885b5c67ca7467d6681b81841f0323dca6ab35 -Merge: 17d1934 cceb39f -Author: Alex Balashov -Date: Mon Nov 26 08:18:48 2012 -0500 +commit d03651fb4c3a6b50923029e121eed201fb1ff550 +Author: Juha Heinanen +Date: Thu Aug 22 08:20:52 2013 +0300 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/lcr: added some linefeed chars missing from syslog messages + + - Patch provided by Kevin Scott Adams. -commit 17d1934cebd1c96c7f3689be33ccae2a981f6b2c -Author: Alex Balashov -Date: Mon Nov 26 08:17:18 2012 -0500 +commit 3ccf4b43e81bd2654cb306a3c2cc21b97cb51f62 +Author: Daniel-Constantin Mierla +Date: Thu Aug 22 00:14:53 2013 +0200 - dialog(k): Added dlg_set_timeout_by_profile() route script function. - - This function allows the same dialog timeout to be set across all - the dialogs in a profile (with or without values). + core: print src address details if initial message parsing fails - The intended use-case is to allow the user to conditionally end or - expire from tracking a user's/caller's/account's calls. + - reported by Juha Heinanen -commit cceb39f9fb8a55ab7e43f4a546d3d524f5acccd4 +commit fe24ed17b0620bd9446d741ea3f65b7b0cb8b765 Author: Daniel-Constantin Mierla -Date: Mon Nov 26 14:14:37 2012 +0100 +Date: Wed Aug 21 11:20:07 2013 +0200 - mem: check debug info only when joining the next packet + kamailio.cfg: use is_first_hop() for adding alias parameter to contact uri - - it was checked even it was not freeand not the case for a join + - done for natted devices -commit 45d8d3ccd943caad37570ae013118536d38a8457 -Author: Daniel-Constantin Mierla -Date: Mon Nov 26 13:53:22 2012 +0100 +commit bbecaa597aa4fb3fa08773cd6cd9b8558c7ce3a8 +Author: Victor Seva +Date: Wed Aug 21 11:04:08 2013 +0200 - Makefile.defs: version set to 3.4.0-dev6 + avpops: allow use of avps as second parameter on re operation at avp_check function -commit d96401668cefade5e251b101eb93f07faae091ad -Author: Daniel-Constantin Mierla -Date: Mon Nov 26 13:51:53 2012 +0100 +commit c86b04459a716af353d0ca40a793d6b13c6a6fe7 +Author: Victor Seva +Date: Tue Aug 20 10:24:53 2013 +0200 - Mkefile.defs: default memory manager set to q_malloc - - - debug option is left unset (no DBG_QM_MALLOC) - - lower memory chunk overhead with faster join + fixed spelling errors catched by lintian -commit 15a0b9c23e4b4f829bbb88f73e8042371f3f38a2 -Author: Daniel-Constantin Mierla -Date: Mon Nov 26 13:42:07 2012 +0100 +commit 64e39dbf89bc1581722abeaadf7811e0883390bd +Author: Elena-Ramona Modroiu +Date: Mon Aug 19 17:43:16 2013 +0200 + + htable: updated readme with rpc command htable.stats - Makefile.defs: added MEMMNG to allow selection of memory manager +commit d33106994516e27944657c3bf17c3ccb5a521a50 +Author: Elena-Ramona Modroiu +Date: Mon Aug 19 17:39:26 2013 +0200 + + htbale: added rpc command htable.stats - - MEMMNG=0 => fast malloc is used (f_malloc) - - MEMMNG=1 => quick malloc is used (q_malloc) - - MEMDBG is used now to set the debug mode for each of the managers - - 0 - no debug info - - 1 - debug info enabled + - print stats about htables: name, number of slots, number of items, max + number of items per slot, min number of items per slot -commit 8acb59ee4de31ab76763a021acaf7b5a13e02f23 -Author: Daniel-Constantin Mierla -Date: Sun Nov 25 21:54:32 2012 +0100 +commit ee7dcac57501cd0563c69ae967ba785cec035062 +Author: Elena-Ramona Modroiu +Date: Mon Aug 19 16:48:01 2013 +0200 - dialog(k): safety check for callid parameter in mi commands + htable: lifted limit for max number of slots to 2^31 - - if not provided properly, it may result in crash - - reported by Ricardo Martinez + - there can be systems with large amount of memory + - clarification in docs about the case when the value is out of exected + range -commit d43fbf2a5a5464a4a499282b88d58a1fc97b9c7e -Author: Olle E. Johansson -Date: Sun Nov 25 16:38:27 2012 +0100 +commit 71594a81f012432782d1f7b6f59c725130928ee7 +Author: Jason Penton +Date: Mon Aug 19 13:41:45 2013 +0200 - sanity Sanity-checked spelling. Minor corrections. + cdp: fixed spelling and removed some erroneous code -commit b8e877889a99b03f190a82acf101681a23ca11d6 -Author: Andrew Mortensen -Date: Sun Nov 25 09:09:59 2012 -0500 +commit ea442b3155bf25ff48f7fd125b2ffa72a5631852 +Author: Carsten Bock +Date: Sun Aug 18 17:47:08 2013 +0200 - Use project-wide gitignore instead. + Only update received info, if a contact is "new" contact. In case of multiple registration for one AoR, each registration will have a different contact. -commit 1dad8ba9cceb4de3131fe358c643833fa20b484f -Author: Andrew Mortensen -Date: Sun Nov 25 09:08:42 2012 -0500 +commit ec1c1bab23e4fff3bd5cd60c2f254e646dcbc9ee +Author: Carsten Bock +Date: Fri Aug 16 17:08:15 2013 +0200 - Remove leftovers from standalone repo. + Do some debug output, when searching for user based on IP/Port/Proto. -commit 9e4b7e56f471c7923100905d0221b0d7b19f4949 -Merge: a708dcb 579299c -Author: Andrew Mortensen -Date: Sat Nov 24 22:06:22 2012 -0500 +commit 157a466d46f6cccaf790ca3ad3d400489ebdd1ed +Author: Peter Dunkley +Date: Wed Aug 14 21:30:45 2013 +0100 - Merge remote-tracking branch 'sca/master' into admorten/sca + pkg/kamailio/(centos|fedora): Updated .spec -commit a708dcb5ad90ec517db481fea0570ec53863b471 -Author: Daniel-Constantin Mierla -Date: Wed Nov 21 17:22:31 2012 +0100 +commit 9061cf2a85ac89cf403910b7b4fa93b29dccb350 +Author: Victor Seva +Date: Tue Aug 13 11:45:02 2013 +0200 - lib/kcore: reset time value for faked msg - - - reported by Uri Shacked + modules/debugger: refresh README -commit 579299cb8f95512dda6663e963769231887c43de -Author: Andrew Mortensen -Date: Tue Nov 20 23:13:35 2012 -0500 +commit 5cbedc6b515b50f9ade7457abedba18747d98f75 +Author: Victor Seva +Date: Tue Aug 13 10:14:42 2013 +0200 - Regenerated README after fixing typos and documenting more RPC commands. + modules/debugger: Added module parameter reset_msgid. Added RPC command dbg.reset_msgid + + The message id ($mi) will be reset but internally there is no change. This can be + useful for unit tests cases. -commit b6cebc5147bf44d85d9c312fb170bb6d6c748c07 -Author: Andrew Mortensen -Date: Tue Nov 20 23:10:59 2012 -0500 +commit b0e9132ccd1e8385b8b4faf72db806320d48e2f5 +Author: Daniel-Constantin Mierla +Date: Tue Aug 13 09:37:21 2013 +0200 - Document sca.seize_appearance and sca.release_appearance RPC commands. + usrloc: safety checks to catch empty ruid -commit 38d134a0d34b5335fb7a826585ce08d72d462bcc -Author: Andrew Mortensen -Date: Tue Nov 20 23:08:38 2012 -0500 +commit 66c8e730d59f9816f09573f5300e4463e5997876 +Author: Daniel-Constantin Mierla +Date: Tue Aug 13 09:19:02 2013 +0200 - Update sca_call_info_update ex. to make clear it should be call for To URIs. + usrloc: more verbose log messages in case of failure to update db records -commit 7e29507f68d4fda9b785c35651f1195991fda99b -Author: Andrew Mortensen -Date: Tue Nov 20 23:08:05 2012 -0500 +commit d1cda7ca9a64cf818b82f7b777fa2dd640717c53 +Author: Hugh Waite +Date: Mon Aug 12 11:15:55 2013 +0100 - Fix typo: "line_seize" -> "line-seize" + presence: Iterate correctly around presence updates + + - timer_send_notify should increment the subset by one on each loop -commit c5fac4809aac489163bcd9c4fbf6636092000f85 -Author: Daniel-Constantin Mierla -Date: Tue Nov 20 23:41:04 2012 +0100 +commit 4f42993660c52c757918ca2806f7ffe6af0674ce +Author: Hugh Waite +Date: Mon Aug 12 11:05:55 2013 +0100 - kamctl: new command 'db showg' + rls: Fix memory leak in rls notify.c - - uses \G at end of sql query, resulting in line-formated output (at - least for mysql) + - xml is leaked in an error case -commit 61472e04704e99836743c833eb66c33ea0d81724 -Author: Daniel-Constantin Mierla -Date: Tue Nov 20 23:10:28 2012 +0100 +commit e88af0a02de79fac583c126f08d762f7ef3f1b01 +Author: Hugh Waite +Date: Tue Jul 16 10:51:29 2013 +0100 - sdpops: added sdp_content() + outbound: Fix freeing null pointer in destroy function - - return true of there is a sdp part in the body of sip message + - Only appears in error cases, e.g. syntax check + +commit 0c590e00796573681fd7ee0a99dd324919a9e4e9 +Author: Dragos Dinu +Date: Wed Aug 7 17:29:06 2013 +0300 + + Fixed two bugs related to new capture_mode changes. -commit 6df74c2fb208c364b5d50e9d87f80120de93c945 +commit 93c39f86ce0cd337212579bd7bd1e58cabed79ca +Author: Carsten Bock +Date: Wed Aug 7 01:20:43 2013 +0200 + + Fix previous commit (forgot this file) + +commit 25240becdd83801a788b65f52eada5dd63665e8c +Author: Carsten Bock +Date: Tue Aug 6 22:48:39 2013 +0200 + + Extension to the API: lookup_terminate_dlg(unsigned int, unsigned int, str hdrs) + - Terminate a dialog using the API by providing h_entry and h_id (similar to the MI-Function) + +commit e6e0419a46c3e5127d07c95390931d10b2a01c3b Author: Daniel-Constantin Mierla -Date: Tue Nov 20 21:55:51 2012 +0100 +Date: Sun Aug 4 14:22:41 2013 +0200 - sdpops: internal function w_get_sdp renamed to w_get_sdp + imc: wrap bit shift defines in parenthesis - - match the exported name pattern + - avoid priority conflicts when using the defines + - reported by Shankar -commit 5d2cba306439adfa36c1e01ccd6473f372ac7e5e -Author: Andrew Mortensen -Date: Mon Nov 19 22:29:24 2012 -0500 +commit 6a981d3d922c914054d4c8dc7e672bb6a4ddb5f5 +Author: Daniel-Constantin Mierla +Date: Thu Aug 1 15:58:59 2013 +0200 - Remove redundant message logged when removing subscriber after failed NOTIFY. + db_flatstore: free id pointer if no more space for table name - Subscriber removal on failed NOTIFY is currently disabled. - -commit 742bc69927eee2df330a85d248144b308aa3a08e -Author: Andrew Mortensen -Date: Mon Nov 19 22:28:17 2012 -0500 + - related to previus commit on this module + - keep table name null terminated - Remove debug log message from usrloc callback. +commit 8fb0f711aaa611eac8b2776c7e5ae3c5e19243ac +Author: Federico Cabiddu +Date: Mon Jul 29 07:59:34 2013 +0200 -commit ba394704868ad9e788ca1fb6a3a8e769f91c628a -Author: Andrew Mortensen -Date: Mon Nov 19 22:27:03 2012 -0500 + db_flatstore: fixup for new_flat_id function + + - locally copy table's name - Make purge expired log message more readable. +commit 4bc07b15ae9a490273b2696b2860f78ebbd18104 +Author: Daniel-Constantin Mierla +Date: Thu Aug 1 14:35:16 2013 +0200 -commit 6c0f220013450894a2b2076b3414857a8fa0b592 -Author: Andrew Mortensen -Date: Mon Nov 19 22:25:55 2012 -0500 + kamctl: shortcut command to do q query to a database based on key and value + + - kamctl db smatch table key value - return the record from table that + has column key matching the value as string (quoted value) + - kamctl db nmatch table key value - return the record from table that + has column key matching the value as non-quoted + - examples: + + kamctl db smatch subscriber username test + kamctl db nmatch subscriber id 123 - Remove leftover debugging in show_subscription routine. +commit 9a0147b8e050bb8ac7b443e4a3139bb326308cba +Author: Daniel-Constantin Mierla +Date: Thu Aug 1 14:12:30 2013 +0200 -commit f9b4ef27e5336e235f6f79506ca115f188e6101d -Author: Andrew Mortensen -Date: Mon Nov 19 22:24:57 2012 -0500 + acc: remove comment from previous patch + + - references to tracker should be in comments of the commit, not in the + code + - use tabs for indentation - Remove debug log message enumerating subscribers in hash slots on NOTIFY. +commit 341f810dca0cc0596e22f2ac1bca86de0b8d142d +Author: Daniel-Constantin Mierla +Date: Wed Jul 31 12:22:12 2013 +0200 -commit f76d90abae5fe6a3df4225d54d38170c854f3771 -Author: Andrew Mortensen -Date: Mon Nov 19 22:24:02 2012 -0500 + app_perl: push the sip msg structure to perl after initializing it + + - reported by David Cunningham - Remove debug log message leftover from early testing. +commit 7ba6cbfcaf70cb546ea3a9f148a0f0b0bc38c16d +Author: Federico Cabiddu +Date: Mon Jul 29 07:59:13 2013 +0200 -commit 4ad1c196b5a92ded7aa625db4bf583a2563cf900 -Author: Andrew Mortensen -Date: Mon Nov 19 22:22:32 2012 -0500 + acc: acc_db_set_table_name fixup + + - add termination char to db_table_name_buf - Log error when building Replaces header and dialog to replace is not confirmed. +commit 1bf5c8328e8b4ed13f6404bf617cac9e26c05e63 +Merge: 0e9b4b3 fb3a5f7 +Author: Carlos Ruiz Diaz +Date: Mon Jul 29 09:49:57 2013 -0400 -commit 0870c8b926b3ef63d1fb8e20aaf625de375fde7d -Author: Andrew Mortensen -Date: Mon Nov 19 22:18:00 2012 -0500 + Merge branch 'master' of ssh://git.sip-router.org/sip-router - Updated with typo fixes from docbook xml. +commit 0e9b4b351e70323fd8581d298f1a7d682f2310fe +Author: Carlos Ruiz Diaz +Date: Mon Jul 29 09:46:35 2013 -0400 -commit 88c4680aed5a13a33a3c2c3cd6a21d2b2eaf6c9e -Author: Andrew Mortensen -Date: Mon Nov 19 22:12:37 2012 -0500 + Modified cnxcc_set_max_credit behavior + + - Updated documentation + - Updated examples - Forgot to add doc Makefile to repo. +commit fb3a5f7022ebd20fc516b5b8303a0274bda18258 +Author: Daniel-Constantin Mierla +Date: Fri Jul 26 14:55:38 2013 +0200 -commit 277dc5ef0233fa95746b7e9556e6e11ee3aa4da4 -Author: Andrew Mortensen -Date: Mon Nov 19 22:11:05 2012 -0500 + acc: safety check for accounted values not to be NULL + + - based on a patch by Federico Cabiddu, FS#327 - Fix typos and formatting. +commit 3d33733f299dda595704108aef73a2912dc3069f +Author: Daniel-Constantin Mierla +Date: Fri Jul 26 14:52:21 2013 +0200 -commit 78ba61f271998ca2b6e54cbdd2be5caf47838493 -Author: Andrew Mortensen -Date: Mon Nov 19 17:17:44 2012 -0500 + uac_redirect: fixup for using acc table parameter + + - set reason parameter for acc function + - based on a patch by Federico Cabiddu, FS#327 - Add simple installation instructions. +commit 1aea13af9b3eea3788e90411bd94cb9e0b0c4ea3 +Author: Camille Oudot +Date: Tue Jul 23 11:11:01 2013 +0200 -commit ce6a9ca274c7d38faba2f1ff49e2f09896a9e6a4 -Author: Andrew Mortensen -Date: Mon Nov 19 16:47:06 2012 -0500 + modules/ims_registrar_scscf: safety check in async_cdp_callback - Add copyright comments to all source files. +commit 6ff74701652a11497bd82ee3ba2ac7547d1ce666 +Author: Daniel-Constantin Mierla +Date: Thu Jul 25 10:14:55 2013 +0200 -commit a6b36b03f107be84e8c7bfd9f30f782c51e4f600 -Author: Andrew Mortensen -Date: Mon Nov 19 16:40:44 2012 -0500 + app_perl: move initialization of SIP message var after initialization of temporary environment + + - upon a report by David Cunningham of a leak in operating system + memory - Add GPLv2 license +commit da057e5730dd9f82101437e0ee3ceca02b64602c +Author: Alexandr Dubovikov +Date: Tue Jul 23 10:37:03 2013 +0200 -commit b1465456aae950c1a70928a2e596cbc6b34c2ccf -Author: Andrew Mortensen -Date: Mon Nov 19 16:10:36 2012 -0500 + modules/sipcapture: Added support for multiple capture modes. + (c) Dragos Dinu (1and1) - Regenerated to include mention of usrloc dependency. +commit ab601ea9a1b2561c2eaa860583cdeed478b9ea8d +Author: Daniel-Constantin Mierla +Date: Sat Jul 20 10:01:25 2013 +0200 -commit 0bef7be9bf745e73230f14637e54defae3e5afe5 -Author: Andrew Mortensen -Date: Mon Nov 19 16:10:03 2012 -0500 + Makefile: sercmd renamed to kamcmd in uninstall option - Include usrloc dependency. +commit 2a77bcd36a2b8b91a6d4af3f6ee6828265af39a5 +Author: Daniel-Constantin Mierla +Date: Thu Jul 18 20:59:54 2013 +0200 -commit 2708f57b8a464905e909409e475dd731b413a5b9 -Author: Andrew Mortensen -Date: Mon Nov 19 16:08:15 2012 -0500 + Makefile.defs: removed SCTP conditions for core locating libsctp + + - the code is now in a module, only generic hooks are in the core, that + can be turned on/off by SCTP variable (no lib dependency) - Add docbook-generated README for sca module. +commit d3a0a8b15af59846fdaee5d9ceae61484f1d7301 +Author: Daniel-Constantin Mierla +Date: Wed Jul 17 20:19:28 2013 +0200 -commit 3a7771c9c6c4225cbb380a20a28b6ce5b9ffda2e -Author: Andrew Mortensen -Date: Mon Nov 19 16:07:32 2012 -0500 + uac: restrict check of multiple from/to header changes to request route blocks + + - it can occur many times in due to branch route usage + - reported by Andrew Pogrebennyk, FS#323 - Add failure_route example. +commit 6624d10b5edbfaf32726875fbbf2ac2221807c84 +Author: Daniel-Constantin Mierla +Date: Wed Jul 17 12:26:11 2013 +0200 -commit 23a02a761da2e408a5bea914a66842a85e2260f0 -Author: Andrew Mortensen -Date: Mon Nov 19 15:58:31 2012 -0500 + uac: $uac_req(sock) - new attribute to set local send socket + + - local socket can be set for generated requests: + + $uac_req(sock) = "udp:127.0.0.1:5060"; - Remove quotes from integer values. +commit 9a3aa5e6e7949dd08146910a301fbeebdf052742 +Author: Daniel-Constantin Mierla +Date: Wed Jul 17 12:24:42 2013 +0200 -commit 6e35d942926837176f74cee843d989753897f8be -Author: Andrew Mortensen -Date: Mon Nov 19 15:50:28 2012 -0500 + tm: enhanced local request API to set send socket - Fix typo leaving XML comment unterminated. +commit 6335d07c4c77ed60fb8c2b5acc84d7c4b503221c +Author: Daniel-Constantin Mierla +Date: Wed Jul 17 12:22:31 2013 +0200 -commit 4b0e0e4b81becde2769f69539fa23a15f69099f2 -Author: Andrew Mortensen -Date: Mon Nov 19 15:47:01 2012 -0500 + core: helper functions to lookup local socket from proto:host:port - Add Exported RPC commands section. +commit 716ffd2787a68734a21a1374c3dc6dd4783844bd +Author: Daniel-Constantin Mierla +Date: Wed Jul 17 00:04:06 2013 +0200 -commit fb03bbe9469aeec92bf729abe5b8a8b181d99766 -Author: Andrew Mortensen -Date: Mon Nov 19 15:27:01 2012 -0500 + presence_dialoginfo: add schema to entity + + - patch by Pawel Sternal, FS#324 - sca module doesn't export any functions. +commit acd0bfb5acc98e791ab6cf011dfa758efba2be8f +Author: Daniel-Constantin Mierla +Date: Tue Jul 16 21:40:06 2013 +0200 -commit 296bb6d07b9f6a62848ae14f02382ffd95516a15 -Author: Andrew Mortensen -Date: Mon Nov 19 15:26:41 2012 -0500 + usrloc: fixed type for db_ops_parameter + + - reported by Alex Hermann - Add functions section. +commit d07e4f709ceaccc84bbab42dfd55d10992e84a3b +Author: Carsten Bock +Date: Tue Jul 16 18:02:50 2013 +0200 -commit 6d66ec1cd80eb0cd7878c37d6f0c216d1439c3b5 -Author: Andrew Mortensen -Date: Mon Nov 19 14:40:51 2012 -0500 + Example-Configs: Fixed config due to last updates - Add sca module parameter documentation. +commit 9a2b943bfccea83ac52ecb63f39c724f4b9504d4 +Author: Carsten Bock +Date: Tue Jul 16 18:00:51 2013 +0200 -commit d4f35ceae85f2ae72f0e384188c677f272c4a544 -Author: Andrew Mortensen -Date: Mon Nov 19 13:06:15 2012 -0500 + ims_registrar_pcscf: Bug-Fix for pcscf_assert_identity (minor) - Add module Dependencies section. +commit b4c3b811d33846dd0900922bbe5a3d9472839663 +Author: Daniel-Constantin Mierla +Date: Mon Jul 15 23:45:33 2013 +0200 -commit 006f822bf9921bf3ae84e14cd62d413057fd2d56 -Author: Andrew Mortensen -Date: Mon Nov 19 12:59:55 2012 -0500 + ipops: documented dns_query() - Correct typo. +commit 257225e6918c1387049b74663225ee9b3b722ddf +Author: Daniel-Constantin Mierla +Date: Mon Jul 15 23:38:25 2013 +0200 -commit 60e1602829b1926576998f36d06a487304d4c964 -Author: Andrew Mortensen -Date: Mon Nov 19 12:58:54 2012 -0500 + ipops: reset address types for new dns queries - docbook Overview documentation for sca module. +commit 20f3846d6d39e8fd599464d1e5ce48bfec326586 +Author: Daniel-Constantin Mierla +Date: Mon Jul 15 23:32:33 2013 +0200 -commit 835fcebe45854daac2ccbc942732cba8f5231fa5 -Author: Andrew Mortensen -Date: Mon Nov 19 12:56:27 2012 -0500 + ipops: new function dns_query(hostname, pvid) + + - store the result of dns query in a variable $dns(pvid=>key) + - dns query is using getaddrinfo() + - $dns(pvid=>key) - new pv allowing to navigate through the result of a dns query + - key can be: + - count - number of addresses + - ipv4 - set to 1 if at least one ipv4 address (otherwise 0) + - ipv6 - set to 1 if at least one ipv6 address (otherwise 0) + - addr[index] - the address as string from position index in the list (0 based indexing) + - type[index] - the type of address from position index in the list (0 based indexing), the value is 4 for ipv4 and 6 for ipv6 + - example: + + if(dns_query("test.com", "xyz")) + { + xlog("===== number of addresses: $dns(xyz=>count)\n"); + xlog("===== ipv4 address found: $dns(xyz=>ipv4)\n"); + xlog("===== ipv6 address found: $dns(xyz=>ipv6)\n"); + $var(i) = 0; + while($var(i)<$dns(xyz=>count)) { + xlog("===== #[$var(i)] type ($dns(xyz=>addr[$var(i)])) addr [$dns(xyz=>addr[$var(i)])]\n"); + $var(i) = $var(i) + 1; + } + } + +commit dd76f37bfff59d5ae07b34346d0ab0a81136649b +Merge: 66c7553 9ac9b5c +Author: Richard Fuchs +Date: Fri Jul 12 12:27:06 2013 -0400 - Add docbook stub for sca module. + Merge branch 'master' into rfuchs/rtpproxy-ng -commit 15fdde4fa1d662228568cc92e375d94dd86f2578 -Author: Olle E. Johansson -Date: Mon Nov 19 15:53:17 2012 +0100 +commit 66c7553c1131fda7b83807891110f7de393be098 +Author: Richard Fuchs +Date: Fri Jul 12 12:26:07 2013 -0400 - AUTH minor documentation updates + rtpproxy-ng: implement second parameter to rtpproxy_offer/answer/manage -commit 139acd4a3ba4117d218c8ef4d95710dc15fb8bc7 -Merge: eace40e dc0bc9d -Author: Olle E. Johansson -Date: Mon Nov 19 15:45:38 2012 +0100 +commit 9ac9b5c35858efd7c71163c604d18a1fa35e3a02 +Author: Daniel-Constantin Mierla +Date: Fri Jul 12 18:09:09 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + ipops: added dsn_int_match_ip(hostname, ipaddr) - * 'master' of ssh://git.sip-router.org/sip-router: - core: handle '\r' as end of included file name - pkg/kamailio/(centos|fedora): turned on MEMDBG for development builds + - function that uses the internal resolver to match a hostname with an + ip (similar operation like 'scr_ip=="hostname"') + - rename dns_nc_match_ip() to dns_sys_match_ip() to be more suggestive + about what kind of resolver is used -commit eace40eb04ff038fce0f81dc1c08864e1e966e98 -Author: Olle E. Johansson -Date: Mon Nov 19 15:44:54 2012 +0100 +commit ccebf9e536d7d5ea8fc824ea089d501e888b37c8 +Author: Daniel-Constantin Mierla +Date: Fri Jul 12 13:31:12 2013 +0200 - auth Update documentation for the "secret" parameter + ipops: new cfg function dns_nc_match_ip(hostname, ipaddr) - Thanks to Carsten Bock for finding this in the 1.5 documentation. + - do dns query for the hostname and compare the result to see if is a + match with ipaddr -commit dc0bc9de9528e80cd8bc61201ce82db1a785baf4 +commit 9a25e712529cb7aacbae8e64a2e1be4da3c9a8c3 Author: Daniel-Constantin Mierla -Date: Mon Nov 19 10:45:41 2012 +0100 +Date: Fri Jul 12 10:22:33 2013 +0200 - core: handle '\r' as end of included file name - - - reported by Pirjo Ahvenainen + dispatcher: allow pv in ds_is_from_list(setid) parameter -commit ddfeee6a0c0145d52f42e79cffe71b7cee1750e6 -Author: Peter Dunkley -Date: Sat Nov 17 00:12:04 2012 +0000 +commit 80935f9e8bbe20e5c320828183999b5d395ec34c +Author: Daniel-Constantin Mierla +Date: Fri Jul 12 00:44:51 2013 +0200 - pkg/kamailio/(centos|fedora): turned on MEMDBG for development builds + core: avoid doing dns srv again after naptr function that includes srv lookup -commit 4451d7af26b4f663fba408714296e79e05e312dd -Author: Andrew Mortensen -Date: Fri Nov 16 17:25:52 2012 -0500 +commit 3823001dd83902d97f3dda9c9f51c370ab04073d +Author: Alexandr Dubovikov +Date: Fri Jul 12 10:14:31 2013 +0200 - Remove logging or change to debug level as required. + modules/sipcapture: a sip message must be stored after bad parsing also. -commit 043fc21accd62e5b8fb84d505ae0b32a3ea02fc2 -Author: Andrew Mortensen -Date: Fri Nov 16 17:05:39 2012 -0500 +commit 25b6241ce310ca0ae67896fec2bb50d4c8d80fcb +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 21:57:58 2013 +0200 - Remove ADMORTEN debugging line. + dialplan: don't free attrs pvar at shutdown, it is core pv cache reference + + - reported by Juha Heinanen -commit d5ac2a71160b4d9b724cd1d8bd61600b1c2f3faf -Author: Andrew Mortensen -Date: Fri Nov 16 17:01:53 2012 -0500 +commit ecb0ede7b20f24af97a42c4d034c46709c3ec38c +Author: Juha Heinanen +Date: Thu Jul 11 22:47:37 2013 +0300 - Remove unused function. + modules/tls: config param can now specify a file or directory -commit 21c02b5ca43340adb4ba1282ec2bfbbacee4e9b3 -Author: Andrew Mortensen -Date: Fri Nov 16 16:45:06 2012 -0500 +commit eba7dcbe6b3ba7b88c0fa0b231cb265a68995e47 +Author: Richard Fuchs +Date: Thu Jul 11 15:36:54 2013 -0400 - Remove 3xx handler, since 3xx responses are pass-through. - - At least with Polycoms, caller does not release appearance prior to - INVITE for redirection target. + rtpproxy-ng: implement $rtpstat and document start_recording() -commit ed9f09efc26c671832629d8eae2089336fd2cfd9 -Author: Andrew Mortensen -Date: Fri Nov 16 16:09:51 2012 -0500 +commit d7d27cd803284ced4d709da543e64e553e0547ca +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 20:43:54 2013 +0200 - Fix formatting from copy/paste. + Makefile.defs: version set to 4.1.0-dev7 -commit 96a5ba1f819cb136a7de69502c4aa4c28540af34 -Author: Andrew Mortensen -Date: Fri Nov 16 16:06:09 2012 -0500 +commit ca8facabe26f081d1cededeb78ceaa96e4ea9ff2 +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 16:47:47 2013 +0200 - Connect to DB on demand only once per-process. - - Practically, this means only in the DB writeback process and on - sip-router shutdown. + db_unixodbc: fixed typo added by previous commit -commit 9e2a6583d2fb9d5ab83c44e3dced2c78e68dd6a6 -Author: Andrew Mortensen -Date: Fri Nov 16 14:49:44 2012 -0500 +commit c6819b9a02d59b3ad8640fbaaf2fc0b9ef3d5021 +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 16:43:31 2013 +0200 - Parenthesize all values in bind macros. Define subscriptions table version. + db_unixodbc: renamed files with reserved name on some oses -commit 5dfde0036ec5d954b451a811654617a82e10e82d -Author: Olle E. Johansson -Date: Fri Nov 16 16:21:02 2012 +0100 +commit aa0156ea441644545236a349cc62afb4983b5476 +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 16:26:15 2013 +0200 - Fixing typo + disptacher: added documentation for parameter attrs_pvname -commit 0f94abc79a47a4068e9e943f39c9c3b1ef6f035b -Author: Andrew Mortensen -Date: Thu Nov 15 14:42:27 2012 -0500 +commit 09a7a4cd718c0e26d3a948515ec4f6f6a68c64c4 +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 16:25:06 2013 +0200 - Add sca_subscriptions table version check. + dispatcher: new parameter to specify the pv where to store attrs for matched address in ds_is_from_list() - Permit future sca_subscriptions table schema changes. + - attrs_pvname can be set to get attributes of matched address in + config file -commit 09205865f98136e0354539f09f4961ca016a915b -Author: Timo Teräs -Date: Thu Nov 15 16:11:41 2012 +0200 +commit 617a444fcbe84290a701228bd78e279bbde4818e +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 15:27:16 2013 +0200 - modules_k/db_sqlite: fix crash with computed fields in custom queries - - Computed fields do not have decltype available, so guess the proper - field type based on the result type of the first row. This does not - work if the first row has null type as result, but is the best we can - do easily and fixes gives right result in most cases. + pv: added transformations for url encode/decode - Reported-by: Pedro Antonio Vico Solano + - patch by JoshE, FS#311 -commit 22b6ead91e37b17163d0f95bd58efe76f7b4c3e4 -Author: Andrew Mortensen -Date: Wed Nov 14 11:56:06 2012 -0500 +commit 12a5a409e7e196e1d0401b125b2de72a9f2e5aff +Author: Victor Seva +Date: Thu Jul 11 15:03:08 2013 +0200 - Properly bind expires value for DB deletion of expired subscriptions. + modules/nathelper: removed natping_proceses limit -commit 1ec90cc4364fe6b972d21f6ae0e24ca914296eb6 -Author: Andrew Mortensen -Date: Wed Nov 14 00:43:04 2012 -0500 +commit 0c6fef5fdc2a586ebfa607d3b5344266c08ca996 +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 14:36:02 2013 +0200 - Delete expired subscriptions from DB. Only update DB when subscribers change. + pipelimit: avoid double locking when changing pipe via rpc -commit dc5e0d0905ec438c17e92a864e17340c03311ca3 -Author: Andrew Mortensen -Date: Tue Nov 13 17:08:53 2012 -0500 +commit 04fd56dc1b84b70a04438ccbf719eb85177524ad +Author: Daniel-Constantin Mierla +Date: Thu Jul 11 14:32:48 2013 +0200 + + pipelimit: avoid double locking when changing pipe via mi + + - reported by Krischan Udelhoven, FS#315 - Subscription state is now stored in DB and restored on restart. +commit 4a425a88be796c4b2c8447e6eafc53652ddf8e72 +Author: Elena-Ramona Modroiu +Date: Sat Jul 6 19:03:49 2013 +0200 -commit a30d64af62684c8bba61bbb842209046daab97d5 -Author: Olle E. Johansson -Date: Tue Nov 13 15:45:18 2012 +0100 + htable: sht_lock() and sht_unlock() documented in readme - Exec module: Documentation update, typo fix +commit bc5cc684efad11f9affe648f3d0f6da98e43ad25 +Author: Elena-Ramona Modroiu +Date: Sat Jul 6 18:31:17 2013 +0200 -commit 114d674da5383edf3970093618d2fb98768e2aff -Author: Olle E. Johansson -Date: Tue Nov 13 15:37:18 2012 +0100 + htable: two new functions to lock htable slots based on item name + + - sht_lock("htable=>key") and sht_unlock("htable=>key") + - useful to update existing items without aditional locks - registrar Documentation update +commit ddea262fd70521eec450e57519f63a63880a94df +Author: Richard Fuchs +Date: Tue Jul 9 12:28:48 2013 -0400 -commit d888e7d83559b1b97cf55d47329a932497ff02f3 -Author: Andrew Mortensen -Date: Sun Nov 11 23:21:58 2012 -0500 + rtpproxy-ng: initial checkin - Restore subscriptions from DB on startup. +commit 8cd7a48479594052b6b6e70d48946e8963e1625d +Author: Victor Seva +Date: Tue Jul 9 17:50:06 2013 +0200 -commit 3eecc9197dd13a23cec1dd76ba6fa8f578bb482e -Author: Andrew Mortensen -Date: Sun Nov 11 23:18:37 2012 -0500 + modules/app_lua: added param to sr.xavp.get to choose between all the values (default) or just the first ones. - sca_db type not used. - - yet. +commit 4a79fcdd9965c6c3195601baeb82d489d970aa12 +Author: Victor Seva +Date: Tue Jul 9 15:55:35 2013 +0200 -commit 04773cd4b74bd1a18bd50ff681d7244999baca6e -Author: Olle E. Johansson -Date: Sun Nov 11 09:13:59 2012 +0100 + modules/app_lua: fix sr.xavp.get. Get all the values not only the first one. - dialplan Documentation updates, typo fixes +commit 01c2fa43da42a4efab59fe787c332dbf9e318399 +Author: Torrey Searle +Date: Tue Jul 9 14:55:22 2013 +0200 -commit c414cc4df415be391a5dcaaa5be9e309dfa3cd85 -Author: Olle E. Johansson -Date: Sun Nov 11 08:51:29 2012 +0100 + modules/sipt: deleted unused method - diaplan - Fixing typo in name of rpc command +commit edc838f04fd182b8997f94c50effd5b0c0153a25 +Author: Torrey Searle +Date: Tue Jul 9 11:21:52 2013 +0200 + + modules/sipt: ss7 messages are now modified in place - Sercmd lists the dialplan.dump command, that doesn't exist. Changing - name to dialplan.translate so that the module and the documentation - agrees on the name. + - lumps are now used to modify individual ss7 headers instead + of rebuilding the full body from scratch. This should result + in a performance increase -commit 79e03e5622ec28a5577bed700ee416b9630c7d58 -Author: Andrew Mortensen -Date: Sat Nov 10 20:36:54 2012 -0500 +commit e03462112b108bd0615465f45258fd70c2704100 +Author: Victor Seva +Date: Sun Jul 7 07:25:34 2013 +0200 - event should be INT. subscriber, not aor, should be UNIQUE. + modules/debugger: refresh README -commit e19c603417411c29dfe038a8339883d29fe65afe -Author: Andrew Mortensen -Date: Fri Nov 9 22:02:55 2012 -0500 +commit 9f363d37ba9e1c72b5abf25ec69ba9d367d6be99 +Author: Victor Seva +Date: Sun Jul 7 07:24:30 2013 +0200 - Add sca_subscriptions mysql table creation script. + modules/debugger: add dbg_pv_dump config function documentation. -commit 0b02fefeff53dc7fd3d66f2bd12b85a6ad883f51 -Author: Andrew Mortensen -Date: Fri Nov 9 16:08:46 2012 -0500 +commit 77f5db57c4d5bf5a5e37985a228c8693ec685a6d +Author: Victor Seva +Date: Sun Jul 7 07:23:11 2013 +0200 - DB backing initialization and setup. + modules/debugger: add dbg_pv_dump config function. + + It dumps the content of pv_cache on json format. -commit 8b731296ce80a8fcee582066ce3aad4a2bf95ed3 -Author: Peter Dunkley -Date: Fri Nov 9 20:54:14 2012 +0000 +commit faf2f6b9897c3b9acf69a1bbe22b827f386a863e +Author: Victor Seva +Date: Sat Jul 6 15:13:00 2013 +0200 - modules/msrp: Updated MSRP example + modules/sdpops: refresh README -commit 6d2015a050f9d0bee80058e46732dd8da577c4d8 -Author: Peter Dunkley -Date: Fri Nov 9 10:43:33 2012 +0000 +commit 2a855d384d37b5a83c879663780441b2f533fced +Author: Victor Seva +Date: Sat Jul 6 15:09:47 2013 +0200 - pkg/kamailio/(centos|fedora): Updated rel in .spec file + modules/sdpops: update documentation sdp_[with|remove]_transport -commit f25202a6d1a8713524985f83304230556c036da7 -Author: Jason Penton -Date: Fri Nov 9 12:28:19 2012 +0200 +commit c252677700bdc81241a39816a3febee70f729344 +Author: Victor Seva +Date: Sat Jul 6 15:00:49 2013 +0200 - modules_k/xcap_server: fixed length of pres-content AUID + modules/sdpops: added sdp_with_transport/sdp_remove_transport functions. -commit b255c406ba09ff229361a3bc14cc1c9fd076b52e +commit 97781390e663116f9e5d11f5644e1145487b6cfb Author: Daniel-Constantin Mierla -Date: Fri Nov 9 11:03:46 2012 +0100 +Date: Fri Jul 5 09:23:32 2013 +0200 - core: tcp - proper handling of '\n-' sequence for detecting end of MSRP frame + dialog: added timer process to clean unconfirmed dialogs older than 5min - - in some cases it could go in wrong reading MSRP state - - reported by Gavin Llewellyn + - timer runs every 90sec (customization to be added in the future) + - safety procedure for cleaning dialog list -commit d5120187eb41e709c840b3cfbb0dc1803f61b036 +commit 647a99bd21f6059505ea1ee65ac93c6c00fc8c8d Author: Daniel-Constantin Mierla -Date: Fri Nov 9 08:41:55 2012 +0100 +Date: Thu Jul 4 22:34:41 2013 +0200 - dialog(k): use proper scan string for optional headers parameter in rpc commands - - - credits to Kristofer Signer for report and troubleshooting + textopsx: updated docs for msg_apply_changes() and added sections ids -commit ddac5a16da60b0bbb6f58aa9e4fd26db3015c10d +commit 85f6a45e6d74044488b63a89ce8feaaf3c4b00bb Author: Daniel-Constantin Mierla -Date: Fri Nov 9 08:18:06 2012 +0100 +Date: Thu Jul 4 22:29:06 2013 +0200 - Makefile.defs: version set to 3.4.0-dev5 + textopsx: enable usage of msg_apply_changes() for sip replies -commit e916a4680d37f481167770fff27a710088cb5d3d +commit 8248a1b2ed725933f84a343b4936ed4fdef4a869 Author: Daniel-Constantin Mierla -Date: Fri Nov 9 08:07:42 2012 +0100 - - Makefile.defs: arm compiler flags update - - - patch by Matthias Klose , - http://bugs.debian.org/cgi-bin/bugreport.cgi?msg=5;bug=690388 +Date: Thu Jul 4 22:27:32 2013 +0200 -commit ac97e3a86d8e4f4c7d0abdffd84bb2ec4ff31ad4 -Author: Carsten Bock -Date: Thu Nov 8 17:56:41 2012 +0100 - - b/f: When the shortcut "x" is used, only add IE/EI once - -commit 97b829acd0954f7356db2d7c9e59435c539e91d5 -Author: Andrew Mortensen -Date: Thu Nov 8 00:03:03 2012 -0500 + core: helper function to generate sip reply content without removing top via - Add srdb1 lib to Makefile for db API. - -commit 22eb98280f82fc10202862097d954d099b605700 +commit d4cef7f5e49105c65df9651a1ad086b035f8ffdb Author: Daniel-Constantin Mierla -Date: Wed Nov 7 23:56:49 2012 +0100 - - msrp: fix compile warnings for 32b - -commit 738ce9354b61590f6a54b389d2b11348840c846c -Author: Andrew Mortensen -Date: Wed Nov 7 14:34:10 2012 -0500 +Date: Thu Jul 4 11:48:26 2013 +0200 - Tentative fix for [SIPR-793]: Music-on-hold breaks SCA hold/pickup. + tm: avoid double execution of response-in callbacks - MoH changes hold semantics. Detect on-hold SDP in holding party's ACK, - and update state & send NOTIFYs as needed. - -commit 5154c90b60d54ad6c993eacaadea29740c12e82b -Author: Richard Fuchs -Date: Wed Nov 7 09:12:33 2012 -0500 - - modules_k/siputils: Fix memory leak in uri_param() function + - double execution of response-in callbacks could happen when using tm + pvs inside core reply route, being done in transaction matching + function, which is executed again by tm reply received function -commit 7c37f8d4dc311c64c12e0b03b5e312892f9d886c -Author: Klaus Darilion -Date: Wed Nov 7 13:55:55 2012 +0000 +commit 230a138991b25f7f9b07b4f9cbeffbdd6acef2e8 +Author: Daniel-Constantin Mierla +Date: Thu Jul 4 11:47:18 2013 +0200 - allow freeing of NULL pointer to behave like standard free() function + core: new internam sip msg flag FL_TM_RPL_MATCHED - The memory functions provided to openssl needs to behave like standard - memory functions, i.e. free(). Therefore, ser_free must accept NULL - pointers, see: http://openssl.6102.n7.nabble.com/Custom-free-routine-is-invoked-with-NULL-argument-in-openssl-1-0-1-td25937.html - As shm_free() aborts on null pointers, we have to check for null pointer - here in the wrapper function. + - mark sip reply when matched first time by tm + - used to avoid double execution of response-in callbacks -commit 5e77d14b9f0304942517e031406a147a668adec3 -Author: Olle E. Johansson -Date: Wed Nov 7 00:13:20 2012 +0100 +commit 27474179bdeef0ddaba05389f510446a387d85e1 +Author: Hugh Waite +Date: Thu Jul 4 10:31:46 2013 +0100 - usrloc - Documentation updates (mostly typos and smaller fixes) + modules/websocket: Fix connection leaks - Based on feedback during SIP Masterclass - Jared and Anthony. Thanks! + - Decrease the TCP connection reference count after each use -commit 897dfc4c0a7bad253cfe672e58d665e9b3deb34e -Author: Peter Dunkley -Date: Tue Nov 6 23:28:55 2012 +0100 +commit ffdae5987b99b9bfd39992d407a3a0a33aa772ab +Author: Hugh Waite +Date: Thu Jul 4 10:30:51 2013 +0100 - (core|modules/tm): corrected ambiguous error messages. + core: Fix connection leak with websockets - - As per Henning's suggestions. - -commit 5b6f68ae0dc50c05902ace37f1081b19bda0320e -Author: Carsten Bock -Date: Tue Nov 6 16:32:50 2012 +0100 - - RTPProxy: Documentation improvements - - added a note about compatibility with different implementations for the "x"-flag (namely RFC 4091 and RFC 6157) - - made more clear, that "x" is only a shortcut for the "IE" and "EI" flags of RTPProxy + - Decrease connection ref count after using connection -commit b6bb5d0f67881bafd8ac0e4a189bd7e5ae228e5a -Author: Jason Penton -Date: Mon Nov 5 08:44:17 2012 +0200 +commit fb4dc4b7b866239a90a4d6441ed319664697edab +Author: Hugh Waite +Date: Thu Jul 4 09:33:56 2013 +0100 - modules_k: added support for PV as possible value for update_stat. - - this will allow things like: update_stat("my_stat", "$BM_time_diff") + core: Improve tcp stats output + + - Add connection ref count + - Add websocket protocols -commit 6805fcb2f60180dd11bd14fb611ad44ebb068de9 -Author: Andrew Mortensen -Date: Thu Nov 1 16:48:26 2012 -0400 +commit d0f88e19577d9b914922f83049075b7786f3d8df +Author: Hugh Waite +Date: Wed Jul 3 10:46:44 2013 +0100 - Fix [SIPR-783]: respect answerer's app-index instead of using next available. + modules/websocket: Fix pkg memory leaks + + - Fix pkg memory leaks in error cases + - Fix incorrect memory allocation size for ws connections + - Fix typo in websocket stats -commit 53135e42d0048670a25908532bdb26706db48b7a -Author: Peter Dunkley -Date: Thu Nov 1 15:54:51 2012 +0000 +commit 074f12c5a444188aa023797ac70e2d38d225cb18 +Author: Hugh Waite +Date: Wed Jul 3 10:39:32 2013 +0100 - core: Fixed typo that broke the build + modules/tls: Free TLS data for secure websocket connections -commit 4ef839851ef518815df38a9ae73e948719784e89 +commit c5081ad634742d88e56e4fcc097b756098119e4e Author: Daniel-Constantin Mierla -Date: Wed Oct 31 20:21:07 2012 +0100 - - kamailio.cfg: add option to set pstn gw port - -commit 7b3f234106adebd0a3ab069add170f0d23f1f592 -Author: Peter Dunkley -Date: Wed Oct 31 17:48:37 2012 +0000 +Date: Wed Jul 3 23:23:40 2013 +0200 - modules/tm: corrected a mis-leading error message + uac_redirect: fetch all contact headers in redirect replies + + - only first header was considered for redirect handling + - based on a report by Geoffrey Mina + - generate fake ruid (used as instance and user-agent) to satisfy the + requirements of t_load_contacts()/t_next_contacts() -commit 014d1000055d8ee93ef35336b1701674fe23a675 -Author: Peter Dunkley -Date: Wed Oct 31 17:48:17 2012 +0000 +commit fa0339b1906690f009786fc9ed92c73a8c9e6520 +Author: Daniel-Constantin Mierla +Date: Tue Jul 2 23:32:37 2013 +0200 - core: corrected some mis-leading error messages + dialog: detect if no trasaction is created after config execution for new dialogs + + - release the dialog to avoid endless storage in state 1 -commit 03c080376e26aeae8261d2ff12fc290a3925ef91 +commit b4682cac2e2f151288a411018da077b6d1526eca Author: Daniel-Constantin Mierla -Date: Wed Oct 31 14:40:25 2012 +0100 +Date: Tue Jul 2 21:40:32 2013 +0200 - kamailio.cfg: updated wiki link to match the version + kamailio-basic.cfg: added basic cfg config file + + - get the same set of configs as expected by former ser flavour -commit 3ce2efce27983e0fe818ff4e139c9589dbbfeb4a -Author: Marius Zbihlei -Date: Wed Oct 31 15:36:05 2012 +0200 +commit 6cf3ab0ca6f38d1d2e60dbc644bb4d2fb563919a +Author: Daniel-Constantin Mierla +Date: Mon Jul 1 15:22:33 2013 +0200 - modules/msrp : small documentation fix + dialog: increment cseq in early stage for PRACK and UPDATE + + - rework from a patch by Halina Nowak -commit 8a00d03a9328fd5ab4740f52ac47070e64f05236 -Author: Peter Dunkley -Date: Tue Oct 30 22:35:45 2012 +0000 +commit 71d7dc6bc750406d510e0571e05da3966911cfea +Author: Daniel-Constantin Mierla +Date: Mon Jul 1 14:51:03 2013 +0200 - modules_k/xcap_server: Enhanced org.oma.xcap-directory implementation + dialog: avoid realloc of memory for cseq when setting leg info - - Can now use a modparam to force the scheme in the listing URLs to a specific - value (default is to work out based on whether the connection is TCP or TLS). - - Can now use a modparam to force the hostname in the listing URLs to a - specific value (default is to work out based on the (mandatory) Host: header - or destination IP address and port). - - Updated README + - free already allocated structs when needed + - has part of a patch by Halina Nowak -commit 953a1d12685a917de68aff31c7172792dd816302 -Author: Peter Dunkley -Date: Tue Oct 30 17:21:27 2012 +0000 +commit ed6dbb0ca11206049bee9ab515ce071eb70e7b63 +Author: Daniel-Constantin Mierla +Date: Mon Jul 1 14:44:45 2013 +0200 - pkg/kamailio/(centos|fedora): Updated .spec and BoxGrinder appliances + dialog: fixed callee cseq reference - - Added xhttp_pi module + - part of patch by Halina Nowak -commit 18220b91255f9a563ce56f1d05fe97905e7fe2d9 -Author: Olle E. Johansson -Date: Mon Oct 29 21:57:32 2012 +0100 +commit 1123ed46ee847be83f35aa485a1ef6712566bc09 +Author: Victor Seva +Date: Mon Jul 1 13:37:42 2013 +0200 - UAC: Documentation updates and typo fixes + core: Also consider PROTO_WS(S) in forward(). -commit c244c7aeac06e4707ae76571dc73b804af31640f -Author: Olle E. Johansson -Date: Mon Oct 29 19:50:48 2012 +0100 +commit 8f6dc39a0fcd9035a2bd5bff01e51fc3fc7671fd +Author: Richard Good +Date: Mon Jul 1 11:47:50 2013 +0200 - uac Fixing formatting + dialog_ng: include dialog function dlg_get in dialog_ng + - In first iteration of dialog_ng module the dialog function dlg_get was not included + - This function is now included; it searches and sets current dialog based on Call-ID, From-Tag and To-Tag -commit 7bd4eda6d169c89e8a42cbd94e8d008700109ceb -Merge: 212cf0d c70f884 -Author: Olle E. Johansson -Date: Sun Oct 28 21:12:03 2012 +0100 +commit b252d4ec79446bd915fe2eb6bcf8556d3275343c +Author: Henning Westerholt +Date: Sun Jun 30 16:06:16 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router - - * 'master' of ssh://git.sip-router.org/sip-router: - modules_k/nathelper: add_contact_alias ipv6 fix - lib/srdb1/schema: use &ip_addr_len; entity in address and lcr_gw schema + memcached: document new memory parameter for memory manager setting -commit 212cf0d3c0d220affbafa545795ff5d0bf03b97d -Author: Olle E. Johansson -Date: Sun Oct 28 21:09:51 2012 +0100 +commit 736fab01bafba394f4b81aa20a63bf827baa2a13 +Author: Henning Westerholt +Date: Sun Jun 30 15:50:29 2013 +0200 - permissions - change openser => kamailio + memcached: update module docs, patch from Charles Chance, charles dot chance at sipcentric dot com -commit c70f884988c3f9298fa4d40ef12c69eea9da26a5 -Author: Juha Heinanen -Date: Sun Oct 28 16:07:25 2012 +0200 +commit df41d7f4e0cd8bd0c328f94360a6b3a3f3e9d59b +Author: Henning Westerholt +Date: Sun Jun 30 15:42:17 2013 +0200 - modules_k/nathelper: add_contact_alias ipv6 fix + memcached: fix crash during shutdown, make used memory manager configurable - - When add_contact_alias() is called without arguments, it now adds brackets - around received ipv6 address in order to make $du syntactically valid. + * fix a crash during shutwdown, as reported from Dragos Oancea, droancea at yahoo dot com + * make memcache client library memory manager configurable, as default use + the one from the system as this is probably the most tested configuration + in the field + * the internal memory manager should provide a better performance in this case, + but as the old library has some issues with the internal one, we better stay + with this + * documentation will be provided in the next commit -commit dba0691a98a329be489d83dfc1cd9560419bc35e -Author: Juha Heinanen -Date: Sun Oct 28 14:32:36 2012 +0200 +commit 811ed09b1c8cff014d3135967c8a3cda1bec569d +Author: Richard Good +Date: Tue Jun 25 15:42:44 2013 +0200 - lib/srdb1/schema: use &ip_addr_len; entity in address and lcr_gw schema + modules/ims_icscf: updated documentation + - updated documentation to use route blocks after async diameter -commit 0c130b85e8081af15188ec87d5e55d70c96de46f -Author: osas -Date: Sat Oct 27 12:08:49 2012 -0400 +commit 8f1904fd0a0b305b2c528df0d1d3c27d5eef0c7d +Author: Richard Good +Date: Tue Jun 25 15:41:42 2013 +0200 - fix default db in docbook + modules/ims_auth: updated documentation + - updated documentation to use route blocks after async diameter -commit e4453d91f612a8d651176d62529bc24edb54bf59 -Author: osas -Date: Sat Oct 27 12:05:18 2012 -0400 +commit bf08aa1a3859766caf0842fdd30b9fc2f4a4ff43 +Author: Richard Good +Date: Tue Jun 25 14:11:13 2013 +0200 - fix test directory after openser to kamailio migration + IMS example config files: update icscf and scscf config files to correctly use async route blocks + - This fix updates the example ICSCF and SCSCF config files to correctly use route blocks for the replies of any asynchronous Diameter messages -commit 923b738f8f021c349b0d0ba4faaac1b0c6bcf246 -Author: osas -Date: Sat Oct 27 12:00:28 2012 -0400 +commit 0d5622531d71d0b0ab3fb25a13c3ea1f46581512 +Author: Richard Good +Date: Tue Jun 25 14:09:00 2013 +0200 - more openser to kamailio migration + modules/ims_icscf: execute route block on async reply to UAR and LIR + - Changed this to make the use of async CDP cleaner + - Fixes inconsistencies we are experiencing with async TM and not using route blocks + - Note this fix is for UAR replies called from I_perform_user_authorization_request() and LIR replies called from I_perform_location_information_request() -commit e7a75db1982a48efb83bd9ba96036dbb6da541e1 -Author: osas -Date: Sat Oct 27 11:39:29 2012 -0400 +commit 6af810edde27d087c86432f42d9aec0636b3a740 +Author: Richard Good +Date: Tue Jun 25 14:07:12 2013 +0200 - xhttp_pi: new web provisioning interface module + modules/ims_auth: execute route block on async reply on REG MAR + - changed this to make the use of async CDP cleaner + - Fixes inconsistencies we are experiencing with async TM and not using route blocks + - Note this fix is for REG MAR called from ims_www_challenge() -commit 70f5cefa6dcc8562d58e58e7531d6021dbd88912 -Author: Peter Dunkley -Date: Sat Oct 27 00:08:54 2012 +0100 +commit 87ea473c15454742fc9f3a0cedd46cf09c663f3c +Author: Richard Good +Date: Tue Jun 25 14:04:46 2013 +0200 - modules/websocket: Updated example kamailio.cfg - - - More tweaks to MSRP over WebSocket + modules/ims_registrar_scscf: execute route block on async reply on REG SAR + - changed this to make the use of async CDP cleaner + - Fixes inconsistencies we are experiencing with async TM and not using route blocks + - Note this fix is REG SAR called from save() -commit 5a8b8da4abda5b20599add078efe4681aeb8dfa7 -Author: Peter Dunkley -Date: Fri Oct 26 16:09:09 2012 +0100 +commit 584508d5374726bf523a23693da86f0763b34767 +Author: Daniel-Constantin Mierla +Date: Sun Jun 23 05:37:34 2013 +0200 - modules/websocket: Updated example kamailio.cfg + core: allow c++ style of one line comments - - Better MSRP over WebSocket support - -commit e804a70e47f938338e6d93930c297ff958f16e22 -Author: Peter Dunkley -Date: Thu Oct 25 21:36:28 2012 +0100 + - can make easier the read of config files with defines and comments - modules_k/xcap_server: Tidied up example - -commit c062817d0833a0d24a6afacc928f980298be1d60 -Author: Peter Dunkley -Date: Thu Oct 25 21:35:57 2012 +0100 +commit 756620fd0c1912e492781f05fde944f9035d95b3 +Author: Carsten Bock +Date: Mon Jun 24 22:13:26 2013 +0200 - modules/websocket: Updated example kamailio.cfg - - - Reflects latest MSRP related updates + examples: Make S-CSCF more quiet -commit 682f002698c761c5570e587db5c48653668a1bb8 -Author: Peter Dunkley -Date: Thu Oct 25 21:34:23 2012 +0100 +commit 14ef8ff8d460bc22f0df4793e11455487ea91aab +Author: Carsten Bock +Date: Mon Jun 24 22:10:33 2013 +0200 - modules/msrp: Updated example in README - - - Use new pv_www_authenticate() variant to pass in $msrp(method) - - Send responses to SEND that we are relaying to clients - - Handle REPORTS as end-to-end requests (that are not responded to) - - Send 501 for requests that are not AUTH, SEND, or REPORT + auth_ims: New option to store authentication vectors using the IMPU only, instead of IMPI/IMPU. + (this is required to work with some SIP-clients) + - added some more debug info + - replaced the hashing function with core_hash from Kamailio-core -commit 6b9e4fcc176e3141f25c74f17f599b88d30f8ff9 -Author: Peter Dunkley -Date: Thu Oct 25 21:09:40 2012 +0100 +commit 9fc55badeaa54d2cfde7a152459b957f8ae5a192 +Author: Carsten Bock +Date: Mon Jun 24 18:08:29 2013 +0200 - modules/msrp: Better fix for the relay problem + Added missing parameters to documentation -commit f61a61e44168a213a065e4a7dc1c751a874fbce3 -Merge: a4f28b9 a0b36a9 -Author: Peter Dunkley -Date: Thu Oct 25 20:35:13 2012 +0100 +commit 72d79d20964ac192dbe1cbe35f48c21ec749c39a +Author: Carsten Bock +Date: Mon Jun 24 18:08:05 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router - - * 'master' of ssh://git.sip-router.org/sip-router: - Makefile.utils: add rule to create man page dir + Fixed Editor note -commit a4f28b9707b2c55af87138cca531fdb1badd7023 -Author: Peter Dunkley -Date: Thu Oct 25 20:17:48 2012 +0100 +commit bd1a534515678f69385d00b08699b434e1fab8df +Author: Jason Penton +Date: Mon Jun 24 15:24:49 2013 +0200 - modules_k/xcap_server: Added explicit parsing of headers before looking for HTTP ETag and Host headers + modules/ims_registrar_scscf: execute route block on async reply of unreg. SAR + - changed this to make the use of saync CDP cleaner + - fixes inconsistencies we are experienceing with async TM and not using route block -commit a0b36a905afda1476085a645faf29bd534ed4949 +commit 678ab425062e6c6a30b5f1d37025c2bbdcd5425d Author: Daniel-Constantin Mierla -Date: Thu Oct 25 21:16:26 2012 +0200 +Date: Fri Jun 21 04:23:38 2013 +0200 - Makefile.utils: add rule to create man page dir + auth: set ids for elements in the documentation - - reported by Peter Dunkley - -commit 067051b8c9da440566cbd09d80bb1abd424f68de -Author: Peter Dunkley -Date: Thu Oct 25 20:17:05 2012 +0100 - - modules/websocket: Added explicit parsing of all headers before searching for WebSocket specific headers + - split checks parameters in own section for easier reference -commit 6273279621dd4a8e6f6fe6a2faa548755a3eacd6 -Author: Peter Dunkley -Date: Thu Oct 25 19:59:31 2012 +0100 +commit fc83d3b1f1dd0934e5638b91d11e27f47880b411 +Author: Carlos Ruiz Diaz +Date: Thu Jun 20 17:34:49 2013 -0400 - modules_k/xcap_server: Removed some test debug that was left in by mistake + Added support to limit number of calls per customer/profile + + - added function cnxcc_set_max_channels() per customer/profile + - added function cnxcc_get_channel_count() per customer/profile + - added function cnxcc_terminate_all() to terminate calls per customer/profile + - added select @cnxcc.channels["customer/profile"].count + - added modified version of kamailio-cnxcc.cfg to reflect changes and examples -commit 53175995fb7fe7d760c063c4d542e991c1513344 -Author: Peter Dunkley -Date: Thu Oct 25 19:45:04 2012 +0100 +commit 8f261c5baeb01d5bee0437249b7f6d3d81bee209 +Author: Victor Seva +Date: Thu Jun 20 08:34:05 2013 +0200 - modules/app_lua: Updated because of recent changes to auth and auth_db + modules/dialplan: allow xavp vars as parameters. -commit 5c71412cf3530f19edc4bee38cc9c3857ddc1eb0 -Author: Peter Dunkley -Date: Thu Oct 25 19:44:32 2012 +0100 +commit 6b27e0d5519f8e29bc31c553a67367975acfe7ec +Author: Victor Seva +Date: Thu Jun 20 08:32:47 2013 +0200 - modules_k/auth_db: Added an optional parameter for method to www_authenticate + modules/dialplan: use pv_cache_get function instead of create pv_spec_t -commit 3f35106f791cf0f6638128539fd147ad2f44da27 -Author: Peter Dunkley -Date: Thu Oct 25 19:43:55 2012 +0100 +commit 1207edd603937e3e43ce20207bfeae0284f16489 +Author: Daniel-Constantin Mierla +Date: Mon Jun 17 14:48:52 2013 +0200 - modules/auth: Added an optional parameter for method to pv_www_authenticate() + pv: $xavp(name) is marked as PVT_XAVP type -commit 558e5294f697519917b58ddc451408b3d71aff4f -Merge: 0ed33c0 019ab5e -Author: Peter Dunkley -Date: Thu Oct 25 18:22:21 2012 +0100 +commit 424691bfae61b00fa6d5f1f75e95fe60bf823526 +Author: Daniel-Constantin Mierla +Date: Mon Jun 17 14:47:56 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + core: define PVT_XAVP as type for xavp pseudo-variables - * 'master' of ssh://git.sip-router.org/sip-router: - resolve.c: make dns query only on name that has valid syntax + - they may need special handling for debug purposes -commit 0ed33c0c3332ed3868509d8ae0b035d9420a7df4 -Author: Peter Dunkley -Date: Thu Oct 25 18:21:41 2012 +0100 +commit c5573dddc4c11898fb68365e9a311aff0f1690c8 +Author: Daniel-Constantin Mierla +Date: Mon Jun 17 11:00:29 2013 +0200 - modules/msrp: Fixed a problem with relaying that I added when I put in WebSocket support + pipelimit: fixed typo in module parameter name + + - patch by Krischan Udelhoven -commit 019ab5e2d6730b764b20a890f9a3b5f9237b6338 -Author: Juha Heinanen -Date: Thu Oct 25 19:50:17 2012 +0300 +commit 03188db86347013ef43d3615c12be4b696349098 +Author: Victor Seva +Date: Mon Jun 17 10:48:45 2013 +0200 - resolve.c: make dns query only on name that has valid syntax + modules/app_lua: fixed runtime warning: exports dlflags interface is deprecated -commit aebeeee1993e4cce0d3288f1ccd8d17f3efee925 -Author: Peter Dunkley -Date: Thu Oct 25 17:34:39 2012 +0100 +commit 4f3d04d547c66a1b59398cf80e93974175141514 +Author: Daniel-Constantin Mierla +Date: Sun Jun 16 17:17:36 2013 +0200 - modules_k/xcap_server: Updated example event_route[] in README + topoh: safety check for To header - - Now includes: - - updating of RLS subscriptions when RLS documents change - - pidf-manipulation - - clean handling of org.openmobilealliance.search - - org.openmobilealliance.xcap-directory support + - protection for the case when sanity module checks are not enabled + - reported in FS#303 by Michel de Weerd -commit 4d48c5d485c9c1155b8b7471fbda56a80a218d48 -Author: Peter Dunkley -Date: Thu Oct 25 17:33:46 2012 +0100 +commit 330aeda83dc7ed927cf994e4b21ff44ab2d2c215 +Author: Daniel-Constantin Mierla +Date: Sun Jun 16 16:40:59 2013 +0200 - modules_k/xcap_server: Added support for the org.openmobilealliance.xcap-directory auid - - - Directory listing worked out on-the-fly based on DB contents + mtree: fixed typo in log function name -commit f6a38aa7f80cdc02431bdd3d314c82663a3d33a4 -Author: Peter Dunkley -Date: Thu Oct 25 17:32:43 2012 +0100 +commit 69c409e14c568fae45e449122e5b4efbf009bf41 +Author: Daniel-Constantin Mierla +Date: Sun Jun 16 16:39:14 2013 +0200 - modules_k/xcap_client: Added new #define for xcap-directory auid + core: added function to get the pv cache table + + - pv cache struct moved to header file -commit 5f813fdab34cb7507bc4dcc1b66ff87f90f69c9a +commit ea772b354f84eccff0190234025f057879ff33ed Author: Daniel-Constantin Mierla -Date: Thu Oct 25 10:56:41 2012 +0200 +Date: Sat Jun 15 22:03:58 2013 +0200 - xcap_server: use a static table to keep the list of supported auids + kamctl: new commands can be defined in separate files + + - write new kamctl commands either in CFGDIR/kamctl.newcmd.ext or + ~/.kamctl/kamctl.newcmd.ext + - 'newcmd' has to be replaced with the name of the command + - the file must include cmd_newcmd() function which is executed with the + parameters after the command name + - example: adding new command 'sample' + - content of ~/.kamctl/kamctl.sample.ext file: + + usage_sample() { + echo + mecho " -- command 'sample' - kamctl sample extension command" + echo + cat < -Date: Thu Oct 25 10:01:08 2012 +0200 +Date: Sat Jun 15 19:33:50 2013 +0200 - acc(k): fixed typo in acc_db_request() example - - - reported by Bernie Höneisen, FS#251 + kamctl: set internal version to 4.1.0 -commit 22f9a675863f85d934afa5e7c09061c66497042b +commit af6a5d7422b614e5a143bc987806181086360c34 Author: Daniel-Constantin Mierla -Date: Thu Oct 25 09:25:17 2012 +0200 +Date: Sat Jun 15 19:31:43 2013 +0200 - core: use cloned value to parse pv name for caching - - - patch by Hugh Waite + tm: readme updated based on latest docbook -commit 9bacc95d2a0c949e81032dd0cc392dfaa7c0a2c1 +commit 5f1b144a7e63b464af3e5e0e7b74cf7e7e1e8668 Author: Daniel-Constantin Mierla -Date: Wed Oct 24 12:17:30 2012 +0200 +Date: Sat Jun 15 19:30:59 2013 +0200 - kamctl: use kamcmd instead of sercmd + tm: documented dn_reuse_rcv_socket parameter -commit c93d2d1b290c030f969ce1f62f106059226457ea -Merge: c4b3b04 7e67e6b -Author: Olle E. Johansson -Date: Wed Oct 24 11:47:41 2012 +0200 +commit 30e26f22600c3f50f0ea556bf2872ef7b0807c6a +Author: Daniel-Constantin Mierla +Date: Sat Jun 15 19:08:38 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router - I don't really know what this means and why this commit happens... + tm: new module parameter - dns_reuse_rcv_socket - * 'master' of ssh://git.sip-router.org/sip-router: - .gitignore: added few more patterns to ignore - pkg/kamailio/rpm: specs updated for rename of sercmd to kamcmd - sercmd: added basic man page - sercmd: builds and installs as kamcmd when FLAVOUR=kamailio - Makefile.utils: new target to install manpage for util tools - kamctl: replaced openser with kamailio in variable and function names - core: print modparam type id in log when parameter not found - modules/rtpproxy: added 't' flag to rtpproxy_destroy and force_rtp_proxy - Added new flag 't' to rtpproxy_destroy function that makes it possible do delete whole call even when To tag is present in request/reply. In force_rtp_proxy the flag is ignored. + - control reuse of the receive socket for additional branches added by + dns failover + - if 1, the rcv socket is used, if not it depends on mhomed - when that + is 0, the first socket is used, otherwise will be selected based on + routing table + - default is 0 + - therefore beware when setting this parameter and mhomed=1 + - based on discussion for FS#313 -commit 7e67e6bad8f56e8ed25673b24f132e0f5d9d17fc +commit 350f4f8971a679f0d6566361b2a7bb17956a6a7e Author: Daniel-Constantin Mierla -Date: Wed Oct 24 08:39:59 2012 +0200 +Date: Sat Jun 15 18:54:59 2013 +0200 - .gitignore: added few more patterns to ignore + tm: copy tm routing blocks ids for new branches added by dns failover - - kamcmd binary and second vi swap file + - patch by Jasmin Schnatterbeck, part of FS#313 -commit 02b389ec2bca98dc158cd6ce255ad8c4aa1f570e +commit e7da9f72beb1c97b79a516ecdd19db8971dea508 Author: Daniel-Constantin Mierla -Date: Wed Oct 24 00:16:58 2012 +0200 +Date: Sat Jun 15 18:23:48 2013 +0200 - pkg/kamailio/rpm: specs updated for rename of sercmd to kamcmd + kamailio.cfg: route subscribe for event message-summary to voicemail server -commit e6bdf8a0317c1a62931c07a8bd40fbc65fa1398e +commit da016636be6e0ca9a65b645b6e30ec0b1dafeef4 Author: Daniel-Constantin Mierla -Date: Wed Oct 24 00:06:48 2012 +0200 +Date: Fri Jun 14 08:42:37 2013 +0200 + + kamctl: added show command to display user attributes in subscriber table + +commit 519fe88fc41cae4674ce4bc943b84eb522af654b +Author: Victor Seva +Date: Wed Jun 12 15:58:29 2013 +0200 - sercmd: added basic man page + core: do not repeat key names on xavp_get_list_key_names function result -commit e7e131d5b5abec9440f0963375abd1940d65e3f4 +commit b5538401a01057318063a4e4646c9e7a2fb967c0 Author: Daniel-Constantin Mierla -Date: Wed Oct 24 00:05:13 2012 +0200 +Date: Wed Jun 12 08:50:26 2013 +0200 - sercmd: builds and installs as kamcmd when FLAVOUR=kamailio - - - avoid packaging conflicts with ser (both packages attempt to install - same file) + mtree: print more details if the record in db is broken -commit e378b3c1038eab768a0d1304166a7aa2ef6e361a +commit 862e267267ccd58e096f267ac5aab03cee042b7c Author: Daniel-Constantin Mierla -Date: Wed Oct 24 00:04:11 2012 +0200 +Date: Tue Jun 11 18:47:54 2013 +0200 - Makefile.utils: new target to install manpage for util tools + mtree: make log message on not maching character a debug instead of error -commit e102ae728214192184397b8e802228f9695f45f2 +commit 407608dfef8e80ef0beaefc61df96e40060b952f Author: Daniel-Constantin Mierla -Date: Tue Oct 23 16:49:29 2012 +0200 +Date: Tue Jun 11 18:41:05 2013 +0200 - kamctl: replaced openser with kamailio in variable and function names + registrar: readme regenerated -commit 22dd8d6524a95b8bf0246adca99f0049c16fb76f +commit c228851e068a080050c79107c760f8ab5ffae967 Author: Daniel-Constantin Mierla -Date: Tue Oct 23 16:17:24 2012 +0200 +Date: Tue Jun 11 18:39:31 2013 +0200 + + registrar: fixed typo in example of xavp_rcd parameter - core: print modparam type id in log when parameter not found +commit 9589466916305146fb4f982542c3f3a51126dcef +Author: Daniel-Constantin Mierla +Date: Tue Jun 11 18:37:32 2013 +0200 -commit d8d80082aad32fd28484d30b2c4e0c98853cda31 -Author: Juha Heinanen -Date: Mon Oct 22 12:15:54 2012 +0300 + registrar: more debug messages when adding ruid xavp + + - free local ruid xavp if cannot be added to root list - modules/rtpproxy: added 't' flag to rtpproxy_destroy and force_rtp_proxy - - Added new flag 't' to rtpproxy_destroy function that makes it possible - do delete whole call even when To tag is present in request/reply. In - force_rtp_proxy the flag is ignored. +commit 106916abc67d2badc43eac03ef175efbbac4f6d1 +Author: Camille Oudot +Date: Tue Jun 11 16:34:49 2013 +0200 -commit c4b3b04eb59de8b1b72675decfa06ff3cb779934 -Author: Olle E. Johansson -Date: Sun Oct 21 20:09:07 2012 +0200 + modules/ims_isc: several safety checks + + - fixed potential buffer overflow + - fixed potential crash if regcomp fails - mtree Documentation fixes +commit bddb9a5bf38d4904a9e18dc187fc8c0507001ab5 +Author: Camille Oudot +Date: Tue Jun 11 16:24:15 2013 +0200 -commit 8818925e7974cd5d826ad105b77a59f17636badf -Author: Olle E. Johansson -Date: Sun Oct 21 19:13:50 2012 +0200 + modules/ims_isc: fix several compiler warnings - pua: Fixing documentation typos, adding reginfo +commit 4af0bc13901525a5638c2c64b863f377e033903f +Author: Vicente Hernando +Date: Mon Jun 10 12:14:54 2013 +0200 -commit 9683068672ffb4679b6caa3d1a3a8b51aeedffd9 -Author: Olle E. Johansson -Date: Sun Oct 21 19:02:56 2012 +0200 + app_lua: solve crash when setting a variable not convertible to string. - sipcapture Fixing typos in documentation +commit b5f0a62a2acfbf0f4ce9cd146cb342d717e662a9 +Author: Camille Oudot +Date: Tue May 28 17:53:07 2013 +0200 -commit 4ba7d41bc078e554d48316b2c3e0b6435b55f60a -Author: Olle E. Johansson -Date: Sun Oct 21 18:54:33 2012 +0200 + modules/ims_registrar_scscf: safety check for log line when recieving an SAR_UNREGISTERED_USER response - SDPops Typo fixes in documentation +commit fd8dfb71d0eeae891ad0c83ff332929d54f3a3ec +Author: Ovidiu Sas +Date: Fri Jun 7 12:09:38 2013 -0400 -commit 2aa02e80cd76f38e812bfddf32326248e9b74cf8 -Author: Olle E. Johansson -Date: Sun Oct 21 18:49:43 2012 +0200 + Makefile: update de-stable target: squeeze -> wheezy - Ratelimit: Fixing typos +commit e41230071e367015ecf794c147c60fda0bcd1907 +Author: Ovidiu Sas +Date: Thu Jun 6 15:21:19 2013 -0400 -commit ca3f80f76ca5be83407f8d8b542c8390982459d4 -Merge: 84f6596 a041479 -Author: Olle E. Johansson -Date: Sun Oct 21 18:32:33 2012 +0200 + registrar: print bogus AoR in error log - Merge branch 'master' of ssh://git.sip-router.org/sip-router - - * 'master' of ssh://git.sip-router.org/sip-router: - modules/rtpproxy: some README improvements - pkg/kamailio/fedora/16: More tweaks to .spec - pkg/kamailio/(centos|fedora): Updated boxgrinder appliance definitions - pkg/kamailio/fedora/16: added SCTP dependencies to .spec - pkg/kamailio/fedora/16: Updated .spec file - Makefiles: Updated Makefiles to use db2x_docbook2man when docbook2x-man is not installed - pkg/kamailio/fedora/16: Updated .spec to set ownership of /etc/kamailio to kamailio.kamailio - modules/websocket: Updated example configuration file - modules/msrp: Updated MSRP configuration example - rtpproxy: allow flags parameter to rtpproxy_destroy() - -commit 84f6596ccbb107563386acb52a2c60fd3cc0df22 -Author: Olle E. Johansson -Date: Sun Oct 21 18:30:32 2012 +0200 +commit ea6354c53c8871e4e117b7434645ab4fee811612 +Author: Daniel-Constantin Mierla +Date: Thu Jun 6 15:58:58 2013 +0200 - TLS Documentation updates + acc_radius: exit at startup if radius_config is not set -commit a041479bd7153b3a3b665a3ed27a4da12cb9b1d1 -Author: Juha Heinanen -Date: Sun Oct 21 17:29:44 2012 +0300 +commit 8e937d260d0ff41f50be56e0a46ede44554f3f99 +Author: Daniel-Constantin Mierla +Date: Thu Jun 6 11:47:10 2013 +0200 - modules/rtpproxy: some README improvements + cfgutils: updated docs to specify correct time unit for usleep + + - it is microseconds, pointed by David K -commit 6135c98b472a755015aacc640b65e9a5c202c122 -Author: Olle E. Johansson -Date: Sat Oct 20 17:47:32 2012 +0200 +commit c4b29f6fac6155b9b087737df5956b687ff4e36a +Author: Daniel-Constantin Mierla +Date: Thu Jun 6 09:09:14 2013 +0200 - Documentation updates + kamailio.cfg: reset $du for voicemail re-routing in failure route -commit e39b774a4f0aec0bc6a6fe07b0eace7378b0bcbb -Author: Peter Dunkley -Date: Sat Oct 20 03:55:01 2012 +0100 +commit c8e928a2c78ee963f807791bea5aacdd31e05936 +Author: Daniel-Constantin Mierla +Date: Thu Jun 6 09:05:28 2013 +0200 - pkg/kamailio/fedora/16: More tweaks to .spec + siputils: added new function is_first_hop() - - The auth_diameter and malloc_test modules were being built during install - instead of in the build section + - detect if it is first hop after original sender + - added section ids for functions, remove a duplicate content for + is_rpid_user_e164() -commit 4b7d47321fa4648452040e27ba619dee72e0b6b5 -Author: Peter Dunkley -Date: Sat Oct 20 03:12:05 2012 +0100 +commit 0193489cca56f58b512f5379c078c98a366c17e2 +Author: Daniel-Constantin Mierla +Date: Wed Jun 5 22:44:13 2013 +0200 - pkg/kamailio/(centos|fedora): Updated boxgrinder appliance definitions + kamailio.cfg: few updates related to nat traversal + + - added "co" flags to rtpproxy_manage() to change all IPs in sdp, many + phone get confused if only media ip is changed + - add nat=yes parameter only for in branch route to avoid multiple + occurences -commit b4e7d304ad7149d10d69c85454141e393c6d0fb7 -Author: Peter Dunkley -Date: Sat Oct 20 03:06:30 2012 +0100 +commit 4b65964dbe1f38bcf867301d43933f9bbf91ab7d +Author: Jason Penton +Date: Wed Jun 5 08:58:29 2013 +0200 - pkg/kamailio/fedora/16: added SCTP dependencies to .spec + module/ims_auth: protection against crash if there is no auth vector initialised. + - patch submitted by Camille Oudot -commit 113c0e63686e8d3cdca21e9a6399dce727ee866f -Author: Peter Dunkley -Date: Sat Oct 20 02:38:18 2012 +0100 +commit 2e466866468a71d4a6e7589cae69ae606b194716 +Author: Jason Penton +Date: Wed Jun 5 08:46:13 2013 +0200 - pkg/kamailio/fedora/16: Updated .spec file - - - Added installation of auth.7.gz for Fedoa now that manpages are built for - Fedora - - Added "make utils" to build section - - SCTP and STUN now included in build - - Removed kamailio-tls package - tls module now in main Kamailio RPM as that has - openssl as a dependency for STUN + modules/ims_isc: Add support for P-Serverd-User header + - This header allows a triggered Application Server to know the IMS user for who it was + triggered, and in what state (originating/terminating, registered/unregistered) + - Thanks to Camille Oudot for patch! -commit c9088190cf29b7d561ca2bded6266b3e21d51d8b -Author: Peter Dunkley -Date: Sat Oct 20 01:23:51 2012 +0100 +commit cb4cfa492aa977df3f80b7d93001559ecb1bcdec +Author: Daniel-Constantin Mierla +Date: Tue Jun 4 23:21:11 2013 +0200 - Makefiles: Updated Makefiles to use db2x_docbook2man when docbook2x-man is not installed - - - db2x_docbook2man is what Fedora contains + sercmd: pass OS define at compile time -commit eb45b8ccb4d859e7726889a4fae50941bd6c8e43 -Author: Peter Dunkley -Date: Sat Oct 20 00:29:07 2012 +0100 +commit af1c2af129edeb49c6f2c826ec2c675e72c2486d +Author: Daniel-Constantin Mierla +Date: Tue Jun 4 22:17:52 2013 +0200 - pkg/kamailio/fedora/16: Updated .spec to set ownership of /etc/kamailio to kamailio.kamailio + sercmd: possibility to enable EXTRA_DEBUG via compile time option - - Means that file-based DB (e.g. sqlite) files kept in /etc/kamailio can be - written to by processes (including kamailio itself) run by the kamailio user. + - should get rid of empty DBG() resulting in unused init variable -commit ae485d398f17ae7040ac1a0799842e6bb0e42bd8 -Author: Andrew Mortensen -Date: Fri Oct 19 17:24:44 2012 -0400 +commit 0f54ee9c29faf767a5ec38de9f70bfaab8836ac9 +Author: Juha Heinanen +Date: Tue Jun 4 10:44:36 2013 +0300 - Remove unused variables and debugging. + modules/lcr: use pv_cache_get - Quiet compiler warnings. + - Applied patch by Victor Seva. -commit cbc6e06cb95b69502095971c55b7a83a683c0537 -Author: Andrew Mortensen -Date: Fri Oct 19 17:16:59 2012 -0400 +commit 76709d2ea2eb3c05cf62a3368310f50e8bfee355 +Author: Klaus Darilion +Date: Mon Jun 3 22:13:20 2013 +0000 - Fix [SIPR-723]: must release appearance when script sends error w/ t_reply - - Using callback for TMCB_RESPONSE_READY event, which is invoked with a - FAKED_REPLY when t_reply() is called. - - This still means that the SCA_UPDATE route will need to be called early - enough in the configuration so that the callback is registered when the - script calls t_reply(). + modules/auth_db: regenerate README -commit cb74d38f52d77f6ee11d7083ab0adabe5e6f34a9 -Author: Peter Dunkley -Date: Fri Oct 19 14:34:54 2012 +0100 +commit 2940d5012250a134745a2cf9abed2f88ed95576e +Author: Klaus Darilion +Date: Mon Jun 3 22:10:20 2013 +0000 - modules/websocket: Updated example configuration file - - - Use qop="auth" for MSRP authentication - - Support Expires: header in MSRP AUTH requests - - Add Expires: header to 200 OK responses to MSRP AUTH requests - - Authenticate MSRP AUTH requests off subscriber DB + modules/auth_db: document authentication return values -commit 70b0875fb968ef4747636c9f01882bf92138388a -Author: Peter Dunkley -Date: Fri Oct 19 14:25:35 2012 +0100 +commit 5bed1c2f9721405d5e6e0678f583aee474d4b9b9 +Author: Daniel-Constantin Mierla +Date: Mon Jun 3 23:23:15 2013 +0200 - modules/msrp: Updated MSRP configuration example + Makefile: added install-initd-centos target - - Enabled qop="auth" for authentication (mandated by RFC 4976) - - Added support for Expires: header in AUTH requests - - Added (mandatory) Expires: header to 200 OK responses to AUTH requests + - install centos specific init.d scripts -commit 13c2616d6b8a9f9f82979a531bac664832043597 +commit a17a32e5f7a3120c200d6e48fe91d7aa1dfd28b1 Author: Daniel-Constantin Mierla -Date: Fri Oct 19 11:53:17 2012 +0200 +Date: Mon Jun 3 20:53:05 2013 +0200 - rtpproxy: allow flags parameter to rtpproxy_destroy() + dialog: shift next timer run for keepalives of dialog - - it is optional parameter, but was not allowed by c code - - reported by Juha Heinanen + - reported by Daniel Tryba -commit 12d95216e12c5e5bab351921524b4029a126854b -Merge: da72036 5e886db -Author: Olle E. Johansson -Date: Thu Oct 18 18:39:15 2012 +0200 +commit 26b15ad0006defeb8df17dff090fd93ffa11ede6 +Author: Victor Seva +Date: Mon Jun 3 18:43:51 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/debugger: fixed last commit. - * 'master' of ssh://git.sip-router.org/sip-router: - all: OPENSER_MOD_INTERFACE replaced with KAMAILIO_MOD_INTERFACE - all: fixed matrix doc generation and updates for &defaultdb; - all: replaced db_url static value with &defaultrodb; in docs - all: replaced openser with kamailio in license and comments - dialog(k): run event route after setting cfg dlg vars - rtpproxy: regenerated readme for flags x and 3 - rtpproxy: documented flag 3 - rtpproxy: propage flags from rtpproxy_manage() to unforce_rtp_proxy() - pkg/gentoo: Added ebuild for v3.3.2 - Makefile: added uninstall target - modules_k/db_sqlite: fix memory leak in sqlops query - kamailio.cfg: handle UPDATE through nat traversal logic - auth_db(k): new function is_subscriber(uri, dbtable, flags) + - checked malloc result on dbg_init_pvcache. + - checked result of dbg_init_pvcache on mod_init. + - removed commented code. -commit 5e886dbbef6896ab2b1c0f6941587912a3b8694b -Author: Daniel-Constantin Mierla -Date: Thu Oct 18 15:46:13 2012 +0200 +commit 2312e2adc626f42d36d240a417bb488f19e95017 +Author: Victor Seva +Date: Mon Jun 3 15:10:27 2013 +0200 - all: OPENSER_MOD_INTERFACE replaced with KAMAILIO_MOD_INTERFACE + modules/debugger: new parameter log_assign - - OPENSER_MOD_INTERFACE still works if used in module Makefile + This parameter enables logging every single assign action on the config. -commit 0d9eec94cea33aeeb7dee79664bab512194316b1 -Author: Daniel-Constantin Mierla -Date: Thu Oct 18 14:46:37 2012 +0200 +commit 5d45ea50a7ebb53cfcfb04553a3152e61d1e6831 +Author: Elena-Ramona Modroiu +Date: Mon Jun 3 11:13:56 2013 +0200 - all: fixed matrix doc generation and updates for &defaultdb; + htable: documented the new rpc commands + + - htable.sets and htable.seti -commit f5ccfeaade8d4e7137c52b578fe52d1deff88fd8 -Author: Daniel-Constantin Mierla -Date: Thu Oct 18 14:36:46 2012 +0200 +commit 83eb9b7d7a9b4e1e2bf35d4e2b00573c176c8290 +Author: Elena-Ramona Modroiu +Date: Mon Jun 3 11:05:58 2013 +0200 - all: replaced db_url static value with &defaultrodb; in docs + htable: added rpc commands for setting items in a hash table - - regenerated the readmes for modules/ and modules_k/ + - htable.sets - set to a string value + - htable.seti - set to an integer value -commit 6c7802254f146f97b1548645d363a0aee9c0d7d4 -Author: Daniel-Constantin Mierla -Date: Thu Oct 18 14:18:19 2012 +0200 +commit 7cb062ce8eb9935b69298b61aa6a59450b97dbaf +Author: Juha Heinanen +Date: Sat Jun 1 17:47:58 2013 +0300 - all: replaced openser with kamailio in license and comments + modules/usrloc: rpc statistics command update - - some files were forgotten during renaming + - ul.db_users and ul.db_contacts now deal with unexpired records only + - new command ul.db_expired_contacts tells number of expired contacts -commit 2cdded28d9968a0b78f5ec8329ae6983d9ea77a9 +commit 09cc2207b265d51dcbc28279623bf9c597fa3b46 Author: Daniel-Constantin Mierla -Date: Thu Oct 18 09:54:53 2012 +0200 +Date: Fri May 31 17:05:40 2013 +0200 - dialog(k): run event route after setting cfg dlg vars + pua: release lock on not finding temp dialog - - in this way they (e.g., $DLG_lifetime) should be accessible in event - route + - patch by Halina Nowak -commit 5b597906be44996344e11edfc1b3b60e8f47dc75 +commit d5c4dda7932e8efe018beb77f8ca2e29a44aa185 Author: Daniel-Constantin Mierla -Date: Wed Oct 17 21:41:40 2012 +0200 +Date: Thu May 30 17:59:01 2013 +0200 - rtpproxy: regenerated readme for flags x and 3 + core: don't free pvar spec - is reference to cache + + - reported by Peter Dunkley -commit 63d577731291c3c2079544ce105521dda7bd8ebb -Author: Daniel-Constantin Mierla -Date: Wed Oct 17 21:33:45 2012 +0200 +commit 0577abba2abd869a0c3fb051289068e79986e6cd +Author: Hugh Waite +Date: Wed May 29 14:47:21 2013 +0100 - rtpproxy: documented flag 3 + documentation: Rebuild all modified READMEs -commit 393893a9d6b1fe586abe2a6cfa03680d494bb871 -Author: Daniel-Constantin Mierla -Date: Wed Oct 17 21:25:00 2012 +0200 +commit f67f6880bfa9f7a9f31b4a46106482ff41120c3c +Author: Hugh Waite +Date: Wed May 29 14:46:40 2013 +0100 - rtpproxy: propage flags from rtpproxy_manage() to unforce_rtp_proxy() - - - unforce_rtp_proxy() can take flags 1 or 2, previously it didn't take - any - - ignore all the other valid flags for rtpproxy_manage() in - unforce_rtp_proxy() - - added flag 3 - add first via branch if it request (like flag 1) or add - second via branch if it reply (like flag 2) - suitable for auto-pilot - usage with rtpproxy_manage() function + uid_uri_db: Fix TOC in documentation -commit 131e70db763aec71670466cc399e088bf96561f7 -Author: Claudio Furrer -Date: Wed Oct 17 14:38:52 2012 -0300 +commit 7bf8e5a0f125cf1878fbd7a81504ab67659fa3a9 +Author: Hugh Waite +Date: Wed May 29 14:46:24 2013 +0100 - pkg/gentoo: Added ebuild for v3.3.2 + uid_gflags: Fix TOC in documentation -commit 04b9fdd2b8d6dac67948f1cb5a76b4d34a65f228 -Author: Daniel-Constantin Mierla -Date: Wed Oct 17 12:52:34 2012 +0200 +commit 0882e6f8c2217b75f8d5082e1df5bf8f9291e125 +Author: Hugh Waite +Date: Wed May 29 14:46:04 2013 +0100 - Makefile: added uninstall target - - - it prints hints and commands to perform uninstall when installation is - done from sources + uid_domain: Fix TOC in documentation -commit ecf95eb0ada8bfacb93af7b82f39347c841229e4 -Author: Timo Teräs -Date: Wed Oct 17 09:00:14 2012 +0300 +commit db6762f45eb2f5809487b254e35edb55ea097fc1 +Author: Hugh Waite +Date: Wed May 29 14:45:49 2013 +0100 - modules_k/db_sqlite: fix memory leak in sqlops query - - Seems that most other database drivers release the database - resource only at free_result time, which I some how missed. - - Since we are doing a deep copy in store_result(), we can - just release the sqlite resources immediately raw_query(). - - Reported-by: Pedro Antonio Vico Solano + uid_avp_db: Fix TOC in documentation -commit c76035255e556d8272097281d3e0fd0ab918c608 -Author: Daniel-Constantin Mierla -Date: Tue Oct 16 21:59:28 2012 +0200 +commit 0bf496b9e9368d564835d5f97827ba7a7fcc8242 +Author: Hugh Waite +Date: Wed May 29 14:45:28 2013 +0100 - kamailio.cfg: handle UPDATE through nat traversal logic - - - BYE is handled via branch route as well - - set tm routes only if they are not set, allowing better plug and play - config snippets + uid_auth_db: Fix TOC in documentation -commit 1a3a35fd19d4b9ec04d84b7b8fa1e1cb43092bd9 -Author: Andrew Mortensen -Date: Tue Oct 16 15:41:26 2012 -0400 +commit 402d1fb0036cab8588e94acf3ea6d80ccf1a00b0 +Author: Hugh Waite +Date: Wed May 29 14:44:45 2013 +0100 - Notes on t_reply, subscription deletion on NOTIFY failure. + xprint: Fix TOC in documentation -commit a9f1f9e3cd62d296bcbf4c3618da96d077aacd86 -Author: Daniel-Constantin Mierla -Date: Tue Oct 16 21:28:46 2012 +0200 +commit 06369a4f2b2dbe3b58ca2c34c0cf2f228a343fd7 +Author: Hugh Waite +Date: Wed May 29 14:44:28 2013 +0100 - auth_db(k): new function is_subscriber(uri, dbtable, flags) - - - check if URI corresponds to a subscriber record in dbtable and load - credentials for it + xmlops: Fix TOC in documentation -commit 15a2a5ae02948961f1e26e545e284d9659510c42 -Author: Andrew Mortensen -Date: Tue Oct 16 14:47:10 2012 -0400 +commit 631e2450beb3cba5a0f3b85ecfd319a8ba98db00 +Author: Hugh Waite +Date: Wed May 29 14:44:09 2013 +0100 + + tm: Fix TOC in documentation + +commit 528098292d5a5dc43052f0d9f59105622c064f74 +Author: Hugh Waite +Date: Wed May 29 14:43:57 2013 +0100 + + tls: Fix TOC in documentation + +commit 6ea032c426e09a932c260842cf884cdd1cca69e5 +Author: Hugh Waite +Date: Wed May 29 14:43:42 2013 +0100 + + timer: Fix TOC in documentation + +commit f198c3248b152e407313462619a402a730f9f29e +Author: Hugh Waite +Date: Wed May 29 14:43:24 2013 +0100 + + textopsx: Fix TOC in documentation + +commit e1a98837a273921a307518d0f83c690adabfa201 +Author: Hugh Waite +Date: Wed May 29 14:43:09 2013 +0100 + + sms: Fix TOC in documentation + +commit c0b97566f8cfd0038a8fc5ea514dd7cf3b37f831 +Author: Hugh Waite +Date: Wed May 29 14:42:54 2013 +0100 + + sl: Fix TOC in documentation + +commit 87e43eead7d3d6c8740bd397e512629a4230bf30 +Author: Hugh Waite +Date: Wed May 29 14:42:35 2013 +0100 - Use standard hashes.h header instead of libkcore hash_func.h path. - - All hash routines are moved to sip-router/hashes.h as of 3.3.x. + sanity: Fix TOC in documentation -commit 06bb391cef6c59285b5e2eff1ea7857485b33e0c -Author: Andrew Mortensen -Date: Tue Oct 16 14:27:39 2012 -0400 +commit d99ffcd886b12a8b3adb43549d0603a86ef803da +Author: Hugh Waite +Date: Wed May 29 14:42:20 2013 +0100 - Ensure upstream 302 redirects are not treated as errors. + print_lib: Fix TOC in documentation -commit c9088726bee111154cdede26c9f92566241f1757 -Author: Andrew Mortensen -Date: Mon Oct 15 22:22:26 2012 -0400 +commit 762d01b4783b9d9e1b97420a7e0ab901b84eb243 +Author: Hugh Waite +Date: Wed May 29 14:42:05 2013 +0100 - Fix [SIPR-708]: loss of state on call transfer - - Module was blindly releasing appearance indices on BYE without checking - for dialog match. Simple call-id check is enough. + print: Fix TOC in documentation -commit 8ff7fce98a15afe4ca1bf7c2d9206f1d75add66a -Author: Andrew Mortensen -Date: Mon Oct 15 21:41:36 2012 -0400 +commit c8a00e093aa009cff5069cfa683b3efc361497d7 +Author: Hugh Waite +Date: Wed May 29 14:41:51 2013 +0100 - Remove debug line. + prefix_route: Fix TOC in documentation -commit da720367972b18e0a6664dfa47d1e65a648099a8 -Author: Olle E. Johansson -Date: Mon Oct 15 19:51:21 2012 +0200 +commit cc15d526784ec2f734db452bc3f5157493225416 +Author: Hugh Waite +Date: Wed May 29 14:41:28 2013 +0100 - async Forgot to rebuild the README + mangler: Fix TOC in documentation -commit b68fade258f29ad427950b42b44d706b95db4150 -Author: Olle E. Johansson -Date: Mon Oct 15 19:47:52 2012 +0200 +commit 5829244ff407abd8cb0735b998dcd7ffb351f87b +Author: Hugh Waite +Date: Wed May 29 14:40:54 2013 +0100 - Async typo fix + malloc_test: Fix TOC in documentation -commit f9ab230357fcd551252a6bc151b278e792bcb54e -Author: Olle E. Johansson -Date: Mon Oct 15 19:45:02 2012 +0200 +commit eabae931b7fcf1c4dae9bce2945a55c9dd48fee8 +Author: Hugh Waite +Date: Wed May 29 14:40:31 2013 +0100 - textopsx - typo fixes, minor corrections + iptrtpproxy: Fix TOC in documentation -commit e09af3559bf1c0a39e87eb1fa489c1e996c56b8e -Author: Andrew Mortensen -Date: Mon Oct 15 12:56:53 2012 -0400 +commit e8ab0f1552c4bd0fbeb8f2bb42b79bb8acbce57e +Author: Hugh Waite +Date: Wed May 29 14:40:06 2013 +0100 - Ensure unlinked hash entries have NULL next and slot pointers. - - Not fixing any known issue, just being a bit more defensive when - unlinking entries. + db_flatstore: Fix TOC in documentation -commit 5d9d4d017d79d4e9269bbeb019460b3c8d8695d0 -Author: Dragos Dinu -Date: Mon Oct 15 18:29:48 2012 +0300 +commit 9ca893c26257caf8d80e7fae25128a6e28f37518 +Author: Hugh Waite +Date: Wed May 29 14:39:45 2013 +0100 - modules_k/siptrace Fixed crash when using HEP v2 + db2_ops: Fix TOC in documentation -commit 7d4ed54b5748d70761f2c574a05b7df1c07010b6 -Author: Olle E. Johansson -Date: Mon Oct 15 14:35:10 2012 +0200 +commit 2a743dcd16f2546dabf41a5b0de498a6faaf00ed +Author: Hugh Waite +Date: Wed May 29 14:38:43 2013 +0100 - INSTALL - Fixing spelling error + db2_ldap: Fix TOC in documentation -commit d926b2f942e8fd207c9f50ff9e1edd27a39866bd -Author: Olle E. Johansson -Date: Sun Oct 14 21:57:24 2012 +0200 +commit 09c617d4e3bd17e5f2234aac03f90f4fa25c3bb6 +Author: Hugh Waite +Date: Wed May 29 14:38:25 2013 +0100 - registrar Fix typos in README + ctl: Fix TOC in documentation -commit 68a650ef2b1be78084463c88e9b527ae498b7943 -Author: Olle E. Johansson -Date: Sun Oct 14 21:40:36 2012 +0200 +commit a966e236f5d4ae9d98048d5432978658c70a7f26 +Author: Hugh Waite +Date: Wed May 29 14:38:07 2013 +0100 - pv Fix typo in README + counters: Fix TOC in documentation -commit 93c6567011162468c684fa0e673b9efaa2910a3a -Author: Olle E. Johansson -Date: Sun Oct 14 21:32:56 2012 +0200 +commit 48c393f24a0a6c9a2841f7710cfdbc475c90d214 +Author: Hugh Waite +Date: Wed May 29 14:37:45 2013 +0100 - dispatcher small documentation updates + cfg_rpc: Fix TOC in documentation -commit a86074046ebf5e325413662d099711c00ee24930 -Author: Olle E. Johansson -Date: Sun Oct 14 21:02:52 2012 +0200 +commit c1cb95ee9e29f4373973f7676a224d2892a8902e +Author: Hugh Waite +Date: Wed May 29 14:37:26 2013 +0100 - p_userloc Fixing the database URLs as entities + cfg_db: Fix TOC in documentation -commit 2040896f2b4fd5d955af783fa9c8851572186785 -Author: Olle E. Johansson -Date: Sun Oct 14 19:54:19 2012 +0200 +commit 216d3f4c8d8b3a40867b4f8438e8ac5027cf1bdf +Author: Hugh Waite +Date: Wed May 29 14:37:03 2013 +0100 - Revert "Changing database URL example to use entity" - - This reverts commit 827e2d4bbab047fd4bbe4ada266327a823fc1cd3. + blst: Fix TOC in documentation -commit 827e2d4bbab047fd4bbe4ada266327a823fc1cd3 -Author: Olle E. Johansson -Date: Sun Oct 14 19:38:47 2012 +0200 +commit 84a96c85d21a34c9082efd6622bccd73bfb1a2b5 +Author: Hugh Waite +Date: Wed May 29 14:11:23 2013 +0100 - Changing database URL example to use entity - - Making it easier when we change from "openserrw" to "kamailiorw" + avp: Fix TOC in documentation -commit ba1aba0c8ffa992eb99b2004f3cf14fe1a6fa3d1 -Author: Olle E. Johansson -Date: Sun Oct 14 18:58:16 2012 +0200 +commit e59a2b0fa195fc2360049ccd438dc02ee19aedf3 +Author: Hugh Waite +Date: Wed May 29 14:10:31 2013 +0100 - dialog: minor typo fix + auth_identity: Fix TOC in documentation -commit 2522a1ce3886a764c6cf09d8cc55b8c6dd1bf57e -Author: Olle E. Johansson -Date: Sun Oct 14 18:20:42 2012 +0200 +commit 985cee9f4e904e92d473efecb15f4211c8a75501 +Author: Hugh Waite +Date: Wed May 29 14:09:08 2013 +0100 - siputils: README typo fixes + auth_ephemeral: Minor documentation improvement -commit ef0f8fd65b34ef9d7006be30f7cef0353c1c529f -Author: Olle E. Johansson -Date: Sun Oct 14 18:11:29 2012 +0200 +commit ffe8aa173c6106844707bcf5d0f8da4f28631921 +Author: Henning Westerholt +Date: Wed May 29 12:38:10 2013 +0200 - uac: README typos + DB scheme: remove default MySQL engine definition + + * remove default MySQL engine definition from table definitions + * if nothing is specified then MySQL server will choose the default from its cfg + * if you like to specify it, change the MYSQL_TABLE_TYPE define in + lib/srdb1/schema/entities.xml and run "make dbschema" in the top level directory + * the stylesheet doesn't check the engine type, Kamailio supports MyISAM and InnoDB -commit 4c45f67a42ea76c909893bd684cac03fde8d5c2b -Author: Olle E. Johansson -Date: Sun Oct 14 18:02:45 2012 +0200 +commit 5aa71845f630f6b933b0a415749a7b1dae66605a +Author: Henning Westerholt +Date: Wed May 29 12:30:58 2013 +0200 - SL doc: fix typos + Revert "DB scheme: as discussed on sr-users list, change default mysql engine to InnoDB" + + This reverts commit fa49fe070adadfff893b338f2a2d69776c043653. -commit d22fb8987131f6ee94406632913885a52098b49c -Author: Olle E. Johansson -Date: Sun Oct 14 17:54:53 2012 +0200 +commit a21137507bea759d4945402dc47486ac324724db +Author: Victor Seva +Date: Wed May 29 12:25:50 2013 +0200 - TM docs: fix typos + core: added helper function pv_cache_get_name() in order + to get the name of a pv_spec_t on pv_cache. -commit 4090bfc2e4eb76a9b6c03d99446619d2723fa222 -Author: Olle E. Johansson -Date: Sun Oct 14 17:45:41 2012 +0200 +commit a2316f35deef2586f79dc575367224af853e9b70 +Author: Victor Seva +Date: Wed May 29 12:25:09 2013 +0200 - tm: Updates of README, spelling errors + core: Add callback to be able to log assign actions. -commit 6339389bae85814264a923ebbf938d70fa22c4db -Author: Olle E. Johansson -Date: Sun Oct 14 17:24:21 2012 +0200 +commit 6fba3230222214fccb72fd07817f29693d98b877 +Author: Victor Seva +Date: Wed May 29 12:24:00 2013 +0200 - async: Speling erors fixed + core: use pointer to pv_spec_t on lvalue union. Use pv_cache_get() on interpreter. -commit f8e02b3bbe83315d8228005d4388434b62473c61 -Author: Olle E. Johansson -Date: Sun Oct 14 17:13:01 2012 +0200 +commit fa49fe070adadfff893b338f2a2d69776c043653 +Author: Henning Westerholt +Date: Wed May 29 11:49:59 2013 +0200 - msilo: Updating docs - - Fixing a typo and while at it updating some texts. + DB scheme: as discussed on sr-users list, change default mysql engine to InnoDB -commit 4d71456df4b47a131cb6df2a21608ba291e30b95 -Author: Andrew Mortensen -Date: Fri Oct 12 14:35:12 2012 -0400 +commit b480ac55508e5d9b92cc9560e0b1d338d04f3b11 +Author: Daniel-Constantin Mierla +Date: Wed May 29 10:49:40 2013 +0200 - Fix [SIPR-728]: stuck lamp on multiple inbound calls + topoh: safety check for Via header when removed from script - BYE response handler was trying to lookup remote party's Call-Info - state using from-tag instead of to-tag. + - reported by Guillaume Bour, FS#300 -commit 9fc31d82f47a0fb526f25864ff093c1b5a55b057 -Author: Andrew Mortensen -Date: Fri Oct 12 13:37:30 2012 -0400 +commit 8cba441b17c75cd078a499c24268c8a60c6b1771 +Author: Daniel-Constantin Mierla +Date: Tue May 28 15:48:22 2013 +0200 - Add simple install-and-bounce-sip-router script. + misc_radius: updated readme + + - from a patch by Victor V. Kustov -commit 3b09b31be29ca06b959b92a3837f5fd56435488f +commit 355490abd8c6e82a45cb96338ceca938c99ed744 Author: Daniel-Constantin Mierla -Date: Fri Oct 12 15:40:24 2012 +0200 +Date: Tue May 28 15:43:27 2013 +0200 - kamailio.cfg: load corex module to get same cfg api as so far + misc_radius: handle IPv4 returned attributes + + - populate attributes for negative replies when common_response is set + - patch by Victor V. Kustov -commit 5e5213287009b8dda79017ddbd52ff129df9c44c -Author: Andrew Mortensen -Date: Thu Oct 11 17:00:28 2012 -0400 +commit 6a92939ee4b7db6216814dc88e57eccefabb05af +Author: Peter Dunkley +Date: Tue May 28 00:46:26 2013 +0100 - Improve encapsulation when sending NOTIFYs. - - When sending NOTIFY to subscribers list, only build headers for the - NOTIFY once. + modules/auth_ephemeral: updated to use SHA1_DIGEST_LENGTH #define from openssl/sha.h -commit c43bb19418cbf6a80dcd935491d02d891e5651a6 -Author: Andrew Mortensen -Date: Thu Oct 11 16:21:36 2012 -0400 +commit ec893a2c6cb5c0fd21207cbf0ffab09f65418df2 +Author: Peter Dunkley +Date: Tue May 28 00:27:37 2013 +0100 - Remove debug sanity check. + modules/auth_ephemeral: tidied up the headers and tidied up more debug -commit 2c968f5c36db7609c16521a43fd4694de2cc83d1 -Author: Andrew Mortensen -Date: Thu Oct 11 16:18:24 2012 -0400 +commit ba2a6ac4230dd9169943f55a9c06af3faa694356 +Author: Peter Dunkley +Date: Tue May 28 00:20:20 2013 +0100 - Move from doubly-linked list with tail insertion to singly linked list. + modules/auth_ephemeral: updated to handle usernames from the web-service that just consist of timestamps - Reduce complexity, especially where unlinking is concerned. + - tidied up the diagnostic output -commit 309918272df6110453cf2b9af4afd7e816590cbe -Author: Andrew Mortensen -Date: Thu Oct 11 16:16:16 2012 -0400 +commit a435f770e7162f73aea560a77851f8fb639a495a +Merge: 45227df 74bf08e +Author: Juha Heinanen +Date: Mon May 27 17:58:33 2013 +0300 - Improve appearance index unlinking. + Merge branch 'master' of ssh://git.sip-router.org/sip-router - The double pointer unlinking method is much more elegant. + - i did pull , but there was race conditions with somebody else's push -commit d1897658f85f45ff900b7c2fc9a0e6cbe8aa1522 -Author: Andrew Mortensen -Date: Thu Oct 11 16:13:23 2012 -0400 +commit 45227df1bc87e448c74fe31c001e85f525c654a0 +Author: Juha Heinanen +Date: Mon May 27 17:57:07 2013 +0300 - Only store one appearance_list per AoR. + modules/usrloc: renamed ul.users and ul.contacts rpc commands - sca_appearance_register was not checking to see if an entry for the AoR - already existed in the hash table, blindly appending an empty list for - each client subscription. Things worked because the hash table collision - handling inserted new entries at tail instead of head. + - new, more descriptive names are ul.db_users and ul.db_contacts -commit 2f240d5f5d1e647cbc6ee55893a65058bf950cda -Author: Peter Dunkley -Date: Thu Oct 11 12:58:38 2012 +0100 +commit 74bf08ef30cf18fb609c2c067584f1515ede23da +Author: Daniel-Constantin Mierla +Date: Mon May 27 16:54:02 2013 +0200 - modules/msrp: Added support for WS transport + core: enclose uri in angle brakets for redirect contact header - - Updated parser to recognise/decode ";ws" as a transport - - Updated netio code to route MSRP messages destined for a - WebSocket connection through the websocket module (instead of just - tcp_send()ing them). + - safer for uri with parameters and no q + - reported by Dan Bogos -commit 132509a7affe0f0bffd87f3606513b1475e98a03 -Author: Peter Dunkley -Date: Thu Oct 11 12:57:26 2012 +0100 +commit d0d298070fdbb015a96f209fa3c925ba71e3a37b +Author: Juha Heinanen +Date: Mon May 27 13:54:23 2013 +0300 - modules/websocket: Added support for MSRP WebSocket sub-protocol + modules/usrloc: added two new rpc commands ul.users and ul.contacts - - Prototype of draft-pd-msrp-websocket - - Enables session based chat and group chat from HTML5 clients + - for accessing number of different AoRs and contacts in a location table -commit baf9486e80018206d4edcdfb666b393d8b43aadf -Author: Marius Zbihlei -Date: Thu Oct 11 10:59:45 2012 +0300 +commit 6531b8d495ead58a85cb101d914b5bf18c2ecddb +Author: Klaus Darilion +Date: Mon May 27 10:44:51 2013 +0000 - core: fixed small issue w/ include directive + modules/dialog: regenerate README -commit 728f6033a7ee663f3e46717c8ea49703135d3c12 -Author: Henning Westerholt -Date: Wed Oct 10 19:15:10 2012 +0200 +commit 68209cc2b15c2c0674d7cf4529607e148e3fc1b4 +Author: Klaus Darilion +Date: Mon May 27 10:44:03 2013 +0000 - core: disable build of DNSSEC (patch from Marius) + modules/dialog: improve documentation of DID matching -commit 98ceaec93a6c69399ea4bfcf47a82e01610d848e +commit ace89166f84657b2ea4a70e8d9e2ccfbd032b1ba Author: Peter Dunkley -Date: Wed Oct 10 18:00:51 2012 +0100 +Date: Mon May 27 00:49:46 2013 +0100 - modules/msrp: Updated typo in MSRP example + pkg/kamailio/(centos|fedora): Added RPM for auth_ephemeral module -commit d9c2638bd27c50a7cba4a96ee7b5592d05f39c90 +commit 2a29b2ba260584634f05c684ef39ab45e2dc51b6 Author: Peter Dunkley -Date: Wed Oct 10 16:15:32 2012 +0100 +Date: Mon May 27 00:32:19 2013 +0100 - modules/msrp: From-Path: not updated correctly in msrp_relay() - - - When the last To-Path-URI is pre-pended to the From-Path: header the first - two characters of "From-Path: " are skipped, leaving "om-Path: ". 11 - characters should actually be skipped. + core: updated groups to include new auth_ephemeral module -commit 73103df8fcffa0f92dfc4699c52d5dd9474084ea -Author: Marius Zbihlei -Date: Wed Oct 10 17:53:02 2012 +0300 +commit 0bea7f63afa0fd544ad93465db94ddef4ed67a00 +Author: Peter Dunkley +Date: Mon May 27 00:25:03 2013 +0100 - Core: added DNSSEC support for DNS queries - - This is available by setting the USE_DNSSEC compile flag. It requires libval-threads and libres (part of dnssec-tools dnssec-tools.org) - The custom resolvers were replaced by val_gethostbyname, val_gethostbyname and val_res_query (for SRV). + modules/auth_ephemeral: new module for ephemeral credential based authentication -commit 10dafd75873f9f58037680e4d72cafc4c877583f -Author: Peter Dunkley -Date: Wed Oct 10 10:49:16 2012 +0100 +commit 375d878b5f318acc08b155c29398e4abb74edbd5 +Author: Daniel-Constantin Mierla +Date: Sun May 26 17:11:25 2013 +0200 - modules_k/xcap_server: Fixed small mistake in last xcap_server fix + sctp: added rpc commands to module documentation -commit e71435b0276c89ef756fecf1bbd5e339b80e804c -Author: Andrei Pelinescu-Onciul -Date: Wed Oct 10 10:02:00 2012 +0200 +commit ca923db8727333ad7df14126bb377418a829cce3 +Author: Daniel-Constantin Mierla +Date: Sun May 26 17:04:23 2013 +0200 - tcp: fix connection alias replacing + sctp: rpc commands are prefixed with sctp - When the TCP_ALIAS_REPLACE is set and an alias has to be added to - a connection that had 0 aliases (it can happen due to - TCP_ALIAS_REPLACE flag), the connection aliases count was wrongly - forced to 1. - For more details see: - http://lists.sip-router.org/pipermail/sr-users/2012-October/074932.html + - no longer part of core and proper matching of the module + +commit 352a7dccf2570af857d7e2e50fed600c4762278d +Author: Daniel-Constantin Mierla +Date: Sun May 26 16:14:51 2013 +0200 + + topoh: safety check for SIP messages - Patch-by Jijo + - received callback can be executed for non-sip messages + - reported by Julia -commit d29cfab1584b8bc2672b4242a2626d9dc90c77a2 +commit dfd8ec8c1e9f0a5c3c7aad6ec984e7a664e5af49 Author: Peter Dunkley -Date: Tue Oct 9 21:07:10 2012 +0100 +Date: Sun May 26 13:54:15 2013 +0100 - modules_k/xcap_server: Fixed segmentation fault + pkg/kamailio/(centos|fedora): Added rpm for sctp module - - Occurs when attempting to do an etag compare when there is no document/etag - in the database. + - Also updated release to dev6 -commit b12c2df6ccb903e2ca22d34bb968f3ebc2712b89 +commit 1977645ceb12ca2d0f2f767046606f6c5ae2c3bb Author: Daniel-Constantin Mierla -Date: Tue Oct 9 16:30:24 2012 +0200 +Date: Sun May 26 10:43:24 2013 +0200 - core: reset params pointers if there is a failure in parse_params() + dmq: many safety checks for mem mallocs and function return codes - - patch by Jijo + - added license header in the files -commit 038780fdf40c8d5d3694538f199411810fad7a0e +commit a85e7e5c192e4f597d17c98f4036d83639c6bc1f Author: Daniel-Constantin Mierla -Date: Tue Oct 9 12:29:09 2012 +0200 +Date: Sun May 26 10:12:24 2013 +0200 - tm: set log level to debug for negative return code of run_top_route() + core: safety check for initialized SCTP API - - it returns the code of last execution action, negative return is not - necessary an error + - reported by Juha Heinanen -commit 753f511f281b0f4406908086547225c5c0bc0d23 +commit 59c4a6550862ed7c3e8c63a3a5d5c1dcd404bd6d Author: Daniel-Constantin Mierla -Date: Tue Oct 9 11:39:16 2012 +0200 +Date: Sat May 25 21:28:33 2013 +0200 - rtpproxy: safety check for rtp stats pv + tm: return current branch id if sending fails and tm_failure_exec_mode=1 - - if the rtpproxy is not responding, there is no returned value and - could cause crash when doing strlen(NULL) - - return $null in case of various errors, being safer to check returned - PV value in the script against $null, rather than having undefined - value - - reported by J. Gallart + - reported by Juha Heinanen -commit 146873cf2b101d6363bb20c235b7dcdb8bb54134 +commit 93d97e53741d786692903bd9df9622cd55e4cfea Author: Daniel-Constantin Mierla -Date: Tue Oct 9 09:13:15 2012 +0200 +Date: Sat May 25 21:04:43 2013 +0200 - msrp: fixed copy&paste issue for getting To-Path size - - - the parsing of From-Path was used instead - - reported by Peter Dunkley + sctp: documented module parameters -commit 971386c346d72a016d00c8808059bd4f0a050059 -Author: Vicente Hernando -Date: Fri Sep 7 07:01:11 2012 -0400 +commit 2e6675bd92968fd96865ee266ca4ba10c7cc1cdc +Author: Daniel-Constantin Mierla +Date: Sat May 25 17:14:23 2013 +0200 - core: Fix parser sdp bug. Reset connection IP for each stream. - - If connection IP is not reset, then when a stream has no IP connection, - it uses former stream one instead of session default one. + Makefile.defs: version set to 4.1.0-dev6 -commit f86ab01f7e3c6a4b196c5fe42543b18168f6d969 -Author: Dragos Dinu -Date: Mon Oct 8 17:42:20 2012 +0300 +commit c4cf64ea992e0f0f46f1c6fc23c6f38c05a80b0f +Author: Daniel-Constantin Mierla +Date: Sat May 25 17:05:58 2013 +0200 - modules/sipcapture: Fixed crash in module initialization + sctp: added skeleton files for docbook module documentation + +commit 25c3df171d219eb71c63f4832b69f33b470c9c96 +Author: Daniel-Constantin Mierla +Date: Sat May 25 16:42:21 2013 +0200 + + Makefile.groups: added compile group for sctp module - Leaving the default table_name parameter caused a segmentation fault - Reported by Juha Heinanen + - depends on libsctp-dev -commit 1371eeab4ca3d3f666e52bb42d904059ce77c4ac +commit 1bdbdb64e4862ddb69c2bf13be0f9be93968bb1e Author: Daniel-Constantin Mierla -Date: Sat Oct 6 09:56:06 2012 +0200 +Date: Sat May 25 16:30:33 2013 +0200 - utils/misc/vim: added Makefile to install vim scripts + protoshoot: use Makefile pattern for utils - - 'make install' copies the files to home .vim folder - - updated README to reflect the new command + - link to libsctp if SCTP support is enabled -commit 007ca3c30b02e7a57cd229ea4b63573ef81f8c81 +commit a2afc3d42224d0c35e4867ad50251e7aa6231879 Author: Daniel-Constantin Mierla -Date: Sat Oct 6 09:52:37 2012 +0200 +Date: Sat May 25 15:42:14 2013 +0200 - pv: two new functions- typeof(...) and not_empty(...) + core: filled sctp core api - - typeof(pvar, vtype) - test the type of the pseudo-variable - - not_empty(pvar) - test if the type is string and the value not empty + - cleanup of not needed members -commit 780decb3b0f8cf140ffdf522abc61e68388ee6a7 +commit 61f5f6a63409f856a03b48e9ced22ad5c724acb2 Author: Daniel-Constantin Mierla -Date: Sat Oct 6 09:38:57 2012 +0200 +Date: Sat May 25 15:41:27 2013 +0200 - core: added mod fix helper fixup_pvar_none(...) + sctp: register sctp core api - - first parameter is PV and the rest are not fixed up + - done in mod_register() function + - initialize the sctp options before modparams -commit ad67ccfec1a1f99483b544f9c9e354bc43af1afe -Author: Andrew Mortensen -Date: Fri Oct 5 16:05:47 2012 -0400 +commit e9f7980602cadcc179425cad57a4d0f89c63fb55 +Author: Daniel-Constantin Mierla +Date: Sat May 25 15:39:13 2013 +0200 - Fix [SIPR-737]: calls not reaching voicemail + core: remove sctp options init from core - Non-SCA to non-SCA would cause a function called from sca_call_info_update - to return 0, which sca_call_info_update would then return to the script. - A return value of 0 from a function called in the script means "stop script - processing" in sip-router, so PRACKs were never getting relayed to the - caller. Fixed by resetting return code to non-zero before returning. + - will be done in mod_register() from sctp module + - don't print anymore info about sctp unsupported socket options in + output of -v, they are known now only in sctp module which is not + loaded at that time + - sctp will print a warn message in mod init about unsupported socket + options -commit 83e31eaadd549132103899a201cdf100ab669b6e -Author: Claudio Furrer -Date: Fri Oct 5 03:32:16 2012 -0300 +commit cbbaf9abd5f34b50c47ac2ac350c77d3f36b511b +Author: Daniel-Constantin Mierla +Date: Sat May 25 11:57:02 2013 +0200 - pkg/gentoo: version bump, added ebuild for v3.3.1 + sctp: exported sctp parameters via module interface -commit 019bcdc56533e7ccd0e1cc7d45b1d2d8ebc868ae +commit e549d96b571ae509a67984be789b281ed2230bc3 Author: Daniel-Constantin Mierla -Date: Fri Oct 5 14:34:13 2012 +0200 +Date: Sat May 25 11:24:22 2013 +0200 - nathelper(k): nicer handling of no sdp in sdp_1918(...) + core: readded conditions for core sctp forwarding functions - - don't print error message if there is no sdp body + - typo fixed in log message -commit 4cea90421731e13c79a663f5119e3f3007588662 -Author: Andrew Mortensen -Date: Thu Oct 4 23:59:10 2012 -0400 +commit 66e90f9888daefdb92dcebd28e188ce7f912a4f9 +Author: Daniel-Constantin Mierla +Date: Sat May 25 10:56:11 2013 +0200 - Finish fix for crash on hash entry unlink. + core: added sctp callbacks api - Replaced core_hash references with more modern get_hash1_raw. + - functions needed in core - callbacks to be set by sctp module -commit 7b31e989487c3c728fcbf8daf73feb228f807706 -Author: Peter Dunkley -Date: Thu Oct 4 14:38:47 2012 +0100 +commit d60d41136575408ea7ea9031c735476967755e46 +Author: Daniel-Constantin Mierla +Date: Sat May 25 10:54:33 2013 +0200 - pkg/kamailio/fedora/16: Fixed typos in .spec + sctp: add module interface for sctp transport + + - sctp support is now implemented as a standalone module + - the core still needs SCTP=1 (now default) and -DUSE_SCTP to get the + hooks enabled -commit 8de2a607b99b51d4f4030518ebd08613f187e953 +commit af2473d426870650a0f4a2cb820894ee4dd793d0 Author: Daniel-Constantin Mierla -Date: Wed Oct 3 20:25:52 2012 +0200 +Date: Sat May 25 10:53:04 2013 +0200 - auth: new function pv_auth_check(...) + Makefile.defs: don't link to libsctp on Linux for SCTP support - - equivalent of auth_check(...) from auth_db, but taking the password - from a PV -- combines pv_proxy_authenticate() and - pv_www_authenticate() - - new module parameter use_domain that controls whether the domain part - of URIs should be used or not to make the identity checks upon - authentication with pv_auth_check(...) + - only sctp module needs to link to it -commit 490df85a12a49f440ac6eb8b35be5f4c954b7b1b +commit f91c9696cc92ec4b74dd2494c39bbf2ffe062fab Author: Daniel-Constantin Mierla -Date: Wed Oct 3 20:25:15 2012 +0200 +Date: Sat May 25 09:35:22 2013 +0200 - auth_db(k): moved the authorization checks flags to auth api + core: added file sctp core interface -commit 1a0d7653139c04d2ab32fa68c86513faf82d5c17 +commit 7f8e7a8568740be65eada1cbd59110bb765f4d5a Author: Daniel-Constantin Mierla -Date: Wed Oct 3 14:58:44 2012 +0200 +Date: Sat May 25 09:33:39 2013 +0200 - auth: new function has_credentials(realm) + sctp: new module for SCTP transport - - returns true if an authorization header matching the realm is found + - moved the sctp specific code from core to a module to make it easy to + enable/disable sctp by loading/not loading the module instead of + recompiling -commit 7982d66c29e40548cb8282a1de6b7fdddece5ddb -Author: Daniel-Constantin Mierla -Date: Wed Oct 3 14:26:12 2012 +0200 +commit 6287caecc438ace98a3ce3dc7a53e6064d7894dc +Author: Henning Westerholt +Date: Fri May 24 15:38:03 2013 +0200 - kamailio.cfg: show how to include a local file if exists + core: remove syn_branch functionality for calculating Via branch parameter - - kamailio-local.cfg is attempted to be loaded if exists in the same - folder, allowing to set defines/paramters inside it without changing - main kamailio.cfg + * remove syn_branch parameter and functionality from core and tm module for + calculating the Via branch parameter + * reported from Richard Brady, rnbrady at gmail dot com to sr-dev + * kamailio is not standard compliant with this setting enabled (RFC 3261, + 17.2.3 and 16.11) for stateless forwarding of replies + * the performance reason that motivated this functionality are today not + valid anymore, even embedded systems have more than enough power to + calculate MD5 and other modules uses more expensive operations anyway + * adapt a bunch of example and test configuration that used this parameter, + it has been also removed from the core cookbook wiki -commit 727203559c98d648e7da4f0d54d65a05317b14f5 +commit 28942a00bc7be5194625b9ed08facd2f95ebea81 Author: Daniel-Constantin Mierla -Date: Wed Oct 3 14:21:11 2012 +0200 +Date: Fri May 24 00:36:57 2013 +0200 - kamailio.cfg: test if DBURL is already defined before defining it + pv: added $_s(format) variable + + - evaluate the format as a dynamic string + + $var(x) = "sip:" + $rU + "@" + $fd; + + is equivalent of: + + $var(x) = $_s(sip:$rU@$fd); - - allow to set it via command line with -A DBURL='...' + - it can be more compact sometimes in config -commit 0193d296e39a9fc095e90682f5335a2907403474 +commit 76c883eb88359f6075712f648a1dfc675872487a Author: Daniel-Constantin Mierla -Date: Wed Oct 3 14:20:27 2012 +0200 +Date: Thu May 23 12:06:45 2013 +0200 - mem: fixed MDBG() parameters + auth: add chapter tag around sections for Admin Guide - - log level is not necessary for this macro + - the ToC isn't properly generated otherwise + - reported by Andrew Pogrebennyk -commit 4b656a8f6ee3056986687ca923436639e2fc1653 -Merge: 7b6234a 43e1a79 -Author: Juha Heinanen -Date: Wed Oct 3 09:29:32 2012 +0300 +commit b3c69488bf80e76c2359f6d9611cbcf2edf6c67f +Author: Victor Seva +Date: Thu May 23 09:45:03 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/debugger: update documentation. This is Kamailio! -commit 7b6234a3e8d0427c767942327aff57ade676eb5e -Author: Juha Heinanen -Date: Wed Oct 3 09:27:38 2012 +0300 +commit 169e92b86d6a1a98be92d0012bd831785855b968 +Author: Victor Seva +Date: Thu May 23 09:07:53 2013 +0200 - mem/f_malloc.c: downgraded print free(0) warning from LOG to MDBG. + modules/debugger: refresh README -commit 43e1a79272b451588d9f9b97fdf1d661e18a45a0 -Author: Daniel-Constantin Mierla -Date: Tue Oct 2 21:53:22 2012 +0200 +commit 6417ac9f99a0c97254206797070bbe3095002847 +Author: Victor Seva +Date: Thu May 23 09:04:12 2013 +0200 - uac(k): documented the new parameter restore_dlg + modules/debugger: use cfg framework to be able to activate/deactivate debug per module. + add missing files from commit. -commit 0d299fea8a642887305797203536e1340cdf74f9 -Author: Daniel-Constantin Mierla -Date: Tue Oct 2 21:50:59 2012 +0200 +commit feb00c92297eb2d4520a59f1a676cf998add1b5d +Author: Victor Seva +Date: Thu May 23 08:58:38 2013 +0200 - uac(k): new paramter restore_dlg + modules/debugger: use cfg framework to be able to activate/deactivate debug per module. - - if set to 1, then the module uses dialog variables to store the - initial and new values for From/To headers - - default set to 0 - otherwise all calls that have changes to From/To - headers must be tracked by dialog - - result of checking a report from Alex Balashov + mod_hash_size has to be set with a value > 0 on startup. -commit 41fa8653157a989ed1a77f72b25a20fd984b999d -Author: Daniel-Constantin Mierla -Date: Tue Oct 2 21:24:09 2012 +0200 +commit 31880a46d7f634b568cc192bec6db3d969e738ef +Author: Klaus Darilion +Date: Tue May 21 12:39:15 2013 +0000 - mem: enhanced the warning message for free(0) of QM in debug mode + modules/auth_db: detailed documentation of URI checking in auth_check function -commit 765b6e06fee81901e458bd5e9a4be26df79fb95b -Author: Andrew Mortensen -Date: Tue Oct 2 11:31:25 2012 -0400 +commit 2669197352bfc20bc916c00f74ac14380f8a62f8 +Author: Juha Heinanen +Date: Mon May 20 21:03:30 2013 +0300 - Only send NOTIFYs to caller group on receipt of first 18x response. + modules/usrloc: fixed unregister bug in db_mode=3 - Forked calls could mean multiple 18x responses from any of the callee - endpoints. The module was sending a NOTIFY to all members of the caller - group every time a 18x response arrived. + - Commit ce1d16ce1c8009918c294307de53f35378868b52 introduced unregister + but that appeared in db_mode=3 when db_ops_ruid param is not set. + - Reported by Peter Dunkley. -commit 28300568875f9d8d89bd03166518595e03b4bf12 -Author: Andrew Mortensen -Date: Tue Oct 2 11:07:52 2012 -0400 +commit c9448d9657f0e5792072c6803643c8d9075d711a +Author: Peter Dunkley +Date: Mon May 20 18:33:52 2013 +0100 - Move method check to top of sca_call_info_update routine. - - Reduce processing for methods we don't handle. + modules/rr: completely reverted after_strict() to its pre-outbound form -commit 666ccbf2deb43dc9fff3fe759de460a24f56acae -Author: Andrew Mortensen -Date: Tue Oct 2 11:06:59 2012 -0400 +commit f0ae598a3e63e62d12a143c6cd42b698ad1f2eed +Author: Peter Dunkley +Date: Sun May 19 23:56:06 2013 +0100 - Removing some debug logging. + modules/websocket: Improved module_loaded() check for nathelper and outbound so it only fires when the SIP subprotocol is enabled -commit 79b2fad8e89460cf08c8b7ed1a4736425bcdb9ac -Author: Andrew Mortensen -Date: Tue Oct 2 10:56:12 2012 -0400 +commit 45d4e808f0551a5eeb832574327a2b5b7aecf2c5 +Author: Daniel-Constantin Mierla +Date: Sun May 19 23:18:19 2013 +0200 + + uac: reorder fileds in uac structure + +commit 97a899e37acda1ef0c70a009f4fd9d221ee8a58e +Author: Daniel-Constantin Mierla +Date: Sun May 19 23:16:55 2013 +0200 + + seat: removed no longer necessary init of tm uac struct + +commit b867893d0bbdda0c926a7cd0b6b3a46d4324631e +Author: Daniel-Constantin Mierla +Date: Sun May 19 23:15:42 2013 +0200 - Include callee in appearance output. + dialog: remove unnecessary tm uac struct init -commit 575e3dde9706b657e375814507ffc9b3fa4e6886 +commit 94833f8b8b94398566991713730b66a792b57056 Author: Daniel-Constantin Mierla -Date: Tue Oct 2 16:05:38 2012 +0200 +Date: Sun May 19 23:09:52 2013 +0200 - sdpops: added new function sdp_remove_line_by_prefix(string) + tm: initialize the uac structure to 0 for local generated requests - - removes lines from SDP body that matches the prefix - - patch by Mikko Lehto + - safer for adding new fields to it not set via set_uac_req() -commit c1d1b82d326ebda28f2b3e57b4066aa1c90e1286 +commit a53580d39c2fadf2ddc6f9805f15ac833cfd4c20 Author: Daniel-Constantin Mierla -Date: Tue Oct 2 16:02:05 2012 +0200 +Date: Sun May 19 14:55:52 2013 +0200 - parser/sdp: exported extract_field(...) + tm: new parameter - failure_exec_mode - - part of patch for sdpops by Mikko Lehto + - specify whether to consider or not execution of failure routing blocks + for braches that had local delivery error (e.g., no open tcp + connection and set_forward_no_connect() used in config) -commit 745e30c92336bfc3f8682b2c23e02862db688d9e -Author: Andrei Pelinescu-Onciul -Date: Mon Oct 1 11:55:16 2012 +0200 +commit 78669def2790205270032f9a750b19cc86f3d560 +Author: Daniel-Constantin Mierla +Date: Sun May 19 10:22:10 2013 +0200 - tcp: fix _wbufq_insert bug + tm: added icode to uac_client structure - When _wbufq_insert was called on a connection that had already - some data added to the write buffer (another process was faster - and added some data before the process that created the connection - had a chance to do it), a wrong size was used in a memmove. - This could lead either to corrupted messages or even crashes (if - the messages were big enough to cause a buffer overflow). + - store internal processing code, to give hints of what happened + - could be used to map sip warning codes + http://www.iana.org/assignments/sip-parameters/sip-parameters.xml#sip-parameters-5 + - delivery failure on case of no connection mapped temporarly to 908 + +commit cbcf86a036e6f8607f783ce18491121b0d58d2b0 +Author: Daniel-Constantin Mierla +Date: Sun May 19 10:16:40 2013 +0200 + + tm: keep uac_client structure aligned on 32b - Many thanks to Jijo for debugging it. + - otherwise it may create troubles on restrictive archs + +commit 90c69665edcfc9aebf265f280375251306442b98 +Author: Daniel-Constantin Mierla +Date: Sun May 19 10:03:02 2013 +0200 + + tm: use - instead if _ in branch-failure examples - Reported-by: Jijo + - it is what is expected by module -commit ec07471c1fdddbc8490d57d089a283ab1a07288f -Merge: b60d3f7 aea31fc +commit 1a099f704ffbb93f5c6389e86daa5af90aeb72f1 Author: Peter Dunkley -Date: Fri Sep 28 23:08:46 2012 +0100 +Date: Sat May 18 22:20:57 2013 +0100 - Merge branch 'master' into outbound + pkg/kamailio/(centos|fedora): Updated changelog in .spec -commit aea31fcdebe13004dbcea3afeabe4a045fefcc9c -Author: Daniel-Constantin Mierla -Date: Fri Sep 28 23:40:01 2012 +0200 +commit 5cff9062807ed181eae3a1db2d70fa625f647a4c +Author: Peter Dunkley +Date: Sat May 18 22:17:22 2013 +0100 - ldap(k): updates for usage of pv cache for pv_elem_t + pkg/kamailio/(centos|fedora): refactored .spec -commit 111bb96a0f18a3a1366e60deed54a4bd54ba865b -Author: Daniel-Constantin Mierla -Date: Fri Sep 28 23:31:50 2012 +0200 +commit 7ebf6affca7b2585353baa91f1560ff606979973 +Author: Peter Dunkley +Date: Sat May 18 20:43:05 2013 +0100 - carrierroute: updates for usage of pv cache in pv_elem_t + modules/websocket: Updated documentation -commit b60d3f76cb4d13a28cc38efabe1cebbf00d18d23 -Merge: 962fbef f71d76c +commit 20438793a5199ea90f0261a3b72b1b70e9566a30 Author: Peter Dunkley -Date: Fri Sep 28 21:50:16 2012 +0100 +Date: Sat May 18 20:42:53 2013 +0100 - Merge branch 'master' into outbound + modules/outbound: Updated documentation + +commit 6dc38a3618b2ad08bbc6feeee1c44ca19e0c5bd6 +Author: Peter Dunkley +Date: Sat May 18 20:42:24 2013 +0100 + + modules/msrp: Updated documentation + +commit a1136bf809e7d088332d54440a72edee4e30c26a +Author: Peter Dunkley +Date: Sat May 18 20:27:45 2013 +0100 + + modules/outbound: moved the check for "Supported: outbound" to after the checks on the Route: header - Conflicts: - pkg/kamailio/fedora/16/kamailio.spec + - In the scenario when a call comes from a non-outbound end-point to an + outbound end-point the outbound options-tag will not be present, but outbound + should still be used on the final leg between the edge-proxy and the + end-point. -commit f71d76c0f39f2c6b0e070e1246f371f17b45b2dd -Author: Daniel-Constantin Mierla -Date: Fri Sep 28 14:38:42 2012 +0200 +commit 8750305d4686ccae3a168454c4191f9b05d93ee3 +Merge: e81b3aa abdf40d +Author: Konstantin Mosesov +Date: Sat May 18 13:59:07 2013 +0300 + + Merge branch 'master' of ssh://git.sip-router.org/sip-router - app_mono: fixed c&p typo names in examples +commit e81b3aac19ab567813d6cb21fcba3d9bd6e1cc90 +Author: Konstantin Mosesov +Date: Sat May 18 13:56:22 2013 +0300 -commit 505f157c2777fa5e62815ccb4ef68ceb0ab7a023 -Author: Daniel-Constantin Mierla -Date: Fri Sep 28 11:02:04 2012 +0200 + parser/sdp: Fixed segfault in sdp_print() when no SDP body. + + - Failed scenario: + remove_body(); + msg_apply_changes(); + sdp_print("1"); + + - Result: sdp=0x0 - usrloc(k): table version increased internally +commit abdf40dabb7e7d44398056b9c2c72c0615debb52 +Author: Henning Westerholt +Date: Sat May 18 10:07:25 2013 +0200 + + core and modules: make IPv6 default, remove compile time flags - - it was done only in db schema by commit - 78dae896127ce6762e3fa7c2541e1b5f9b8a9023 - - reported by siklub + * Make IPv6 the default in the core and affected modules + * it has been default switched on since a long time, and was introduced in 2002 + * even on embedded systems one probably want now proper IPv6 support + * there was an issue in cygwin in 2008, but IPv6 is there also available since v1.7 + * remove over 160 #ifdefs, cleanup the code a lot and removes many of rarely + tested alternative code paths to ease support of the codebase + * note for gentoo maintainer: please review your packages, they will maybe not + work now correctly anymore if somebody specified -ipv6 in the use flags -commit 83cdd718fab4e244c5362df5102481ce32f75ae1 -Author: Juha Heinanen -Date: Thu Sep 27 19:16:47 2012 +0300 +commit 1b0ad814aec79a44b865ad2d3552c4693fe2ea6d +Author: Peter Dunkley +Date: Sat May 18 00:18:43 2013 +0100 - modules_k/pua: always use_table before making db queries + modules/{various}: updated because there is now an extra parameter on the append_branch() function -commit a24ce948f9f1758440b58d328eb8654efabfbbea +commit 42063cacea9bf0f001f44b11216572b4f46e6e2d Author: Peter Dunkley -Date: Thu Sep 27 16:29:03 2012 +0100 +Date: Sat May 18 00:17:48 2013 +0100 - modules/websocket: Updated documentation and fixed typo in configuration file example + modules/ims_registrar_scscf: use #define from core .h to specify the maximum UA length -commit 927a8a1aa705438d210fc244066a8c5a5b84a746 -Author: Daniel-Constantin Mierla -Date: Thu Sep 27 14:57:51 2012 +0200 +commit 3ec65f1cfebad258e7ef0cc622ed143284c3edf1 +Author: Peter Dunkley +Date: Sat May 18 00:15:59 2013 +0100 - core/mem: moved safety check for null before range check in *free() - - - affects only when memory debug is enabled at compilation - - apparently libssl has some free(0) which makes it not possible to work - with memory debugging (reported on irc channel) + modules/tm: copy user-agent string retrieved from usrloc into branches when serial forking -commit cbeb136c60d4890599d39665a2d27d865ae29b76 -Author: Elena-Ramona Modroiu -Date: Wed Sep 26 12:11:36 2012 +0200 +commit 5aeef2c932581a67d535ade10995cc35ff85640a +Author: Peter Dunkley +Date: Sat May 18 00:15:21 2013 +0100 - userblacklist: updates for new pv_elem_t structure - - - safety checks to detect dynamic vs static string parameters + modules/registrar: store user-agent string retrieved from usrloc in msg and branch structures -commit 0420d14dc23ae63a043650da0fa82654aab82bb6 -Author: Elena-Ramona Modroiu -Date: Wed Sep 26 12:10:23 2012 +0200 +commit 7bb5f98d7fd77ca6c21fb11e16d69116ef12cbb2 +Author: Peter Dunkley +Date: Sat May 18 00:14:07 2013 +0100 - auth_db(k): load_credentials is using the cache for pvs - - - results in less used private memory + modules/pv: added PVs to provide access to the user-agent string retrieved from usrloc -commit 2895dbdc0ba7c86b855fdffce178e3ca072a631a -Author: Elena-Ramona Modroiu -Date: Wed Sep 26 12:09:10 2012 +0200 +commit 8ca114df0fad44e4819cf80840f90e526ff655b4 +Author: Peter Dunkley +Date: Sat May 18 00:13:11 2013 +0100 - core/fixups: updates to reflect usage of pv cache for pv_elem_t + core: added fields to message structure and branch structure to hold user-agent string retrieved from usrloc -commit bd5353dff6e955830b816fe2f3d2bfedd02bf83b -Author: Elena-Ramona Modroiu -Date: Wed Sep 26 12:07:19 2012 +0200 +commit 381a052a8864198a62057dc307fdf39bbffe5436 +Author: Konstantin Mosesov +Date: Fri May 17 21:35:59 2013 +0300 - core/pv: use pv cache for pv_elem_t - - - reduces use of private memory for repetitive PVs + modules/sdpops: Added new function sdp_get_line_startswith(avpvar, string). -commit c79dffa959b325da2c579b2dce94511beac83f00 -Author: Elena-Ramona Modroiu -Date: Wed Sep 26 10:20:11 2012 +0200 +commit 121c5a49f81effdac42977d716332215d6a95e4f +Author: Konstantin Mosesov +Date: Fri May 17 21:14:29 2013 +0300 - xlog: use the function from core to get term color codes + uac: Added ability to set Call-Id through $uac_req(callid). -commit b6642a1af48b3d00ca55d5d7712c842efd2f384a -Author: Elena-Ramona Modroiu -Date: Wed Sep 26 10:19:51 2012 +0200 +commit 012816e404b52de697514e4f897ec8a8abe42abc +Author: Victor Seva +Date: Fri May 17 17:49:14 2013 +0200 - core: exported dprint_term_color() function + modules/debugger: refresh README -commit 5b1f81c72b40a0f7609aac32a8ce6e7325a70396 -Author: Daniel-Constantin Mierla -Date: Wed Sep 26 09:17:00 2012 +0200 +commit dbefbe319ba13b008ad46576dbc8a00d305e9910 +Author: Victor Seva +Date: Fri May 17 17:48:17 2013 +0200 - pv: new transformation {s.stripto,c} - - - remove the prefix until meeting 'c' - - "abcdef"{s.stripto,d} => "def" - - the char can be given in a pv + modules/debugger: Added dbg.mod_level RPC command -commit eebb2eb640992298c8119f4b5ac54e2370bff3a3 -Author: Andrew Mortensen -Date: Tue Sep 25 22:11:14 2012 -0400 +commit e46e0c78ee4f535cd09b8ee9fcdba4ee7bb5b518 +Author: Vicente Hernando +Date: Fri May 17 13:31:19 2013 +0200 - Remove unused struct _appearance_list members max_index and next_index. + modules/uac: update README -commit 20c436df0c81b38777052b4ba6fb425577f5c707 -Author: Daniel-Constantin Mierla -Date: Wed Sep 26 00:18:49 2012 +0200 +commit fed1818b65c6cbab89cd7aa64ad8f5f6535d706c +Author: Vicente Hernando +Date: Fri May 17 13:30:05 2013 +0200 - registrar(k): some contact attributes were not in $ulc(...) - - - ruid, reg-id and instance were not returned by $ulc(...) + modules/uac: upgrade doc to module.type.name format -commit ed5859fcd482d803cb2896cf58e3ef19ad8c2a2d +commit 257366739a7087953c0ff9e0dff82f3d2cf7c8b4 Author: Daniel-Constantin Mierla -Date: Tue Sep 25 23:43:48 2012 +0200 +Date: Fri May 17 10:13:06 2013 +0200 - pv: new pv class - $K(key) - - - return the value for internal constant keywords - - key can be: - - IPv4 - returns AF_INET - - IPv6 - returns AF_INET6 - - UDP - return PROTO_UDP - - TCP - return PROTO_TCP - - TLS - return PROTO_TLS - - SCTP - return PROTO_SCTP - - it can be used to compare the values from other pvs, such as $af(id), - $snd(af), $snd(proto), ... + Makefile.defs: version set to 4.1.0-dev5 -commit a2de5aba014c34fa0d37c1d527ff241e3969e897 +commit 86fce4b7b5e8bb56c65d628409ee50ecfb2756c4 Author: Daniel-Constantin Mierla -Date: Tue Sep 25 23:13:50 2012 +0200 +Date: Fri May 17 10:12:00 2013 +0200 - pv: new pv class - $af(key) - - - return address family for received message - - key can be: - - id: return integer representation for IPv4 or IPv6 (value of AF_INET and AF_INET6) - - name: return "IPv4" or "IPv6" + debugger: documented new parameters related to per module log level -commit daf65bac9d276598d932c7f905c30587ccb5a855 +commit 72f1b495c42933fea96a019e140dc6333fda2eb3 Author: Daniel-Constantin Mierla -Date: Tue Sep 25 22:20:21 2012 +0200 +Date: Fri May 17 09:58:19 2013 +0200 - nathelper(k): removed set_rtp_proxy_set() from docs + debugger: option to set debug level per module - - the function is now part of the rtpproxy module + - new parameters: + - mod_hash_size - size of internal hash table to store levels per + module (used to compute power of two with it) + - mod_level_mode - enable/disable per module log level + - mod_level - specify module log level + modparam("debugger", "mod_hash_size", 5) + modparam("debugger", "mod_level_mode", 1) + modparam("debugger", "mod_level", "core=3"); + modparam("debugger", "mod_level", "usrloc=3"); -commit 7943249ea75d8103d1364bcb4b6a63a2e685e88a +commit 34378c35b7cd037051af71081a9fa4d8b188c157 Author: Daniel-Constantin Mierla -Date: Tue Sep 25 13:52:05 2012 +0200 +Date: Fri May 17 09:56:34 2013 +0200 - utils/misc: few updates to vim syntax highlighting + core: updated dprint api to enable support for debug level per module + + - a callback can be registered to return the log level based on module + name -commit 779addb9df44434448f78ab17d2daa756d31d3c0 +commit e081c2880b46174ad836ab1f56e3062bb17b4332 Author: Daniel-Constantin Mierla -Date: Tue Sep 25 11:31:17 2012 +0200 +Date: Fri May 17 00:46:42 2013 +0200 - sanity: fix to parameter type in example + core: fixed printing function name in log message + + - based on http://gcc.gnu.org/onlinedocs/gcc/Function-Names.html -commit 7ed66b101602e2317c7cc95bf8fb8c039c227b8f -Author: Andrew Mortensen -Date: Mon Sep 24 16:39:17 2012 -0400 +commit a4fb559b5634f91259bb96af991c5574719e6871 +Author: Victor Seva +Date: Fri May 3 09:21:04 2013 +0200 - Remove debugging, basic appearance-uri escapes are working. - - Does not currently attempt to escape user or host in URI itself. + utils/kamctl: Add contact path parameter -commit e72a438d015e1f1afe1e3da83e3e6483c84373f0 -Author: Andrew Mortensen -Date: Sun Sep 23 22:15:48 2012 -0400 +commit ad0e5daa8865024440ea37a9e978eeeb7577602f +Author: Victor Seva +Date: Thu May 2 18:30:50 2013 +0200 - Fix doubly linked list corruption. - - Forgot to assign next node's prev element on unlink. + modules/usrloc: use 6th param to set the contact path -commit 03dbe404cea02b7a6e252eedbaa34dad7a0a8aff -Author: Andrew Mortensen -Date: Sat Sep 22 21:58:23 2012 -0400 +commit c454e4b0129695c7647f6af8e42a38d785d58a7d +Author: Victor Seva +Date: Thu May 2 16:56:45 2013 +0200 - Initialize subscription-from-request's appearance index to 0. + Fix ul.dump q output value -commit 31e886ed712d4bc2c3b3e59953eae02b30a00fa8 -Author: Andrew Mortensen -Date: Fri Sep 21 16:31:30 2012 -0400 +commit f66912d541403dc2b7e2ed0846a553ff76cec3ed +Author: Vicente Hernando +Date: Thu May 16 12:11:36 2013 +0200 - When unlinking a hash table entry, ensure the entry's next pointer is NULL. - - Possible cause of subscription corruption crashes. + modules:uac updated README after avoiding quotes in display. -commit c4b4ec30ce06b2517643ff8fca5d69b7e3ad6d7f -Author: Juha Heinanen -Date: Fri Sep 21 12:55:36 2012 +0300 +commit 251c0218e7d5e09f43a2b834a5450c20bb4f6d60 +Author: Vicente Hernando +Date: Thu May 16 12:06:55 2013 +0200 - modules_k/nathelper: add_contact_alias() now accepts parameters + modules/uac: avoid adding double quotes in uac_replace_* functions - - Function add_contact_alias() can now be given ip addr, port, and proto - as parameters. + - updated uac doc with a note and examples. -commit e8501b8eb592fa799af1fd1cfba8fa628cbfa800 +commit fe7e4a5152674aa9c81c09dd2fc9938d9e9e762e Author: Daniel-Constantin Mierla -Date: Fri Sep 21 09:44:21 2012 +0200 +Date: Wed May 15 22:45:18 2013 +0200 - topoh: use L_DBG instead of L_ERR for some debugging messages + pv: clone result of several string transformations - - reported by Miguel Baptista + - it is safer for assigning back to the same variable on which the + transformation was applied + - reported by Martin Mikkelsen -commit 900dee77178bf5f2c9dd9f2e67d4a467c5d4be1f -Author: Andrew Mortensen -Date: Thu Sep 20 22:52:14 2012 -0400 +commit 9330607f1d1132d4e7719d6a92fd26f4ff06665a +Author: Daniel-Constantin Mierla +Date: Wed May 15 19:02:58 2013 +0200 - Fix [SIPR-716]: place both endpoints on hold, unable to pick up. - - Code was always setting call state to active on 200 reply to INVITE if - callee was SCA. Patch sets state to active on 200 only when seizing a line. + misc_radius: documented common_response parameter -commit c60d8bb016314a5a6855a6e37dc52f85804addc0 -Author: Andrew Mortensen -Date: Thu Sep 20 22:22:11 2012 -0400 +commit 0eb9ef443db58109f5ed2f3ae7851ad368082bb8 +Author: Daniel-Constantin Mierla +Date: Wed May 15 18:58:01 2013 +0200 - NOTIFY cseq wasn't getting set from saved subscription. + misc_radius: new parameter common_response - Use less error-prone syntax for getting desired hash slot. + - get the radius response specific attributes in avps + - patch by Victor V. Kustov -commit f403aa7a974e47b92dbfc63ba18ab5eedd2879eb -Author: Andrew Mortensen -Date: Thu Sep 20 22:11:42 2012 -0400 +commit 6038bae188863f541994976d299c38f50b0a699b +Author: Daniel-Constantin Mierla +Date: Tue May 14 19:52:45 2013 +0200 - Use copy of appearance owner URI when NOTIFYing on receipt of 18x. - - Don't FFS use a shm struct after unlocking. + utils/misc: updated vim syntax file -commit d19f648201eeb9fc186bcd5e2459987b7da08163 -Author: Andrew Mortensen -Date: Thu Sep 20 17:17:47 2012 -0400 +commit ce1d16ce1c8009918c294307de53f35378868b52 +Author: Juha Heinanen +Date: Tue May 14 11:05:00 2013 +0300 - No need for lock in sca_hash_entry struct. Locking happens at slot level. + modules/usrloc: reduce work if contact attributes are not in use -commit c49fa3c36f8ba139516101955b33c389b2790977 -Author: Andrew Mortensen -Date: Thu Sep 20 16:47:33 2012 -0400 +commit 6c3853981a7574cd162117ef0d98dba205193d1b +Author: Juha Heinanen +Date: Mon May 13 15:26:57 2013 +0300 - Possible fix for [SIPR-712]: inadequate locking in sca_handle_subscribe. + modules/usrloc and registrar: added possibility to unregister without aor + + - added possibility to unregister without aor if usrloc uses db_mode=3 + - added new usrloc api function delete_urecord_by_ruid() -commit 4369f7752984ca3f2511ef2f7f223076bc3dc0c8 -Author: Andrew Mortensen -Date: Thu Sep 20 16:46:09 2012 -0400 +commit 65881c31b9a8aa1d4646891e8ea20d22646ce850 +Author: Daniel-Constantin Mierla +Date: Mon May 13 11:01:28 2013 +0200 - Add sca_hash_table_index_kv_find_unsafe. + Makefile.defs: devel version set to 4.1.0-dev4 -commit a22482e4dd26db613eb646fb57c210bd5ef67a5d -Author: Andrew Mortensen -Date: Thu Sep 20 16:44:14 2012 -0400 +commit 8e644b8e1ccd9c4d6383a2863f9bf247f789a987 +Author: Daniel-Constantin Mierla +Date: Mon May 13 11:00:08 2013 +0200 - Add stub functions for PRACK and REFER with Call-Info. + tm: fixed warning related to failure branch routing block execution - Must ensure Call-Info headers are stripped before they're sent to the - callee, as it can confuse the Polycoms about the state. + - routing blocks id are >=1, the condition was always true because the + field in tm struct is unsigned int + - gcc warning was: comparison is always true due to limited range of data + type -commit f34fe7395a8191437e359572823c6628cb6f07d3 -Author: Andrew Mortensen -Date: Thu Sep 20 13:56:35 2012 -0400 +commit 80e8058d9acea7c994819d043456fd1b449b048b +Author: Daniel-Constantin Mierla +Date: Mon May 13 10:59:20 2013 +0200 - Ensure that the c_uri.user is empty if there's no contact header. - - Possible fix for SIPR-715. + core: debug message to show mapping of routing block names to ids -commit c9ea26924267ea260a2b10506db8de899d26b78e -Author: Richard Fuchs -Date: Thu Sep 20 12:08:03 2012 -0400 +commit 32951506dff11df32c03230c1548553838140574 +Author: Daniel-Constantin Mierla +Date: Mon May 13 10:35:35 2013 +0200 - modules/ctl: remove limitation on number of message chunks + msrp: cache in a local variable if tls module is loaded - binrpc uses an iovec to send out replies, which is limited in size and so - severely limits the number of elements that can be returned. This patch adds - a callback function to send out and empty the iovec array every time it gets - full while it's being populated. + - avoid looping at runtime through the list of modules -commit 8a05e548456e3c6703bf37342a081269432de6d5 -Author: Andrew Mortensen -Date: Thu Sep 20 01:24:13 2012 -0400 +commit 0ca1a789e52e5d559983c3cfb4d851ae375c7758 +Author: Peter Dunkley +Date: Sun May 12 14:18:13 2013 +0100 - Removing unnecessary sca_update routines. - - Using P-Asserted-Identity accomplishes what the UPDATE packets failed - to do, which is to update the caller's display with the correct remote - party info. + modules/outbound: reduced the level of some outbound related diagnostics -commit a8c5b2080c1c3221d232dcbf4aed009e87fdfda8 -Author: Andrew Mortensen -Date: Thu Sep 20 01:23:06 2012 -0400 +commit b0b3887b099fd16906d9e42fcc05d2f899574426 +Author: Peter Dunkley +Date: Sun May 12 14:17:55 2013 +0100 - Committing for future reference before removing from project. - - Able to accomplish what was needed with P-Asserted-Identity header instead. + modules/rr: reduced the level of some outbound related diagnostics -commit 472854e9908c6ff2cf4a39d064004e2683ef2bb8 -Author: Andrew Mortensen -Date: Thu Sep 20 01:16:31 2012 -0400 +commit 4fafe7bd6d781748722de4fb565808063c8f6c4d +Author: Peter Dunkley +Date: Sun May 12 14:10:24 2013 +0100 - Fix [SIP-710]: SCA-to-SCA caller shows own DID instead of remote party's. - - Inject P-Asserted-Identity header with correct information in 200 OK - response to SCA pickup of held call. - - Also fix regression removing NOTIFYs to caller on 18x replies, and - update calls to update appearances to include display info. + modules/rr: reduced the level of an outbound related diagnostic message -commit 03c9725b6d5b7c6f14405c69e8cf9755659ad131 -Author: Andrew Mortensen -Date: Thu Sep 20 01:14:35 2012 -0400 +commit ee2847c5f508fc8757221e5772c03b62d07f172a +Author: Peter Dunkley +Date: Sun May 12 14:09:58 2013 +0100 - Add sca_uri_display_escapes_count. + modules/path: reduced the level of an outbound related diagnostic message -commit ec35eb22e8d1c98c73fd35499c7afb4b914de733 -Author: Andrew Mortensen -Date: Thu Sep 20 01:12:39 2012 -0400 +commit 116ba23c60be15f5fdc1e0cf0f9a9a7affdd32b3 +Author: Peter Dunkley +Date: Sun May 12 14:09:28 2013 +0100 - Include escaped callee display info in appearance-uri attribute. - - Currently using escape_common function from strcommon.h, found in - sip-router's libkcore. + modules/websocket: Added check to stop Kamailio starting if WebSocket is loaded without xhttp -commit 35baaf51504a2ba496a06830fe1b7da9a1d5b3a0 -Author: Daniel-Constantin Mierla -Date: Wed Sep 19 21:44:01 2012 +0200 +commit afdae93c5eba15496498be292c0c99608d801757 +Author: Juha Heinanen +Date: Sun May 12 16:10:40 2013 +0300 - Makefile: added new target 'printvar' + modules/presence: downgraded unsupported event syslog message - - prints the value of a Makefile variable whose name is provided in - variable 'v', e.g.,:: - make printvar v=exclude_modules + - Downgraded unsupported event syslog message from error to notice. -commit 46cf25d2e18d14640624c35cf11d5dd7a6b1224d -Author: Andrew Mortensen -Date: Tue Sep 18 16:18:04 2012 -0400 +commit 116daef9b55d82a016d1fd3e3d877a2468c55d1a +Author: Peter Dunkley +Date: Sun May 12 13:57:44 2013 +0100 - Pass To/From headers' display info and URI when updating appearance. - - Preparation for including display info with appearance-uri attribute. + modules/msrp: Use "msrps://" URIs for the server when TLS is loaded. TLS is mandatory for MSRP relays. -commit c2eab9b90b9d34b147d8f7c420ab10e35ccb5245 -Merge: 942229d 8456325 -Author: Carsten Bock -Date: Tue Sep 18 20:43:29 2012 +0200 +commit 30c8ead0b18678950b7596d4247d51cb56614d42 +Author: Peter Dunkley +Date: Sun May 12 13:57:00 2013 +0100 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/msrp: added warning when MSRP is loaded in a configuration without TLS. TLS is mandatory for MSRP relays. -commit 942229d809e715ae330894b20d099f38b616c044 -Author: Carsten Bock -Date: Tue Sep 18 20:42:55 2012 +0200 +commit b220a571d010851ee72c6bf6263a958335283b62 +Author: Peter Dunkley +Date: Sun May 12 13:55:46 2013 +0100 - Minor bug-fix: Need to update length. + modules/websocket: added warning when websocket module is loaded in a configuration without either the nathelper or outbound modules -commit 84563257d6c174c7ef3c7ee9b931e64a0b5a95c2 +commit 2bb07b9d2df567e24f86b291bee7748db104252b Author: Peter Dunkley -Date: Tue Sep 18 19:29:36 2012 +0100 +Date: Sun May 12 13:54:59 2013 +0100 - modules/websocket: Updated example kamailio.cfg - - - Now using corex and alias_subdomains. - - It is quite likely that a WebSocket server will be running on a host within - the domain it is authoritative for and that the WebSocket client will - address that host directly. This means that the alias_subdomains modparam - is a good way to get a domain and all of its sub-domains to match "myself". - - This is very useful for checking the Host: header in the WebSocket - handshake. - - - Added handling of OPTIONS pings. - - - Fixed a problem with the Host: header check. - - When you connect to a WS or WSS socket in Google Chrome on the default ports - (80 and 443 respectively) the Host: header will contain just a hostname - (for example, "proxy.example.com") which works with is_myself(). - - When you connect to a WS or WSS socket in Google Chrome on a non-default port - (for example, 8080 or 8443 respectively) the Host: header will contain a - hostname and port (for example, "proxy.example.com:8080") whoch does not work - with is_myself(). - - However, both "sip:proxy.example.com" and "sip:proxy.example.com:8080" will - work, so simply adding "sip:" to the start of the contents of the Host: - header before checking fixes the problem. - - - Tidied up response reason texts. - - - Tidied up some of the TLS specific checks in event_route[xhttp:request]. - - - Removed some DBG level log messages. - - - Added a (commented out) example for checking the Origin: header in the - WebSocket handshake. + modules/outbound: added warning message when outbound module is loaded in a configuraiton that does not load the stun module -commit 566ac92dc07d9928808a319d774a0e3cdb49d021 -Author: Andrew Mortensen -Date: Tue Sep 18 09:58:54 2012 -0400 +commit 9af456f292e25be2c5689212ed097177a5a16338 +Author: Peter Dunkley +Date: Fri May 10 20:04:02 2013 +0100 - Remove update_flag for now. + modules/websocket: Added ws_close() exported function - Using UPDATE to correct URIs on both ends of the call caused the Polycom - handsets to report loops. This in spite of them returning 200 OK to the - UPDATEs and logging that the URIs were being updated successfully. - -commit aa15ad5a0ee35f6676012a84c1e2501b1533ba6c -Author: Daniel-Constantin Mierla -Date: Tue Sep 18 14:50:33 2012 +0200 - - corex: fixed typos in documentation example + - Enables immediate closure of a WebSocket connection from the configuration + file. -commit ca2454106d869dacccda6bd5564037a83edd89bc +commit 399dd84d28da82d751e40488cda604a4e03fcbf3 Author: Peter Dunkley -Date: Tue Sep 18 11:53:02 2012 +0100 +Date: Fri May 10 20:02:51 2013 +0100 - pkg/kamailio/(centos|fedora): Fixed some issues with boxgrinder builds + modules/pv: added new $conid PV - - Fixed typo in README - - New version of BoxGrinder limits appliance name to 35 characters - (so had to shorten these) + - Returns the TCP connection ID that the current message arrived on (for + TCP/TLS/WS/WSS) or $null (for UDP/SCTP) -commit 9430ee8d313ece9c97384868ee7623c0979028f5 +commit 81d3eebd51089686949ab22da60166d4f3a460a7 Author: Daniel-Constantin Mierla -Date: Tue Sep 18 09:27:38 2012 +0200 +Date: Tue May 7 19:15:36 2013 +0200 - pkg/kamailio/rpm: fixed copy&paste error for PKG_MEMORY size + core: get rid of deferencing type-punned warning in deb wheezy + + - reported by Victor Seva -commit 9430290ad91ca775bb18f54e70308917ce1e790a -Author: Daniel-Constantin Mierla -Date: Tue Sep 18 09:18:52 2012 +0200 +commit acf033559f728e9967eb32f5340b0508a232172b +Author: Carsten Bock +Date: Tue May 7 22:31:34 2013 +0800 - pkg/kamailio/rpm: added option to set pkg memory size for init.d script - - - split of MEMORY parameter to SHM_MEMORY and PKG_MEMORY - - EXTRA_OPTIONS variable to add other command line parameters + Remove "ignore_failed_auth" Parameter from example config - otherwise you may register without correct password. + (the parameter was added for loadtesting only) -commit 0b09c36e4251ee292a48d2fd83bca2fd0ff4c268 -Author: Andrew Mortensen -Date: Tue Sep 18 00:32:48 2012 -0400 +commit 994155161263dab7a7f7c01105ea474702cf7fee +Author: Richard Fuchs +Date: Mon May 6 11:03:07 2013 -0400 - Reconcile mismatched Contact and To/From URIs early. - - Fixes dropped state for caller URI (and stuck state for callee if callee - is SCA) on second pickup on different handset after hold. Depending on - the values in the To/From headers won't work, since the SCA reINVITE to - seize a held call uses the SCA group's AoR in RURI, To and From, leading - to problems in SCA-to-SCA calls. + path: support SPVE in add_path*() and add second parameter - This does not yet resolve the display URI problem. + This includes a major rewrite and code cleanup of prepend_path(), which + doesn't perform any other functional changes. -commit 75143735af38a921f8d8f1bcafdba14de4a3e39a -Author: Andrew Mortensen -Date: Tue Sep 18 00:26:50 2012 -0400 +commit fa9b8664a3b7c7a035c738a37b8ef0ef44190cb8 +Author: Juha Heinanen +Date: Fri May 3 19:53:12 2013 +0300 - Add sca_aor_create_from_info. + modules/rls: added support for escaped chars in rls-services document -commit b19767513663acd96776cc454fe42ea11c50431f -Merge: 2750e03 cccdaea +commit 86d706bd4a1e31160883a4f094f3e04f9380de04 Author: Carsten Bock -Date: Mon Sep 17 17:29:48 2012 +0200 +Date: Fri May 3 18:45:07 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + Make XML-RCP configurable in example scripts + - Improvement: Automatically enable TCP, if XML-RPC is requested + - Improvement: Allow the configuration of TCP-Children (especially for XML-RPC) + - Improvement: Add missing configuration information -commit 2750e03d4977d4a8f59ca0d2d0f59e1caec96b2d -Author: Carsten Bock -Date: Mon Sep 17 17:25:38 2012 +0200 +commit 141808e9c0789e56f29297e2d2c185e091ebb66a +Author: Henning Westerholt +Date: Thu May 2 23:41:28 2013 +0200 - New Option: "x" for automatic bridging between IPv4 and IPv6. - Based on the following assumption: "i" is the IPv4 interface - and "e" is the IPv6 interface on the RTPProxy (tested with both - RTPProxy and Sipwise's ngcp-mediaproxy-ng). - - Mechanism is as follows: - - IP in SDP is IPv4: Do bridging "ie" - - IP in SDP is IPv6: Do bridging "ei" + memcached: port to more recent memory manager callback structure - Not a big deal, but makes the configuration much more easier. + * port to more recent memory manager callback structure + * add small wrapper for calloc, implemented not optimal at the moment + because the pkg_calloc from core/mem is not exported yet + * add initial code to check for server connection during startup, not + enabled yet as its work in progress + * reorder structure a bit to allow for clean shutdown because of internal mm -commit cccdaead04411175c46dd660c91c037c45f80c33 -Author: Marius Zbihlei -Date: Mon Sep 17 17:34:57 2012 +0300 +commit 0332acbc4cf2339f3b6b068f460d00e92221a8ef +Author: Henning Westerholt +Date: Thu May 2 21:36:17 2013 +0200 - core:parser fix possible bug in msg_parser - - If buffer was NULL, tmp was returned uninitialized, thus possible to cause problems + memcache: fix "maybe used uninitialized" warning from gcc -commit a6c250c091e29c1f4fd53782dfb723fa194fe03e -Author: Marius Zbihlei -Date: Mon Sep 17 17:21:37 2012 +0300 +commit 003d87edc23f62de98a1a22db03b12ea58abcbc6 +Author: Henning Westerholt +Date: Thu May 2 21:17:57 2013 +0200 - core: fixed some bening (-Wunused-var) warnings displayed by clang - - Core builds with no errors/warning + mangler: fix double definition of contact_flds_separator, reported from ld -commit 5273948a6eeb6f6fe878696dce54880cabb0ef7c -Author: Marius Zbihlei -Date: Mon Sep 17 17:21:02 2012 +0300 +commit d6dba0e1b649bcfacaac2dd3496b497e944ebaba +Author: Daniel-Constantin Mierla +Date: Thu May 2 13:43:58 2013 +0200 - Makefiles.defs: clang compiles to O9 + Makefile: fixed path to kamailio.default in deb specs dir -commit 2d6a8e0ae7eb9bbf839227ae370ede7bf7d89ab1 -Author: Carsten Bock -Date: Mon Sep 17 14:36:00 2012 +0200 +commit 50e9baf2131befa2243a221566b6505a55216208 +Author: Juha Heinanen +Date: Wed May 1 18:04:47 2013 +0300 - Revert "Do not perform a lookup for IPv4 addresses, if only listening on IPv6 sockets." - Can be done by configuration. - - This reverts commit e1b3961b16b76b02ae7ad5f52b2e9db126f81ff9. + modules/registrar: added regid_mode module param + - Tells if REGISTER contact regid (if present) is used when REGISTER request + is saved even if request does not indicate support for outbound. -commit 97e03b52f1e15d7f22416274cf696fb5c6a94758 -Merge: e1b3961 d9b009e -Author: Carsten Bock -Date: Mon Sep 17 14:35:12 2012 +0200 +commit cc00df26d2e3298751541cc0d4ad35bf0ac361f4 +Author: Juha Heinanen +Date: Wed May 1 12:34:25 2013 +0300 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/htable: added htable.reload rpc command -commit d9b009ef3c430f6ea064b4a72d5b94ce842ede1d -Author: Jason Penton -Date: Mon Sep 17 10:55:48 2012 +0200 +commit 0ff087e9715298abf3187c52a9d1ac70031f1499 +Author: Juha Heinanen +Date: Wed May 1 11:54:20 2013 +0300 - benchmark: fixed bug/typo in calculating time diff ;) + modules/mtree: added mtree.reload rcp command -commit 9d5ef9925da0257a46afa7e8d8dfa1ce8920364a -Author: Marius Zbihlei -Date: Mon Sep 17 11:42:01 2012 +0300 +commit c57575c5b289c3468eb5c651c1e56699f554298a +Author: Juha Heinanen +Date: Wed May 1 09:43:51 2013 +0300 - cfg.y : improved printing of error messages to stderr - - The -E was ignored during the yyparse() stage, if log_stderr=no parameter in the cfg was set (default config) - This caused problems debugging certain lodmodule errors. + modules/usrloc: added missing rpc commands + - added missing rpc commands ul.rm, ul.rm_contact, ul.flush, and ul.add + by patch provided by Víctor Seva -commit 2e5145ecdd8368c947ea93b98449ebd997824ce2 -Author: Marius Zbihlei -Date: Mon Sep 17 10:17:41 2012 +0300 +commit 878b343f374a62d7ea5ebe5e85b00c391956b623 +Author: Torrey Searle +Date: Tue Apr 30 12:01:00 2013 +0200 - Provide inline linkage for non-gcc compilers(like clang) - - Inline method in headers should be declared extern. + data_lump return a comment back to it's owner -commit 92d6ed40ca4aeb36d5d07a9048145779febba062 +commit 8f74c57605fdd1d31c7808a3b8afc79cc981b370 Author: Peter Dunkley -Date: Mon Sep 17 00:03:58 2012 +0100 +Date: Mon Apr 29 20:54:52 2013 +0100 - pkg/kamailio/fedora/16: Updated .spec for Fedora and CentOS builds + modules/websocket: fixed mandatory headers check -commit bde7e9465db9e7c9ecb485c57edabbd032f3b770 +commit a2e7f65ee8b86d37a6772619ae10087a05219192 Author: Peter Dunkley -Date: Sun Sep 16 23:47:20 2012 +0100 +Date: Mon Apr 29 20:38:06 2013 +0100 - modules_k/rls: Fixed segmentation fault in RLS when a resource-list is updated - - - Found and fixed by Hugh Waite @ Crocodile RCS + modules/websocket: doubled the size of the buffer for adding headers to WebSocket handshake responses -commit 67df57c984e040a948d01d2c6bf1a9461d271f8e +commit 3d5c66997e77ae4f4c181e5a77c943156a7db00a Author: Peter Dunkley -Date: Sun Sep 16 23:46:07 2012 +0100 +Date: Mon Apr 29 20:34:36 2013 +0100 - modules_k/rls: Fixed race-condition on multi-server systems that can cause different NOTIFYs with the same CSeq - - - Found by Hugh Waite @ Crocodile RCS and fixed by Peter Dunkley @ Crocodile RCS + websocket: added "cors_mode" parameter to enable "Cross-origin resource sharing" on WebSocket handshakes + - I don't know of any WebSocket clients that require this (yet). But having it + in there won't break anything. + +commit 14d4ea782a9a24da9755963ea12807f255cebce5 +Author: Richard Fuchs +Date: Mon Apr 29 11:26:18 2013 -0400 + + db_mysql: add cast to remove compile warning -commit 424d2cabbe2e20c7ed134f6c9bd463811f2de63f +commit 218a83c50a217c420502d484738b6b3401c89b8c +Merge: edebc03 aefea54 Author: Juha Heinanen -Date: Sun Sep 16 17:20:38 2012 +0300 +Date: Sat Apr 27 18:10:28 2013 +0300 - modules_k/usrloc: modified syslog messages on bad and non-local sockets - - Changed syslog message on non-local socket from warning to debug, - because non-local socket is ok when nathelper obtains the contacts and - overrides the socket. - - Corrected syslog messages on bad and non-local sockets. + Merge branch 'master' of ssh://git.sip-router.org/sip-router + - Forgot to pull before push. -commit 279fe72dbe9009aa9e73d7609460d4dc613bfa6d +commit edebc03f65445f968accb58b5a761817aaee55e8 Author: Juha Heinanen -Date: Sun Sep 16 17:14:18 2012 +0300 +Date: Sat Apr 27 18:07:21 2013 +0300 - lib/srdb1/schema: added expires_idx on location table + modules/usrloc: fixed typo in db_ops_ruid param name -commit a46c8859c4f9451764a92cd329f4225a5b43a986 +commit aefea5477dc7878d5e818628e04ddcb088fd2858 Author: Daniel-Constantin Mierla -Date: Fri Sep 14 13:45:14 2012 +0200 +Date: Fri Apr 26 19:55:43 2013 +0200 - Makefile.defs: version set to 3.4.0-dev4 + tm: wrap around expression adjusting length for To/From headers + + - applies for local requests -commit 5b3d0d2837823a4879e493f04d4e995c3e29d37b -Author: Marius Zbihlei -Date: Fri Sep 14 13:53:00 2012 +0300 +commit ff890a4eee1888ed3e1e080a18bd72124ab99690 +Author: Daniel-Constantin Mierla +Date: Fri Apr 26 19:00:36 2013 +0200 - lib/kcore: other inline linker fixes + tm: fixed name of the target uri used for From header - use of 'static inline' where appliable + - effect of previous commit -commit 452c543de61d413351a5ac0816adc137d150824b -Author: Marius Zbihlei -Date: Fri Sep 14 13:17:24 2012 +0300 +commit f22dcd559c739dd99275cd2444cf481d458d2fab +Author: Daniel-Constantin Mierla +Date: Fri Apr 26 18:32:55 2013 +0200 - core: Added support for the clang compiler + dispatcher: proper localization of To uri for keepalives - Support for clang, a C compiler from the LLVM suite has been added. - Install clang and run 'make cfg CC=clang && make' for building. GCC Inline assembly is supported. - TODO: clean warning caused by clang (-Wunused-variable, etc) + - it was affected by introduction of <> around the URI in To header + - reported by Peter Dunkley -commit d5a8649a2059466a1a8b9e2adbef139d0300a599 -Author: Marius Zbihlei -Date: Fri Sep 14 13:15:47 2012 +0300 +commit 57ed79b9d45c29d37c405c3fa582c1d1011a2315 +Author: Daniel-Constantin Mierla +Date: Fri Apr 26 18:24:01 2013 +0200 - core: Fixed inline function declaration for non-gcc linkers + tm: adjust size of the hooks to From/To headers for local genrated requests - usage of either 'extern inline' or 'static inline' depending on function scope is recommended + - take in cosideration <> if it is the case -commit e1b2e0bdb0b2bbd41fbe4e2a1cedb0fb4a682a5f -Author: Andrew Mortensen -Date: Wed Sep 12 13:08:56 2012 -0400 +commit 2e1ade7c66217280455136fb85aeb3a8e8e6917d +Author: Peter Dunkley +Date: Fri Apr 26 15:29:47 2013 +0100 + + modules/siptrace: Support for ws: and wss: (fake protocols as per tls:) - Initial attempt to use a flag & exported function to send UPDATEs. +commit 5b96c7e6ec3cfd8354a6a257a87144196d57fec3 +Author: Marius Zbihlei +Date: Fri Apr 26 09:56:26 2013 +0100 + + core: fixed compilation on Solaris, due to missing gethostbyname2 - Additional fixes: - * only attempt to unlink appearances on CANCEL if AoRs are SCA. - * remove TMCB_DESTROY callback stuff. + TODO: provide a wrapper over dnssec for getipnode...() for Solaris -commit 571212688fbe0dd56c4e18d0ae611f8c4b5df59c -Author: Andrew Mortensen -Date: Wed Sep 12 01:29:38 2012 -0400 +commit 5e96920289cbf448ac684d8cb1333d75f65a729a +Author: Ovidiu Sas +Date: Thu Apr 25 14:50:41 2013 -0400 - Remove misleading comment. + snmpstats: fix cross-compilation -commit 798b1324e42071d04f5d71cbef6ef97ca576d6f3 -Author: Andrew Mortensen -Date: Wed Sep 12 01:06:51 2012 -0400 +commit ad11cdca0941cd114e17bb80337a7557818220d5 +Author: Peter Dunkley +Date: Thu Apr 25 18:16:28 2013 +0100 - Register TMCB_E2EACK_IN on INVITE if either caller or callee are SCA. - - Fixes NOTIFYs on call answer if caller is non-SCA and callee is SCA. - Appearance state of SCA callee was getting updated in this case, but - the ACK callback wasn't getting registered, so no NOTIFYs to group. - - Additional small changes: - * Put quotes around appearance-uri value in Call-Info header. - * Only try to update appearance state on 18x reply if caller - is SCA. - * Temporarily disable TMCB_DESTROY callback registration. + modules/msrp: Use "msrps://" instead of "msrp://" in headers when the transport is WSS -commit 06853f5569a9215d0774ca92c7eda673a04b238d -Author: Andrew Mortensen -Date: Tue Sep 11 23:47:00 2012 -0400 +commit 4c7195915b38ba343484833532b82b42879d7138 +Author: Peter Dunkley +Date: Thu Apr 25 16:13:48 2013 +0100 - Clarify certain pro/con points re: UPDATE handling. + modules/websocket: fixed segmentation fault relating to recent counter changes -commit cc03c65d108c0a3f9df1dd076ee24f0f70c4b6e7 -Author: Andrew Mortensen -Date: Tue Sep 11 23:15:45 2012 -0400 +commit 4e4b1339bfd3a832f5feeb1d2a2380c7455ec82b +Author: Daniel-Constantin Mierla +Date: Thu Apr 25 14:50:40 2013 +0200 - Fix core on shutdown: param passed to usrloc cb must be separate shm_malloc'd. + tm: add angle brackets around From/To URI for local generated requests - Passing the module struct (sca_mod) as the callback param causes a core dump - on shutdown because the usrloc callback destructor will shm_free any param - if non-NULL, and the module is already disposed by that point. The callback - isn't currently using any param, so for now pass NULL params when registering - for usrloc event callbacks. + - safer for special cases of URI format -commit 91f575b4baf34a8bff16022e807fb086a051414a -Merge: b6477c2 8fed32c -Author: Andrew Mortensen -Date: Tue Sep 11 17:35:32 2012 -0400 +commit 744a8d317b894a1360e3441a9e69ac9190a1745b +Author: Juha Heinanen +Date: Thu Apr 25 14:12:21 2013 +0300 - Merge branch 'master' of git+ssh://repo.net.isc.upenn.edu/git/pnp/sip-router-sca-module + modules/outbound: added force_no_outbound flag -commit b6477c2f2329f3c07b5c4ef31dba92e5d49105d6 -Author: Andrew Mortensen -Date: Tue Sep 11 17:34:36 2012 -0400 +commit 81f622b9ef7d32434659f1e6d9a21c8013cefec7 +Author: Klaus Darilion +Date: Thu Apr 25 08:12:07 2013 +0000 - Add notes about how to send UPDATEs to call legs after hold/pickup + sipcapture/siptrace: set default db_url to read-write URL -commit 95581558c230054b082200f10509b8c61e036131 -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 22:02:21 2012 +0200 +commit c923dec79e20b77f0b42f0ef286eb396bb06f29c +Author: Victor Seva +Date: Mon Apr 22 17:09:19 2013 +0200 - corex: documented the new parameter alias_subdomains + app_lua: Added sr.xavp.get function in order to get a table with all the values of a xavp. -commit eaed27161e36b0bec9bef2660d2fae80092a2e42 -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 21:52:01 2012 +0200 +commit 0c866d07dd2124b92329106c1cea19bef6ccca9a +Author: Victor Seva +Date: Mon Apr 22 10:48:08 2013 +0200 + + app_lua: Added sr.xavp.get_keys function. + +commit 288e2739da28251e12086b52358c3a0d18e91fa5 +Author: Victor Seva +Date: Mon Apr 22 10:46:17 2013 +0200 + + core[xavp]: Added helper function to get a list of keys from a xavp variable. + +commit ac99219b0a850e0305eaf661b028536cfc28e2cb +Author: Peter Dunkley +Date: Wed Apr 24 22:01:59 2013 +0100 - corex: new parameter alias_subdomains + modules/presence_xml: fixed issue with parsing some pres-rules documents - - adds domain and all its subdomains to myself condition, registering a - callback for check self event + - pres-rules that contain external links in a node don't + have to have nodes in the node. + - Kamailio returns an error when it finds a node with + no node inside it. + - Kamailio doesn't support external links, but it should skip over + the nodes that contain them rather than return + an error as later nodes may contain entries it can + work with. -commit e1b3961b16b76b02ae7ad5f52b2e9db126f81ff9 -Author: Carsten Bock -Date: Tue Sep 11 19:39:32 2012 +0200 +commit 96a1af2f261085db695d8a3b23c1a16f39b393fa +Author: Peter Dunkley +Date: Wed Apr 24 21:07:07 2013 +0100 - Do not perform a lookup for IPv4 addresses, if only listening on IPv6 sockets. + examples: added WebSocket edge proxy example using outbound for NAT traversal -commit 8fed32ca2984a5e8eeb92656d7c1bb4c7355ce4a -Author: Jorj Bauer -Date: Tue Sep 11 11:25:38 2012 -0400 +commit 4f68c5626530a1bfe2c7ce72eb3de24b3e7e73dc +Author: Peter Dunkley +Date: Wed Apr 24 21:06:36 2013 +0100 - reduce dependency on copy-and-paste string literals + examples: added outbound edge proxy and registrar example configurations -commit 750ec99e6d65b00f0e203f4cd508a2435812491d -Author: Andrew Mortensen -Date: Tue Sep 11 10:40:26 2012 -0400 +commit a0c85d1187dd75a8ab6db9604baee93a5d4f478f +Author: Peter Dunkley +Date: Wed Apr 24 21:04:56 2013 +0100 - Improvements to hold/pickup when caller & callee are in SCA groups. - - UPDATEs ifdef'd out for now. Will set flag or AVP for script to trigger - UPDATEs to both call legs after relaying ACK. + examples: updated basic websocket example -commit 78dae896127ce6762e3fa7c2541e1b5f9b8a9023 -Author: Henning Westerholt -Date: Tue Sep 11 15:13:39 2012 +0200 +commit cf908dc57b4f62e8daf28c7a0199284bd0b4dc69 +Author: Peter Dunkley +Date: Wed Apr 24 21:04:24 2013 +0100 - db scheme: add missing usrloc and aliases version increase, reported from Juha + modules/outbound: Updated examples (edge proxy and registrar) in documentation -commit ca551f7cb3770a08832758e543587415b3c6d80d -Merge: 2b62b73 5ac76c5 +commit e8cf4ef94d8759641ce682b50bad303baa58a2e8 Author: Peter Dunkley -Date: Tue Sep 11 14:01:16 2012 +0100 +Date: Wed Apr 24 16:34:29 2013 +0100 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/rr: Fixes relating to outbound and record-routing + +commit 9b1f607ccd3575a2c3a4aba7f6c36e637f9d7022 +Author: Peter Dunkley +Date: Wed Apr 24 14:28:36 2013 +0100 + + pkg/kamailio/(centos|fedora): Updated rel in .spec file + +commit 0b8cbbd8359a3c049b0da7a743de3b996412ab35 +Author: Peter Dunkley +Date: Wed Apr 24 14:26:09 2013 +0100 + + core: Fixed error where ";transport=wss" parameter was sometimes added to URIs - * 'master' of ssh://git.sip-router.org/sip-router: - registrar(k): set found if lookup for uri branch is successful + - It should always be ";transport=ws" with WebSocket -commit 2b62b73f8d966d2418c765839ab43b3dbc57545f +commit 1e84948d120ef2b1206f90458d47486239cfd81b Author: Peter Dunkley -Date: Tue Sep 11 13:59:55 2012 +0100 +Date: Wed Apr 24 14:24:45 2013 +0100 - lib/srdb1/schema: Updated indices for presence tables based on results of latest performance testing + modules/rr: Double-route and outbound support in loose.c - - By Hugh Waite @ Crocodile RCS Ltd and Peter Dunkley @ Crocodile RCS Ltd + - Have removed outbound support from strict routing for now as it was incorrect + and I don't have a system to test with. -commit 5ac76c501c87da24443ec56b7cf4ac93b8318f49 +commit 0125cdf0e75271a8478a3eadacc54ea1c1eb4da0 Author: Daniel-Constantin Mierla -Date: Tue Sep 11 14:46:03 2012 +0200 +Date: Wed Apr 24 17:26:15 2013 +0200 - registrar(k): set found if lookup for uri branch is successful - - - the additional branches can hit all not found, but still a found on - r-uri can happen + usrloc: update call-id value in db when matching record by ruid -commit b0d642016cca83c519ea9aa0e04aa9bf353e07e4 -Author: Peter Dunkley -Date: Tue Sep 11 13:23:23 2012 +0100 +commit ef0a17f0e4c9426f64168eb24568ba906e554315 +Author: Jon Bonilla +Date: Wed Apr 24 16:46:55 2013 +0200 - modules_k/pua: Adjusted locking for dialog insertion. Candidate fix for "temporary dialog" error reported by Juha + pkg/deb: Deprecate lenny + + Lenny is not a supported version of debian any more. + At sip-router squeeze and wheezy are being mantained at the moment. + Let's deprecate lenny for future releases. -commit 6924912be955b9f7ba47fd57b22ffe0c01eb68b2 -Author: Peter Dunkley -Date: Tue Sep 11 13:10:08 2012 +0100 +commit d9b7cfcd63b5432bc956f0be3a9b4d5eea026786 +Author: Jon Bonilla +Date: Wed Apr 24 16:42:59 2013 +0200 - modules_k/rls: Fixed segmentation fault when uploading new contact lists for a logged in subscriber + pkg/deb: Change memcache module dependencies - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + libmemcached-dev is the new dependency deprecating libmemcache -commit af8230b1ac6a88dfb10d567e784a3c39a8f1b863 -Author: Peter Dunkley -Date: Tue Sep 11 13:09:22 2012 +0100 +commit 9106eca16924dd6dc797295ba2d74ee16865acaf +Author: Daniel-Constantin Mierla +Date: Wed Apr 24 16:27:13 2013 +0200 - modules_k/rls: Improved check for expired subscriptions in DB only mode + usrloc: regenerated the readme for db_ops_ruid parameter -commit 7b64e538b350ebd520b80f668045b9f3c7d68fb9 -Author: Peter Dunkley -Date: Tue Sep 11 13:08:38 2012 +0100 +commit e66842c2fc34d8dc8980efa821f7039685edef87 +Author: Daniel-Constantin Mierla +Date: Wed Apr 24 15:41:34 2013 +0200 + + usrloc: documented db_ops_ruid parameter + +commit 61e08282c905c2ee03a2be618b1e700fc0acbdeb +Author: Daniel-Constantin Mierla +Date: Wed Apr 24 15:34:16 2013 +0200 + + usrloc: option to do db update/delete ops using ruid + + - new parameter db_obs_ruid - if set to 1, db update/delete operations + are done using ruid value + - if paramter set to 0 (default) the old style using aor, contact and + call-id is done + +commit 52d339408f499c867548f2531be1cac119b31e3b +Author: Daniel-Constantin Mierla +Date: Wed Apr 24 13:38:32 2013 +0200 - modules_k/rls: Fixed issues with for() loops in DB only mode + core: new global parameter - modinit_delay - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + - sepecify microseconds to sleep after initializing a module in order to + cope with systems having rate limits on new connections to db or other + servers -commit 5235a1d6218e0bb16f6c9998789864635f54d03e -Author: Peter Dunkley -Date: Tue Sep 11 13:06:54 2012 +0100 +commit 735f83d6346c97d6f7b1da26a2fee1b6270872b1 +Author: Daniel-Constantin Mierla +Date: Wed Apr 24 13:36:08 2013 +0200 - modules_k/rls: core_hash() not used correctly to distribute notifier traffic + registrar: added debug message to print generated ruid for contact - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + - formatted condition to fit 80 char long line -commit 6eccc8b61e848977012d6efa1fb5aae61f8d441e -Author: Peter Dunkley -Date: Tue Sep 11 13:05:15 2012 +0100 +commit a74980270b655124c276279e54b8f82965f3f4b8 +Author: Daniel-Constantin Mierla +Date: Wed Apr 24 10:26:49 2013 +0200 - modules_k/rls: Fixed issues to do with expiry and rls_expires_offset + sqlops: use one char buf for empty strings in db results - - These cause particular problems on multi-server systems. - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + - safe for the parts of code that want to access it even for write -commit 725020f91493d33c5fa86828a421ed465731658e +commit 0e09fba67dc5d75d5e73bb7d35deecf721b37cfc Author: Peter Dunkley -Date: Tue Sep 11 13:03:32 2012 +0100 +Date: Wed Apr 24 11:49:21 2013 +0100 - modules_k/rls: Added missing lock_release() + modules/rr: refactored process_outbound() - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + - Still need to update loose.c to properly handle double-RRs with flow-tokens -commit 20475258957cbf3183e5e771e9fd41dc69336096 +commit c38c0ba0ab3244aa387de706a4555fab28c67ad7 Author: Peter Dunkley -Date: Tue Sep 11 12:59:08 2012 +0100 +Date: Wed Apr 24 11:48:21 2013 +0100 - modules_k/pua_db: If PUA finds more than one matching dialog (when there should only be one) delete them all + modules/rr: add double record-routes when outbound is enabled - - A timing difference on multiple-servers can sometimes cause this, - and (if it happens, it doesn't when the clocks are synced) you can - end up with the same error coming out lots because the DB is not - cleaned up. + - Note: loose.c does not yet handle these properly -commit ef7d43fc614276b75c560660c7e4368fd18d574d -Author: Peter Dunkley -Date: Tue Sep 11 12:58:13 2012 +0100 +commit fdb6c8cbafec7849367f16f5dc56ffa20885bef4 +Author: Klaus Darilion +Date: Wed Apr 24 09:09:25 2013 +0000 - modules_k/pua: Fixed incorrect check/use of update_period modparam + core: fix default read-only DB URL -commit d9087dbbf411f71486a4ce765aa5d6dfeb531f9c -Author: Peter Dunkley -Date: Tue Sep 11 12:56:52 2012 +0100 +commit 53319656247a2aa685f4d9b6f667192f945bc62a +Author: Torrey Searle +Date: Tue Apr 23 14:04:39 2013 +0200 - modules_k/presence: Improved check for expired dialogs in DB only mode with notifier tasks + modules/sipt add value tables to docs, add section ids to pvars -commit cd6415240ff243842b4e11b095103f00fd64d0d9 -Author: Peter Dunkley -Date: Tue Sep 11 12:55:49 2012 +0100 +commit 20646b530baa1a2807e52048a8d99d31d2171bb6 +Author: Daniel-Constantin Mierla +Date: Tue Apr 23 13:02:49 2013 +0200 - modules_k/presence: Fixed some problems with for() loops in DB only mode + usrloc: re-init sruid struct for each child - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + - avoid overapping values for xmlrpc handling -commit 3635a0d920f0d03e85b8b97a44d878f0f8d13931 -Author: Peter Dunkley -Date: Tue Sep 11 12:54:51 2012 +0100 +commit 6835b9bc1c80035a603016cf8149afefbf535929 +Author: Daniel-Constantin Mierla +Date: Tue Apr 23 11:59:09 2013 +0200 - modules_k/presence: Fixed level of a diagnostic message + uac: regenerated readme with new wiki link -commit 4b9aa7f144b8cf3e6da775563528913ed79e0553 -Author: Peter Dunkley -Date: Tue Sep 11 12:53:58 2012 +0100 +commit 2b97e81b281802283ebc665da6f9190f0a9705ab +Author: Daniel-Constantin Mierla +Date: Tue Apr 23 11:58:17 2013 +0200 - modules_k/presence: core_hash not used correctly to distribute notifier traffic - - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd + docbook: uptdated wiki link in entities file -commit a29a2a81bc541af020955dbda0d352445fef5788 -Author: Peter Dunkley -Date: Tue Sep 11 12:51:33 2012 +0100 +commit b89c747bc717c0f9053e53c53a74f9744c1b8606 +Author: Daniel-Constantin Mierla +Date: Tue Apr 23 11:52:13 2013 +0200 - modules_k/presence: Fixed inconsistencies in use of expires_offset for removing subcriptions + uac: added possibility to authenticate generated requests - - These caused particular problems on mulit-server, DB only, systems - - Found and fixed by Hugh Waite @ Crocodile RCS Ltd. + - $uac_req(auser) - specify the authentication username + - $uac_req(apasswd) - specify the authentication password + - if both attributes above are set and the request is challenged with + 401/407, then the request is resent with auth header -commit bb7bc779da5910a3d22cb5631b532ac3a3eb6b1a -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 13:01:13 2012 +0200 +commit b57d14afeed443bd3ff847a455c1f07bdca7dd09 +Author: Torrey Searle +Date: Tue Apr 23 10:39:01 2013 +0200 - registrar(k): documented lookup_branches(...) function + modules/sipt forgot to stage the documentation (pvars added) -commit 2ac602d3de1330705ecfdede660d43c02e4b4334 -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 12:52:45 2012 +0200 +commit d02ebb2584d2e4f676a9f8c4e0f6095045de86db +Author: Torrey Searle +Date: Tue Apr 23 10:37:09 2013 +0200 - registrar(k): new function lookup_branches(domain) - - - lookup the contacts for r-uri and additional branches - - only branches that are clean (i.e., have only r-uri set) are used - - useful for group dialing, to lookup all AoR in the group, without a - need to loop back + modules/sipt regenerate README with new api -commit 0724528964f8ea74049cd2d2e08082025b5c5377 -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 12:45:25 2012 +0200 +commit 781b0a68cbf3a9b93bda0ebafb9ae64257c202d3 +Author: Torrey Searle +Date: Tue Apr 23 10:30:11 2013 +0200 - core: whitespace identation fixes + modules/sipt refactor get functions into pvars + + return value of 0 in a function causes the script to exit, so + pvars are used instead to safely get the values + + also getting screening and presentation information added -commit f252606e41e00595cdaace7491af3d8daa138272 +commit ee928f8229dffdcb2d980e6ca192a9a7778e893b Author: Daniel-Constantin Mierla -Date: Tue Sep 11 09:02:51 2012 +0200 +Date: Mon Apr 22 18:10:38 2013 +0200 - kamctl: regenerated the db creation scripts + core: include in new dns_func.c file to fix compilation of freebsd - - there were changes in presence tables not propagated to scripts - - it includes the updates for location tables + - patch by Victor V. Kustov -commit fd911bbfdc82fc41312e2b4466e71ccd24bc5ee2 -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 09:02:34 2012 +0200 +commit 717cd63e7f52f9298e6ba6f55f12129ab5e61ccd +Author: Torrey Searle +Date: Mon Apr 22 10:11:17 2013 +0200 - lib/srdb1: added unique constraint on ruid for aliases table + modules/sipt added new method sipt_set_calling -commit 2c1a857f08512e7008cbd15c23716e149204a06d -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 09:00:10 2012 +0200 +commit 066011935c7a2636ea976923e46d33ae5fb4c793 +Author: Henning Westerholt +Date: Sun Apr 21 21:56:28 2013 +0200 - lib/srdb1: added unique constraint on ruid for location table + memcached: port module to use the newer libmemcached library + * based on a patch from Charles Chance, sipcentric.com + * He added new functionality to set the expiry directly in the key + * Added memory manager wrapping functions and some more logging, + * smaller cleanups in the code structure + * This is work in progress, the memory management stuff is not yet + * finished, as this needs different logic for client lib version + * before and after 0.32. It will not work at the moment correctly. -commit 6b7a27e81cc838de6af9a1c55edb937d1094ce98 -Author: Daniel-Constantin Mierla -Date: Tue Sep 11 08:52:53 2012 +0200 +commit dedede1cc7d384be3b4436a474b53d03f91a966a +Author: Marius Zbihlei +Date: Sun Apr 21 20:28:21 2013 +0100 - kex: documented mi statistics commands - - - reported by David at lublink + modules/dnssec added cleanup of context -commit 59cc9a44ef0c603503eac70d4b3367b47a610176 -Author: Andrew Mortensen -Date: Tue Sep 11 00:10:32 2012 -0400 +commit e206fdf4bfb398f5175726d75bfa5f9b8f5a9b70 +Author: Daniel-Constantin Mierla +Date: Sun Apr 21 21:17:29 2013 +0200 - Re-enabled usrloc bindings so deleting subscriptions on unREGISTER works. + Makefile.defs: version set to 4.1.0-dev3 -commit e82a63d6874fa609d7588323500e5560b3ebe963 -Author: Andrew Mortensen -Date: Tue Sep 11 00:09:05 2012 -0400 +commit 7ec7231a86bc895b22a8ae5b617764b6171ac6d4 +Author: Daniel-Constantin Mierla +Date: Sun Apr 21 21:16:49 2013 +0200 - Add sca_update.c & sca_update.h to send UPDATEs to both legs after pickup. + Makefile: added target to install init.d script on debian -commit bedb7fdc6d02e92fbf52ad4acb6dfcbb49f0bc49 -Author: Juha Heinanen -Date: Fri Sep 7 19:16:37 2012 +0300 +commit be4b94efde40180d642af0e87f15f4c9bdc4ce7b +Author: Henning Westerholt +Date: Sun Apr 21 19:51:34 2013 +0200 - db schema: removed unique requirement from pua expires_idx - - - TODO: change also other than mysql table structures + tests: fix test sipp scenario -commit 08cb1ca64b7259b6cb82751eaedda238fd902ac2 -Merge: 9717357 9329c7d +commit 731f1b2a72a04901b11e34de91bc1c276e47fce1 Author: Henning Westerholt -Date: Fri Sep 7 13:52:36 2012 +0200 +Date: Sun Apr 21 19:25:51 2013 +0200 - Merge branch 'master' of ssh://git.sip-router.org/sip-router - - * 'master' of ssh://git.sip-router.org/sip-router: - Use &long_hf_len; instead of &uri_len; for path column in location table. + tests: fix module paths -commit 97173572a81b67dd5165de2948562d5db91168d5 +commit 65d2823cd6236cfebc26f4a1d5b6e5ee2a3d2156 Author: Henning Westerholt -Date: Fri Sep 7 12:57:30 2012 +0200 +Date: Sun Apr 21 18:54:48 2013 +0200 - db scheme: move usrloc and alias expire time 10 years to the future, to 2030 + tests: remove some unnecessary directory changes -commit 9329c7d1522f9692f46210aa72e9e932b97a0178 -Author: Iñaki Baz Castillo -Date: Fri Sep 7 12:53:48 2012 +0200 +commit cd46c51dd12e85ba1508ce5752762269686eeded +Author: Henning Westerholt +Date: Sun Apr 21 18:49:19 2013 +0200 - Use &long_hf_len; instead of &uri_len; for path column in location table. + tests: fix some old paths -commit 976f801ae2df9597be0fccff89496bde34b22e62 +commit 59117e598386d013d9c9f62282aa434dc5806c03 Author: Henning Westerholt -Date: Fri Sep 7 12:44:33 2012 +0200 +Date: Sun Apr 21 18:30:21 2013 +0200 - dialog: use long_hf_len instead of hardcoded value in table defs, no actual schema change + tests: use bash compliant return values -commit 61254d70442144277981f2d866de379413634a4f -Author: Andrew Mortensen -Date: Wed Sep 5 15:14:18 2012 -0400 +commit b3682521361ce0cdbaf50f843a2d80bcb1b8b41d +Author: Marius Zbihlei +Date: Sun Apr 21 15:26:05 2013 +0100 - [SIPR-699]: delete subscription when endpoint's registration ends + modules/dnssec: added support for libval query parameter flags - Detect registration deletion or expiration, and delete endpoint's - call-info subscription. + Documentation in the README -commit d1d2494c966d65828d1920296056da840a11efd9 -Author: Vicente Hernando -Date: Wed Sep 5 06:44:39 2012 -0400 +commit ebeb18ffed8e81ae472b4c07097b58fbea115b5b +Author: Daniel-Constantin Mierla +Date: Sun Apr 21 16:07:34 2013 +0200 - sdpops: Fix memory leakage in w_get_sdp function. + pv: updated link to wiki site -commit 163f860ef7c0ed9a720207499d054e7f68b139df +commit f0c467f64c044de0b0f37addccb97d3ccff78706 Author: Daniel-Constantin Mierla -Date: Wed Sep 5 08:58:18 2012 +0200 +Date: Sun Apr 21 16:06:56 2013 +0200 - dialog(k): fixed the name of event route - - - it is 'dialog:failed' instead of 'dialog:failure' - - reported by Uri Shacked + acc: updated link to pseudo-variables cookbook -commit 52f501388c99e992d371d17a78dd36ff373d354c -Author: Andrew Mortensen -Date: Tue Sep 4 10:25:14 2012 -0400 +commit a5a7d62271bf1674015d8ab1d928c0325224b77e +Author: Marius Zbihlei +Date: Sun Apr 21 13:32:26 2013 +0100 + + modules/dnssec: removed unused variable + +commit 61519687d5cca6e77ba2ba456f845c140a66ccc1 +Author: Marius Zbihlei +Date: Sun Apr 21 13:30:16 2013 +0100 - [SIPR-700]: module should drop subscriber if NOTIFY delivery fails. + modules/dnssec: removed bogus param + +commit 325aa35f76f7727abe010b03a0dd03b5f487e26a +Author: Daniel-Constantin Mierla +Date: Sun Apr 21 13:38:30 2013 +0200 + + Makefile.groups: proper fixing of all modules list - Module unlinks & deletes subscription if call-info NOTIFY to subscriber fails. - Also fix memory leak in the expired purge tick, which was unlinking but not - deleting. + - reported by Vicente Hernando -commit 18c5f3fec6b5e4d2e8ad86b13c5b4e62c6c5513c -Author: Boudewyn Ligthart -Date: Tue Sep 4 16:16:38 2012 +0300 +commit fc80791c65fa46389168bd5e16af6b33c1bbc36c +Author: Daniel-Constantin Mierla +Date: Sun Apr 21 13:09:43 2013 +0200 - modules/db_cassandra: Added raw query support + Makefile.groups: fixed another type of double parenthesis - The raw queries can be performed through avpops module and have to have - the CQL syntax. + - reported by Vicente Hernando -commit 15f5c9f2f7323c5192a7eb550cc7e7c53b20782a -Author: Carsten Bock -Date: Mon Sep 3 21:31:58 2012 +0200 +commit edd7f8ed5b8b893276c86bb054e6f7523ad69f33 +Author: Daniel-Constantin Mierla +Date: Fri Apr 19 22:50:26 2013 +0200 - b/f: In case of IPv6 Option in the RTP-Command, the pointers and the length need to be updated. + Makefile.groups: fixed typo -commit a6a37ad2ae7dd99deae3ec9d83ab38ab54e2f2af -Author: Henning Westerholt -Date: Mon Sep 3 13:01:05 2012 +0200 +commit ea964748dc638af82d2363317ca2eade98a279ac +Author: Juha Heinanen +Date: Fri Apr 19 17:39:05 2013 +0300 - kamdbctl: add some explanation to the variables section and fix path + modules/outbound: downgraded one INFO to DGB -commit a5a58239efb00f25cd51753c984ee4469fd97754 -Author: Elena-Ramona Modroiu -Date: Mon Sep 3 08:53:47 2012 +0200 +commit 7a96d912032939b8eb108e0e84b70bbf0642e2ab +Author: Juha Heinanen +Date: Fri Apr 19 17:36:27 2013 +0300 - xlog: new module parameters log_colors + modules/outbound: for non-reg requests, check if outbound is supported - - update the colorscheme for log levels + 4.3. Sending Non-REGISTER Requests + ... + UAs that support this specification SHOULD include the outbound + option tag in a Supported header field in a request that is not a + REGISTER request. -commit 1c1bdda16c7643b882a437583368d97e33c21e56 -Author: Elena-Ramona Modroiu -Date: Mon Sep 3 08:52:26 2012 +0200 +commit 752de05cc567c7502b1e723a09e350ce8d447664 +Author: Juha Heinanen +Date: Fri Apr 19 13:24:52 2013 +0300 - core: added function to update log level color scheme + modules/rr: if outbound request is outgoing, do nothing outbound + specific in loose_route() -commit e09b5bc8f7d17d8d9d9754152d78b0c835e94a9f -Author: Daniel-Constantin Mierla -Date: Sun Sep 2 13:36:55 2012 +0200 +commit e3c0a3abb6045e841fbb4b1b61a518b2b87a217d +Author: Ovidiu Sas +Date: Thu Apr 18 16:03:50 2013 -0400 - kamctl: regenerated db creation scripts + seas: fix warning [-Wunused-result] + - ignoring return value of write, declared with attribute warn_unused_result [-Wunused-result] -commit dfc98801110554f92aeaa80594e01cad16c9dcd1 -Author: Daniel-Constantin Mierla -Date: Sun Sep 2 13:29:18 2012 +0200 +commit c0f4b6cf664ac552d0c994e99adb13991a37ef28 +Author: Ovidiu Sas +Date: Thu Apr 18 16:01:16 2013 -0400 - prefix_route: new parameter to control the exit from config - - - 'exit' controls if prefix_route() triggers cfg exit or returns true - upon matching a prefix. Default is 1 (on) for backward compatibility - - prefix_route() takes an optional parameter that can be used to match - the prefix instead of r-uri username + seas: fix compiler warning [-Wunused-but-set-variable] -commit 886a0659449bc03bd7c5e852fe6ba29a17ad923d -Author: Daniel-Constantin Mierla -Date: Sun Sep 2 13:08:53 2012 +0200 +commit 12cd241d95b8d38cea6e60676b752f8ef8a2ed8c +Author: Ovidiu Sas +Date: Thu Apr 18 15:54:14 2013 -0400 - srdb1: table_name set to unique constraint in version table + seas: fix compiler warning [-Wunused-but-set-variable] -commit ca57c8631511943e835e8b030dad638f92aff884 -Author: Daniel-Constantin Mierla -Date: Sun Sep 2 11:59:38 2012 +0200 +commit 21e51107a5a08b182abc7bffbac1fec1be27950b +Author: Ovidiu Sas +Date: Thu Apr 18 15:51:50 2013 -0400 - tm: new config parameter - remap_503_500 - - - option to disable remapping of 503 response code to 500 + seas: fix compiler warning [-Wunused-but-set-variable] -commit fe00a3346a2276b25ae26160ce76bf658b5b826e -Author: Elena-Ramona Modroiu -Date: Sat Sep 1 16:24:02 2012 +0200 +commit 2abf2d4a42c05004319e682d2ad07d69bf2fc89e +Author: Ovidiu Sas +Date: Thu Apr 18 15:50:25 2013 -0400 - core: log_color - new global parameter to enable colorful log messages - - - enabled only when log_stderr=1 - - equivalent of -e command parameter - - it can be: 0 - disabled (no colors, default); 1 - enabled + seas: fix compiler warning: + - warning: variable flags set but not used [-Wunused-but-set-variable] -commit 6bda9c0b7aac195902d2c42123bdde007a9a687f -Author: Elena-Ramona Modroiu -Date: Sat Sep 1 16:16:21 2012 +0200 +commit 21386829d819c06c42871cf5b68d0d3a63ef0222 +Author: Ovidiu Sas +Date: Thu Apr 18 15:48:03 2013 -0400 - core: -e - new cli parameter to enable colorful log messages - - - used only when log messages are printed to stderr - - each log level is printed in different color, using term colors (like - $C(xy) variable) + seas: fix compiler warning: + - warning: variable flags set but not used [-Wunused-but-set-variable] -commit 28a7300cd83e135b1c0d5488cb289fc7415fbd8c -Author: Juha Heinanen -Date: Sat Sep 1 13:32:18 2012 +0300 +commit 200eddad28abd6bc51da3285dd52d5f8c88c4e56 +Author: Ovidiu Sas +Date: Thu Apr 18 15:45:50 2013 -0400 - modules/dialplan: always set type of attrs pvar value - - - Type of attrs pvar value was not set when dp_translate didn't result - in any change. + seas: fix compiler warning + - warning: variable flags2 set but not used [-Wunused-but-set-variable] + +commit 63736be1e4d2d6e82a0f7be6a85a96ee66c10146 +Author: Ovidiu Sas +Date: Thu Apr 18 15:42:40 2013 -0400 -commit 494b383edde7a2d193c220f3117506e4cc95932f + seas: fix compiler warning: + - warning: variable falgs set but not used [-Wunused-but-set-variable] + +commit 8393ccdc1558f56ba819a442d0c50d25f51a934d Author: Daniel-Constantin Mierla -Date: Fri Aug 31 10:29:45 2012 +0200 +Date: Thu Apr 18 21:28:54 2013 +0200 - auth: print return code in log when nonce is invalid - - - it will give a clue about why nonce is considered invalid + dnssec: added reference to wikipedia's DNSSEC article -commit e4ecf49add0e62330e1db071106806e35e9b078a +commit 343379957ab783a32c48822de479a9d8c2dafdf3 Author: Daniel-Constantin Mierla -Date: Thu Aug 30 22:38:11 2012 +0200 +Date: Thu Apr 18 21:22:47 2013 +0200 - corex: a new module to collect reimplemented core cfg functions - - - old core functions for cofiguration file do not take variables in the - parameters, working only with static strings or integers - - some of them will be reimplemented in corex moduel to add support for - variables, making the parameters to be dynamic at runtime - - append_branch(...) was reimplemented at this moment, allowing URI and - Q parameters to contain variables - - there are also brand new features - two RPC commands, one to list the - listen sockets and the other to list the hostname aliases - - name of the module comes from CORE eXtensions + xlog: link to wiki updated -commit 41918bca6d6a99f6773a72ab132e75c940ecd79a +commit e2f9e909a2abd02cebb292cc8cb3500aa4c07036 Author: Daniel-Constantin Mierla -Date: Thu Aug 30 22:36:10 2012 +0200 +Date: Thu Apr 18 21:22:01 2013 +0200 - core: removed append_branch() from cfg language structure - - - cfg append_branch() is no longer implemented by core, being moved to - corex module in order to allow variables in the parameters + dnssec: make web links clickable for html version -commit eb73f14958ede24928f312fa0e44d171fa7bf373 +commit b3c8f92fe48ac90802c989c74c3a34cfea065861 +Author: Ovidiu Sas +Date: Thu Apr 18 14:09:09 2013 -0400 + + dns_cache.c: fix compiler warnings + - warningâsr_sums[*].r_sum may be used uninitialized in this function [-Wuninitialized] + - warningâsr_sums[*].rr may be used uninitialized in this function [-Wuninitialized] + +commit 38a4b85dc327e18af7e22e585f02413d7f08c56c Author: Daniel-Constantin Mierla -Date: Thu Aug 30 22:34:40 2012 +0200 +Date: Thu Apr 18 18:01:35 2013 +0200 - kex: removed km_append_branch() cfg funtion + Makefile.groups: dnssec module added to dedicated compile group - - functionalty being replaced by append_branch() from corex module which - can take also Q as parameter + - it depends on libval and other external libs -commit 132df8d61eefcc2dbea08ae70db82393803d9488 -Author: Daniel-Constantin Mierla -Date: Thu Aug 30 10:16:04 2012 +0200 +commit be3819d410bf5a9f11c3744d9978e60103746041 +Author: Jason Penton +Date: Wed Apr 17 17:10:21 2013 +0200 - core: exported get_valid_proto_name() via headers + modules/dialog_ng: fixed incorrect log level -commit 21583d47751fc7f684dac41a3bfbfc3b2c0bf3a3 -Author: Daniel-Constantin Mierla -Date: Thu Aug 30 10:15:26 2012 +0200 +commit ee2cdfdaf8e2dc177fed64c6f4ab05a85f9fb0c6 +Author: Jason Penton +Date: Wed Apr 17 16:49:21 2013 +0200 - db_cluster: safety check for existence of several DB API members + modules/cdp: Initial framework for Credit Control Application + - inital support for RFC 4006 + - this will be used to build IMS Ro charging interface TS32.299 -commit 82bb7a8b67e488e7089d194fa5f96e9ae61dfb03 -Author: Anca Vamanu -Date: Thu Aug 30 17:39:47 2012 +0300 +commit e237f9573435a8a11672b155c1cf9a64638b87d2 +Author: Jason Penton +Date: Wed Apr 17 16:40:32 2013 +0200 - modules/db_cassandra Updated in doc location table schema + modules/dialog_ng: API added function to get current dialog from msg -commit 0f8f21e390e8442cf1f527d3654dedc5a40bfcea -Author: Anca Vamanu -Date: Thu Aug 30 17:21:29 2012 +0300 +commit 2190c572cd1bc4b57a3c2dd5241e556b834c728c +Author: Juha Heinanen +Date: Tue Apr 16 14:28:59 2013 +0300 - modules/db_cassandra: Fixed segmentation fault in case of bad table schema - - Reported by Boudewyn Ligthart. + modules/usrloc: init _ul_sruid also in mi_child_init -commit 8d70484116e48b15681589f70c650a082614396c -Author: Vicente Hernando -Date: Thu Aug 30 05:20:25 2012 -0400 +commit 2a77ed2bdc9341ecf7d7200e420a1f49e4e9b6ab +Author: Daniel-Constantin Mierla +Date: Sun Apr 14 10:11:29 2013 +0200 - ndb_redis: argument checking in redisc_free_reply + auth: skip processing of PRACK in consume_credentials() + + - report and patch suggestions by Jorj Bauer -commit 512013f324dd6faa37e26302a267afb07252812a -Author: Anca Vamanu -Date: Thu Aug 30 12:24:24 2012 +0300 +commit 56f7a8b98778f9c9b71f613a5df5eaa1705a7a00 +Author: Ovidiu Sas +Date: Sat Apr 13 15:37:18 2013 -0400 - modules/db_cassandra: Updated replace function to the new signature + tls: fix compiler warning + - tls_config.c:61:19: warning: ât.val.sâ is used uninitialized in this function [-Wuninitialized] -commit 978ec2fb51751529953eadec653772edd5dc1ccd -Author: Richard Fuchs -Date: Wed Aug 29 15:47:10 2012 -0400 +commit d992d3b223a3319a360f033d1d904873160f706e +Author: Juha Heinanen +Date: Sat Apr 13 17:44:15 2013 +0300 - modules_k/nathelper: fix a= lines inserted out of order + siputils: added new function is_supported(option) - RFC 4566 dictates a particular order of fields in the SDP body, in particular - media-specific a= lines must be last fields within an m= block. Inserting - them right after the m= lines violates this order if other fields (such as - c=) are present, causing parse errors in some clients. So instead, insert - them at the end of each m= block. + - Checks if given option is listed in any of the Supported: headers of + the request. -commit b7a1ba89ce9d8a310b9b0151f6535d612dbc9057 -Author: Vicente Hernando -Date: Wed Aug 29 12:45:40 2012 -0400 +commit 2d27dd1080cd490e93646b38d3912dcbe3761ca5 +Author: Daniel-Constantin Mierla +Date: Sat Apr 13 11:26:48 2013 +0200 - ndb_redis: redisc_exec_argv function + xcap_server: init etag variable for PUT operations + + - the function xcaps_get_db_etag() may not found a record to db and will + not initialize it, resulting in bogus value passed to + check_preconditions() + - reported by Juha Heinanen, FS#283 -commit ae7047e05a7ff05a1707446286e2837fa49671dc -Author: Anca Vamanu -Date: Wed Aug 29 19:33:51 2012 +0300 +commit 22019e51e1e561a46eb9490c684b979f02be4e48 +Merge: 3c54420 f88dd6d +Author: Marius Zbihlei +Date: Sat Apr 13 08:44:43 2013 +0100 - kamctl/dbcassandra: Updated schema for cassandra location table + Merge branch 'dnssec' + + Added support for DNSSEC as module -commit 4b60f510b3fe4ac8ff8fa2721cc40b18b93ed5d1 -Author: Vicente Hernando -Date: Mon Aug 27 16:22:35 2012 -0400 +commit 3c54420914c011bdd874a97c4c40ee9dacb59788 +Author: Daniel-Constantin Mierla +Date: Fri Apr 12 00:50:24 2013 +0200 - ndb_redis: add some error checks in redisc_exec function. + core: safety check for content-lenght size in tcp read + + - avoid getting negative + - upon a report by Kevin Wojtysiak -commit 57b5efa329ee50cfee361fe10204b37ca8a8e039 -Author: Vicente Hernando -Date: Mon Aug 27 07:01:18 2012 -0400 +commit 1a22767e39d50af450a49256b4425503a2d0d388 +Author: Juha Heinanen +Date: Thu Apr 11 09:31:37 2013 +0300 - ndb_redis: add goto error_exec instead of return + modules/path: unescaped received param value also in path rr callback -commit 2bd8309a9e1af15dc3b5dafdfc84b97fc8338c98 -Author: Jon Bonilla -Date: Mon Aug 27 12:49:07 2012 +0200 +commit 2003bc3b1cc73caa36e9b4892d8d25f810d6c458 +Author: Juha Heinanen +Date: Thu Apr 11 08:11:35 2013 +0300 - pkg/deb Set Standards version to 3.9.3 + modules/registrar: unescape received value using kcore function + + - Now that unescaped received value goes into separate buffer, it is + possible to use kcore unescape function. -commit e8c7708bed7081e74ee43370ab63031daac6fb8b -Author: Jon Bonilla -Date: Mon Aug 27 11:35:50 2012 +0200 +commit 262b5880616d8b58cf9b012b460793f9879087b3 +Author: Juha Heinanen +Date: Wed Apr 10 22:42:43 2013 +0300 - pkg/deb: Don't conflict with -dbg any more + modules/registrar: fixed bug in un-escaping of path/received -commit b53ca97379e1b4aeae80b794f23e25e9150a0e58 -Author: Daniel-Constantin Mierla -Date: Mon Aug 27 10:37:50 2012 +0200 +commit d9c0024033278975a38c010b768e8f95c2dbb144 +Author: Juha Heinanen +Date: Wed Apr 10 18:04:03 2013 +0300 - db_cluster: more verbosity when building cluster structures + modules/path: b/f generate valid received param value -commit 11bc9210cd6665087ef79f7b6af9e9e478ea7923 -Author: Andrew Mortensen -Date: Fri Aug 24 23:12:19 2012 -0400 +commit c01b97dd39a418acd0db7b4515d155c45d4092e6 +Author: Juha Heinanen +Date: Wed Apr 10 18:00:04 2013 +0300 - Display owner and dialog in sca.all_appearances output. + modules/registrar: unescape path header received param value -commit 205c18d3697367fcbc0d93cc243fcb9f751e83df -Author: Andrew Mortensen -Date: Fri Aug 24 23:10:56 2012 -0400 +commit ff2b0751b7a7925769afd14eae8c01b3af063568 +Author: Peter Dunkley +Date: Wed Apr 10 15:01:52 2013 +0100 - Add routine to update callee. Add two convenience lock-if-SCA routines. + pkg/kamailio/(centos|fedora): Updated .spec - Extend appearance struct to store previous owner, callee & dialog. + - Added sipt module + - Increased rel to dev2 -commit 94cf6005b264fecd888c8141ebf4247b2a02855f -Author: Andrew Mortensen -Date: Fri Aug 24 15:20:23 2012 -0400 +commit 94ce2b1de63432baaaecd9285608380a40a70550 +Author: Richard Fuchs +Date: Wed Apr 10 09:34:49 2013 -0400 - Notes on use of To-URI during pickup of held call. + db_mysql: fix segfault when recursive queries are made + + The MySQL result object (MYSQL_RES) should not be stored within the + srdb1 connection object, but rather within the srdb1 result object. + Otherwise recursive queries overwrite each other's result sets, which + results in segfault. -commit 75b304538f4094340ab7471487cac687fbd1c769 -Author: Andrew Mortensen -Date: Fri Aug 24 13:38:31 2012 -0400 +commit 8366a26fb8e3c6d5815cd4cd5bde48575e9f6b71 +Author: Richard Fuchs +Date: Wed Apr 10 09:33:53 2013 -0400 - Add sca_uri_build_aor(). + srdb1: add new db-private generic pointer to struct db1_res -commit fbc6ce9c0792408877166a3e35b1c6cc2dc645e3 -Author: Jason Penton -Date: Fri Aug 24 09:51:06 2012 +0200 +commit d17b02ed5014b4e32bd0060f32cabd750956779c +Author: Vicente Hernando +Date: Wed Apr 10 13:55:57 2013 +0200 - xmlrpc: more correct re XMLRPC spec re. no type specified, defaults to string - - This will allow you to receive docs like mystringvalue - - instead of only allowing mystringvalue - - according to spec if no type specified, assume string - - allows kamailio to receive messages from apache ws-xmlrpc which doesnt specify string type + modules/pipelimit: check correctly for all arguments in mi_set_pipe -commit 881ee61c85f66767e0e8988e0a98205abbc7f9e9 -Author: Jason Penton -Date: Fri Aug 24 09:48:46 2012 +0200 +commit d20439c0398f6821f9e0e861a597d1dee62f6c91 +Author: Hugh Waite +Date: Wed Apr 10 12:31:41 2013 +0100 - Revert "xmlrpc: more correct re XMLRPC spec re. no type specified, defaults to string" + modules/tm: documentation: Updated branch_failure route name format - This reverts commit 35e5e50c8f624ab70ef095bdbc729861b4a0a749. + - Updated event_route[tm:branch-failure:name] documentation + - Updated t_next_contact_flow function -commit 35e5e50c8f624ab70ef095bdbc729861b4a0a749 -Author: Jason Penton -Date: Fri Aug 24 09:21:40 2012 +0200 +commit 6e28b187ab4d9cb100e58cb7667c0ee64e8b6deb +Author: Hugh Waite +Date: Wed Apr 10 11:33:15 2013 +0100 - xmlrpc: more correct re XMLRPC spec re. no type specified, defaults to string - - This will allow you to receive docs like mystringvalue - - instead of only allowing mystringvalue - - according to spec if no type specified, assume string - - allows kamailio to receive messages from apache ws-xmlrpc which doesnt specify string type + modules/tm: Enable named branch_failure routes + + - branch failure routes must be named with the format: + -- "tm:branch-failure:myroute" + - and enabled with the function: + -- t_on_branch_failure("myroute") -commit 4d15ba97bab58108cfedc45158d90583f67cdadf -Author: Daniel-Constantin Mierla -Date: Fri Aug 24 09:14:28 2012 +0200 +commit fb4d9dae890705388275abe1fa06358187917d01 +Author: Hugh Waite +Date: Wed Apr 10 11:27:59 2013 +0100 - db_cluster: use connection from write structure for db updates + core: Allow colon separated tokens in event_route names - - could be related to an issue reported by Øyvind Kolbu + - Event routes can have named routes following the format: + -- :: + - -commit 10327c61d35e034f31c49a27f11f81ec82c22055 -Author: Peter Dunkley -Date: Tue Aug 21 15:41:27 2012 +0100 +commit a1edd20adff116ce78083ca9744e7072e0305728 +Author: Hugh Waite +Date: Wed Apr 10 11:10:27 2013 +0100 - modules_k/rls: Use database row/table locking where supported in DB only mode + modules/registrar: Remove unnecessary BRANCH_FAILURE flags - - Under load there are lots of DB deadlocks when using - (start|end)_transaction() with multiple presence processes and/or - servers. - - Without using (start|end)_transaction() multiple processes/servers - overwrite each others changes. - - Using row locking (where possible) and table locking (where - required) fixes these problems. - - IMPORTANT NOTE: DB only, multi-process/multi-server, presence will - only work properly under high-load when using a database driver that - supports transactions and locking (currently just db_postgres). + Functions that run in an event route require the EVENT_ROUTE / REQUEST_ROUTE + flag set, not the BRANCH_FAILURE_ROUTE flag -commit 92aedbb83f5d6cbfc7c4b5e68f260f7ecccc992e -Author: Peter Dunkley -Date: Tue Aug 21 15:40:56 2012 +0100 +commit 200357577d70f13ad1f01d8f831eca274ca2e669 +Author: Juha Heinanen +Date: Wed Apr 10 09:17:58 2013 +0300 - modules_k/pua: Use database row/table locking where supported in DB only mode - - - Under load there are lots of DB deadlocks when using - (start|end)_transaction() with multiple presence processes and/or - servers. - - Without using (start|end)_transaction() multiple processes/servers - overwrite each others changes. - - Using row locking (where possible) and table locking (where - required) fixes these problems. - - IMPORTANT NOTE: DB only, multi-process/multi-server, presence will - only work properly under high-load when using a database driver that - supports transactions and locking (currently just db_postgres). + modules/tm: updated README on t_branch_timeout and t_branch_replied usage -commit 34cd2acb5370f36238f8765765cee6d97fd18209 -Author: Peter Dunkley -Date: Tue Aug 21 15:36:34 2012 +0100 +commit 2be84576fb5bc7d973b84b7a9f6a61b28ce2cead +Merge: 3b785c2 12f441f +Author: Juha Heinanen +Date: Wed Apr 10 09:11:55 2013 +0300 - modules_k/presence: Use database row/table locking where supported in DB only mode + Merge branch 'master' of ssh://git.sip-router.org/sip-router - - Under load there are lots of DB deadlocks when using - (start|end)_transaction() with multiple presence processes and/or - servers. - - Without using (start|end)_transaction() multiple processes/servers - overwrite each others changes. - - Using row locking (where possible) and table locking (where - required) fixes these problems. - - IMPORTANT NOTE: DB only, multi-process/multi-server, presence will - only work properly under high-load when using a database driver that - supports transactions and locking (currently just db_postgres). + modules/tm: allow calling of t_branch_timeout and t_branch_replied from + tm:branch-failure event route -commit f1f39db4f8a73f16497c4cc2658e9b4e68bac0fc -Author: Peter Dunkley -Date: Tue Aug 21 15:27:29 2012 +0100 +commit 3b785c288916269664bf77d916572945ce93e489 +Author: Juha Heinanen +Date: Wed Apr 10 09:09:54 2013 +0300 - modules/db_postgres: Added support for database row and table locking to PostgreSQL database module - - - start_transaction() now takes an argument allowing the type of locking - (none, read, or full) to be specified. - - new query_lock() API will use a SELECT ... FOR UPDATE query instead of - just a SELECT ... + modules/tm: allow calling of t_branch_timeout() and t_branch_replied() + from tm:branch-failure event route -commit 6c39a678a5b1bf00e0a138daa90ac6401b017d94 -Author: Peter Dunkley -Date: Tue Aug 21 15:26:44 2012 +0100 +commit 12f441f4b75f15ab25fc42889bfce65940d0c0d0 +Author: Richard Fuchs +Date: Tue Apr 9 16:38:22 2013 -0400 - lib/srdb1: Added support for database row and table locking to SRDB1 - - - Requires support within the database module + pv: implement pv transformation {en,de}code.base64 -commit 9b77e69de0953f9f6f48d4c1cf06f7e593469912 -Author: Peter Dunkley -Date: Tue Aug 21 15:21:54 2012 +0100 +commit dbb01573bc30eb59e712536d43c0caad357d90fa +Author: Olle E. Johansson +Date: Sun Apr 7 20:32:02 2013 +0200 - modules_k/rls: Some incorrect pkg_free() calls in DB only code - - - Found and fixed by Hugh Waite @ Crocodile RCS + snmpstats Update dev note -commit b9e77beaee850303ffa736cb4043d21a1806fa4f -Author: Peter Dunkley -Date: Tue Aug 21 15:21:03 2012 +0100 +commit 5886fa623776eae7a33ff8777e68d29a170f0fac +Author: Olle E. Johansson +Date: Sun Apr 7 10:17:16 2013 +0200 - modules_k/pua: transaction not ended before calling send_publish() from TM call-back + lib/kcore Make sure that the bytes waiting stats also report IPv6 sockets + +commit 2a895f5dcfd5b7ce003e37b2b1db6690852e3ff5 +Author: Juha Heinanen +Date: Tue Apr 9 18:28:01 2013 +0300 + + modules/tm: load_contacts() now prefers contacts whose path is empty - - Found by Hugh Waite @ Crocodile RCS and fixed by Peter Dunkley - @ Crocodile RCS + - For contacts with the same q, order contacts so that contacts that + have empty path are preferred over ones that have path defined. In + practice, this affects only contacts with the same ua instance id. -commit f20713462410211370e762abb463f0ceafd36d8d -Author: Peter Dunkley -Date: Tue Aug 21 15:19:51 2012 +0100 +commit 34290a9be20cd5986a569caeba3a2fd0efbeeb1f +Author: Juha Heinanen +Date: Tue Apr 9 17:25:59 2013 +0300 + + modules/rr: loose_route() return code 2 documentation + +commit fd5a1d772cc08af05e669ee00e926ee488f734f8 +Author: Juha Heinanen +Date: Tue Apr 9 17:08:43 2013 +0300 - modules/db_postgres: libpq requires null terminated string, but Kamailio internal str type is not (necessarily) null-terminated + modules/rr: new loose_route() result code - - Found and fixed by Paul Pankhurst @ Crocodile RCS + - Introduced new loose_route() result code 2 that is returned if + route calculation based on flow-token has been successful. -commit 0b247dbdea53bf46fbe222bbf2dea66b030fdd35 -Author: Andrew Mortensen -Date: Mon Aug 20 22:22:44 2012 -0400 +commit 1dde1f64524db71b374ee81943fc259e8c818892 +Author: Hugh Waite +Date: Tue Apr 9 11:32:17 2013 +0100 - Fix [SIPR-688]: deadlock on BYE. + modules/tm: Fix uninitialised instance and ruid values + + In t_next_contacts: + - Ensure instance was initialised to null when not present + - Extract ruid value before storing a subsequent flow -commit 79f7cbf4d301f90e750d94cceebba6a3a87a293f -Author: Andrew Mortensen -Date: Mon Aug 20 17:21:41 2012 -0400 +commit 0d41a8d0a251b351104b3feba8fde5373e928d92 +Author: Vicente Hernando +Date: Tue Apr 9 01:03:49 2013 +0200 - Use new sca_appearance owner and dialog update routines. + modules/ndb_redis: b/f redisc_exec returns false if redis server is down. -commit 8ec690991cd04bd8e2a343e16cd951e19ed60eac -Author: Andrew Mortensen -Date: Mon Aug 20 17:17:49 2012 -0400 +commit a177a33b9938a36cfaedbce61734a1525e5b1665 +Author: Daniel-Constantin Mierla +Date: Tue Apr 9 00:21:44 2013 +0200 - Add sca_appearance_update_owner_unsafe & sca_appearance_update_dialog_unsafe + .gitignore: added protoshoot binary the ignore list of git -commit a03b6671398707c0f1f8fe4c0b187109b8a4b1bd -Author: Andrew Mortensen -Date: Mon Aug 20 17:13:17 2012 -0400 +commit 13fd48f89555f5421e8285669e303bcefe44f149 +Author: Daniel-Constantin Mierla +Date: Tue Apr 9 00:18:35 2013 +0200 - Replace dialog in appearance on held call pickup. + parser: safety check for max port length in URI - Known bugs: [SIPR-689] + - can't be longer than 5, a port being 16b value + - reported by Kevin Wojtysiak -commit c7f7971fca82f2267cfff732c3d525af1af15938 +commit 28a8b87885e373bee8cc81985277ae718973fdfd Author: Daniel-Constantin Mierla -Date: Mon Aug 20 09:30:53 2012 +0200 +Date: Tue Apr 9 00:15:47 2013 +0200 - nathelper(k): documented keepalive_timeout parameter + rr: use port.len to check for buffer overflow instead of max port len + + - reported by Kevin Wojtysiak -commit 962fbef66a67c8c4ddf815e492b1f192a50339e7 -Merge: af16e04 ac45478 -Author: Peter Dunkley -Date: Sun Aug 19 22:38:13 2012 +0100 +commit a9e555e6e41271e015c47d29ba85276673d3b7b6 +Author: Andrew Mortensen +Date: Mon Apr 8 15:01:41 2013 -0400 - Merge branch 'master' into outbound + modules/sca: reduce verbosity of RPC sca.all_subscriptions output - Conflicts: - pkg/kamailio/fedora/16/kamailio.spec + - accommodate more subscriptions without hitting kamcmd buffer limits. -commit ac45478f8bc32a806edb80874bf8c5e3d5342707 -Author: Peter Dunkley -Date: Sun Aug 19 22:30:49 2012 +0100 +commit 7eaaf7ec7a3727ea38a330d51771b0446c58d8d6 +Author: Vicente Hernando +Date: Mon Apr 8 12:13:54 2013 +0200 - pkg/kamailio/fedora: Updated rel in .spec to dev3 + modules/ndb_redis: avoid warning unused next_rpl variable. -commit af16e04d837008e5158f3f0bc9f175b0fc02a08a -Author: Peter Dunkley -Date: Sun Aug 19 22:15:58 2012 +0100 +commit a43f2ebd4c952be55b2844f94d3a8b587a9e5202 +Author: Vicente Hernando +Date: Mon Apr 8 11:47:51 2013 +0200 - modules_k/outbound: Renamed nat_uac_test() in this module to ob_nat_uac_test() - - - That way it shouldn't conflict with nathelper:nat_uac_test() if both modules - are loaded. + modules/ndb_redis: b/f restore correctly last char in argument strings. -commit 61674b59c6b14aded58fcd9801370b3648f9d21c -Author: Peter Dunkley -Date: Sun Aug 19 20:47:43 2012 +0100 +commit 4924d136c7fd1886e411436c8005945b41c08f74 +Author: Vicente Hernando +Date: Mon Apr 8 11:32:40 2013 +0200 - modules_k/outbound: Started to fill in function that determines whether Outbound is required + modules/ndb_redis: follow section id guidelines. -commit 8bc7114c6a915985ca2f4e9ab50ea608437c7256 -Author: Daniel-Constantin Mierla -Date: Sun Aug 19 21:29:06 2012 +0200 +commit f4e4c3f8741868a310a59ec165a82e0353b7f161 +Author: Torrey Searle +Date: Mon Apr 8 11:18:44 2013 +0200 - core: rephrased debug message about no 2nd via in reply + modules/sipt: adapt module to use SUBTYPE_ISUP -commit 23e3258e3cb3c025c79570bcfe8395e92645fb16 -Author: Peter Dunkley -Date: Sun Aug 19 20:20:54 2012 +0100 +commit 25135d4deb54281bffdf372ad948ef0fa38b2d7b +Author: Torrey Searle +Date: Mon Apr 8 11:17:04 2013 +0200 - modules_k/outbound: Added nat_uac_outbound and tidied up module stub + parser/parse_content: add support for the ISUP subtype -commit 7376222d183d8122ef64467eae2d8d8dfdc6bc47 -Author: Peter Dunkley -Date: Sun Aug 19 20:18:51 2012 +0100 +commit b7829454810379c46ed74ff78dd3e8099ac05fb4 +Author: Juha Heinanen +Date: Sun Apr 7 20:07:23 2013 +0300 - modules_k/nathelper: Moved code for nat_uac_test into header files - - - This is to enable the code to be directly included into other modules and - used without requiring nathelper to be loaded. - - Specifically, this will be used with Outbound where the nat_uac_test() - will be helpful for Outbound-based NAT traversal, but there should be no - need to load nathelper too. + modules/textops: free spve params of in_list function -commit 36845cc575f36a62d88b0e10826c04d63edbd536 -Author: Daniel-Constantin Mierla -Date: Sun Aug 19 13:01:36 2012 +0200 +commit 87da891388c3e76c80ac677e7b2342ce9f86a3f1 +Author: Juha Heinanen +Date: Sun Apr 7 18:01:19 2013 +0300 - usrloc(k): keep time of the last keepalive for natted UDP contacts - - - new field in the contact structure to keep the timestamp when that - conctact was refreshed by keepalive or registration update - - it is taken in cosideration to remove contacts that don't reply to nat - ping requests, so it works only together with nathelper module - - when an UDP contact is not resposive for an interval of time, the - contact is set to expire is 10 seconds. This process takes place in - the function that fetches the list of contacts for nat pinging - - last_modified and last_keepalive are exported to mi and rpc list - commands + modules/registrar: b/f route param was passed uninitialized to parse_rr_body -commit a308226ced8b9807ee91f8e24c72d778e5a62e86 -Author: Daniel-Constantin Mierla -Date: Sun Aug 19 12:56:24 2012 +0200 +commit 75dfe341aba8bdc6f0ead4f060f05c34c69e267e +Author: Olle E. Johansson +Date: Sun Apr 7 10:03:12 2013 +0200 - nathelper(k): hanlde sip ping replies + snmpstats Avoid compiler warnings with older versions of net-snmp - - new parameter 'keepalive_timeout' to detect if a contact does not - reply to sip ping requests - - default is 0 (feature disabled) - it should be few times more than - natping_interval + Centos has an older version of net-snmp that has slightly different + structure definitions than the current one. -commit c8421620772184d28fd5b08d09b1e64cf0a8866a -Author: Daniel-Constantin Mierla -Date: Sun Aug 19 12:52:51 2012 +0200 +commit f2c17f4325d5b03697e76bd4b4ee8050d5e4d6c8 +Author: Olle E. Johansson +Date: Sun Apr 7 09:53:24 2013 +0200 - core: added q_memrchr(...) - - - reverse search for char in a buffer + snmpstats Final fixes for IPv6 support. -commit 98301c7e11d4bef786abbd3329287144df02184f -Author: Daniel-Constantin Mierla -Date: Sun Aug 19 09:48:42 2012 +0200 +commit 0fd0906680ce0f022820fd15819486eb4acfe24a +Author: Olle E. Johansson +Date: Sun Apr 7 09:45:21 2013 +0200 - core: typedef'ed enum request_method to request_method_t + snmpstats minor typo fixes -commit a2b8e55aa3f5d939d396270d47c3182bc840070d -Author: Andrew Mortensen -Date: Thu Aug 16 16:27:57 2012 -0400 +commit dbde9b609c2a3538fca1e7db72e518f97b3f018a +Author: Olle E. Johansson +Date: Sat Apr 6 22:06:47 2013 +0200 - Fix [SIPR-683]: append appearance-uri to call-info NOTIFYs + snmpstats Add IPv6 support in list of active interfaces + + Output from SNMPwalk after this patch: + KAMAILIO-SIP-COMMON-MIB::kamailioSIPTransportRcv.ipv6."20:01:DB:80:21:2e:00:00:00:00:00:00:00:00:00:22".5080 = BITS: 40 udp(1) -commit dbc44c00534b8c34dc8a39dd2d9d931a2cd2d4ff -Author: Daniel-Constantin Mierla -Date: Thu Aug 16 22:26:17 2012 +0200 +commit bddf66407ef7521f3d1f1e941b4c1e104e59d1ef +Author: Olle E. Johansson +Date: Sat Apr 6 22:04:51 2013 +0200 - tm: removed inexistent function from docs - - - append_branch()/t_fork() does not exist in tm anymore + snmpstats fix typo in Makefile. -commit e159eb090c9355431aa1e69a9d1dc622eb94cd89 -Author: Daniel-Constantin Mierla -Date: Thu Aug 16 20:24:28 2012 +0200 +commit 7bbf8fece2cc93c5b1ddd2c3dcc12e8a920dd54d +Author: Olle E. Johansson +Date: Sat Apr 6 22:02:48 2013 +0200 - pv: new pv class $version(key) + snmpstats Add disabled section in Makefile for compilation on Centos systems - - return attributes of the software version - - key can be: - - num - return version number - - full - return all version string - - hash - return git hash code and status + Net-SNMP and snmpd can be built with embedded perl and libwrap support. If that's + the case on your system you need to enable the EMBEDDED_PERL section in the + Makefile. Maybe this could be enabled automatically. -commit 5a9340a2309e7689da4d34eeeef12b0bed2f6e09 -Author: Daniel-Constantin Mierla -Date: Thu Aug 16 20:24:02 2012 +0200 +commit e28a06a7a8f5558bb81cfc09d5cb70b9c6938328 +Author: Olle E. Johansson +Date: Sat Apr 6 21:56:59 2013 +0200 - core: added pv_get_strzval(...) helper function for pv + lib/kcore Fix IPv6 support in interface list + + Added a new function that takes family as an argument. In order to list both + IPv4 and IPv6 you need to call that function once per address family. + Keep the old IPv4-only function for backwards compatibility. -commit e5b1b1ec11406cb91eb809d618b132bf8a5f808a -Author: Daniel-Constantin Mierla -Date: Thu Aug 16 18:18:04 2012 +0200 +commit a56a0e32a329ec05a6bb33713b120a949a0cf04b +Author: Olle E. Johansson +Date: Sat Apr 6 14:59:19 2013 +0200 - Makefile.defs: version set to 3.4.0-dev3 + pipelimit Add section IDs to xml documentation -commit 8a7a06f4d9c78f6da0558806d988c817fd6d0018 -Author: Iñaki Baz Castillo -Date: Thu Aug 16 16:17:51 2012 +0200 +commit 0f4168e0e6b53c8993121f7a751cabecc2d3e1f3 +Author: Olle E. Johansson +Date: Sat Apr 6 14:51:59 2013 +0200 - Process CANCEL before in-dialog requests. This prevents issues with some devices sending buggy CANCEL with To-tag when cancelling an initial INVITE. + ipops Add section IDs to README xml files -commit d661028060369e702f5882b6492040bd71fb900a -Author: Iñaki Baz Castillo -Date: Thu Aug 16 16:13:50 2012 +0200 +commit 1eeae38650ce70ade73f7e03fd3be78f1d97e0e5 +Author: Torrey Searle +Date: Sat Apr 6 11:59:55 2013 +0200 - Add Record-Route for in-dialog NOTIFY as per RFC 6665. + modules/sipt/doc: add section headers & fix README file -commit 776dcfd081910b9fabbee7cbe0c483e25d1dcfc8 -Author: Andrew Mortensen -Date: Thu Aug 16 01:37:13 2012 -0400 +commit 0ecde91fe6e911997b1f5ee33eb50fa6778b7a89 +Author: Daniel-Constantin Mierla +Date: Fri Apr 5 21:30:06 2013 +0200 - Call hold + pickup from another handset is now working. + rr: added missing s in sips for record route - A bunch of changes (with a lot of redundancy) for this: - sca_call_info_is_line_seize_reinvite() - sca_call_info_seize_held_call() - sca_call_info_header_remove() now working - RURI rewrite, drop branches - lots of debugging messages that can be removed later + - reported by Sander van Grieken -commit 80f5d1e048363a4a2d05bb561fdd5c9706135c47 -Author: Andrew Mortensen -Date: Thu Aug 16 01:29:13 2012 -0400 +commit 6433c3b1c2d84d6a6168e7bdccf9c4f13dc50586 +Author: Alexandr Dubovikov +Date: Fri Apr 5 21:21:33 2013 +0200 - Add dset.h for branch manipulation and ruri_mark_new() + modules/sipcapture: added customization for X-CID header. + thanks for the patch goes to Markus Monka -commit 4a0acc450620fefad49e679131790339e4ffbea7 -Author: Andrew Mortensen -Date: Thu Aug 16 01:28:21 2012 -0400 +commit 19c8f0eaac2b77f06f2842d3a7d481268afa096a +Author: Alexandr Dubovikov +Date: Fri Apr 5 21:10:57 2013 +0200 - Add sca_dialog_create_replaces_header. + modules/sipcapture: fixed ERR message for HEPv3, + added table param for sip_capture() function -commit 22fd70a90607d90ebdabab65e6da3d5d7e0f5aeb -Author: Andrew Mortensen -Date: Thu Aug 16 01:27:09 2012 -0400 +commit d992e4dc8742807f71645f385d68d60b90746fb3 +Author: Torrey Searle +Date: Fri Apr 5 18:43:06 2013 +0200 - sca_appearance_update_unsafe now updates index owner and callee. - - Add missing check for failed pkg_malloc, too. + modules/sipt: updated README -commit e1149b05868b918d0bc52b2d46bb02f7799358db -Author: Daniel-Constantin Mierla -Date: Wed Aug 15 13:01:43 2012 +0200 +commit 59b9208700e578df5000f8ad732c2e444712b0fa +Author: Torrey Searle +Date: Fri Apr 5 18:38:36 2013 +0200 - dispatcher(k): corrected setid_pvname parameter name + modules/sipt: added some additional getter methods - - readme listed it as setid_pvar, the source code expected setid_pvname - - reported by Dan B. + new functions: sipt_get_cpc() sipt_get_calling_party_nai() sipt_get_called_party_nai() -commit be05dfc0f4af62f9c368960fe75a810548be8b87 -Author: Daniel-Constantin Mierla -Date: Wed Aug 15 12:48:32 2012 +0200 +commit 38053da7b5951b13be413aac61f89ad418aba99e +Author: Hugh Waite +Date: Fri Apr 5 14:12:22 2013 +0100 - dispatcher(k): corrected the variable which is set by ds_is_from_list() - - - setid_pvar is used instead of grp_avp - - reported by Dan B. + modules/websocket: Update README xml with section IDs -commit 91d6d3c8a1484b23ff74f0cfd6356447985455a5 -Author: Daniel-Constantin Mierla -Date: Tue Aug 14 22:18:50 2012 +0200 +commit b38d9c93207a219bbcbc4ad40886b983a391c90b +Author: Hugh Waite +Date: Fri Apr 5 14:07:18 2013 +0100 - acc(k): added notes about dynamic table name for db acc to docs + modules/tm: Added branch_failure event route to tm documentation -commit 95ee0a3ee75556a25f3a9286837a57decf6c3c91 -Author: Daniel-Constantin Mierla -Date: Tue Oct 12 14:52:07 2010 +0200 +commit 8def957134e6068c14d2180d8497c6eb1f2a6cc5 +Author: Peter Dunkley +Date: Fri Apr 5 13:35:51 2013 +0100 - acc(k): table name for db acc can be dynamic + modules/websocket: re-added declaration of ws_keepalive_mechanism to ws_frame.c - - you can include variables in table name and will be evaluated at - runtime: - modparam("acc", "db_table_acc", "acc_$time(year)_$time(mon)") - will write now to table acc_2010_10 - - same can be done for missed_calls table name - - second parameter of acc_db_request() supports as well config variables - (cherry picked from commit e8f6a95d43b6a4340cf7e97213af5c71fa2a69e9) + - Accidentally removed when configuration framework stuff was added. -commit cff481736a3d62cd633077653ba52c00112b2333 -Author: Andrew Mortensen -Date: Tue Aug 14 13:07:30 2012 -0400 +commit 52741b4c709713b0cd0a3b9b81701ce2cf95b731 +Author: Peter Dunkley +Date: Fri Apr 5 13:33:19 2013 +0100 - Add sca_get_msg_method. + Revert "modules/websocket: b/f defined missing ws_keepalive_mechanism variable" - Simplify method checks for requests/responses. + This reverts commit caf4769ec0f243df71e79ee3c0781afbe5884bac. -commit e22e5f83115d9f1e33c27ae437d93d7701330a8c -Author: Peter Dunkley -Date: Tue Aug 14 15:53:07 2012 +0100 +commit caf4769ec0f243df71e79ee3c0781afbe5884bac +Author: Juha Heinanen +Date: Fri Apr 5 15:17:07 2013 +0300 - modules_k/rls: Fixed incorrect table version check - - - Found by Hugh Waite @ Crocodile RCS + modules/websocket: b/f defined missing ws_keepalive_mechanism variable -commit de8b241ea39284cce4c7e1850fcf3cef4c4c4a0a -Author: Peter Dunkley -Date: Tue Aug 14 15:52:37 2012 +0100 +commit 2168999d8f198268526404946b0def97b87fd8f5 +Merge: 98d76f9 6a9048a +Author: Hugh Waite +Date: Fri Apr 5 09:33:38 2013 +0100 + + Merge remote branch 'origin/hpw/branch_failure_route' + + * origin/hpw/branch_failure_route: + modules/tm: Fix t_next_contact_flow return value + modules/tmx: Add $T_reply_ruid pv to return ruid for a branch reply + modules/tm: Make ruid available in uac structure + modules/registrar: Allow unregister for ruids in branch_failure_route + modules/usrloc: Fix get_urecord_by_ruid to return static aor + modules/tm: Fix setting instance in uac branches + modules/tm: Enable retrieving of branch instance id from uac structure + modules/xprint: Updated to use the new get_branch()/next_branch() functions + modules/pv: Updated to use the new get_branch()/next_branch() functions + modules/permissions: Updated to use the new get_branch()/next_branch() functions + modules/domain: Updated to use the new get_branch()/next_branch() functions + core: Update get_branch() to return instance from appended branches + modules/tm: Update t_next_contact_flows for use in branch_failure event_route + core: Add defines required for a new branch_failure_route type + modules/tm: Create branch-failure event route + Revert "core: Initial revision of branch_failure_route" + core: Initial revision of branch_failure_route + modules/tm: Initial revision of branch_failure_route + +commit 98d76f94f2a4587b7a93e8e9982ff8017cabd9a3 +Author: Jason Penton +Date: Fri Apr 5 09:09:00 2013 +0200 - modules_k/rls: Fixed memory leak in rls under some error conditions - - - Found and fixed by Hugh Waite @ Crocodile RCS + lib/ims: Added cscf_get_p_charging_vector to retrieve icid,term_ioi,orig_ioi -commit f9c5c389b2412d23f1fdd35c6e97dfe7dbe44811 -Author: Daniel-Constantin Mierla -Date: Tue Aug 14 11:19:08 2012 +0200 +commit 0964bc96b1e3cd3bb7478388f6df3cb69fffce64 +Author: Olle E. Johansson +Date: Thu Apr 4 22:27:02 2013 +0200 - pkg/kamailio/rpm: execute 'success' for start operation + snmpstats Add support for the new transports as well as new roles - - reported by Andre + The edgeproxyServer is a SIP Outbound edge proxy that manages flows to NATted clients. + The sipcaptureServer collects SIP messages for Homer SIP capture -commit b215201ca00712ef3cf1af9e2d46111ac39cd671 -Author: Peter Dunkley -Date: Tue Aug 14 09:19:49 2012 +0100 +commit ac19c57490f2d7758fb0d66e5fc473dcd464d325 +Author: Olle E. Johansson +Date: Thu Apr 4 21:57:31 2013 +0200 - pkg/kamailio/(centos|fedora): updated CentOS/Fedora build to add Outbound module stub + snmpstats Align transports to RFC 4780 -commit c9b45176a1e3a55820c98f4907927ee217007e2e -Author: Peter Dunkley -Date: Tue Aug 14 09:17:16 2012 +0100 +commit 53579abc49fcb61ba7358d64e2d25bdabfe42afd +Author: Olle E. Johansson +Date: Wed Apr 3 22:17:27 2013 +0200 - Makefile: added Outbound stub module + group Update README xml with section ID's -commit 82de81e6becd747f84f67b360c510e3edbeeedf3 -Author: Peter Dunkley -Date: Tue Aug 14 09:15:51 2012 +0100 +commit 0f7821b1ab454e0b0a7ec49f76f1f63c65f12a90 +Author: Torrey Searle +Date: Thu Apr 4 17:08:39 2013 +0200 - modules_k/outbound: added stub module for Outbound + modules/sipt: regenerate README -commit 7d80fd2b6f4eb5b5edff2a6c580010760cc07747 -Author: Andrew Mortensen -Date: Tue Aug 14 00:26:50 2012 -0400 +commit 6cff96362ef9c2a675ff170f804cad08db2a1f87 +Author: Torrey Searle +Date: Thu Apr 4 17:06:31 2013 +0200 - Fix [SIPR-677]: NOTIFYs go to answering SCA group too early. - - Register a callback for ACKs following 200 OK replies to INVITE (TMCB_E2EACK_IN). - Check to see if the To-URI is a shared appearance AoR, and NOTIFY if it is. + modules/sipt/doc: fix typo in method name -commit bf6addd45db22b038fd698ab538416b0b18b16cb -Author: Andrew Mortensen -Date: Tue Aug 14 00:19:15 2012 -0400 +commit e09e20ad7524e2d1469187812b8920723481014f +Author: Torrey Searle +Date: Thu Apr 4 15:43:29 2013 +0200 - Add tm_load.h for tm module API. + modules/sipt: resolve a compiler warning on osx -commit cf6f490058a24f228dc72b82166cdda52d36488b -Author: Andrew Mortensen -Date: Tue Aug 14 00:18:26 2012 -0400 +commit 9dde9cb53367b75643c4f95f5aea2b7ce1d1f859 +Author: Carsten Bock +Date: Thu Apr 4 12:06:37 2013 +0200 - Invoke sca_appearance_register when saving a subscription. - - Ensures an sca_appearance_list for the subscribing AoR exists in the - appearances hash table. + ims_auth: Log, which AVP could not be found. -commit e6cbeaf209fec63a6b677e192547710825c5f964 -Author: Andrew Mortensen -Date: Tue Aug 14 00:17:40 2012 -0400 +commit b523c774721afaa34f36dc278805736e04b3d27c +Author: Torrey Searle +Date: Thu Apr 4 11:56:03 2013 +0200 - Added sca_appearance_register. - - Ensures an sca_appearance_list for SUBSCRIBE-ing AoRs exists in the - appearances table. + modules/sipt: Update README in separate commit per best practices -commit f43e4c36cf67635c697af88ef510d26454298951 -Author: Andrew Mortensen -Date: Tue Aug 14 00:17:09 2012 -0400 +commit 8cdbaddbf8ec9bfedc32732a6fed6753fab424ec +Author: Torrey Searle +Date: Thu Apr 4 11:40:26 2013 +0200 - Moved tm_load.h header to sca_common.h + modules/sipt/doc: corrected documentation typos -commit 4f243623e1c379f3ea5d0aa76396cd7b8c3610a9 -Author: Andrew Mortensen -Date: Tue Aug 14 00:16:23 2012 -0400 +commit a45583716671406f6a76cfdf8778517a28cbf2e3 +Author: Torrey Searle +Date: Thu Apr 4 10:20:08 2013 +0200 - Notes on moving entirely to using tm module callbacks. + modules/sipt: initial import of module -commit dfbb0af56aec99e3c76476bba16c54cf0d7d928f +commit 6a547b27a6e4715f2ccc3094018ed564066f7834 Author: Peter Dunkley -Date: Mon Aug 13 22:46:49 2012 +0100 +Date: Thu Apr 4 00:38:56 2013 +0100 - modules/websocket: removed another magic number + doc/cfg_list: added stun to cfg docbook Makefile -commit 8d3eec4f8fbfb2d037e09b80c5d45b5fc400f729 +commit 91b357872f06e988fd09003cffc02742d2731ce3 Author: Peter Dunkley -Date: Mon Aug 13 21:55:37 2012 +0100 +Date: Thu Apr 4 00:38:25 2013 +0100 - modules/websocket: Replaced magic number + modules/stun: added read-only stun_active cfg value -commit d7fc85a606d4d2ab79f0afce99e30eff1144f9f1 -Author: Andrew Mortensen -Date: Mon Aug 13 14:57:25 2012 -0400 +commit 0c49defdd27567e522c0555a9a40b0c76f5ef865 +Author: Peter Dunkley +Date: Thu Apr 4 00:38:01 2013 +0100 - Notes regarding use of tm module callbacks to handle ACKs + modules/websocket: removed some unnecessary includes -commit 8ae135a34433054a3871cdebaeb79c5c62290761 -Author: Andrew Mortensen -Date: Mon Aug 13 14:26:00 2012 -0400 +commit fc1f1b750f911f7fa2d453f6ce61f011844536a9 +Author: Peter Dunkley +Date: Thu Apr 4 00:37:22 2013 +0100 - Split INVITE handler into dedicated functions, myriad other changes. - - Implement SLCB_REPLY_READY callback function to catch proxy-generated - errors from e.g. sl_reply, which doesn't hit the onreply_route. - - Fixes for [SIPR-665], [SIPR-668], [SIPR-669], [SIPR-670] and [SIPR-673]. + modules/outbound: a bit of tidying up -commit 57905957db810e6b2a2cdb6279d0840c1ab9363c -Author: Andrew Mortensen -Date: Mon Aug 13 14:24:35 2012 -0400 +commit 124a40aa8c2de6831bc801899aeaa9ec05bebf77 +Author: Peter Dunkley +Date: Thu Apr 4 00:23:54 2013 +0100 - Hook sl module's SLCB_REPLY_READY to detect proxy-generated errors. + doc/cfg_list: added outbound and websocket to cfg doc generation -commit 9f1d0920e7f370f655007818e9fc8d97a2505849 -Author: Andrew Mortensen -Date: Mon Aug 13 14:22:46 2012 -0400 +commit a33d556fc5c6c11d6364daed01bf91dbf552784b +Author: Peter Dunkley +Date: Thu Apr 4 00:23:16 2013 +0100 - Extend sca_subscription_terminate to take options. + modules/websocket: updated copyright year - Allows caller to unsubscribe, or unsubscribe and drop released line. + - also remove configuration framework stuff in preparation for putting it + in separate files. -commit 87742f9cd82a7da2da2cab59ea4e6338c76fa3c0 -Author: Richard Fuchs -Date: Mon Aug 13 13:10:37 2012 -0400 +commit fe912bc27e41906902f5d25838eac95304c332eb +Author: Peter Dunkley +Date: Thu Apr 4 00:22:49 2013 +0100 - modules/lcr, modules_k/regex: Fix stack overflow from pcre_fullinfo(PCRE_INFO_SIZE) + modules/websocket: moved config framework stuff to separate files - Fix instances where pcre_fullinfo(PCRE_INFO_SIZE) was given only an "int" - argument, which results in stack overflow on some 64-bit platforms where - an "int" is only 32 bits long. It expects a "size_t" argument, which is - 64 bits long. + - To facilitate docbook -commit 65dcb2d0e72757d51b0ee51c457c5440278444bc +commit f85976ec461fc8325c9fa55e2b38ffef132098e1 Author: Peter Dunkley -Date: Mon Aug 13 15:50:05 2012 +0100 +Date: Thu Apr 4 00:22:15 2013 +0100 - modules_k/rls: Added DB transaction code around rls_presentity insert/replace + modules/outbound: updated year in copyright statement -commit c9628aa038ad7099a72af67f9284e5d0a9b78173 +commit cf5a4dcc3454f3c0e08228d0824f57db8aa2e192 Author: Peter Dunkley -Date: Mon Aug 13 15:49:09 2012 +0100 +Date: Thu Apr 4 00:21:47 2013 +0100 - modules_k/rls: Fixed memory leak in rls - - - Issue fixed by Paul Pankhurst and Peter Dunkley @ Crocodile RCS + modules/outbound: fixed typo -commit 5387288eac896a0710fb1c55cc4837e973e04946 +commit 5dc7bf64ede0d41cead968ac52677df022f262a8 Author: Peter Dunkley -Date: Mon Aug 13 15:48:18 2012 +0100 +Date: Thu Apr 4 00:20:55 2013 +0100 - modules_k/pua: Fixed double-free in pua + modules/outbound: Removed extern for ds_ping_reply_codes_update -commit b5132f217f521872fb0a6a4ab215443a700bab6f -Author: Peter Dunkley -Date: Mon Aug 13 15:45:20 2012 +0100 +commit 7fffcebb7ec85bfdffd3712b8f7d8ee91575fe22 +Author: Olle E. Johansson +Date: Wed Apr 3 21:55:47 2013 +0200 - modules_k/usrloc: Downgraded a WARN to INFO - - - When Kamailio loads a contact binding whose socket is not local a - warning is printed. Unfortunately, this happens a lot on multi-server - systems and it is not something to worry about. - - The end result is a huge number of warnings that swamps log messages - relating to real problems. - - So downgrading to INFO. + pike Add counter for blocked IP addresses -commit f3123f3a567d16ed84635bf1bb3cb7df900e4a66 -Author: Andrew Mortensen -Date: Fri Aug 10 01:56:24 2012 -0400 +commit ddfadf58f4a99fb160554e81e43fca5ddf0c38ad +Author: Olle E. Johansson +Date: Wed Apr 3 21:27:45 2013 +0200 - Removed sca_unsubscribe_line_seize export. + pike Update README with section ID's -commit ed1c6f28cfddcebb2afe7dc983afaffe401ab6b6 -Author: Andrew Mortensen -Date: Fri Aug 10 01:55:46 2012 -0400 +commit ba074d8a9ad0c415237e9c604a3adb432c51b754 +Author: Olle E. Johansson +Date: Wed Apr 3 21:22:47 2013 +0200 - Removed unusued exported sca_unsubscribe_line_seize function. + sst Update documentation and add reference to dialog_ng module -commit 1eb761515c6abb5cda4771c297401e62b81c5d12 -Author: Andrew Mortensen -Date: Fri Aug 10 01:39:37 2012 -0400 +commit 530e1e9e3f5100c4e6fc8ecb1f2005c07e7b860a +Author: Olle E. Johansson +Date: Wed Apr 3 21:11:08 2013 +0200 - sca_subscription_terminate doesn't care if a subscription exists. - - It now returns early if there's no subscription to terminate. - Increment NOTIFY Cseq for line-seize subscription before sending - terminating packet. + snmpstats Documentation updates -commit b36730323a3f8d7c7973fb9438abe29508597233 +commit 43cc6015e8604e309672da4d754b5022d1e256c9 Author: Andrew Mortensen -Date: Fri Aug 10 01:35:36 2012 -0400 +Date: Wed Apr 3 14:54:36 2013 -0400 - Add sca_appearance_seize_next_available_unsafe. + modules/sca: ensure line-seize sub update uses index from request - Used in INVITE 200 reply handler to seize and make active the SCA - callee's appearance-state. + - lazy removal of line-seize subscriptions that were not used for a + call could lead to failure to release expired seized appearance. + Client must have a lingering, expired line-seize subscription that + hasn't yet been purged by the timer, and indices must not match. + Fix ensures that the appearance-index from the new line-seize + subscription overwrites the index left over from the expired one. -commit 2a840c67a35c4e06bc5c362e2e28cb42de216552 +commit 3339e7a5bd205599fed63f82536626732b3f23d9 Author: Andrew Mortensen -Date: Fri Aug 10 01:30:44 2012 -0400 +Date: Wed Apr 3 14:46:27 2013 -0400 - Fix [SIPR-663]: handle Contact-less BYEs. Add sca_uri_extract_aor. + modules/sca: fix SCA_CALL_INFO_EMPTY macro - The raw URI from the To header body frequently contains a parameter - list. We only use AoRs to do lookups. + - test should be a logical OR, not AND. -commit e32fdffcdeedf1e0d0399d883e2029e4ef093844 -Author: Andrew Mortensen -Date: Thu Aug 9 16:37:16 2012 -0400 +commit 348876e0097f70b6e155e1afe58030d5bd6077fc +Author: Olle E. Johansson +Date: Wed Apr 3 20:56:49 2013 +0200 - Updated NOTES re: seizing held line from another handset. + timer Documentation update (section IDs) -commit f61295a91bb92645ea46dea5f6101232afeb720d -Author: Daniel-Constantin Mierla -Date: Thu Aug 9 16:14:43 2012 +0200 +commit 7670fafb184f0f16bf5903b4c75c3d327891756f +Author: Olle E. Johansson +Date: Wed Apr 3 20:53:49 2013 +0200 - usrloc(k): safety check for raw_query - - - db get all contacts functions requires raw_query, but not all db - modules implement it + sipcapture Update to README xml files (section IDs) -commit e154b2fb9f02d56d9c6a4b2d285791151ae0c8a3 -Author: Daniel-Constantin Mierla -Date: Thu Aug 9 08:50:20 2012 +0200 +commit 244bfd5004804b20d983afd6e9caccfd9f70fde4 +Author: Olle E. Johansson +Date: Wed Apr 3 20:20:47 2013 +0200 - rr(k): fixed offset in building new route header + snmpstats Add transport indications to the mib - - related to the previous fix done to strict routing intermediary hop + This commit adds support for the config framework to the snmpstats module. -commit e009f06789c73860428a42c92ee3d8e1f3079831 -Author: Andrew Mortensen -Date: Wed Aug 8 23:22:10 2012 -0400 +commit 7bc2efb300dcce267984cd3804349295ec8d2ed5 +Author: Olle E. Johansson +Date: Wed Apr 3 20:01:35 2013 +0200 - Add sca_uri_is_shared_appearance. - - Remove a few debugging lines. + core Make sure Kamailio doesn't crash if TCP is disabled and RPC core.tcp_list RPC command is issued -commit 94534adda00e8c47a45f01ba824b9bd238293274 -Author: Jon Bonilla -Date: Thu Aug 9 00:20:57 2012 +0200 +commit d7959e5e63130889b6b589096388eaa6b76216d1 +Author: Olle E. Johansson +Date: Wed Apr 3 09:22:49 2013 +0200 - pkg/deb wrap and sort debian control - - This makes it easier to track the dependency - changes for version control systems and diff logs - - Credits to Michael Prokop mprokop@sipwise.com + kex Update README XML with section id's -commit ae8f15dcdea73156dbc704bc46908b76ba174393 -Author: Daniel-Constantin Mierla -Date: Wed Aug 8 20:27:17 2012 +0200 +commit 3814b0ef258fb904aa3571058a9e76dc990bd252 +Author: Olle E. Johansson +Date: Wed Apr 3 09:14:41 2013 +0200 - nathelper(k): use usrloc ruid and aorhash to build from tag of SIP keepalives - - - update due to last change in usrloc get all records API function - - these values can be used to identify the usrloc records (e.g., upon - handling the SIP keepalive reply) + tls Reformat section IDs -commit 7b863271880a643d72b506975faa0669d2ca268a -Author: Daniel-Constantin Mierla -Date: Wed Aug 8 20:24:09 2012 +0200 +commit 6a9048a14bae1fd9a66239533a9af23ad390ab20 +Author: Hugh Waite +Date: Wed Apr 3 16:18:14 2013 +0100 - usrloc(k): return ruid and aor hash in get all contacts API functions + modules/tm: Fix t_next_contact_flow return value - - these records are used to send NAT keepalives - - aor hash is set to 0 if db_mode is DB_ONLY, it is not stored in - database + - Return 1 if a new flow was found + - Return -1 if not found -commit c1240aa21a534f1c1a5bdaaebd9c29fe4984a4bb -Author: Peter Dunkley -Date: Wed Aug 8 12:05:44 2012 +0100 +commit 4ae14b095cb0a24f743a6c90db2f273dcfb163aa +Author: Carsten Bock +Date: Wed Apr 3 16:57:44 2013 +0200 - modules_k/rls: Fixed memory leak in RLS - - - Leak only happens when there is more than one Record-Route: header - - Fixed by Hugh Waite @ Crocodile RCS + b/f: Initialize rtpp_set_list properly (set it to 0), this can otherwise cause errors. -commit 58b22e62ea360c38574ad5ef2a031bb9413807fa -Author: Peter Dunkley -Date: Wed Aug 8 10:14:57 2012 +0100 +commit 6759d6bbdd5ff918759789bde00b8e74235b4051 +Author: Hugh Waite +Date: Wed Apr 3 15:55:47 2013 +0100 - modules_k/snmpstats: Added defines for WebSocket transport + modules/tmx: Add $T_reply_ruid pv to return ruid for a branch reply - - There are no specific stats for WebSocket connections here (just - as there are none for SCTP), but the defines are there as place- - holders. + - Can be run from a failure_route or branch_failure_route -commit 6eb7414bc7e6f2027d49d5b01462e565ae4a93a1 -Author: Peter Dunkley -Date: Wed Aug 8 10:10:42 2012 +0100 +commit ef9115b65fc21f8d64687b2787a50aa025d188c7 +Author: Hugh Waite +Date: Wed Apr 3 15:18:22 2013 +0100 - modules_k/seas: Added WebSocket transport support + modules/tm: Make ruid available in uac structure - - Note: seas doesn't seem to compile at the moment, but I think the - four lines added for WebSockets are OK... + - ruid is stored per uac + - ruid can be retrieved when a response to the branch is received -commit e1848d9c7fcaa04e785fe39365abd90b3c075f2f -Author: Peter Dunkley -Date: Wed Aug 8 10:08:33 2012 +0100 +commit 4cdd9f7502a11bc48d0413811606444b24b984e2 +Author: Hugh Waite +Date: Wed Apr 3 15:06:35 2013 +0100 - modules_k/nat_traversal: Added WebSocket transport support + modules/registrar: Allow unregister for ruids in branch_failure_route + + - unregister(domain, uri, ruid) is accepted in branch_failure_route + - unregister(domain) is not. -commit f96e6005eb5a071ec25c9ab3174c4150223448cd -Author: Peter Dunkley -Date: Wed Aug 8 09:59:59 2012 +0100 +commit 445e23e221d54e105f256e54c06c6e5a28ba848c +Author: Hugh Waite +Date: Wed Apr 3 15:04:38 2013 +0100 - modules/lcr: Added WebSocket transport to lcr + modules/usrloc: Fix get_urecord_by_ruid to return static aor - - LCR won't use a WebSocket gateway (this doesn't make sense), but - PROTO_(WS|WSS) has been added to some switch statements to catch - misconfiguration and get rid of compiler warnings. + - Fixed a bug which returned a pointer to a stack variable + - Fixed some potential (?) infinite loops -commit c7a9b1ed48631952f286d312721e8c45dde05ca1 -Author: Peter Dunkley -Date: Wed Aug 8 09:49:13 2012 +0100 +commit befb822c7548c063c9643e8e6b27b1a6e9ff1631 +Author: Carsten Bock +Date: Wed Apr 3 12:55:01 2013 +0200 - modules_k/path: Added WebSocket transport support to Path module + b/f: an error would be nice, if the module fails to load ;-) -commit 6f928a54d137e2e08ccc1a278afb04b40e34307f -Author: Peter Dunkley -Date: Tue Aug 7 23:38:18 2012 +0100 +commit 3b76b3bb674420ffcee1cb400ee812bf9e7db418 +Author: Olle E. Johansson +Date: Tue Apr 2 20:35:44 2013 +0200 - modules/websocket: Added new event_route[websocket:closed] which is run when a WebSocket connection is closed - - - Also changed ws_handle_handshake() to return 1 on success (still 0 on all - errors as they are handled - and the correct responses sent - within the - function). + utils Add section ID's to README xml -commit eaf81de37baac269135cac55ab4fd42d3b72e045 -Author: Andrew Mortensen -Date: Tue Aug 7 16:46:52 2012 -0400 +commit 43d59fe1093e7319848794a7c266d3605f764d1a +Author: Olle E. Johansson +Date: Tue Apr 2 20:31:07 2013 +0200 - Detect call hold INVITEs & update state. Handle Call-Info in BYE replies. - - Blinking lights on hold! Consultative & blind xfers work! + db_cluster Add section IDs to XML file and update some text -commit 68a3cbd66187460aafa84c8ce6a1f2190aa27a62 -Author: Andrew Mortensen -Date: Tue Aug 7 16:26:33 2012 -0400 +commit 68a8ef2ed9e616f563a28d87d591f5deebd23085 +Author: Jason Penton +Date: Tue Apr 2 20:29:50 2013 +0200 - Add sca_appearance_state_for_index. - - Convenient for looking up appearance based on line-seize subscription info. + modules/dialog_ng: fixed bad append bug and added null sentinel + - thanks Hugh -commit 9347715a2f5ac4f847e45d1412bab48cacbf0b17 -Author: Andrew Mortensen -Date: Tue Aug 7 16:25:43 2012 -0400 +commit f0f31127878ecde2dac854598030f0d7d5374f18 +Author: Olle E. Johansson +Date: Tue Apr 2 20:08:43 2013 +0200 - Only NOTIFY on line-seize subscription expiration if state is "seized" + acc Update documentation with section IDs -commit d8bcf925501f883ebab79d45e75aee5ef9042cca -Author: Andrew Mortensen -Date: Tue Aug 7 16:23:28 2012 -0400 +commit 70c5705a6cfd9ba8fc8f5519145eb5d4b13770da +Author: Olle E. Johansson +Date: Tue Apr 2 19:26:35 2013 +0200 - Add sca_call_is_held to detect whether call is on hold. - - Uses parser/sdp/sdp.h; very similar to modules_k/textops's is_audio_on_hold. + db_mysql Correct e-mail address that had a typo. + +commit 9e7f627c5e9a4c34193e4662fbe341b70fa308bf +Author: Jason Penton +Date: Tue Apr 2 19:44:46 2013 +0200 + + modules/dialog_ng: bug fix for concurrent dialog did generation + - spotted by Camille @ Orange - tks! -commit aacd6d6cc854d995c26080687d2e97e17ea04d10 -Author: Victor -Date: Mon Aug 6 09:25:32 2012 +0200 +commit b961a960581394913dc79240fe983723a57e5b26 +Author: Peter Dunkley +Date: Tue Apr 2 13:23:27 2013 +0100 - fix typo errors on binaries. + modules/stun: fixed typo -commit b9d082fbbaf16faadccb45dcf89f05c910d93b61 -Author: Andrew Mortensen -Date: Mon Aug 6 16:27:35 2012 -0400 +commit fe977dfcb940b1c48dd26fe5fe61a25aed23b96a +Author: Olle E. Johansson +Date: Tue Apr 2 14:13:01 2013 +0200 - Fix reply handling, add CANCEL handler, handle BYEs from non-SCA lines + db_mysql Add transaction support - Add some debugging messages. + Patch contributed via Google+ by HÃ¥kon Nassjöen -commit f728283da3473a80e65a9d32c36d0a5dc580a3cb -Author: Andrew Mortensen -Date: Mon Aug 6 16:26:06 2012 -0400 +commit e9267d7e6a0c6a1715f70916a6879f4288f14a57 +Author: Olle E. Johansson +Date: Tue Apr 2 11:09:27 2013 +0200 - Fix implementation by pointing dialog members to correct offsets. + cfgutils Adding ID's to xml sections for alfabetic indexes -commit e94074a009c275dacb5d9c0aee03ae04ce4c7d25 -Author: Andrew Mortensen -Date: Mon Aug 6 16:24:14 2012 -0400 +commit 399ab478349f320a44180abbb1546c93981b566a +Author: Daniel-Constantin Mierla +Date: Mon Apr 1 22:40:21 2013 +0200 - Add sca_appearance_unlink_by_tags. - - Allow unlinking from appearance list by dialog. Useful when handling - requests/responses from non-SCA lines to SCA lines. sca_appearance - struct is now aware of its appearance list to make this possible. + app_lua: readme regenerated to be in sync with xml docbook file -commit a66be990168739acfa9dd7e2b99f22fed61fc2ec -Author: Peter Dunkley -Date: Sun Aug 5 16:45:04 2012 +0100 +commit 1262b4401954661028e10bfb3b54d0ed00876711 +Author: Olle E. Johansson +Date: Mon Apr 1 20:41:48 2013 +0200 - pkg/kamailio/fedora/17: Fixed problem with appliances + snmpstats add entry for outbound module -commit 9fc34aad6328a92b7572ae077d9ff4d2699dbb48 -Author: Alex Balashov -Date: Sun Aug 5 08:22:12 2012 -0400 +commit 7d272f893c3e0f260db1af5fc07dccd7d93690df +Author: Olle E. Johansson +Date: Mon Apr 1 10:06:33 2013 +0200 - core: Added null pointer check to parser/msg_parser.c:get_hdr_field(). - - Encountered crash bug in which 'buf' pointer passed to get_hdr_field() - was null. There is no null check, so attempts to dereference it lead to - a crash: - - Core was generated by `/usr/local/sbin/kamailio -P /var/run/kamailio.pid -m 1024 -u root -g root -f /r'. - Program terminated with signal 11, Segmentation fault. - at parser/msg_parser.c:102 - 102 if ((*buf)=='\n' || (*buf)=='\r'){ - - Fixed by adding a check for buf == NULL to top of function. + snmpstats Documentation updates -commit 49f25c402871a619404b61e29ff496c71daad8be -Author: Peter Dunkley -Date: Fri Aug 3 14:39:49 2012 +0100 +commit 5397c6c4d9a9b3f50561893855d7469cfbf58858 +Author: Olle E. Johansson +Date: Mon Apr 1 09:12:01 2013 +0200 - modules_k/rls: Fixed segmentation fault in RLS - - - Fix by Paul Pankhurst @ Crocodile RCS + outbound add config framework variable to indicate active module -commit 5c83492470e8d1a706933915fcfbf6cfe2e0fd55 -Author: Peter Dunkley -Date: Fri Aug 3 14:38:49 2012 +0100 +commit 709acbb709c43d1b9d391bebf8a99b3bfe3c3e28 +Author: Olle E. Johansson +Date: Sat Mar 30 19:01:52 2013 +0100 - modules_k/dispatcher: Dispatcher reload MI command not returning errors correctly - - - Fix by Hugh Waite @ Crocodile RCS + cfg.h - config framework - doxygenify documentation -commit 19aafcfc262c16f98793ef135900cd65fca44522 -Author: Peter Dunkley -Date: Fri Aug 3 14:37:20 2012 +0100 +commit 2df6f560bcc54d2966732d397713a9cf3233d5fe +Author: Daniel-Constantin Mierla +Date: Sun Mar 31 21:49:10 2013 +0200 - modules/tm: Enhanced t_replicate so that if a NULL string is used it replicates to $du + dialog: SDP can be passed to MI/RPC dlg_bridge - - Added by Hugh Waite @ Crocodile RCS + - rework from a patch of Patrick E. -commit 79a614ced2283264e3746cfcfd32fe4245f6496b -Author: Peter Dunkley -Date: Fri Aug 3 11:32:28 2012 +0100 +commit aa6154afcf3e2d59ad09659d7e60bf3691f1d2e3 +Author: Daniel-Constantin Mierla +Date: Sat Mar 30 22:31:31 2013 +0100 - pkg/kamailio/fedora/17: Fixed typo in appliance files + doc/rpc_list: updated the docs with lists of rpc commands -commit 090be2532da73f51043f9ba5f4b221fe338d60fa +commit 11bc294a9d64e31014ccb836290467984c28ce65 Author: Daniel-Constantin Mierla -Date: Fri Aug 3 09:20:03 2012 +0200 +Date: Sat Mar 30 20:59:24 2013 +0100 - rr(k): add missing '<' in Route header for strict routing + dialog_ng: set kamailio mod interface always - - if next hop is strict router after loose routing, moving the r-uri to - last Route header was missing '<' in front of the address - - reported by Varsha Venkatraramani + - it breaks rpc list generation otherwise -commit 0f0e2f0092beca6dc1e8eddaf5aaf85ebe839f3b -Author: Andrew Mortensen -Date: Thu Aug 2 15:59:54 2012 -0400 +commit 688f2902977ee52d0c3d89a1f6459ca0d8c624f9 +Author: Peter Dunkley +Date: Sat Mar 30 20:28:03 2013 +0000 - Add sca_get_msg_cseq_method + modules/websocket: moved some configuration across to the cfg framework + + - As suggested by @oej -commit b483b96c9b5519e20720a08132ead94dd56ee47e -Author: Andrew Mortensen -Date: Thu Aug 2 15:09:28 2012 -0400 +commit 21fa34f61ba4d9778e6b79d978818b47d0928639 +Author: Peter Dunkley +Date: Sat Mar 30 12:21:02 2013 +0000 - Make Call-Info header detection case-insensitive. + modules/websocket: added lots more SIP/MSRP specific statistics - Net::SIP lowercases's initial character after hyphen in headers. + - also updated output of dump MI command to include sub-protocol information -commit 7a5c91b8b79c7599d8e81fe3a50a3c778f88592b -Author: Andrew Mortensen -Date: Thu Aug 2 12:18:15 2012 -0400 +commit 63b50d3b0e3a2250effd9a1aa92b7776854364a6 +Author: Peter Dunkley +Date: Sat Mar 30 11:36:41 2013 +0000 - Update sca_appearance_update_unsafe call to match new prototype. + modules/websocket: added some sub-protocol related statistics -commit baf11d677e14317385e7a63072d16d14efb04406 -Author: Andrew Mortensen -Date: Thu Aug 2 12:16:16 2012 -0400 +commit f88dd6d7197af1e4bf5a9e24cdf9ac8975ae2345 +Author: Marius Zbihlei +Date: Sat Mar 30 11:19:24 2013 +0000 - Initial (unsafe) non-locking appearance update routine. + modules/dnssec Added copyright notices - Only updates index, state, uri & dialog. TODO: owner, callee. + Also forgot a memset.. -commit ee464091c3506c6c977cba49fe5a310656d7e310 -Author: Andrew Mortensen -Date: Thu Aug 2 12:03:40 2012 -0400 +commit 75ade496d319ac16df0b00ca578c1cc9b866010a +Author: Marius Zbihlei +Date: Sat Mar 30 10:56:18 2013 +0000 - Initial work looking up SCA appearance by dialog, not Call-Info header. + modules/dnssec New dnssec resolver module based on libval - Required to process responses/requests from non-SCA lines. + To use, simply load the module + It will overide the system resolvers (i.e. gethostbyname, res_search) with libval's provided wrappers that support + DNSSEC. + Further functionality will be added. -commit bcff862df5b937e3a6ff87e4415e0039fd989908 -Author: Daniel-Constantin Mierla -Date: Thu Aug 2 10:16:31 2012 +0200 +commit 243da7b8a96db33090fd6e2e5d84f4dcd47652b5 +Author: Jon Bonilla +Date: Sat Mar 30 11:46:00 2013 +0100 - core: added md5 wrapper functions to build with Colin Plumb's md5 code + Set lucid version to 4.0.0 + +commit 0d279eb512ac6740fe1da6e96f7580303f09c025 +Author: Marius Zbihlei +Date: Sat Mar 30 10:44:39 2013 +0000 + + core: refactored DNS primitives and removed DNSSEC support from core - Author: Tzafrir Cohen + The library functions can now be easily overwritten by modules(dnssec) to allow enhanced resolving capabilities -commit e6d912ad036aa92604ba3f2bf65cc4c4ba3e4d2f -Author: Daniel-Constantin Mierla -Date: Thu Aug 2 10:13:00 2012 +0200 +commit f139948421f2232efae6c2bdd6ea95547b6de533 +Author: Olle E. Johansson +Date: Sat Mar 30 09:49:16 2013 +0100 - core: Use Colin Plumb's MD5 implementation + snmpstats Add support for the Websocket module statistics + + Hint to developers: If you add statistics and selects in your module, you + make it very easy to add SNMP support for your module. Then SNMPstats + can just use generic APIs to find your data. Please also add a generic + way of finding out if a module is configured and used too, if possible. + Sometimes modules are just loaded, but not used anywhere. Better to + reflect real data in SNMP if possible. - Origin: http://anonscm.debian.org/gitweb/?p=dpkg/dpkg.git;a=summary - Author: Tzafrir Cohen + Using the old "SER" way of using selects for config data that + is allowed to change at runtime opens up for SNMP writes to manage + your module as well. - Borrowed the md5 code from dpkg instead of the existing md5.[ch] + And of course, using selects and counters/statistics variables also + helps the RPC interface, so it's both cool and the Right Thing To Do (TM). - This makes the code compatible with Debian packing rules and - restrictions regarding license for distribution + Yes, commit messages can be informative as well. :-) -commit efa3099252ca5d200bef6ce71df33f33b55f9941 +commit b9476db0c1e1ce869c1da2f87dfaf411edf69277 Author: Daniel-Constantin Mierla -Date: Mon Jul 30 12:57:09 2012 +0200 +Date: Sat Mar 30 09:24:19 2013 +0100 - register(k): pack contact info based on header for searching existing ul records - - - not using the contact header resulted in omitting instance and reg-id - parameters, not following gruu/ob extensions, ending in duplicate - records for same +sip.instance - - reported by José Luis Millán + core: set TOS for tcp IPv6 sockets -commit a7cad776a514b0ec73a5c40b7971af8e0f0da92b +commit b57f64533dbc538f3d5282d0196598062f0b4652 Author: Daniel-Constantin Mierla -Date: Mon Jul 30 12:55:36 2012 +0200 +Date: Sat Mar 30 09:15:00 2013 +0100 - usrloc(k): on ul update, re-clone uri and callid if instance is set - - - changes can happen when gruu/ob is enabled as the UA can get different - address for same instance + core: set TOS for IPv6 sctp sockets -commit 72942d8441e04c6f92c8072a373e1f0a9dcc0e61 +commit 222066ba16ec4b2064c4fc50e533e27f4c4fb74d Author: Daniel-Constantin Mierla -Date: Mon Jul 30 11:18:28 2012 +0200 +Date: Fri Mar 29 12:19:36 2013 +0100 - db_sqlite: added notes about usage in readme + app_lua: clean local reload array and shut down + +commit e2bd2192b5ddc33d0e8fd486467842d9cceda131 +Author: Olle E. Johansson +Date: Sat Mar 30 09:10:02 2013 +0100 + + stun Add clarification to the README - - based on content by Meftah Tayeb + And a big thank you to Peter Dunkley and Crocodile RCS for doing the + work involved in making this a module, instead of a compile time + options. Modules are cool. And easier to handle by pre-compiled + distributions/packages. -commit a4e2c43cd66a86bef2d8bda1b0ca0c6f93517a8d -Author: Daniel-Constantin Mierla -Date: Fri Jul 27 13:14:53 2012 +0200 +commit ce0c420ba30388256e958a0bdf6d8f37138c3f97 +Author: Peter Dunkley +Date: Fri Mar 29 23:35:39 2013 +0000 - rtpproxy: allow pv as parameter to set_rtpproxy_set() function + modules/outbound: changed some INFO level output to DBG -commit 9a1450d99accef8e473cf2324412fdfc09a7cd11 -Author: Juha Heinanen -Date: Fri Jul 27 13:08:21 2012 +0300 +commit bce42abfd19f5beb26fc27ab77fed5f679a378ee +Author: Peter Dunkley +Date: Fri Mar 29 23:31:54 2013 +0000 - modules/lcr: improved documentation of lcr_count module param + modules/rr: fixed outbound related segmentation fault -commit 1c2cb66a8c9a4482ac278604f32bd772973a787f -Author: Richard Fuchs -Date: Thu Jul 26 09:41:26 2012 -0400 +commit 7dfdcfed55916cce7541d28251cb4c82a0823829 +Author: Peter Dunkley +Date: Fri Mar 29 23:31:39 2013 +0000 - modules/lcr: Fix printing of IPv4 addresses in lcr.dump_gws - - IPv4 addresses were printed incorrectly. Also add special handling for - null gw addresses and print them as 0.0.0.0 for backwards compatibility. + modules/outbound: fixed segmentation fault -commit 4a61c692e69fad0e6788725a1e0b2c844607ed7e -Author: Andrew Mortensen -Date: Wed Jul 25 14:47:48 2012 -0400 +commit 56be9d6100c22333a14f18f0a506bd8652240e9d +Author: Peter Dunkley +Date: Fri Mar 29 23:12:58 2013 +0000 - Implement sca_call_info_update and handler functions. + core: added structure to hold cached decoded flow-token to sip_msg structure -commit e278397916e0b31d7510a3ef324631fd0c0d7d97 -Author: Andrew Mortensen -Date: Wed Jul 25 11:47:13 2012 -0400 +commit dc1e11b5d03ec033ba7fee421f57d56fa223fddb +Author: Peter Dunkley +Date: Fri Mar 29 23:12:18 2013 +0000 - Improve subscription termination handling. Track appearance indexes. - - Release seized lines on subscription termination. Use updated constant. + modules/rr: updated because outbound:decode_flow_token() arguments changed -commit a2f99b96bebf7def0c9bc65f1d635679671c1798 -Author: Andrew Mortensen -Date: Wed Jul 25 11:33:22 2012 -0400 +commit 2bff7566a0506ea06ab2de735db30af3e4c9c110 +Author: Peter Dunkley +Date: Fri Mar 29 23:11:24 2013 +0000 - Add unsafe (i.e., use only when locked) find and unlink functions. + modules/outbound: cache decoded flow-token in sip_msg structure - Reduce amount of locking done oer operation by acquiring lock once, - then using "unsafe" hash table functions. + - Saves multiple OpenSSL calls if the same flow-token is needed in more + than one place -commit 1c0166538f51c94ee357df82a5c7b24f7a34fca5 -Author: Andrew Mortensen -Date: Wed Jul 25 11:28:42 2012 -0400 +commit 030d591a1e80b32d88b606bf0bc0d8ed80ad3b31 +Author: Peter Dunkley +Date: Fri Mar 29 22:32:13 2013 +0000 - Add sca_appearance_for_index_unsafe, sca_appearance_for_dialog. - - sca_appearance_update_index now updates dialog, too. + modules/outbound: updated edge proxy example to use STUN module -commit 6d96f924f9888b7f432ba3f3e1cc5b6b294f0f9b -Author: Andrew Mortensen -Date: Wed Jul 25 11:22:42 2012 -0400 +commit 2857eb4b2de20c18ac31212c5336092f08184309 +Author: Peter Dunkley +Date: Fri Mar 29 22:28:00 2013 +0000 - Use updated sca_appearance_update_index, constant name. + modules/stun: removed unnecessary include -commit 7adbb3bb212f20426ccdf8cfd10ef91359fbc87f -Author: Andrew Mortensen -Date: Wed Jul 25 11:20:24 2012 -0400 +commit c264ea399e17a87a59282b654bdbdebea2841e34 +Author: Peter Dunkley +Date: Fri Mar 29 21:49:56 2013 +0000 - Export sca_call_info_update. + pkg/kamailio/(centos|fedora): Updated .spec to build new stun module - Temporarily export sca_unsubscribe_line_seize. + - Also updated rel to dev1 -commit f8ca7820635567052d9c5b202fac11134ab0db3e -Author: Andrew Mortensen -Date: Wed Jul 25 11:07:52 2012 -0400 +commit e090a714728950b40cf09956137db4ce93d08960 +Author: Peter Dunkley +Date: Fri Mar 29 21:49:29 2013 +0000 - Use updated constants, add comment about hooking failed replies. + modules/outbound: updated to reflect STUN being in a module now -commit 058b0aa803d66f0fb9b3ae87435a6cd3924e3043 -Author: Andrew Mortensen -Date: Wed Jul 25 11:05:23 2012 -0400 +commit c22230bddf3aeebdae9062d3c5c4c37ce59f8a96 +Author: Peter Dunkley +Date: Fri Mar 29 21:49:07 2013 +0000 - Add prototype for sca_dialog_build_from_headers, SCA_DIALOG_EMPTY + core: Updated modules list in Makefile.groups to include stun -commit 4cdfefd8a47a2bea10d279ad20579b056c4e49d1 -Author: Andrew Mortensen -Date: Wed Jul 25 11:03:44 2012 -0400 +commit c573aa70bba657ba58202c4125d354439478adb2 +Author: Peter Dunkley +Date: Fri Mar 29 21:47:57 2013 +0000 - include data_lump.h for del_lump Call-Info header removal. + core: removed STUN from core + + - Added hooks so that STUN messages can be passed to a module + - Removed STUN configuration file parameters -commit a0b59cd0c5d4d86e0d553d81d70fb2adb0d8b643 -Author: Andrew Mortensen -Date: Wed Jul 25 11:01:53 2012 -0400 +commit 55510ba22e248ea774e7c04b0132c9c5af858d15 +Author: Peter Dunkley +Date: Fri Mar 29 21:46:20 2013 +0000 - New notes on dialog tracking, removing header, sdp parsing + core: removed ser_stun.[ch] from core + + - STUN now in a module -commit b9e5fb0de5757551866738db3892c1b9adce4a58 -Author: Andrew Mortensen -Date: Wed Jul 25 10:59:57 2012 -0400 +commit 02718defd1785fe5b94255077a9945354ee6cc19 +Author: Peter Dunkley +Date: Fri Mar 29 21:45:45 2013 +0000 - Add util functions, sca_dialog_build_from_tags. + modules/stun: Module documentation for STUN -commit f492b41bd12904e3132260562073e79d76a003a5 -Author: Alex Balashov -Date: Mon Jul 23 22:23:36 2012 -0400 +commit 4afa7a1f9dfc61679db11a5e76e3d3de10be1391 +Author: Peter Dunkley +Date: Fri Mar 29 21:44:48 2013 +0000 - mqueue: Added mq_size() function to get runtime size of mqueue in script. + modules/stun: STUN module + + - Based on ser_stun.[ch] + - No longer a compile time option in Kamailio core -commit 41f77159c5851bb36ad12abecc2faf58602d6935 -Author: Alex Balashov -Date: Mon Jul 23 19:53:41 2012 -0400 +commit 84ad1a93976a0f8251ab0d86319d91d48a3a4d91 +Merge: 45b4d0b 33108f4 +Author: Hugh Waite +Date: Fri Mar 29 14:55:58 2013 +0000 - mqueue: Added MI command to get current size of mqueue. - - There is currently no runtime visibility into the size of a given mqueue. - To address this, added an MI command 'mq_get_size' that can return the size - of an mqueue by name. Example: + Merge branch 'master' of ssh://git.sip-router.org/sip-router - diminuendo-1:~/sip-router/modules/mqueue# kamctl fifo mq_get_size r_write - mqueue:: name=r_write size=1 + * 'master' of ssh://git.sip-router.org/sip-router: + modules/registrar: changed instance related INFO to DBG -commit b26f862322ad311e3c42d899f72eaa1fb665b755 -Author: Anca Vamanu -Date: Fri Jul 20 16:59:52 2012 +0300 +commit 45b4d0b480ca0c0c02327bcbd925865a7571fcf5 +Author: Hugh Waite +Date: Fri Mar 29 14:54:52 2013 +0000 - modules/matrix Fixed MI command not exported - - Added missing register_mi_mod() call in mod_init. + lib/srdb1, kamctl: Add new rtpproxy db table to schema -commit 9a4b9061387ac88c9c0db7945b41c8a24986b7bc -Author: Dragos Dinu -Date: Fri Jul 20 10:48:48 2012 +0300 +commit 33108f4843fdef6d45773849089446b0c408ecf3 +Author: Juha Heinanen +Date: Fri Mar 29 16:30:51 2013 +0200 - modules/sipcapture: Extended sipcapture to support multiple tables - - The sipcapture module can support storing the information to multiple sql tables. - Tests have shown that a major bottleneck against scalability on multi core CPU of - the capture node instance was caused by using a single MySQL Table. - The frontend (HOMER) will be soon patched to support retrieval of data from multiple - sources. - - The decision to select witch table is written to, can be configured from random, - round robin or hashing via username or callid. + modules/registrar: changed instance related INFO to DBG -commit 0f702f6e236eb0cbb238bf83a0c4ae94d7b3cad8 -Author: Anca Vamanu -Date: Thu Jul 19 17:49:13 2012 +0300 +commit 9a0e58667f705197b8e5291b54909fd370b2b7ab +Author: Hugh Waite +Date: Fri Mar 29 14:07:59 2013 +0000 - modules_k/uac: uac_replace_from/to AUTO mode with dialog module + modules/rtpproxy: Add database support to rtpproxy - Added a implementation for uac_replace_from/to() that uses the dialog - module for AUTO mode. In this mode the URIs are stored as dialog - variables. + - If db_url modparam is set rtpproxy sets will be loaded from database + - If the instance is marked as disabled in database it will be loaded as disabled - The change in tm module fixes a bug: if uac_replace_to() was called, the - URI was not changed accordingly in Cancel. + - Currently no persistence (enable/disable MI command does not affect DB) + - Loaded during mod_init - cannot be reloaded at runtime (as before) -commit 04041593c08959a640b23d16ba944300f2c320c8 +commit f9a7a9476f3d925fbfbde706ff7690423e96e7c8 Author: Daniel-Constantin Mierla -Date: Thu Jul 19 10:28:13 2012 +0200 +Date: Fri Mar 29 12:05:17 2013 +0100 - permissions(k): added new cfg function allow_address_group(addr, port) + app_lua: moved local array for reload as global variable - - return group of matching address and port record in address table + - avoid runtime allocation/free for each execution when reload is + enabled + - renamed sr_reload to _app_lua_sr_reload for better namespacing + conflict resolution -commit 21fe4ed3496de3094d12f941310df605e492a713 -Author: Daniel-Constantin Mierla -Date: Thu Jul 19 10:23:20 2012 +0200 +commit c9082cb51b204d5001b0bb819d72669fdcdf3d98 +Author: Victor Seva +Date: Fri Mar 29 10:21:42 2013 +0100 - core: fixup helper function for spve - igp parameters + modules/app_lua: Fix not C standard initialization -commit 0615826fe602c5183fbc7be7c51de5eb5eb7223c -Author: Daniel-Constantin Mierla -Date: Wed Jul 18 19:00:38 2012 +0200 +commit 9d908f1d24df8c1644c3fbed3d99f5011106cae6 +Author: Victor Seva +Date: Thu Mar 28 10:18:10 2013 +0100 - tls: set function to return the id - - - starting with v1.0.0 openssl does not use anymore getpid(), but address - of errno which can point to same virtual address in a multi-process - application - - for refrence http://www.openssl.org/docs/crypto/threads.html - - credits to Jijo on sr-dev mailing list + modules/app_lua: Added reload parameter to deactivate the reload check -commit e35e16efbbc6c746a7a4dfeddfc241c2c78d30bc -Author: Daniel-Constantin Mierla -Date: Wed Jul 18 18:51:54 2012 +0200 +commit db397f15b9d2faacda9a8175398e1df524fd1875 +Author: Víctor +Date: Wed Mar 27 21:30:40 2013 +0100 - kamdbctl: mtree tables were not in the list for db creation + modules/app_lua: add app_lua.list and app_lua.reload rpc commands -commit 3bcff044593687f7f0e71cb7f084b071dd09bff0 +commit 50b116cf4c9c33c4f23c1d5b66fd313a7f40c572 Author: Daniel-Constantin Mierla -Date: Wed Jul 18 08:54:56 2012 +0200 +Date: Fri Mar 29 11:02:31 2013 +0100 - kamctl: stats command can print a single group of statistics + usrloc: use NULL domain for updating ul attributes for use_domain=0 - - groupid can be given as command parameter + - use counter var for db matching keys -commit bb4925540d241eb91cc8b68712bec20f1970b086 +commit afc8b3e7ae13198c7bca42f7f7fc5499418cfa59 Author: Daniel-Constantin Mierla -Date: Wed Jul 18 08:27:52 2012 +0200 +Date: Fri Mar 29 09:25:09 2013 +0100 - kamailio.cfg: removed sample db_mode parameter for domain module - - - no longer exists since 3.3 domain update + Makefile.defs: version set to 4.1.0-dev2 -commit 58502f3fa92b6ea2dd50c8b2274b17fc0b5bc083 -Author: Andrew Mortensen -Date: Tue Jul 17 16:49:40 2012 -0400 +commit c77ec4ed4cc756373b0f20885d4f04d2276c00c1 +Author: Daniel-Constantin Mierla +Date: Fri Mar 29 09:23:43 2013 +0100 - Fixes for line-seize reSUBSCRIBEs, line-seize expire time. + Makefile: pure target associated to maintainer-clean -commit 7062904cba4c36e2f296b782fd9175914cc9b348 -Author: Andrew Mortensen -Date: Tue Jul 17 16:47:46 2012 -0400 +commit c26d6bb13fb699ec2cb9e916d8a562d3ee4c8f0d +Author: Olle E. Johansson +Date: Fri Mar 29 09:38:29 2013 +0100 - Fix sca_call_info_header_append_appearances. + snmpstats Adding more memory data variables - Loop wasn't incrementing buffer pointer. - -commit 342d4cee957ef3944419197a58f28354dec0945b -Author: Andrew Mortensen -Date: Tue Jul 17 10:44:53 2012 -0400 + Also, remove dependency of the kex module by interfacing directly + with the core the same way as the kex module does get memory information. - Add parser/hf.h. Required for Call-Info header parsing. +commit 60953cd884af7d070ce44844a874f2bd75833998 +Author: Peter Dunkley +Date: Fri Mar 29 01:08:02 2013 +0000 -commit a93b2c5c007e05c6027643e2b9f09a6775bbce4b -Author: Andrew Mortensen -Date: Tue Jul 17 10:44:12 2012 -0400 + modules/outbound: updated edge proxy example in README - Release seized appearances when line-seize subscriber hangs up. +commit f6b72765da5cf12f8dc1e4157a3e526d5d0aa956 +Author: Olle E. Johansson +Date: Thu Mar 28 22:50:59 2013 +0100 -commit eecb3b1830903c3e42c80ceb1e458cc631c3a495 -Author: Andrew Mortensen -Date: Tue Jul 17 10:43:22 2012 -0400 + snmpstats Adding another list of TCP settings + + Just a few more to go, then TLS - Fix leak: Call sca_appearance_free after unlinking appearance. +commit 57bb2450a5b0db4c18dd139ae3ae28f480b379c7 +Author: Olle E. Johansson +Date: Thu Mar 28 21:30:57 2013 +0100 -commit 7e4aa668d1fa5c6cc34d6e5350c64649a005c641 -Author: Andrew Mortensen -Date: Tue Jul 17 10:42:16 2012 -0400 + snmpstats Add a few more TCP connection settings - Implement sca_call_info_header_find and sca_call_info_body_parse. +commit 464ce5d71d738f706f0d4a26573444809496068e +Merge: 1d8597f 084be45 +Author: Hugh Waite +Date: Thu Mar 28 10:00:05 2013 +0000 + + Merge branch 'master' into hpw/branch_failure_route + + * master: (33 commits) + core: set TOS for IPv6 UDP sockets + rtpproxy: add missing wrapper function for unforce_rtp_proxy + modules/outbound: further improvement to the use_outbound() check + rtpproxy: support pvars in function parameters + modules/rr: copy the flow-token for "incoming" messages when using outbound + modules/outbound: improved check for outbound + modules/rr: only use flow-token for routing if it doesn't point to the source of the request + pkg/kamailio/(centos|fedora): Updated .spec after addition of cnxcc module + Makefile.groups: cnxcc module added to extra list + core: auto-define cfg directive MOD_modname for each loaded module + snmpstats Add tcpasync and tcpmaxconns + snmpstats Add IDs to sections in documentation + cnxcc: added new module for credit control + snmpstats activate new parts of the KAMAILIO-MIB + snmpstats Add information about version and tcp connections + usrloc: new option for db_mode - DB_READONLY (4) + enum: define the max size for numbers + db_mysql: new module parameter - insert_delayed + Makefile: exclude debian sym link when generating tarball + msrp: fix compile warning of argument type in dbg message + ... -commit da5a8008460bc03c6cb6d32740cf09425c0ed067 -Author: Andrew Mortensen -Date: Tue Jul 17 10:39:30 2012 -0400 +commit 1d8597f99b43154c1a078ade47984e6faf9f149c +Author: Hugh Waite +Date: Thu Mar 28 09:48:04 2013 +0000 - Implement sca_appearance_release_index. - - Correct sca_appearance_free prototype. + modules/tm: Fix setting instance in uac branches -commit 31d651479c210e4b1d181fc34b10aae67e716bb7 -Author: Carsten Bock -Date: Tue Jul 17 10:15:46 2012 -0400 +commit 084be456bc0fab015cf9964ac85651fa60ea77c9 +Author: Daniel-Constantin Mierla +Date: Wed Mar 27 20:53:00 2013 +0100 - Remove duplicate entry of "default_domain" in docs. - Remove double occurance of the CSeq Attribute in the XML. - (closes FS#246 - pua_reginfo adds duplicate cseq field in XML body on the Bugtracker) + core: set TOS for IPv6 UDP sockets - Thanks to Andrew Pogrebennyk (apogrebennyk@sipwise.com) for pointing this out. + - reported by Klaus Feichtinger, FS#179 -commit d694cebab5b2e2849059fb0376a38e074646c703 -Author: Andrew Mortensen -Date: Mon Jul 16 09:25:00 2012 -0400 +commit 9e6af79d0cf1b0e10694880147a28966313fb5a4 +Author: Richard Fuchs +Date: Wed Mar 27 13:30:05 2013 -0400 - Shared Call Appearance module for sip-router. - - Move to repo.net.isc.upenn.edu. + rtpproxy: add missing wrapper function for unforce_rtp_proxy -commit f003344fce108600c966dd3b79c5c89cb364afe5 +commit a5f8f4cd4da60168fd73d7999c09181582ec5943 Author: Peter Dunkley -Date: Sat Jul 14 22:15:00 2012 +0100 +Date: Wed Mar 27 16:51:52 2013 +0000 - pkg/kamailio/fedora/17: Updated appliances + modules/outbound: further improvement to the use_outbound() check -commit 60f0665348e80f056f2a0de5263de95f898e4583 -Author: Daniel-Constantin Mierla -Date: Fri Jul 13 18:03:46 2012 +0200 +commit cd3358dd935781489e2b7122fe20a19310f97546 +Author: Richard Fuchs +Date: Wed Mar 27 12:46:28 2013 -0400 - cdp_avp: fixed small typo in readme + rtpproxy: support pvars in function parameters -commit f3ff581dbd0a53c4c5eafdf829bef0c25e8e8f28 -Author: Anca Vamanu -Date: Fri Jul 13 16:50:07 2012 +0300 +commit 0c1725c8ccb08280a9c161e34fa9e43347cae7b0 +Author: Peter Dunkley +Date: Wed Mar 27 16:33:17 2013 +0000 - lib/srdb1 : put pooling constans into separate header file to reduce - include dependancy + modules/rr: copy the flow-token for "incoming" messages when using outbound -commit 1f6bfa0b3ba15201c2ca3e2387a9f9e81e989643 -Author: Pawel Kuzak -Date: Fri Jul 13 16:06:48 2012 +0300 +commit b2fb355fe5c9c64727d873cbe8d6fd883ebd2537 +Author: Peter Dunkley +Date: Wed Mar 27 16:32:59 2013 +0000 - Ported gruu and outbound changes to p_usrloc module + modules/outbound: improved check for outbound -commit e570709eeb0bf874f8a825efe982bdff794c22b3 -Merge: 2b77f22 8328637 +commit 874669f483e1efba032bd695eb6cee4275673874 Author: Peter Dunkley -Date: Fri Jul 13 10:37:08 2012 +0100 +Date: Wed Mar 27 15:43:02 2013 +0000 - Merge branch 'master' of ssh://git.sip-router.org/sip-router + modules/rr: only use flow-token for routing if it doesn't point to the source of the request + +commit 2f85ac8828b2d336069c618ef4d209d61809c19f +Author: Hugh Waite +Date: Wed Mar 27 14:36:59 2013 +0000 + + modules/tm: Enable retrieving of branch instance id from uac structure - * 'master' of ssh://git.sip-router.org/sip-router: - Makefile.defs: version set 3.4.0-dev2 - parser/sdp: more suggestive debug message - parser/sdp: prevent manipulation with freed structure - core: Removed unused enum (crept in during WebSocket implementation) - modules/ipops: Corrected is_in_subnet() exported function and added is_ip to module C API - modules/sl: Fixed segmentation fault and corrected log messages - modules_k/registrar: Fixed some errors in module documentation - core: update printing of socket lists to show the advertised address if set for the socket - modules_k/presence: Added missing use_table() call + - Add instance to uac structure and populate when uac created + - Add get_this_branch_instance function to retrieve instance in a branch failure route -commit 2b77f22f159bf14a9e08d339bd69f8d1c35f541d -Author: Peter Dunkley -Date: Fri Jul 13 10:36:31 2012 +0100 +commit 5d1a3b87fde83455f63075d8fdf39b7b99d4053c +Author: Hugh Waite +Date: Wed Mar 27 14:25:32 2013 +0000 - pkg/kamailio/fedora/16: Updated rel in .spec to dev2 + modules/xprint: Updated to use the new get_branch()/next_branch() functions -commit 832863723365ffd6f071a31415cca6b0f4cde391 -Author: Daniel-Constantin Mierla -Date: Fri Jul 13 09:49:40 2012 +0200 +commit 800d56979226ad80e045fb316e19fb3b77ce7f57 +Author: Peter Dunkley +Date: Wed Mar 27 13:59:44 2013 +0000 - Makefile.defs: version set 3.4.0-dev2 + pkg/kamailio/(centos|fedora): Updated .spec after addition of cnxcc module -commit faf7806b7488143f0637b9db896d849249eb059a +commit 94272bdb6ce2a15ba2e165eef59561c2d2992a5f Author: Daniel-Constantin Mierla -Date: Fri Jul 13 09:49:16 2012 +0200 +Date: Wed Mar 27 13:39:28 2013 +0100 - parser/sdp: more suggestive debug message + Makefile.groups: cnxcc module added to extra list -commit f529cdb8b818017c20b73ba5be89309745ea95c5 -Author: Michal Karas -Date: Thu Jul 12 17:38:15 2012 +0200 +commit a1e0c05e953140b026325117c3d8ace5a2ccf900 +Author: Hugh Waite +Date: Wed Mar 27 11:53:18 2013 +0000 - parser/sdp: prevent manipulation with freed structure + modules/pv: Updated to use the new get_branch()/next_branch() functions - - FS#244 + - New instance parameter is currently not used -commit e3cadfd261d2d4b88e288e893a1e6171b14f4218 -Author: Peter Dunkley -Date: Thu Jul 12 22:45:32 2012 +0100 +commit 691ebf0178aa25b5ef19eb6a220d335be3900a3b +Author: Hugh Waite +Date: Wed Mar 27 11:52:15 2013 +0000 - core: Removed unused enum (crept in during WebSocket implementation) + modules/permissions: Updated to use the new get_branch()/next_branch() functions -commit 8ab4daa7f13a70f1fb77d7a98f11f7290a42c321 -Author: Peter Dunkley -Date: Thu Jul 12 21:50:00 2012 +0100 +commit 58c9ba973415caf2a39c0c6fefbd66986d475a89 +Author: Hugh Waite +Date: Wed Mar 27 11:46:45 2013 +0000 - modules/ipops: Corrected is_in_subnet() exported function and added is_ip to module C API - - - Fixes and enhancements by Hugh Waite @ Crocodile RCS + modules/domain: Updated to use the new get_branch()/next_branch() functions -commit e78ff34f1ecfe9a60a52996126032ea04fb490ab -Author: Peter Dunkley -Date: Thu Jul 12 21:48:08 2012 +0100 +commit 42a1548a57ec8e3a8779f1644347340c25aa1bdd +Author: Hugh Waite +Date: Wed Mar 27 11:44:08 2013 +0000 - modules/sl: Fixed segmentation fault and corrected log messages + core: Update get_branch() to return instance from appended branches - - Fixes by Hugh Waite @ Crocodile RCS + - get_branch() and next_branch() updated + - modified select_core.c to use new function definition -commit 6d040935f31be0098a09f4621874268164f3926a -Author: Peter Dunkley -Date: Thu Jul 12 21:46:58 2012 +0100 +commit 14525efb68380b759347e64441cb90f97c1e3595 +Author: Daniel-Constantin Mierla +Date: Tue Mar 26 23:45:50 2013 +0100 - modules_k/registrar: Fixed some errors in module documentation + core: auto-define cfg directive MOD_modname for each loaded module - - Fix by Hugh Waite @ Crocodile RCS + - example: if acc module is loaded, MOD_acc is defined in cfg + - suggestion by Olle E. Johansson -commit 274969bcca2301c96dbbcc17c5b1d411073c8277 -Author: Peter Dunkley -Date: Thu Jul 12 21:44:45 2012 +0100 +commit e1dc02d523867fc9934e862397e6da6b256c7b1b +Author: Olle E. Johansson +Date: Tue Mar 26 22:16:03 2013 +0100 - core: update printing of socket lists to show the advertised address if set for the socket + snmpstats Add tcpasync and tcpmaxconns + + This is to test if I can reach core configuration settings for TCP. Tests prove that it's + possible. Will go ahead and add other settings as well. - - useful for diagnosing what is going on with advertised address - - Enhancement added by Hugh Waite @ Crocodile RCS + One question is if we should allow changing these variables in SNMP, like we do + over the RPC interface or selects. Let's think about that. -commit 0de5e17770cd5dcfcdd64174eb24f0bcaccef021 -Author: Peter Dunkley -Date: Thu Jul 12 21:20:49 2012 +0100 +commit 63a72893c84aad1edd7b139dbe36e3c337d4e9ae +Author: Olle E. Johansson +Date: Tue Mar 26 21:29:48 2013 +0100 - modules_k/presence: Added missing use_table() call + snmpstats Add IDs to sections in documentation -commit f2f8ff72137a39702d284dfe6deb9ef4442e4e78 -Author: Peter Dunkley -Date: Thu Jul 12 16:26:38 2012 +0100 +commit 76a967f1db16540257fe8a54fe85e3993060b304 +Author: Hugh Waite +Date: Tue Mar 26 12:10:11 2013 +0000 - Makefile: SCTP library check doesn't look in /usr/lib64 + modules/tm: Update t_next_contact_flows for use in branch_failure event_route - - This means you can't build Kamailio for a 64-bit OS like CentOS or - Fedora. + - Rename to t_next_contact_flow as only one flow will be used + - Selects and uses the next flow with the same instance_id as the failed branch -commit 3bf1b0472df3be94f6ec1d5ce7573d96dbd88a7a -Author: Jon Bonilla -Date: Thu Jul 12 09:27:56 2012 +0200 +commit 0b79baecf4a36a47522fd222614e370c5d044e8f +Author: Hugh Waite +Date: Tue Mar 26 11:43:35 2013 +0000 - Revert 008c92bece290aed3b8e6439be71c2c37526901d - - We'll readd the dependency once the websocket - module is enabled for build + core: Add defines required for a new branch_failure_route type -commit 699526ddb3b02cb5766bc7ad6f1c7a1861006d4c -Author: Klaus Darilion -Date: Wed Jul 11 12:30:51 2012 +0000 +commit 54a98bc741daba4d0c14c587d22dddf3c01a2e30 +Author: Hugh Waite +Date: Tue Mar 26 11:40:38 2013 +0000 - kamdbctl: add domain_attrs table to standard tables + modules/tm: Create branch-failure event route -commit 40b37899aaadd1518d812c4a32aeab330b864cb4 -Author: Andreas Granig -Date: Wed Jul 11 12:52:38 2012 +0200 +commit 054af083489cba1d7072768734abdc5cf8ef916b +Author: Hugh Waite +Date: Tue Mar 26 11:22:31 2013 +0000 - modules_k/uac: fix handling of empty display-part. + Revert "core: Initial revision of branch_failure_route" + + Remove new branch_failure_route in favour of an event_route - This re-enables the feature to strip the display name by setting - an empty string, like uac_replace_from("", "$var(from)"); + This reverts commit a5946574cb9917f0a9a90ea547c9357f3f6477bd. -commit 9485cfac5e1e6f4bb53407d3382f7dc725598f8a -Author: Vicente Hernando -Date: Tue Jul 10 12:05:02 2012 +0200 +commit 96596e282af0a967c93e162169c6729d183557b9 +Author: Carlos Ruiz Díaz +Date: Tue Mar 26 00:58:28 2013 -0300 - ndb_redis: README file update. redis_cmd variadic function. + cnxcc: added new module for credit control -commit 1010594cf1d7df4753a61142dc86d7d04f6c4be3 -Author: Vicente Hernando -Date: Tue Jul 10 05:54:00 2012 -0400 +commit d269473c935ccd1b867ba215c8b4701f8cf24027 +Author: Olle E. Johansson +Date: Sun Mar 24 21:52:41 2013 +0100 - ndb_redis: redis_cmd variadic function documentation. + snmpstats activate new parts of the KAMAILIO-MIB -commit ca5e3d93e3f117651d2152dccdfd4c299bf7f508 -Author: Vicente Hernando -Date: Tue Jul 10 05:48:45 2012 -0400 +commit 90c51c7b0f85494bc95afc4b976c142051cb7792 +Author: Olle E. Johansson +Date: Sun Mar 24 21:49:02 2013 +0100 - ndb_redis: redis_cmd changed into a variadic function. + snmpstats Add information about version and tcp connections + + Output from SNMPwalk with the new additions: - - command string can be split into several strings. + KAMAILIO-MIB::kamailioNetTcpConnEstablished.0 = Counter32: 0 + KAMAILIO-MIB::kamailioNetTcpConnFailed.0 = Counter32: 0 + KAMAILIO-MIB::kamailioNetTcpConnReset.0 = Counter32: 0 + KAMAILIO-MIB::kamailioNetTcpConnSuccess.0 = Counter32: 0 + KAMAILIO-MIB::kamailioNetTcpConnOpened.0 = Gauge32: 0 + KAMAILIO-MIB::kamailioNetTcpConnPassiveOpen.0 = Counter32: 0 + KAMAILIO-MIB::kamailioNetTcpConnReject.0 = Counter32: 0 + KAMAILIO-MIB::kamailioNetTcpEnabled.0 = INTEGER: true(1) + + KAMAILIO-MIB::kamailioSrvMaxMemory.0 = Gauge32: 33554432 + KAMAILIO-MIB::kamailioSrvFreeMemory.0 = Gauge32: 31709088 + + KAMAILIO-MIB::kamailioSrvCnfFullVersion.0 = STRING: kamailio 4.5.0 (i386/linux) 50af49 + KAMAILIO-MIB::kamailioSrvCnfVerName.0 = STRING: kamailio + KAMAILIO-MIB::kamailioSrvCnfVerVersion.0 = STRING: 4.5.0 + KAMAILIO-MIB::kamailioSrvCnfVerArch.0 = STRING: i386 + KAMAILIO-MIB::kamailioSrvCnfVerOs.0 = STRING: linux + KAMAILIO-MIB::kamailioSrvCnfVerId.0 = STRING: 50af49 + KAMAILIO-MIB::kamailioSrvCnfVerCompTime.0 = STRING: 12:12:27 Mar 24 2023 + KAMAILIO-MIB::kamailioSrvCnfVerCompiler.0 = STRING: gcc 4.1.2 + KAMAILIO-MIB::kamailioSrvCnfVerFlags.0 = STRING: STATS: Off, USE_IPV6, USE_TCP, USE_TLS, TLS_HOOKS, USE_RAW_SOCKS, DISABLE_NAGLE, USE_MCAST, DNS_IP_HACK, SHM_MEM, SHM_MMAP, PKG_MALLOC, USE_FUTEX, FAST_LOCK-ADAPTIVE_WAIT, USE_DNS_CACHE, USE_DNS_FAILOVER, USE_NAPTR, USE_DST_BLACKLIST, HAVE_RESOLV_RES -commit 008c92bece290aed3b8e6439be71c2c37526901d -Author: Juha Heinanen -Date: Sun Jul 8 21:20:35 2012 +0300 +commit d80ea02f5d96477e1c6deca581500cfa4a24380e +Author: Daniel-Constantin Mierla +Date: Sun Mar 24 13:53:50 2013 +0100 - pkg/kamailio/deb/wheezy: Added build dependency on libunistring-dev. + usrloc: new option for db_mode - DB_READONLY (4) + + - location records are loaded only at startup + - no write back to database, not even at shutdown + - useful when registrations are replicated to another node that does the + db storage at runtime + - started from a patch by Marcus Hunger -commit b705c4c8bbbd36dce28b8d9e2344e7544f4e5fdc -Author: Peter Dunkley -Date: Sun Jul 8 02:06:05 2012 +0100 +commit ef8fae0e21ca09725c7f9c06384e0a4ce37c4c6e +Author: Daniel-Constantin Mierla +Date: Sun Mar 24 13:24:58 2013 +0100 - pkg/kamailio/fedora/17: Added @Base group to BoxGrinder appliances + enum: define the max size for numbers - - This groups is required to get the network to come up automatically for - Fedora 17 (it wasn't needed for Fedora 16 or CentOS 6). + - set it to 22 (previously hardcoded value was 17) + - easier to adjust and check for overlenght + - patch by Marcus Hunger -commit 7a3ce731e73d4b47646f2562e588886137cc8e85 -Merge: f64fda6 acb0ae8 -Author: Peter Dunkley -Date: Sat Jul 7 17:52:20 2012 +0100 +commit 61c706ef813520ce0ac6767e6be7ef6e52bd6b3a +Author: Daniel-Constantin Mierla +Date: Sun Mar 24 13:07:39 2013 +0100 - Merge branch 'master' into websocket + db_mysql: new module parameter - insert_delayed + + - if set to 1, then all INSERT API queries will be converted in INSERT + DELAYED (only DB API insert, not for raw queries) -commit acb0ae899ca7341f06fa4418c88f3b42d3460f49 -Author: Vicente Hernando -Date: Fri Jul 6 18:23:09 2012 +0200 +commit 9cbe03b3b42826c656b73a8793a8c2db9e7c3d29 +Author: Daniel-Constantin Mierla +Date: Sun Mar 24 12:50:50 2013 +0100 - ndb_redis: update README file + Makefile: exclude debian sym link when generating tarball -commit b237db588f4de8eb3e1f8bf321e010ce5f9cded3 -Author: Vicente Hernando -Date: Fri Jul 6 12:12:36 2012 -0400 +commit 7339d847adfd098c58426e96e5e3730ad580d543 +Author: Daniel-Constantin Mierla +Date: Sun Mar 24 12:38:45 2013 +0100 - ndb_redis: redisc_free_reply only frees redisReply structure. + msrp: fix compile warning of argument type in dbg message - - freeing whole redisc_reply_t structure causes a bug, so better remove only inner data. + - reported by Olle E. Johansson -commit f64fda60da151e2672e5eade99eee636ace25695 -Author: Peter Dunkley -Date: Thu Jul 5 22:58:24 2012 +0100 +commit bb76415ba7b623242a84b295728e61d307ab48fb +Author: Olle E. Johansson +Date: Sun Mar 24 11:45:43 2013 +0100 - pkg/kamailio/fedora/16: tidied up kamailio.spec + snmpstats Clear upp method-supported logic a bit and add "dialog-ng" for call statefullness -commit 380ab4c742c4060d7601e4b0491ebdb9eb0bb157 -Merge: a4db0a0 ef6da28 -Author: Peter Dunkley -Date: Thu Jul 5 22:55:44 2012 +0100 +commit 3580d7fbc3318a2eefaa62e60fcad363e953cccb +Author: Olle E. Johansson +Date: Sun Mar 24 11:38:27 2013 +0100 - Merge branch 'master' into websocket + snmpstats Add SNMP support for shared memory - Conflicts: - pkg/kamailio/fedora/16/kamailio.spec + This is just the first proof-of-concept addition, will add more of the + core variables for memory and TCP connections -commit ef6da283105197eda608cc3571cfc6772c343aa6 -Author: Henning Westerholt -Date: Thu Jul 5 23:39:51 2012 +0200 +commit 1826a5f4e3a981e30956da61e11ea551aae0b714 +Author: Daniel-Constantin Mierla +Date: Sat Mar 23 10:44:31 2013 +0100 - parser: remove old $Id$ docs header from subversion times, not usable anymore + rr: use sips to build RR headers of R-URI has sips + + - reported by Hugh James, FS#277 -commit fa441a9cdb28fb6336805f45aa65de13c9bcc139 -Author: Henning Westerholt -Date: Thu Jul 5 23:35:27 2012 +0200 +commit 4baf0389c57a7e705c5b01dd95da0e8978dc784a +Author: Ovidiu Sas +Date: Wed Mar 20 13:23:49 2013 -0400 - parser: add missing copyright statement to files, this part was contributed - in commit 3c736126b097137ec943b5931f867bc7e9d82e76 Author: Jamey Hicks, - jamey dot hicks at hp dot com, Date: Fri Dec 3 13:37:57 2004 +0000 + p_usrloc: commenting out unused db_timer_udomain() to get rid of compiler warnings -commit f358aa1b6983a7e1a17745658c4c7f8efa08966c -Author: Henning Westerholt -Date: Thu Jul 5 23:30:15 2012 +0200 +commit 67609608aa4306de9a34a28a3a31880ad0d17e8e +Author: Ovidiu Sas +Date: Wed Mar 20 13:16:27 2013 -0400 - parser: add missing copyright statement to files, this part was contributed from - Vaclav Kubart, vaclav dot kubart at iptel dot org in commit - 488624056c4651fd57fdffd1cbfdd2a07928fdab, Date: Wed Jun 21 13:33:01 2006 +0000 + kamailio/utils/sercmd: remove unused but set variable -commit 8361d5921557630576d6f542603f769bff420887 -Author: Henning Westerholt -Date: Thu Jul 5 23:26:45 2012 +0200 +commit b7a41ef47ad5d7fa90e577673cc2f38ab5ef2237 +Author: Ovidiu Sas +Date: Wed Mar 20 13:15:08 2013 -0400 - parser: add missing copyright statement to files, this part was contributed - in commit 3c736126b097137ec943b5931f867bc7e9d82e76 - Author: Jamey Hicks, jamey dot hicks at hp dot com, Date: Fri Dec 3 13:37:57 2004 +0000 + kamailio/utils/sercmd: remove unused but set variable -commit 6742b34bb385742aa80cd23d9dedbd366a243650 -Author: Henning Westerholt -Date: Thu Jul 5 23:14:42 2012 +0200 +commit ff94115921a08ba4da29baf2761db47bd0b7f8f5 +Author: Ovidiu Sas +Date: Wed Mar 20 13:13:27 2013 -0400 - parser: const-correctness for some module utility functions + kamailio/utils/sercmd: remove unused but set variable -commit a8e108ec68f6117c33669e35bccaf9b779858e25 -Author: Henning Westerholt -Date: Thu Jul 5 23:04:43 2012 +0200 +commit 387adace552c22eaf15a049b23694bcd79cea3a8 +Author: Ovidiu Sas +Date: Wed Mar 20 13:02:16 2013 -0400 - parser: some more const-correctness for the other functions in msg_parser.[c,h] + auth_diameter: remove unused but set variable -commit 8f0f3fb39695ba52938c42ea58519485299f2fa4 -Author: Henning Westerholt -Date: Thu Jul 5 22:40:45 2012 +0200 +commit 941c48ae6909994ae090c9d52766cd4dd5d4f938 +Author: Ovidiu Sas +Date: Wed Mar 20 13:00:27 2013 -0400 - parser: remove two blocks of old code, commented some years ago + auth_diameter: remove unused but set variable -commit f7b97e8a8329f23aef74be87f9ff18c3206e811a -Author: Henning Westerholt -Date: Thu Jul 5 22:35:22 2012 +0200 +commit 94e7ae77a6674d5e6a6d025a8e85f7b1c8733057 +Author: Carsten Bock +Date: Wed Mar 20 17:31:34 2013 +0100 - parser: make get_hdr_field(..) and necessary called functions const-correct + Updated example config for S-CSCF -commit 1c4e782f33f3c12747a4e8d9b9f67bf035007658 -Author: Peter Dunkley -Date: Thu Jul 5 21:16:43 2012 +0100 +commit 0d8cec6b6cd9027ef7313608db7e27667643fdf6 +Author: Anca Vamanu +Date: Wed Mar 20 15:39:12 2013 +0200 - pkg/kamailio/fedora/16: fixed typo in .spec + modules/drouting Improvement for do_routing in failure route + + Improvement for sort_order 2 : if the failure groups have repeating + gateways the module will take care internally not to try again a gateway + that was already tried. -commit a4db0a0f9577477a15f90e3e4674a941aa306730 -Merge: 6af91d1 2b392e4 -Author: Peter Dunkley -Date: Thu Jul 5 21:15:22 2012 +0100 +commit 6bb98ddd9ee4913c7a56ca5ffa57d9f74e7bc1b3 +Author: Lucian Balaceanu +Date: Wed Mar 20 14:27:30 2013 +0200 - Merge branch 'master' into websocket + modules/carrierroute Improvement for cr_route in failure route - Conflicts: - Makefile - pkg/kamailio/centos/6/kamailio-build.appl - pkg/kamailio/centos/6/kamailio.appl - pkg/kamailio/fedora/16/kamailio-build.appl - pkg/kamailio/fedora/16/kamailio.appl - pkg/kamailio/fedora/16/kamailio.spec - pkg/kamailio/fedora/17/kamailio-build.appl - pkg/kamailio/fedora/17/kamailio.appl + Small improvement in cr_route() function - when it is called from + failure_route it will take care not choose a previously choosen gateway. + + Added cr_reload sercmd. -commit 2b392e46054bfe5f6ab475a53ba3212d548f2c7f -Author: Peter Dunkley -Date: Thu Jul 5 20:41:36 2012 +0100 +commit a5946574cb9917f0a9a90ea547c9357f3f6477bd +Author: Hugh Waite +Date: Tue Mar 19 15:43:46 2013 +0000 - pkg/kamailio/(centos|fedora): Updated .spec and .appl files to build RPM for cdp and cdp_avp modules + core: Initial revision of branch_failure_route + + - New branch_failure_route defined + - cfg route is called but xlog() causes segfault -commit 6af91d1fb3839fd02cd2739d9c8c784497e1d6e9 -Author: Peter Dunkley -Date: Thu Jul 5 15:23:19 2012 +0100 +commit 4e0cf550f75835b3f97bda9bb7934389a54b1f18 +Author: Hugh Waite +Date: Tue Mar 19 15:41:55 2013 +0000 - modules/websocket: More tidy-up of example configuration file + modules/tm: Initial revision of branch_failure_route + + - New branch_failure_route defined + - cfg route is called but xlog() causes segfault -commit ac40abf75710281049ec424061d94cdc5f45aa10 -Author: Peter Dunkley -Date: Thu Jul 5 12:16:31 2012 +0100 +commit a0b01f77de163cf7ea9d71d5293a1bfa20d31fa6 +Author: Henning Westerholt +Date: Tue Mar 19 15:32:25 2013 +0100 - pkg/kamailio/(centos|fedora): Added git to the build appliances + rtpproxy: fix spelling error in docs, reported from Victor V. Kustov, coyote at bks dot tv -commit 324e8f36443f15af0ee5e7d96323c7e394202ea8 -Author: Peter Dunkley -Date: Thu Jul 5 12:08:40 2012 +0100 +commit c218ae122d5de9757bacc114a4bf4a374b7ea9c7 +Merge: ea3a03d 92bbfd0 +Author: Hugh Waite +Date: Tue Mar 19 09:38:17 2013 +0000 - modules/websocket: Tidied up example kamailio.cfg + Merge branch 'master' of ssh://git.sip-router.org/sip-router + + * 'master' of ssh://git.sip-router.org/sip-router: + modules/sca: seize appearance for SCA callee answering w/o Call-Info -commit 840d829149961d79fe9c84e59c14b8f72de4c44d -Author: Peter Dunkley -Date: Wed Jul 4 23:46:46 2012 +0100 +commit 92bbfd0b04306dd53e8eae444f46de768239875b +Author: Andrew Mortensen +Date: Mon Mar 18 15:03:24 2013 -0400 - pkg/kamailio/(centos|fedora): Added instructions on using BoxGrinder appliances to build Kamailio RPMs + modules/sca: seize appearance for SCA callee answering w/o Call-Info + + - Yealink firmware 7.70.0.130 doesn't include a Call-Info header with + 200 OK response to INVITE. -commit 2685b26f7587172ad95f0e1e21114ebd483e6e5f -Author: Henning Westerholt -Date: Wed Jul 4 22:24:33 2012 +0200 +commit ea3a03de4f1a3ba163302ab2d5ee140bab49a85c +Merge: 3a45d92 fac2d49 +Author: Hugh Waite +Date: Mon Mar 18 17:24:03 2013 +0000 - remove one redundant inclusion of casandra module in excluded modules + Merge branch 'master' of ssh://git.sip-router.org/sip-router + + * 'master' of ssh://git.sip-router.org/sip-router: + modules/sca: cast logging of time_t to long int to quiet warnings. -commit 754853be86112f52f2b7f1d4ea0a0317d6c1e324 -Author: Henning Westerholt -Date: Wed Jul 4 22:22:26 2012 +0200 +commit fac2d49b667c5c18fce01387d9c02afcce8ec55f +Author: Andrew Mortensen +Date: Mon Mar 18 10:32:45 2013 -0400 - add cdp module to excluded modules, as its depends on libxml + modules/sca: cast logging of time_t to long int to quiet warnings. + + - Report from Olle Johansson. Latent Y2K38 problem, but that needs a + project-wide solution. -commit 1792586578d9680d45d52af37ddf2786b8b30ca8 -Merge: 86362e5 1382c30 -Author: Peter Dunkley -Date: Wed Jul 4 18:08:02 2012 +0100 +commit 3a45d925c7f06072aef9edba3b0ef8c17e12c6e2 +Merge: dd0b43e 07ddc78 +Author: Hugh Waite +Date: Mon Mar 18 11:57:17 2013 +0000 - Merge branch 'master' into websocket + Merge branch 'master' of ssh://git.sip-router.org/sip-router - * master: - modules/lcr: Fixed to/from_gw tests when proto parameter is 0 (ANY) - cdp_avp: added README file - CDP: Fixed README - CDP: A few fixes to docs and location of image files - cleaner organisation - new modules: CDP (C Diameter Peer) and CDP_AVP - These modules were originally written by Fraunhofer and have been ported to Kamailio, with some minor additions and improvements. Examples on using the modules to come shortly - diameter_rx, diameter_ro, etc + * 'master' of ssh://git.sip-router.org/sip-router: + modules/app_java: refactoring, changed parameter 'force_kam_cmd_exec' to 'force_cmd_exec', updated docs - moved ThrowNewException from utils to java_support - removed macro FORCE_CAST_O2P - removed get_struct_sip_msg - renamed parameter 'force_kam_cmd_exec' to 'force_cmd_exec' - updated docs caused parameter change + modules/app_java: README to README-draft, added actual README + modules/app_java: moved README, removed other formats except xml from doc directory. + modules/app_java: added documentation, removed *.class,*.jar + modules/sca: fix -Waddress warnings caused by static strs in SCA_STR_EMPTY + modules/sca: process BYE without Call-Info from shared line. + modules/outbound: Warn during mod_init() if STUN is not built or enabled + modules/outbound: free shared memory for flow-token key during shutdown + sca: reduce log level to DBG when replacing RURI when retrieving held call. + modules/outbound: Fixed bug in outbound mod_init + modules/outbound: The flow-token key is now automatically generated + +commit 07ddc78df819edff18cc339cb234c22d140bd3a4 +Author: Konstantin Mosesov +Date: Mon Mar 18 02:04:17 2013 +0200 -commit 86362e52c17858bfb81bda33cc6ae46e0f75517f -Author: Peter Dunkley -Date: Wed Jul 4 16:15:29 2012 +0100 + modules/app_java: refactoring, changed parameter 'force_kam_cmd_exec' to 'force_cmd_exec', updated docs + - moved ThrowNewException from utils to java_support + - removed macro FORCE_CAST_O2P + - removed get_struct_sip_msg + - renamed parameter 'force_kam_cmd_exec' to 'force_cmd_exec' + - updated docs caused parameter change + +commit 87a21516e1c75d11513df901567183b0146337ab +Author: Konstantin Mosesov +Date: Mon Mar 18 01:45:49 2013 +0200 - modules/websocket: Fixes to WS and WSS message sending + modules/app_java: README to README-draft, added actual README -commit d1d9d63984fed14fc2912c31e7abc30e0500bbb8 -Author: Peter Dunkley -Date: Wed Jul 4 16:13:40 2012 +0100 +commit a01d84bf61ade1b0362c16a41acec262a41b919a +Author: Konstantin Mosesov +Date: Mon Mar 18 01:20:29 2013 +0200 - modules_k/pv: Added missing break;s + modules/app_java: moved README, removed other formats except xml from doc directory. -commit 1ccd1f68cff759a2a54b8f441ca8c53647f845a4 -Author: Peter Dunkley -Date: Wed Jul 4 16:12:53 2012 +0100 +commit fc425b1c36a335af1ee5ca183cca72b6a472843f +Author: Konstantin Mosesov +Date: Sun Mar 17 01:16:20 2013 +0200 - core: Fixes for WSS (secure WebSocket) transport and Via:s + modules/app_java: added documentation, removed *.class,*.jar -commit 1382c30da7ffd8831479affafde4d8e038a41240 -Author: Juha Heinanen -Date: Wed Jul 4 17:15:43 2012 +0300 +commit d80b4afc7d0dddebd9ffe06e0174a79871daf822 +Author: Andrew Mortensen +Date: Sat Mar 16 16:35:29 2013 -0400 + + modules/sca: fix -Waddress warnings caused by static strs in SCA_STR_EMPTY + + - Tested on Ubunut 12.04 LTS. Report from Konstantin Mosesov. + +commit 287cccf2af17e5f2f8fe09c41025b4d27bb4fda9 +Author: Andrew Mortensen +Date: Fri Mar 15 17:01:23 2013 -0400 - modules/lcr: Fixed to/from_gw tests when proto parameter is 0 (ANY) + modules/sca: process BYE without Call-Info from shared line. - - Also, updated README regarding handling of NULL value in lcr_gw - transport column. + - Ciscos & Aastras don't seem include Call-Info header in BYE. Look up + dialog by tags and release associated appearance-index. -commit c39580925bebdb6506e106295119fb72f861e76f +commit 85b26219f9e4c3c8c7c990a4897d40645b4ad6e7 Author: Peter Dunkley -Date: Tue Jul 3 23:59:22 2012 +0100 +Date: Fri Mar 15 15:04:07 2013 +0000 - modules/websocket and pkg/kamailio/fedora: Added websocket module documentation + modules/outbound: Warn during mod_init() if STUN is not built or enabled + + - STUN is required for outbound with UDP. Don't want to stop Kamailio starting + when the outbound module is loaded and STUN is not available - but a warning + seems appropriate. -commit 6d751215160cddb96dd16b33bd668d573a61b3d8 +commit 9d9d51438acd1d534f14ecbc8eb0030b45333177 Author: Peter Dunkley -Date: Tue Jul 3 16:57:50 2012 +0100 +Date: Fri Mar 15 14:54:41 2013 +0000 + + modules/outbound: free shared memory for flow-token key during shutdown + +commit a51bc822f70f4185b55455456dc147205cbbbdc7 +Author: Andrew Mortensen +Date: Fri Mar 15 10:22:26 2013 -0400 - pkg/kamailio/(centos|fedora): Tweaked .spec and .appl files to add WebSocket support + sca: reduce log level to DBG when replacing RURI when retrieving held call. -commit b7e7535289dfab413cbc1333ac545f31f3c992c2 +commit c924645fcfb706fc20ed715a00531d785f99cbde Author: Peter Dunkley -Date: Tue Jul 3 16:57:00 2012 +0100 +Date: Fri Mar 15 14:07:04 2013 +0000 - core: Added websocket module to Makefile + modules/outbound: Fixed bug in outbound mod_init -commit eff18c9ce6de48e6a2f821148cbce586a088512c +commit f474e85616f6f98a6ac193c7425f6c85af8efa20 Author: Peter Dunkley -Date: Tue Jul 3 16:56:11 2012 +0100 +Date: Fri Mar 15 12:14:31 2013 +0000 + + modules/outbound: The flow-token key is now automatically generated + + - Uses OpenSSL RAND_bytes() to select 20 cryptographically strong pseudo-random + bytes for the key. + - Flow-token key can no longer be manually set. - modules/websocket: Updated example kamailio.cfg +commit dd0b43e2ac06ed901f959d9e5a90312d865dedfd +Merge: 1c27645 3445718 +Author: Hugh Waite +Date: Fri Mar 15 12:08:16 2013 +0000 -commit 12d1977f97023a279d8f72c02c80e0f9dc902047 -Author: Jason Penton -Date: Tue Jul 3 12:50:10 2012 +0200 + Merge branch 'master' of ssh://git.sip-router.org/sip-router + + * 'master' of ssh://git.sip-router.org/sip-router: (40 commits) + modules/registrar: fixed lock usage in unregister() + modules/pv: can only retrieve $ruid for a request + ims_icscf: fix include list for BSD + modules/pv: added new $ruid and $branch(ruid) PVs + modules/xprint: updated use of get_branch() and next_branch() to cope with additional argument + modules/tm: updated use of get_branch() and next_branch() to cope with additional argument + modules/pv: updated use of get_branch() and next_branch() to cope with additional argument + modules/permissions: updated use of get_branch() and next_branch() to cope with additional argument + modules/domain: updated use of get_branch() and next_branch() to cope with additional argument + core: updated use of get_branch() and next_branch() to cope with additional argument + core: updated get_branch() and next_branch() to return ruid (if set) + modules/tm: updated t_serial to store/retrieve ruid + modules/registrar: tidied up unregister() function + modules/ims_isc: updated to include new argument to append_branch() + modules/ims_icscf: updated to include new argument to append_branch() + modules/exec: updated to include new argument to append_branch() + modules/enum: updated to include new argument to append_branch() + modules/dialplan: updated to include new argument to append_branch() + modules/cpl-c: updated to include new argument to append_branch() + modules/corex: updated to include new argument to append_branch() + ... - cdp_avp: added README file +commit 3445718155b324c3c9e4eac0d6137b6d8dca8cbf +Merge: e930f94 d6eac37 +Author: Peter Dunkley +Date: Fri Mar 15 11:28:25 2013 +0000 + + Merge branch 'outbound' + + * outbound: (46 commits) + modules/registrar: fixed lock usage in unregister() + modules/pv: can only retrieve $ruid for a request + modules/pv: added new $ruid and $branch(ruid) PVs + modules/xprint: updated use of get_branch() and next_branch() to cope with additional argument + modules/tm: updated use of get_branch() and next_branch() to cope with additional argument + modules/pv: updated use of get_branch() and next_branch() to cope with additional argument + modules/permissions: updated use of get_branch() and next_branch() to cope with additional argument + modules/domain: updated use of get_branch() and next_branch() to cope with additional argument + core: updated use of get_branch() and next_branch() to cope with additional argument + core: updated get_branch() and next_branch() to return ruid (if set) + modules/tm: updated t_serial to store/retrieve ruid + modules/registrar: tidied up unregister() function + modules/ims_isc: updated to include new argument to append_branch() + modules/ims_icscf: updated to include new argument to append_branch() + modules/exec: updated to include new argument to append_branch() + modules/enum: updated to include new argument to append_branch() + modules/dialplan: updated to include new argument to append_branch() + modules/cpl-c: updated to include new argument to append_branch() + modules/corex: updated to include new argument to append_branch() + modules/avpops: updated to include new argument to append_branch() + ... -commit 85cd6662b7f5e0fee477550088cc4ca546193b36 -Author: Jason Penton -Date: Tue Jul 3 12:40:43 2012 +0200 +commit d6eac37fb61a79e7d99b749aa20ff903523ff2d0 +Author: Peter Dunkley +Date: Fri Mar 15 11:15:16 2013 +0000 - CDP: Fixed README + modules/registrar: fixed lock usage in unregister() -commit a4a1e5d6b0f5aab70d0395adfc5e10ee8a277b1e -Author: Jason Penton -Date: Tue Jul 3 12:14:21 2012 +0200 +commit 86440c81639e1aff66e7449a121ac8ae6d43197a +Author: Peter Dunkley +Date: Fri Mar 15 11:14:06 2013 +0000 - CDP: A few fixes to docs and location of image files - cleaner organisation + modules/pv: can only retrieve $ruid for a request + + - cache it in an avp for the request if you need it later -commit 3c085d120d49abec97019103f4c210ebdcaf1ed6 -Author: Jason Penton -Date: Tue Jul 3 11:24:36 2012 +0200 +commit e930f94b71d2e5c40fa44d78738ce5efb747c5b1 +Author: Daniel-Constantin Mierla +Date: Fri Mar 15 09:03:26 2013 +0100 - new modules: CDP (C Diameter Peer) and CDP_AVP - - These modules were originally written by Fraunhofer and have been - ported to Kamailio, with some minor additions and improvements. Examples - on using the modules to come shortly - diameter_rx, diameter_ro, etc + ims_icscf: fix include list for BSD + + - patch by Victor V. Kustov -commit b66cd6508d9bff106a88fbbd1c649e492b6d742c +commit 44e43d541baf52a327485d8627de3b95961bdaf9 +Merge: b53624e 81b5473 Author: Peter Dunkley -Date: Sun Jul 1 22:21:38 2012 +0100 +Date: Fri Mar 15 00:02:38 2013 +0000 - modules/websockets: Added some extra debug/diagnostics + Merge branch 'master' into outbound + + * master: + sca: fix private hold handling + xhttp_pi: escape special characters -commit ba0ff3123a223365c07a0d2ffa85d2d150f86bce +commit b53624e388c283ae1294bf595af123c3b77f6b93 Author: Peter Dunkley -Date: Sun Jul 1 22:20:36 2012 +0100 +Date: Thu Mar 14 23:55:14 2013 +0000 - core: Updated Via and Record-Route generation for WebSockets + modules/pv: added new $ruid and $branch(ruid) PVs -commit 3d4a77d86a879d55f8b39bc2a86bc2f51d0258f9 +commit 0137a2a91d29cbd80829b79dcb4cfd9659b7e9be Author: Peter Dunkley -Date: Sat Jun 30 22:53:00 2012 +0100 +Date: Thu Mar 14 23:35:02 2013 +0000 - core: Added more PROTO_WS and PROTO_WSS checks + modules/xprint: updated use of get_branch() and next_branch() to cope with additional argument -commit 56767ad8cb445f8475c6372c964c4d57fb40a500 +commit 0860555382575943b5f704b53a48e63db90754d8 Author: Peter Dunkley -Date: Sat Jun 30 22:52:26 2012 +0100 +Date: Thu Mar 14 23:34:48 2013 +0000 - modules/websocket: Removed SIPp script and HTML file from example directory + modules/tm: updated use of get_branch() and next_branch() to cope with additional argument -commit fd2a237fbac519ad709c5f169cbc3f29b125409f -Merge: b66e815 8c789cd +commit a16fb22d12696f707839f7b97da471d02121e228 Author: Peter Dunkley -Date: Sat Jun 30 21:13:58 2012 +0100 +Date: Thu Mar 14 23:34:34 2013 +0000 - Merge branch 'master' into websocket - - Conflicts: - pkg/kamailio/fedora/16/kamailio.spec + modules/pv: updated use of get_branch() and next_branch() to cope with additional argument -commit 8c789cdeb969af921e74a4ece194ccda5c297e6a +commit cb68cab9ce13142592590042283ca1aa3f85ac84 Author: Peter Dunkley -Date: Sat Jun 30 21:05:40 2012 +0100 +Date: Thu Mar 14 23:34:18 2013 +0000 - pkg/kamailio/fedora: Updated some packaging related stuff - - - Updated the rel in the .spec to dev1 - - Replaced local %{_sharedir} macro in .spec with standard %{_datadir} macro - - Tweak/update to Fedora 16 test appliance - - Added BoxGrinder appliances for Fedora 17 + modules/permissions: updated use of get_branch() and next_branch() to cope with additional argument -commit b66e815ebe9ee9a5035abaf08c6e97a9c3281dcc +commit f63b55b96e9a2900cf73183fdaa41992c3c31dc5 Author: Peter Dunkley -Date: Sat Jun 30 20:36:00 2012 +0100 +Date: Thu Mar 14 23:34:01 2013 +0000 - modules/websocket: Corrected output of ws.dump MI command + modules/domain: updated use of get_branch() and next_branch() to cope with additional argument -commit 6fe3e10b4a17c166f642500748392a9bcb72cabd +commit 55e069d5c169d9022582c51a9bce82adc136c29c Author: Peter Dunkley -Date: Sat Jun 30 20:35:10 2012 +0100 +Date: Thu Mar 14 23:33:23 2013 +0000 - core: Fixed segmentation fault - - - Tiny window for this... but I hit it when Google Chrome crashed during - a WebSocket session + core: updated use of get_branch() and next_branch() to cope with additional argument -commit 5456e4e90c6330877e0d25d14fba143f2f98f8c6 +commit 8e6c690ea3cdfd9dd1349f2ce144d7dfd432b50d Author: Peter Dunkley -Date: Sat Jun 30 00:46:20 2012 +0100 +Date: Thu Mar 14 23:32:42 2013 +0000 - modules/websocket: Updated connection reuse and closing flags for WebSocket handshake. - - - Updated the sample kamailio.cfg to match too. + core: updated get_branch() and next_branch() to return ruid (if set) -commit dc7fa93f2e60efd2f7d428762590fa313e3fe91f +commit 87e624ffe1e66104b04d34bd2102f458f5785bf0 Author: Peter Dunkley -Date: Sat Jun 30 00:02:29 2012 +0100 +Date: Thu Mar 14 23:16:27 2013 +0000 - modules/websocket: improved sample kamailio.cfg for WebSockets + modules/tm: updated t_serial to store/retrieve ruid -commit 1e2f18da2f2c8791f804b33e96dea043f18642bf +commit dd90d9685cb66843ff48c55b0100de9f98bfdf52 Author: Peter Dunkley -Date: Sat Jun 30 00:01:07 2012 +0100 +Date: Thu Mar 14 23:05:32 2013 +0000 - everything: shotgun attempt to put PROTO_WS and PROTO_WSS across core and in modules I use - - - Bound to have missed something and lots of testing required. + modules/registrar: tidied up unregister() function -commit 9349870abc5eb0688cf0fd50c0fa54098158fa79 +commit b49ea76814d2933bb9bc58f82230c4569be171af Author: Peter Dunkley -Date: Fri Jun 29 23:11:15 2012 +0100 +Date: Thu Mar 14 22:58:44 2013 +0000 - core: rolled back changes to receive.c - - - Not actually needed because the recent change to ws_frame.c covers it all - (I think) + modules/ims_isc: updated to include new argument to append_branch() -commit 636a6dabd14e08f2255e52a58353822642deda10 +commit 01f4a316eeb2ed9b7110cb5ee8c96c4923b9acaa Author: Peter Dunkley -Date: Fri Jun 29 23:08:19 2012 +0100 +Date: Thu Mar 14 22:58:24 2013 +0000 - modules/websocket: Make sure that all WebSocket messages are sent on connections that already exist - - - This is the same as using set_forward_no_connect() and - set_reply_no_connect() in kamailio.cfg. But this means it will - always happen automatically for WebSocket messages. - - This is important as a WebSocket server cannot create connections - - so we always have to use one that already exists. + modules/ims_icscf: updated to include new argument to append_branch() -commit 242920ec30af3a954f8a193d417c671a29d383b4 +commit 4ed5c06088fc87a32ecb59a291f83e947aee7070 Author: Peter Dunkley -Date: Fri Jun 29 23:05:48 2012 +0100 +Date: Thu Mar 14 22:58:04 2013 +0000 - core: Make sure that responses to requests received on a WebSocket are sent on existing connections - - - WebSocket servers cannot create connections to WebSocket clients - so - this setting is essential. - - It does exactly the same thing as using set_reply_no_connect() in - kamailio.cfg - but this way it is always on (as it must be) for - WebSockets. + modules/exec: updated to include new argument to append_branch() -commit 915894b15d9096388a0136d2d2bdf48ef65b4c4a +commit 08b7df7556f6677ed6049825cf20155162269fd4 Author: Peter Dunkley -Date: Fri Jun 29 23:03:15 2012 +0100 +Date: Thu Mar 14 22:57:49 2013 +0000 - modules_k/nathelper: Added nat_uac_test() check for WebSockets - - - At the moment (and until Kamailio and _all_ WebSocket clients support - outbound) we want to treat WebSocket UAs as behind NATs (even when they - are not). - - This is so that the aliasing (which is good for TCP/TLS connection reuse - as well as NAT traversal) can be used to make sure messages to WebSocket - UAs are routed correctly. + modules/enum: updated to include new argument to append_branch() -commit 353ad95af22d7a4c7d20aebbed291fef085867ba +commit dab406ed0301bfea5a9e6234119082e445dd5806 Author: Peter Dunkley -Date: Fri Jun 29 17:47:22 2012 +0100 +Date: Thu Mar 14 22:57:30 2013 +0000 - modules/websockets: Changes WS to be a protocol in its own right instead of a flag on TCP/TLS connections + modules/dialplan: updated to include new argument to append_branch() -commit 8c4d2e7379e783ac22b63266c3a63a2579100d87 +commit cb10662ae458b799d9746948aba59fb513af318d Author: Peter Dunkley -Date: Fri Jun 29 17:47:06 2012 +0100 +Date: Thu Mar 14 22:57:06 2013 +0000 - modules_k/nathelper: Added PROTO_WS support + modules/cpl-c: updated to include new argument to append_branch() -commit d08c4dc3341d2f2ac497a81fed9aef522ce16ed9 +commit 4d3639a674af7ae8102e3ae3e94e84674d9848ae Author: Peter Dunkley -Date: Fri Jun 29 17:46:36 2012 +0100 +Date: Thu Mar 14 22:56:51 2013 +0000 - modules/tm: Added PROTO_WS support + modules/corex: updated to include new argument to append_branch() -commit 8393efff31843b04b45e6bf728469b32625e86b0 +commit bc8fd8b3b458bf088a83e6c6f17bd21743aaf8e9 Author: Peter Dunkley -Date: Fri Jun 29 17:44:15 2012 +0100 +Date: Thu Mar 14 22:56:27 2013 +0000 - core: Changed WS from being a flag on a TCP/TLS connection to a protocol in its own right - - - Also added ;transport=ws parameter parsing for URIs + modules/avpops: updated to include new argument to append_branch() -commit 9d720b83c9dd27e927627132ec052b15efeba518 -Author: Daniel-Constantin Mierla -Date: Fri Jun 29 16:06:42 2012 +0200 +commit 821d92298d22c6fa2d17e85b3c0f021cd0dbeb8e +Author: Peter Dunkley +Date: Thu Mar 14 22:55:46 2013 +0000 - kamailio.cfg: use add_contact_alias()/handle_uri_alias() for NATed calls + modules/alias_db: updated to include new argument to append_branch() -commit 6cfc7ccda69803e8767cfd125a263e9fcafb895d -Author: Daniel-Constantin Mierla -Date: Fri Jun 29 12:34:08 2012 +0200 +commit 4fb8d035a952e1f719e60470e7bea2e3877331d5 +Author: Peter Dunkley +Date: Thu Mar 14 22:46:51 2013 +0000 - Makefile.defs: version set to 3.4.0-dev1 + core: updated to include new argument for append_branch() -commit bd346c4d541a87b2fed17261eaf6f10b29443574 -Author: Daniel-Constantin Mierla -Date: Fri Jun 29 12:28:07 2012 +0200 +commit ac7b94dbd991ba5c25d9afece2b6172b829f514b +Author: Peter Dunkley +Date: Thu Mar 14 22:46:08 2013 +0000 - kamailio.cfg: set version to 3.4 in the top comments + modules/registrar: fill in ruid in msg and branch structures during lookup() -commit 6da3e961d7f0d302b8f275aec07abfd411bcf875 -Author: Daniel-Constantin Mierla -Date: Fri Jun 29 12:25:24 2012 +0200 +commit e3ba8f38f7bd008f72705fb6acd082e65b5a140e +Author: Peter Dunkley +Date: Thu Mar 14 22:42:16 2013 +0000 - tm: added t_is_set("target") function - - - returns true if the attribute specified by the target parameter is set - for current transaction (e.g., failure_route, branch_route, - onreply_route) - - on_negative was replaced with on_failure internally to be consistent - with config file naming + core: added ruid to msg and branch structures -commit 8c6f700b4213552789fa97c4edf0ff4bb4b61f90 +commit 0e634d5828ec7e2c9418089007cdac0318e4aced Author: Peter Dunkley -Date: Thu Jun 28 17:57:44 2012 +0100 +Date: Thu Mar 14 22:00:54 2013 +0000 - core: added support for WS keyword for use in conditionals with proto and snd_proto + modules/registrar: fixed typo -commit d07a57f6849e94764302939541157c71d73eae6a +commit f892c3c87b181c4b3d32b080f2dbb8ba0b88807f Author: Peter Dunkley -Date: Thu Jun 28 17:55:53 2012 +0100 +Date: Thu Mar 14 21:57:59 2013 +0000 - core: fixed an issue where big websocket requests (single WS frame but across multiple packets) weren't handled + parser: fixed typo -commit 3269116331b5161cd08aba390a0e3804dafdf668 +commit 98c0aa3930031e681f0211bc7f07e208c2288703 Author: Peter Dunkley -Date: Thu Jun 28 17:54:45 2012 +0100 +Date: Thu Mar 14 21:55:34 2013 +0000 - core: Fix to msg_send() so that requests destined for a WebSocket connection go through the websocket module - - - responses already worked + parser: updated path for some of the includes in files moved from lib/kcore -commit d6f89300f70a8b511a1454eb1742561547b69a52 +commit 19ff7249507118ddfcf34e8dd02407ae3663314f Author: Peter Dunkley -Date: Thu Jun 28 17:53:55 2012 +0100 +Date: Thu Mar 14 21:52:33 2013 +0000 - modules/websockets: tidied up a bit of the code + modules/sst: updated path to parse_supported.h -commit f030b2f274b69526f256e66098de72a074000ed1 -Author: Daniel-Constantin Mierla -Date: Thu Jun 28 16:24:47 2012 +0200 +commit 59189c400f807deb92b5ee897ea2e19cc086c500 +Author: Peter Dunkley +Date: Thu Mar 14 21:52:18 2013 +0000 - p_usrloc: added missing usrloc API members - - - they are set to NULL to get a clean crash, they have to be implemented - - the missing API members are the functions introduced in 3.3 for - handling SIP GRUU and Outbound extensions - - a proper fix to follow - - reported by Dan Bogos + modules/rls: updated path to parse_supported.h -commit ccfc9a41d453b05d25396a42aee641a2558e478c -Author: Jon Bonilla -Date: Thu Jun 28 02:13:54 2012 +0200 +commit 1a920fc0a69916670ad2cd04e85926546e69a2d5 +Author: Peter Dunkley +Date: Thu Mar 14 21:51:44 2013 +0000 - pkg/deb Fix lsb init file - - We depend on $remote_fs as required_[start|stop] + modules/registrar: updated path to parse_(require|supported).h -commit 79e99ae5cbe7016f22454faf4f9e9f5a463a4f7d -Author: Jon Bonilla -Date: Thu Jun 28 02:01:11 2012 +0200 +commit 0497e50dfe195e3b633741f2fcb476ff234285f4 +Author: Peter Dunkley +Date: Thu Mar 14 21:51:11 2013 +0000 - pkg/deb Build kamailio-dbg package + modules/ims_registrar_scscf: updated path to parse_supported.h -commit 8d649d042d43c4dc29b2cb747ba87c1f75590713 -Author: Anca Vamanu -Date: Wed Jun 27 18:34:55 2012 +0300 +commit 96347fb3b2d747712c52579abec081b8eec545d1 +Author: Peter Dunkley +Date: Thu Mar 14 21:50:20 2013 +0000 - modules_k/presence_xml Xcap auth reason when user deleted from list - - The reason in Subscription-Status header in Notify when a user is - deleted from the contact list can be decided by the admin by setting - presence_xml module parameter xcapauth_usedel_reason. Default value is - "probation". - (cherry picked from commit 3abf967f61a1bd95c28d4e8a929a8bd5df00671d) + lib/kcore, parser: moved parse_(options_tags|require|supported) to parser -commit 3a2e929c63c656fe2db78e746546af05c66740ea -Author: Daniel-Constantin Mierla -Date: Mon Jun 25 18:36:18 2012 +0200 +commit 81b5473f5a191a5aa81295acf0d96a22160f7f31 +Author: Andrew Mortensen +Date: Fri Mar 1 16:33:59 2013 -0500 - dialog(k): proper unlock of profile for mi list command + sca: fix private hold handling - - the profile was unlocked in a wrong place, before finishing listing - the its content and could cause a race in accessing it - - reported by Ricardo Martinez + - private hold call-info was being ignored in hold reINVITEs, causing + inaccurate "active" notifications to go to subscribers. -commit 2664cb9aa8ffd5d26ef6a0841318ccbcdefbf69b -Author: Daniel-Constantin Mierla -Date: Mon Jun 25 10:36:31 2012 +0200 +commit a00662049f2f245f53dfb23a07da9229e2ebe159 +Author: Ovidiu Sas +Date: Thu Mar 14 12:16:32 2013 -0400 - dispatcher(k): allow set id 0 for OPTIONS callback - - - set id is provided in param pointer address, 0 being equivalent to - NULL - - reported by Avi Brender + xhttp_pi: escape special characters -commit c270ac0e54ada9cc2599b21f8c87b5a0704093af +commit 6b4d87a4321f8edefbf93b1323502d4bab965290 Author: Peter Dunkley -Date: Sun Jun 24 00:40:24 2012 +0100 +Date: Thu Mar 14 14:19:31 2013 +0000 - modules/websocket: improvements to ws.dump MI command + modules/registrar: Updated documentation for outbound related modparams -commit 6dfd1476bee55dd6287652b1f9ee9a8cf4d809f0 +commit 2a4300284364c4be42b1e4262966d17e5a546799 Author: Peter Dunkley -Date: Sat Jun 23 22:13:35 2012 +0100 +Date: Thu Mar 14 14:19:05 2013 +0000 - pkg/kamailio/fedora: added WebSocket module to .spec file + modules/register: Fixed mod init check of flow_timer modparam -commit 4611d052b9e73f9b301a043da632e28b7ec65bf4 +commit c9f8bfdf7a124c9136b28cf78936ac14cec511b9 Author: Peter Dunkley -Date: Sat Jun 23 21:57:37 2012 +0100 +Date: Thu Mar 14 12:25:52 2013 +0000 - modules/websocket: now using libunistring:u8_check() to work out whether to send text or binary websocket frames - - - There is no straight-forward (or practical) way to be sure that a SIP request - only contains UTF-8 characters and therefore should be sent as text instead - of binary. However, you can sometimes tell whether the request definitely - isn't UTF-8 by checking for invalid byte sequences - and when it is definitely - not UTF-8 frames _MUST_ be sent as binary. + modules/registrar: fixes to checking of Require: and Supported: headers for outbound -commit 7cd27114725b49864b6be812658aa00003c54e99 -Author: Peter Dunkley -Date: Sat Jun 23 21:57:09 2012 +0100 +commit 1c276452b2880cc47994f17460403c58e0ef5c87 +Author: Hugh Waite +Date: Thu Mar 14 11:57:55 2013 +0000 - parser: Update Via parsing state-machine to support WS and WSS + documentation: Fix Content-Length typos + + - Fix typos in textops/textopsx documenation + - Regenerate cfg list documentation -commit 64406b209d8b4fd9ed127a6b4b965e3c1863c3d2 -Author: Peter Dunkley -Date: Sat Jun 23 21:55:34 2012 +0100 +commit 90cbe54c01fe9513a0041f19e8a73f3ff7dccaf6 +Author: Hugh Waite +Date: Thu Mar 14 10:41:24 2013 +0000 - modules/websocket: updated example configuration and test scripts + core: Fix Content-Length typos - - Added options_rx.xml SIPp script - - kamailio.cfg routes OPTIONS to SIPp - - websocket_test.html now using WSS (WS over TLS) + One typo in the HTTP11CONTINUE response headers + One in the tcp option help string for 'accept_no_cl' + Two in code comments -commit 11a2ad18ea0b263316fe8728aa44b892d7c4fe86 +commit 9e3c6550c02efc1181aba85fc6b7e871fb632da5 +Merge: 9a4afee 289bc23 Author: Peter Dunkley -Date: Sat Jun 23 21:52:15 2012 +0100 +Date: Thu Mar 14 10:10:49 2013 +0000 - core: fixed segmentation fault I had added to forward.h + Merge branch 'master' into outbound + + * master: + Makefile.groups: Updated package group for app_java. -commit 1f139814262a4c5979c5301812f81304d885e92c -Author: Peter Dunkley -Date: Sat Jun 23 19:10:03 2012 +0100 +commit 289bc2399c09f5f449fd835f9a046597e4f2b38f +Author: Konstantin Mosesov +Date: Wed Mar 13 22:29:20 2013 +0200 - core: added events and data-structures so that Kamailio core can transmit through the WebSocket module + Makefile.groups: Updated package group for app_java. -commit 50d20ecde5503d11358b86cbd23456e2a302c9be +commit 9a4afeecf8d1166533fefd4df2afc850a44c9ec3 +Merge: 71c197d 7d46ff0e Author: Peter Dunkley -Date: Sat Jun 23 19:08:38 2012 +0100 +Date: Wed Mar 13 16:57:11 2013 +0000 - modules/websocket: added generic transmit functions to WebSocket module so Kamailio core can send WebSocket frames + Merge branch 'master' into outbound + + * master: (68 commits) + modules/permissions: DNS domain names in address table + modules/app_java - New module app_java: Java Native Interface support. + nathelper: Decrease ambiguity by renaming sipping_disable_bflag to natping_disable_bflag + registrar: New set_q_override function + parser,modules/pv,modules/sipcapture: Improved parsing of P-Asserted/Preferred-Identity headers + Makefile.dirs: updated the list with module directories + NEWS Update with reference to Wiki + INSTALL update for release + README - last minute small edits + tm: set proper buffer len when Max-Forward header is not added + core: try to detect ipv6 addresses only when USE_IPV6 is used + pkg: deb specs updated for v4.0.0 + INSTALL: updates for v4.0.0 + ChangeLog_k: removed obsolete file + ChangeLog: updated content to prepare for v4.0.0 + sca: fix regression dropping Expires header from SUBSCRIBE replies. + sca: move SUBSCRIBE response handling to sca_subscription_reply + sca: reject out-of-dialog attempts to seize privately held call. + sca: make sca_reply a generic reply function. + pkg/kamailio/(centos|fedora): added docbook2X build requirement + ... + + Conflicts: + modules/registrar/save.h -commit 5c4133c2ba036776a1ea3c1f73c51a7d9d518fbe -Author: Peter Dunkley -Date: Sat Jun 23 17:37:25 2012 +0100 +commit 7d46ff0e5487d9e925c78a57fd7ee036858f0c15 +Author: avamanu +Date: Wed Mar 13 17:49:21 2013 +0200 - modules/websocket: Fixed a couple of connection issues and now dropping received SIP requests into receive_msg() + modules/permissions: DNS domain names in address table - - SIP parser not updated for WS and WSS yet + Added the possibility to check also against DNS domain names with + allow_address() function. + Now in the address table one group can have exact IPs, subnet IPs + and DNS domain names. -commit ad7ea60ff5e8e2a8d5b9ddeaca99a2bab7941e70 -Author: Peter Dunkley -Date: Sat Jun 23 16:07:12 2012 +0100 +commit c5f47af145e19f11fafc3ca570e994185f33542d +Author: Konstantin Mosesov +Date: Wed Mar 13 17:53:54 2013 +0200 - modules/websocket: updated example/test kamailio.cfg to support TLS - - - Basic WebSocket working over TLS + modules/app_java - New module app_java: Java Native Interface support. -commit 5d8239f5da2176938e0c789b9b2caa493725daa1 -Author: Peter Dunkley -Date: Sat Jun 23 15:03:48 2012 +0100 +commit 93b2b3ba7951bc84a208fb296b3c7b4e52516389 +Author: Richard Fuchs +Date: Tue Mar 12 09:43:57 2013 -0400 - modules/websocket: finished off WebSocket connection management + nathelper: Decrease ambiguity by renaming sipping_disable_bflag to natping_disable_bflag -commit 3a64dffb99cfe098f90fdd5c79adc938ac230bf6 -Author: Peter Dunkley -Date: Sat Jun 23 11:31:50 2012 +0100 +commit 857d35f827e0113d1e24caee1b137e91c3e30b42 +Merge: e84eedf 29f0779 +Author: Jason Penton +Date: Tue Mar 12 13:05:19 2013 +0200 - modules/websocket: tidied up some of the WS connection code + Merge branch 'master' of ssh://git.sip-router.org/sip-router -commit 2f30521ea903b1805c728d60cccda6b2636cacde -Author: Peter Dunkley -Date: Fri Jun 22 00:34:24 2012 +0100 +commit 29f0779226712f631eff5664f08cdada96f4eef0 +Author: Hugh Waite +Date: Mon Mar 11 17:37:12 2013 +0000 - modules/websocket: Closing handshake now working + registrar: New set_q_override function - - Also completed MI commands which allowed me to test Ping and Pong + The set_q_override function will override the value of the q parameter + from the Contact header in subsequent calls to the save() function for + the current request. + Currently exported as a C-API function -commit 76f15b97d60b0e1c2c22fabc6c7310b33ad80742 -Author: Peter Dunkley -Date: Thu Jun 21 17:37:08 2012 +0100 +commit 09441e89d3bb10d7a4b8c0192e429a8ca1827461 +Author: Hugh Waite +Date: Mon Mar 11 16:55:23 2013 +0000 + + parser,modules/pv,modules/sipcapture: Improved parsing of + P-Asserted/Preferred-Identity headers + + parser: + - Abstracted addr-spec parsing from parse_to.c into new file. + (parse_addr_spec.c) + - Added support for comma separated addr-spec values. + - Created new P-Asserted-Identity and P-Preferred-Identity header parsers + that parse all instances and allows comma separated values. + modules/pv: + - Added PV index to $ai, $pu, $pU, $pd and $pn variables to retreive the + n'th URI instance. E.g. $(ai[1]) + modules/sipcapture: + - Updated to use the new structure + - Maintains previous behaviour - only uses the first URI + +commit c72aabf37beb308f99b46f764ee9c01b0d875da3 +Author: Daniel-Constantin Mierla +Date: Mon Mar 11 15:57:31 2013 +0100 - modules/websocket: More tidying up + Makefile.dirs: updated the list with module directories -commit 2af2b3277a8b9fb46c5fa9a5ce38eea072a22663 -Author: Peter Dunkley -Date: Thu Jun 21 16:58:05 2012 +0100 +commit 697a272672e434b017cd7e3c6782c5cefa0f2de8 +Author: Olle E. Johansson +Date: Mon Mar 11 11:43:49 2013 +0100 - modules/websocket: fixed typo + NEWS Update with reference to Wiki -commit 857b117c5058200b57501868d5d29dab778fbd94 -Author: Peter Dunkley -Date: Thu Jun 21 16:28:57 2012 +0100 +commit 220b782018c3158a05f695eac5b1bff0f7ad239f +Author: Olle E. Johansson +Date: Mon Mar 11 11:36:54 2013 +0100 - modules/websockets: started adding WebSocket connection management to WebSocket module + INSTALL update for release -commit 7d35945ec66caa286db66cd55ef56c78f29c434c -Author: Peter Dunkley -Date: Thu Jun 21 13:50:53 2012 +0100 +commit 0bdc78ffb5e4a2f4d77df39372dad66cdf3c141d +Author: Olle E. Johansson +Date: Mon Mar 11 11:16:09 2013 +0100 - modules/websocket: Added connection close code and tidied up MI commands + README - last minute small edits -commit a2f9844c01eb19d42d2a2864213c301c53f9b4ec -Author: Vicente Hernando -Date: Wed Jun 20 21:08:19 2012 +0200 +commit 2d38b046b6202a35c0adf4c8b61f0d665432dd4f +Author: Daniel-Constantin Mierla +Date: Mon Mar 11 09:38:37 2013 +0100 - ndb_redis: README file update for unix domain socket support. + tm: set proper buffer len when Max-Forward header is not added + + - reported by Juha Heinanen -commit b20f81a4efc43faed2656170f8b4108f897dffee -Author: Vicente Hernando -Date: Wed Jun 20 14:59:47 2012 -0400 +commit b035aa9f2cc19d387b1b8f33a7888ffee27a4138 +Author: Daniel-Constantin Mierla +Date: Sun Mar 10 23:53:26 2013 +0100 - ndb_redis: able to connect to redis server via unix domain socket. + core: try to detect ipv6 addresses only when USE_IPV6 is used - - added unix atribute in server modparam - - unix attribute has higher precedence over address and port + - reported by Juha Heinanen -commit b260b0ad1bb6c687ef00eb084357d337549ae2ec -Author: Carsten Bock -Date: Wed Jun 20 15:41:02 2012 +0200 +commit a349d9aab2d95b9b1cbc58870ead9a7294bcdcaa +Author: Daniel-Constantin Mierla +Date: Sun Mar 10 22:46:50 2013 +0100 - Disable keeping alive of dialog, if the dialog-api does not provide a dlg_flag. + pkg: deb specs updated for v4.0.0 -commit 1835cd92f2475ce12a79d972ca6548fbbb857ce4 -Author: Vicente Hernando -Date: Tue Jun 19 13:31:42 2012 -0400 +commit b4ebc4a8164cfee995fb3ed0570702ae0547c0ce +Author: Daniel-Constantin Mierla +Date: Sun Mar 10 22:07:11 2013 +0100 - ndb_redis: remove warning: implicit declaration of function redisc_free_reply + INSTALL: updates for v4.0.0 -commit 06982365e6d361d8fb78e1ece579eb1de87db643 +commit ff04edd6ee7ddc213b346afffeec04a995bf16fa Author: Daniel-Constantin Mierla -Date: Tue Jun 19 15:06:03 2012 +0200 +Date: Fri Mar 8 23:22:06 2013 +0100 - pv: new variable $cnt(...) to count the number of other array variables - - - for now it supports counting AVPS - $cnt($avp(x) - returns the number - of how many AVPs with name x exist - - future plans - count headers with same name, xavps ... + ChangeLog_k: removed obsolete file -commit b5af0f6622d592f52f53b8c8572fcfe73fab867f +commit 28111e7943f209ed936a6e9f1d5278d6235cedbb Author: Daniel-Constantin Mierla -Date: Tue Jun 19 15:05:33 2012 +0200 +Date: Fri Mar 8 23:20:06 2013 +0100 - core: typedefed avp search state structure + ChangeLog: updated content to prepare for v4.0.0 -commit 95ca295c7db108c688d7f9278d089dcd6660d712 -Author: Vicente Hernando -Date: Tue Jun 19 12:18:30 2012 +0200 +commit 3b557293a33f6f3003fdd62a45e02cf8736b534e +Author: Andrew Mortensen +Date: Mon Mar 4 23:13:53 2013 -0500 - ndb_redis: README file update for redis_free function. + sca: fix regression dropping Expires header from SUBSCRIBE replies. + + - extra_headers.len lacked Expires header length after snprintf. -commit 13bbe5ef4575cb9018bea5b1d6871214ab7287d1 -Author: Vicente Hernando -Date: Tue Jun 19 05:56:24 2012 -0400 +commit d528c27b6fa69530bfde4a6ce83c5d4dcc6499a5 +Author: Andrew Mortensen +Date: Sun Mar 3 17:01:53 2013 -0500 - ndb_redis: redis_free function. + sca: move SUBSCRIBE response handling to sca_subscription_reply - - Free an unused ndb_redis reply, including also its inner rplRedis - structure. + - create necessary headers, pass to newly generic sca_reply function. -commit f457ec98c2208d181bb94ace50b82faed6d707e0 -Author: Peter Dunkley -Date: Sun Jun 17 21:31:29 2012 +0100 +commit e565748048d7a6b6fda0a28959e092380c5bc26a +Author: Andrew Mortensen +Date: Sun Mar 3 17:00:44 2013 -0500 - modules/websocket: Filled in MI commands to dump WebSocket connection details and Close a WebSocket + sca: reject out-of-dialog attempts to seize privately held call. + + - per spec, reject with 403 Forbidden. -commit 69c264b19f8b42e4700f9f8523912cf29eeadde5 -Author: Peter Dunkley -Date: Sun Jun 17 21:30:33 2012 +0100 +commit d6d71b0e217226fe43491a0e9ba75ec0a6649cd5 +Author: Andrew Mortensen +Date: Sun Mar 3 16:59:23 2013 -0500 - core: Fixed a problem with receiving WebSocket frames + sca: make sca_reply a generic reply function. - - If two frames were pulled from the buffer at the same time the second - wasn't being processed. + - take a pre-filled extra_headers parameter instead, add with add_lump_rpl. -commit d3e770533b908acf73b359ba556a972c1330a118 +commit dd2ef87af7dac6fb1411d58a0dd2e6125b99da80 Author: Peter Dunkley -Date: Sun Jun 17 14:29:44 2012 +0100 +Date: Thu Mar 7 02:11:35 2013 +0000 - modules/websocket: more work on WebSocket framing and base-protocol + pkg/kamailio/(centos|fedora): added docbook2X build requirement -commit c04689c5f5017456a9a5c0f6b617e13ee6f7a1d6 +commit df1af285d60e2d066c2753e8f3815a7dc4f97684 Author: Peter Dunkley -Date: Sun Jun 17 14:28:20 2012 +0100 +Date: Wed Mar 6 11:08:32 2013 +0000 - core: added clone buf support for WebSocket connections + pkg/kamailio/(centos|fedora): re-added perl files -commit d096e24b900856396332ebd61ae854fc044c8971 -Author: Vicente Hernando -Date: Sun Jun 17 15:02:43 2012 +0200 +commit f4a4ad8effe41a30705a49da3097818c83d3be6e +Author: Daniel-Constantin Mierla +Date: Tue Mar 5 18:35:08 2013 +0100 - ndb_redis: free _redisc_rpl_list. + Makefile.groups: fixed typo in the name of perl mods list - - Free pending redis data to close ndb_redis module in a cleaner way. + - reported by Peter Dunkley -commit 68c60fd4156bda792463bd202b82afb2c967dcdd +commit 3262a99d41a16b478f7186be6334dce901ddc25c Author: Peter Dunkley -Date: Sun Jun 17 00:44:14 2012 +0100 +Date: Tue Mar 5 17:08:54 2013 +0000 - modules/websocket: received frame decoding + pkg/kamailio/(centos|fedora): updated .spec to match latest changes -commit 62691a52ffd48e4dc674027cfe9b984620a55b88 +commit 76aa97c074ddbdd82217633ff4fb0c6401d1666f Author: Peter Dunkley -Date: Sun Jun 17 00:43:44 2012 +0100 +Date: Tue Mar 5 15:53:46 2013 +0000 - core: tidied up websocket frame length code + pkg/kamailio/(centos|fedora): updated rel and ver in .spec -commit 1718093cfad0ea8085d20a7b5fd995f93c91a48a -Author: Peter Dunkley -Date: Sat Jun 16 22:58:36 2012 +0100 +commit 49251e62da99bf05f257e12306cafec614feb408 +Author: Daniel-Constantin Mierla +Date: Tue Mar 5 17:11:51 2013 +0100 + + Makefile.groups: mi_xmlrpc has a dedicated pkg grpup depending on xmlrpc-c library + +commit 98be8f70d4df6011991d04b5c0d86a1aac6a0737 +Author: Olle E. Johansson +Date: Tue Mar 5 12:09:42 2013 +0100 - core: improved de-buffering for websockets + db_sqlite Make sure module compiles on BSD systems too - - This should handle the case that the full TCP packet hasn't been received - when the read function is called. Not sure how to explicitly test this - though. + Copied from db_unixodbc/Makefile -commit 74a32e90a9c86c40d9497a9543eedba63556e865 -Author: Peter Dunkley -Date: Sat Jun 16 22:58:00 2012 +0100 +commit 6375044137494f1203f26580e16f63c92225c596 +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 23:41:31 2013 +0100 - core: make it possible to retrieve TCP connection without updating connection liifetime + Makefile.groups: restored outbound as packaging group -commit 68686612a5775e6d677becffa0873028b1c766bb -Author: Peter Dunkley -Date: Sat Jun 16 22:57:34 2012 +0100 +commit 068e6e5903801ca7cb7d1ca304d35bca70a34b58 +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 19:56:54 2013 +0100 - modules/websocket: small tidy up to handshake code + usrloc: added missing state from AoR contact dump -commit 3ec469611f9f6c57d593c000614f461488b760a3 -Author: Peter Dunkley -Date: Sat Jun 16 17:06:33 2012 +0100 +commit d83b9aefd5afa25b2d18a8bf92357fbd33d627bf +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 16:30:34 2013 +0100 - core: Added WS support/events to Kamailio core + dispatcher: release lock instead of destroy when cleaning active calls hash table + + - this could happen when dispatcher list was reloaded + - reported and fix by Dmitry, closes FS#275 -commit 6d93ce1b8a752e2b3fdb0ff7a3cbef0c7bc44787 -Author: Peter Dunkley -Date: Sat Jun 16 17:05:54 2012 +0100 +commit 1d0e8dd793b3bab7f42ad8e956a704c6f287a6e1 +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 16:20:13 2013 +0100 - modules/websocket: WS module registering for WS messages and basic handler implementation + Makefile.defs: version set to 4.1.0-dev1 -commit 48e7ee701571c127effa3b0ddd06468154ddf139 -Author: Peter Dunkley -Date: Sat Jun 16 14:38:22 2012 +0100 +commit 3cf821d9983418d68ca33edc35ff5eb2e592d16f +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 16:19:20 2013 +0100 - modules/websocket: more work on module boiler-plate and handshake - - - Handshake now works with Google Chrome + Makefile.groups: refer to pkg groups instead of K -commit 80c4f4b1d9ff31e79c999b82db35c3b9abc56e22 +commit 09c7b67beee9529d6a7c06e600c7f294bf453eda Author: Daniel-Constantin Mierla -Date: Fri Jun 15 17:17:07 2012 +0200 +Date: Mon Mar 4 16:14:42 2013 +0100 - dialog(k): proper local linking of profile before dlg is created + db_postgres: handle prepare statements in DB APIv2 - - reported by Nick R. + - patch by Markus Bucher, closes FS#272 -commit 407130579cb10620480e8800558375094aaf07be -Author: Peter Dunkley -Date: Fri Jun 15 10:17:06 2012 +0100 +commit b5024f320b578c831d3ee13b077bb87954bc61b0 +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 16:09:36 2013 +0100 - modules/websocket: Improvements to handshake handler + Makefile: updated the groups of modules + + - they are kept in Makefile.groups to keep main Makefile cleaner + - most of modules are in lists groupped mostly by dependency + - compilation and packaging groups are build using the lists + - exclude_modules list is automatically built from all modules without + those part of lists with external dependencies -commit 48ba74772c398396e54a3cbb2d6cee9f4065d599 -Author: Peter Dunkley -Date: Fri Jun 15 00:40:28 2012 +0100 +commit 01cbe8bf98d6ad1ef8cf7e0b9f646fde81831fc6 +Author: Daniel-Constantin Mierla +Date: Mon Mar 4 10:46:01 2013 +0100 - modules/websocket: First attempt a module for websocket support + Makefile.defs: -DWITH_AS_SUPPORT is on by default - - So far this is: - - Module boiler-plate - - WebSocket handshake - - Example/test kamailio.cfg + - it was for kamailio flavour only + - can be disabled with WITHAS=0 and exclude_modules+=seas -commit 5ed96d257f2d402597a678e4451fd9011786f4a2 -Author: Peter Dunkley -Date: Thu Jun 14 17:43:54 2012 +0100 +commit 23a22e2c8d73843798d66ec1bebe22cf7702213b +Author: Daniel-Constantin Mierla +Date: Sun Mar 3 23:53:14 2013 +0100 - modules_k/presence: partial NOTIFYs for presence.winfo not correctly formed when using notifier processes + Makefile: split module groups definitions in Makefile.groups - - I seem to have broken things when I did a pre-merge re-order/clean-up - of the code - - Issue found by Hugh Waite @ Crocodile RCS and fixed by Hugh Waite and - Peter Dunkley @ Crocodile RCS + - the part was quite big and it is more config related than build rules + - it has to be updated with the current list of modules -commit 78da4d35dfceaa3d167d2b5ad66f1a27bc0f4628 -Author: Peter Dunkley -Date: Thu Jun 14 17:41:49 2012 +0100 +commit 522d06e75bf3c549af007701332f7db53a1b5ab6 +Author: Andrew Mortensen +Date: Thu Feb 14 16:55:36 2013 -0500 - modules_k/pua: send_publish() doesn't work correctly in DB only mode with certain DBs + sca: fix race condition when two endpoints seize same index simultaneously - - The pua record wasn't getting inserted in some cases - - Looks like I removed a couple of lines I shouldn't have when merging - from Crocodile's internal SVN repository to git - - Issue found by Hugh Waite @ Crocodile RCS and fixed by Hugh Waite and - Peter Dunkley @ Crocodile RCS + - return 480 Temporarily Unavailable to loser of race. -commit 9dbe8f9fdff1eb5718698cdcdf2357ee1fabd42b -Author: Peter Dunkley -Date: Thu Jun 14 12:10:35 2012 +0100 +commit 7c940fa74dd0d39d798b5ed63edf8079f24f2bde +Author: Olle E. Johansson +Date: Sat Mar 2 16:25:24 2013 +0100 - modules_k/presence: Fixed segmentation fault when uploading pres-rules documents - - - Found and fixed by Hugh Waite @ Crocodile RCS + pv Minor doc update -commit 1d89d7bea854c2e2c646b5d13ba215795325b50f -Author: Daniel-Constantin Mierla -Date: Thu Jun 14 12:24:36 2012 +0200 +commit ab1d5bf573b43daf204eb1572083c8f12791a3e1 +Author: Olle E. Johansson +Date: Sat Mar 2 15:53:08 2013 +0100 - pua: remove wrong free of TM callback param in send_publish() + pv Add RPC commands shvGet and shvSet to manipulate and list shared variables + +commit 68094dd3639d1f4cc497e4affb1a89909947c7b3 +Author: Olle E. Johansson +Date: Sat Mar 2 09:41:18 2013 +0100 + + presence Add RPC command presence.cleanup + +commit c2c4c393a3c68ed3fb6fd53a71febdd93398f77c +Author: Olle E. Johansson +Date: Sat Mar 2 07:56:48 2013 +0100 + + cfgutils Add functions for checking if a route exists - - reported by Charles Chance and Juha Heinanen + Adding check_route_exists() and route_if_exists() functions. -commit 748b79fdeba12736b109dfbd77a3e9bb04c80b97 -Author: Daniel-Constantin Mierla -Date: Wed Jun 13 17:29:51 2012 +0200 +commit 0d69ffe84069e9cd9e41de194cbeff002e3d31b9 +Author: Olle E. Johansson +Date: Sat Mar 2 07:56:21 2013 +0100 - usrloc(k): better safety check for null record access + cfgutils documentation -commit 31f404a98b09b5a6270e860574b16c9f9112c305 +commit b23510e0adb6060a257c8662700450ed7faef080 Author: Daniel-Constantin Mierla -Date: Wed Jun 13 16:33:17 2012 +0200 +Date: Fri Mar 1 18:12:23 2013 +0100 - usrloc(k): safety check for first record in udomain slot + rtpproxy: proper fixup function for rtpproxy_manage(...) - - reported by David Kovarik, FS#234 + - second parameter was resolved as spve type, although fixed as str + - reported by Markus Bucher, FS#273 -commit b8201c6dbff5967d1277363d119cbf33590d4112 -Author: Jon Bonilla -Date: Wed Jun 13 15:38:20 2012 +0200 +commit 71c197dfe0b787a2abeadb730fda5241f294237c +Author: Peter Dunkley +Date: Fri Mar 1 11:41:18 2013 +0000 - Makefile: Add db_cluster + modules/registrar: updated module documentation - Added to standard group as it has no dependencies + - Added ruid parameter to unregister + - Added missing attributes to $ulc() description -commit 9a310fe940e4b93e13539ccfbd6137ba76dcce87 -Author: Juha Heinanen -Date: Wed Jun 13 16:25:12 2012 +0300 +commit 0a919692b299e2eb819f7c97fa218189849d4566 +Author: Peter Dunkley +Date: Fri Mar 1 11:19:42 2013 +0000 - modules_k/presence_[dialoginfo|mwi|reginfo]: fixed test of wrong variable + modules/registrar: added additional unregister() exported function to allow the removal of a specific contact + + - Contact is removed by using the ruid (unique ID for the location record) + - Getting the ruid to use here is a problem still to be solved. -commit b13434ff7f8e8b1b88434e888c26a77874eceeb0 +commit 65dc9c8cf35fc3e631380d65e8c99e8f84d465cc Author: Peter Dunkley -Date: Wed Jun 13 11:47:07 2012 +0100 +Date: Thu Feb 28 14:40:41 2013 +0000 - modules_k/usrloc: Only run timer when timer_interval > 0 + modules/registrar: RFC 5626 section 6 support - - This is useful on DB only multi-server systems when the database is - cleaned up outside of Kamailio. - - This is a re-instatement of something that worked before the - addition of GRUU. + - Behaviour when outbound in use but first edge proxy does not + support it. -commit c737ff95bb2e742981d81088169baa60d4605b85 -Author: Daniel-Constantin Mierla -Date: Wed Jun 13 11:51:57 2012 +0200 +commit abc1e61dea4e96235ca54955f664effc66568d6d +Author: Richard Fuchs +Date: Wed Feb 27 11:17:03 2013 -0500 - drouting: reset the content of routing tree if root pointer is not freed + nathelper: add new option sipping_disable_bflag - - reported by Yufei Tao + sipping_disable_bflag can be set on a per-registration basis + to disable NAT pings completely -commit 9fda39db41328a47180a7591713323ca00a140a6 -Author: Jon Bonilla -Date: Wed Jun 13 03:16:37 2012 +0200 +commit aabb7adb933185f4bc12dcd82cdee357246c8c2f +Author: Peter Dunkley +Date: Wed Feb 27 15:29:35 2013 +0000 - pkg/deb Update debian version to 3.4.0~dev0 + modules/registrar: add Require: outbound to 200 OK when required by client and supported by server + + - Reported by @oej -commit e037e9ed2b6f3d840c6e8bf18a3caeaa3274f004 +commit 936b6892a8a0ff25b108635e48a146b7cbc3a7ff Author: Peter Dunkley -Date: Tue Jun 12 14:24:48 2012 +0100 +Date: Wed Feb 27 14:03:27 2013 +0000 - modules_k/registrar: Fixed merge error in api.c - - - Issue found and fixed by Hugh Waite @ Crocodile RCS Ltd + lib/kcore: added parser for Require: header -commit 76d2424a798a1381f51003a9aa4f174ba243ecc0 +commit be95ad30bf92cce4611f41e7d52d7a12f557e863 Author: Peter Dunkley -Date: Tue Jun 12 02:25:24 2012 +0100 +Date: Wed Feb 27 14:03:13 2013 +0000 - modules/ipops: Added new exported function is_in_subnet() - - - Feature added by Hugh Waite @ Crocodile RCS Ltd + parser: updated for parse_supported refactoring -commit 0aae547c7f18186372f01b07144b64a646b37971 +commit 167283826a4b534bc68d96e5e8eb6bc686a6d293 Author: Peter Dunkley -Date: Tue Jun 12 02:10:30 2012 +0100 +Date: Wed Feb 27 14:02:47 2013 +0000 - modules/app_lua: Added registrar:save_uri support - - - Feature by Hugh Waite @ Crocodile RCS Ltd + modules/sst: updated for parse_supported refactoring -commit b4f3aea40c9588d60fb6643c52860a40b9ed994e +commit 35e981d6c22bf4a5326cad34c2f2aa0d45d77e08 Author: Peter Dunkley -Date: Tue Jun 12 02:07:42 2012 +0100 +Date: Wed Feb 27 14:02:28 2013 +0000 - modules_k/registrar: Exported save_uri - - - Feature added by Hugh Waite @ Crocodile RCS Ltd + modules/rls: updated for parse_supported refactoring -commit 3d3b1daf319fe87b880671cd5de9a2a6ace6c64b +commit 6c24a8dfa84d1e92fdd53e4c8c2bd7bc1715ceb5 Author: Peter Dunkley -Date: Tue Jun 12 02:01:10 2012 +0100 +Date: Wed Feb 27 14:02:05 2013 +0000 - modules/tls: Fixed log level and diagnostic typo - - - Fix by Hugh Waite @ Crocodile RCS Ltd + modules/registrar: updated for parse_supported refactoring -commit 74641106779c13fa2f6bf2384293e35dc21f3b5a +commit 2855d20641d171ffcf3e711292cc8648d74ce5b0 Author: Peter Dunkley -Date: Mon Jun 11 22:39:10 2012 +0100 +Date: Wed Feb 27 14:01:18 2013 +0000 - pkg/kamailio/fedora/16: Updated ver and rel in .spec to 3.4.0 and dev0 + modules/ims_registrar_scscf: updated for parse_supported refactoring -commit 0c7b9304efd5954cf53ba13a065b05a277efc91f -Author: Daniel-Constantin Mierla -Date: Mon Jun 11 14:32:44 2012 +0200 +commit af75f69a581e19f8008c326f882aae0f65f86ea8 +Author: Peter Dunkley +Date: Wed Feb 27 13:59:56 2013 +0000 - registrar(k): don't access realm_prefix.s if len is <=0 + lib/kcore: abstracted the option-tag parsing code out of parse_supported.[ch] - - solaris is not happy accessing .s struct field if set to 0 + - This is to make it easier to add parsers for other similar headers + (for example, Require:) -commit d42379da90f2ec87cb5dbb00ebb563c7528ec910 +commit 9f9b56088e706970bab2ab644a51d267fabcae6c Author: Daniel-Constantin Mierla -Date: Mon Jun 11 12:32:05 2012 +0200 +Date: Wed Feb 27 09:22:14 2013 +0100 - Makefile: version set to 3.4.0-dev0 + Makefile.defs: version set to 4.1.0-dev0 - - development for future major version 3.4.0 is open + - master branch is open for adding new features to be part of v4.1.x - -===================== 2012-06-18 Version 3.3.0 Released ===================== +===================== 2013-03-11 Version 4.0.0 Released ===================== diff --git a/Makefile b/Makefile index 5351a3846..d0e00b9ae 100644 --- a/Makefile +++ b/Makefile @@ -622,6 +622,7 @@ tar: makefile_vars $(auto_gen_keep) $(TAR) -C .. \ --exclude=$(notdir $(CURDIR))/test* \ --exclude=$(notdir $(CURDIR))/tmp* \ + --exclude=$(notdir $(CURDIR))/debian \ --exclude=$(notdir $(CURDIR))/debian/$(MAIN_NAME) \ --exclude=$(notdir $(CURDIR))/debian/$(MAIN_NAME)-* \ --exclude=$(notdir $(CURDIR))/$(MAIN_NAME)_tls* \ @@ -1013,6 +1014,50 @@ clean_modules_cfg clean-modules-cfg: .PHONY: clean_makefile_vars clean-makefile-vars rm -f Makefile.vars +# clean everything generated - shortcut on maintainer-clean +.PHONY: pure +pure: maintainer-clean + +.PHONY: install_initd_debian install-initd-debian +install_initd_debian install-initd-debian: + sed -e "s#DAEMON=/usr/sbin/kamailio#DAEMON=$(bin_prefix)/$(bin_dir)$(NAME)#g" \ + -e "s#NAME=kamailio#NAME=$(NAME)#g" \ + -e "s#DESC=Kamailio#DESC=$(NAME)#g" \ + -e "s#HOMEDIR=/var/run/kamailio#HOMEDIR=/var/run/$(NAME)#g" \ + -e "s#DEFAULTS=/etc/default/kamailio#DEFAULTS=/etc/default/$(NAME)#g" \ + -e "s#CFGFILE=/etc/kamailio/kamailio.cfg#CFGFILE=$(cfg_prefix)/$(cfg_dir)$(NAME).cfg#g" \ + < pkg/kamailio/deb/debian/kamailio.init \ + > /etc/init.d/$(NAME) + chmod +x /etc/init.d/$(NAME) + sed -e "s#RUN_KAMAILIO=no#RUN_KAMAILIO=yes#g" \ + < pkg/kamailio/deb/debian/kamailio.default \ + > /etc/default/$(NAME) + mkdir -p /var/run/$(NAME) + adduser --quiet --system --group --disabled-password \ + --shell /bin/false --gecos "$(NAME)" \ + --home /var/run/$(NAME) $(NAME) + chown $(NAME):$(NAME) /var/run/$(NAME) + +.PHONY: install_initd_centos install-initd-centos +install_initd_centos install-initd-centos: + sed -e "s#KAM=/usr/sbin/kamailio#KAM=$(bin_prefix)/$(bin_dir)$(NAME)#g" \ + -e "s#PROG=kamailio#PROG=$(NAME)#g" \ + -e "s#DEFAULTS=/etc/default/kamailio#DEFAULTS=/etc/default/$(NAME)#g" \ + -e "s#PID_FILE=/var/run/kamailio.pid#PID_FILE=/var/run/$(NAME).pid#g" \ + -e "s#LOCK_FILE=/var/lock/subsys/kamailio#LOCK_FILE=/var/lock/subsys/$(NAME)#g" \ + -e "s#KAMCFG=/etc/kamailio/kamailio.cfg#KAMCFG=$(cfg_prefix)/$(cfg_dir)$(NAME).cfg#g" \ + < pkg/kamailio/rpm/kamailio.init \ + > /etc/init.d/$(NAME) + chmod +x /etc/init.d/$(NAME) + sed -e "s#RUN_KAMAILIO=no#RUN_KAMAILIO=yes#g" \ + -e "s#USER=kamailio#USER=$(NAME)#g" \ + -e "s#GROUP=kamailio#GROUP=$(NAME)#g" \ + < pkg/kamailio/rpm/kamailio.default \ + > /etc/default/$(NAME) + /usr/sbin/groupadd -r $(NAME) + /usr/sbin/useradd -r -g $(NAME) -s /bin/false -c "Kamailio Daemon" \ + -d ${lib_prefix}/${lib_dir} $(NAME) + .PHONY: dbschema dbschema: -@echo "Build database schemas" diff --git a/Makefile.defs b/Makefile.defs index ee9f231b1..480a3f840 100644 --- a/Makefile.defs +++ b/Makefile.defs @@ -155,15 +155,17 @@ endif # application server support on WITHAS ?= 1 +# enable core hooks for SCTP +SCTP ?= 1 # what to install INSTALL_FLAVOUR=$(FLAVOUR) -#version number +# version number VERSION = 4 -PATCHLEVEL = 0 -SUBLEVEL = 4 -EXTRAVERSION = +PATCHLEVEL = 1 +SUBLEVEL = 0 +EXTRAVERSION = # memory manager switcher # 0 - f_malloc (fast malloc) @@ -172,7 +174,7 @@ MEMMNG ?= 1 # memory debugger switcher # 0 - off (no-debug mode) # 1 - on (debug mode) -MEMDBG ?= 0 +MEMDBG ?= 1 SER_VER = $(shell expr $(VERSION) \* 1000000 + $(PATCHLEVEL) \* 1000 + \ $(SUBLEVEL) ) @@ -647,8 +649,6 @@ data_target = $(prefix)/$(data_dir) # -DPROFILING # if enabled profiling will be enabled for child processes # Don't forget to set PROFILE (see below) -# -DUSE_STUN -# compiles in stun support # -DNO_SIG_DEBUG # turns off debugging messages in signal handlers (which might be # unsafe) @@ -682,7 +682,6 @@ C_DEFS= $(extra_defs) \ -DPKG_MALLOC \ -DSHM_MEM -DSHM_MMAP \ -DDNS_IP_HACK \ - -DUSE_IPV6 \ -DUSE_MCAST \ -DUSE_TCP \ -DDISABLE_NAGLE \ @@ -752,10 +751,6 @@ ifeq ($(WITHAS), 1) C_DEFS+= -DWITH_AS_SUPPORT endif -ifneq ($(STUN),) - C_DEFS+= -DUSE_STUN -endif - ifeq ($(mode),) mode = release endif @@ -843,6 +838,7 @@ endif ifeq ($(ARCH), arm6) use_fast_lock=yes + C_DEFS+=-DNOSMP # very unlikely to have an smp arm endif ifeq ($(ARCH), ppc) @@ -1765,10 +1761,6 @@ ifeq ($(OS), linux) LIBS+=-lpthread endif endif - ifneq (,$(findstring -DUSE_DNSSEC, $(C_DEFS))) - LIBS+=-lval-threads -lcrypto -lsres -lpthread -$(info "using libval for DNSSEC validation") - endif # check for >= 2.5.44 ifeq ($(shell [ $(OSREL_N) -ge 2005044 ] && echo has_epoll), has_epoll) @@ -1794,31 +1786,6 @@ $(info "using libval for DNSSEC validation") ifeq ($(NO_SELECT),) C_DEFS+=-DHAVE_SELECT endif - # sctp support - ifeq ($(SCTP),1) - # test to see if the devfiles and lib are installed - sctp_dev_locations := /usr/include/netinet/sctp.h \ - $(LOCALBASE)/include/netinet/sctp.h - sctp_lib_locations := /usr/lib/libsctp.so \ - /usr/lib64/libsctp.so \ - $(LOCALBASE)/usr/local/lib/libsctp.so - sctp_dev_path := $(wildcard $(sctp_dev_locations)) - sctp_lib_path := $(wildcard $(sctp_lib_locations)) - ifeq ($(sctp_dev_path),) -$(info "sctp development files not installed -- sctp disabled") - override SCTP := - endif - ifeq ($(sctp_lib_path),) -$(info "sctp libraries not installed -- sctp disabled") - override SCTP := - endif - - ifeq ($(SCTP),1) - # use lksctp - C_DEFS+=-DUSE_SCTP - LIBS+=-lsctp - endif - endif # SCTP endif ifeq ($(OS), solaris) @@ -1893,26 +1860,6 @@ ifeq ($(OS), freebsd) C_DEFS+=-DHAVE_SELECT endif YACC=yacc - # sctp support - ifeq ($(SCTP),1) - # test to see if the devfiles and lib are installed - sctp_dev_locations := /usr/include/netinet/sctp.h \ - $(LOCALBASE)/include/netinet/sctp.h - sctp_dev_path := $(wildcard $(sctp_dev_locations)) - ifeq ($(sctp_dev_path),) -$(info "sctp development files not installed -- sctp disabled") - override SCTP := - endif - ifeq ($(shell [ $(OSREL_N) -lt 7000 ] && echo sctp), sctp) -$(info "old freebsd version (>= 7.0 needed) -- sctp disabled") - override SCTP := - endif - - ifeq ($(SCTP),1) - C_DEFS+=-DUSE_SCTP - LIBS+= # no extra libs needed on freebsd - endif - endif # SCTP endif ifeq ($(OS), dragonfly) @@ -1935,29 +1882,6 @@ ifeq ($(OS), dragonfly) C_DEFS+=-DHAVE_SELECT endif YACC=yacc - # sctp support - ifeq ($(SCTP),1) - # test to see if the devfiles and lib are installed - sctp_dev_locations := /usr/include/netinet/sctp.h \ - $(LOCALBASE)/include/netinet/sctp.h - sctp_dev_path := $(wildcard $(sctp_dev_locations)) - ifeq ($(sctp_dev_path),) -$(info "sctp development files not installed -- sctp disabled") - override SCTP := - endif - # FIXME: don't know what's the status of SCTP on dragonfly - # (we suppose the 2.6 version is >= the version in - # in freebsd 7.0) - ifeq ($(shell [ $(OSREL_N) -lt 2006 ] && echo sctp), sctp) -$(info "old dragonfly version (>= 2.6 needed) -- sctp disabled") - override SCTP := - endif - - ifeq ($(SCTP),1) - C_DEFS+=-DUSE_SCTP - LIBS+= # no extra libs needed on freebsd - endif - endif # SCTP endif ifeq ($(OS), openbsd) @@ -2064,9 +1988,9 @@ ifeq ($(OS), darwin) endif ifneq (,$(findstring cygwin, $(OS))) - # cygwin doesn't support IPV6 and doesn't support fd passing so no TCP - #C_DEFS:=$(filter-out -DUSE_IPV6 -DUSE_TCP, $(C_DEFS)) - DEFS_RM+=-DUSE_IPV6 -DUSE_TCP + # cygwin does support IPV6 starting from version 1.7, but (still?) doesn't support fd passing so no TCP + #C_DEFS:=$(filter-out -DUSE_TCP, $(C_DEFS)) + DEFS_RM+=-DUSE_TCP C_DEFS+=-DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \ -DHAVE_MSG_NOSIGNAL -DHAVE_MSGHDR_MSG_CONTROL -DHAVE_ALLOCA_H \ -DHAVE_TIMEGM -DHAVE_SCHED_SETSCHEDULER @@ -2100,11 +2024,6 @@ LIBS+= -L$(LOCALBASE)/lib -L$(LOCALBASE)/ssl/lib -lssl -lcrypto \ # E.g.: make CORE_TLS=1 EXTRA_TLS_LIBS="-lz -lkrb5" endif -ifneq ($(STUN),) -C_INCLUDES+= -I$(LOCALBASE)/ssl/include -LIBS+= -L$(LOCALBASE)/lib -L$(LOCALBASE)/ssl/lib -lcrypto -endif - ifneq ($(found_lock_method), yes) $(warning No locking method found so far, trying SYS V sems) C_DEFS+= -DUSE_SYSV_SEM # try sys v sems diff --git a/Makefile.groups b/Makefile.groups index aa41e71d4..d1cad8665 100644 --- a/Makefile.groups +++ b/Makefile.groups @@ -13,12 +13,12 @@ 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 + textopsx tm tmx topoh xlog rtpproxy-ng stun # - extra used modules, with no extra dependency -mod_list_extra=avp auth_diameter call_control dmq domainpolicy msrp pdb qos \ - sca seas sms sst timer tmrec uac_redirect xhttp xhttp_rpc \ - xprint +mod_list_extra=avp 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_text db_flatstore \ @@ -92,9 +92,18 @@ mod_list_tlsdeps=auth_identity tls # - modules depending on openssl library mod_list_outbound=outbound -# - modules depending on unistring library +# - modules depending on openssl and unistring library mod_list_websocket=websocket +# - 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_autheph=auth_ephemeral + # - modules related to SIMPLE presence extensions mod_list_presence=presence presence_conference presence_dialoginfo \ presence_mwi presence_profile presence_reginfo \ @@ -134,11 +143,14 @@ 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_usrloc_scscf ims_charging # - modules depending on osp toolkit library mod_list_osp=osp +# - modules depending on java library +mod_list_java=app_java + # - modules depending on iptables library mod_list_iptrtpproxy=iptrtpproxy @@ -161,7 +173,9 @@ mod_list_all=$(sort $(mod_list_basic) $(mod_list_extra) \ $(mod_list_mono) $(mod_list_ims) \ $(mod_list_cassandra) $(mod_list_oracle) \ $(mod_list_iptrtpproxy) $(mod_list_mi_xmlrpc) \ - $(mod_list_outbound) $(mod_list_osp) ) + $(mod_list_outbound) $(mod_list_osp) \ + $(mod_list_java) $(mod_list_dnssec) \ + $(mod_list_sctp) $(mod_list_autheph)) @@ -307,6 +321,17 @@ module_group_kims=$(mod_list_ims) # pkg outbound module module_group_koutbound=$(mod_list_outbound) +# pkg java module +module_group_kjava=$(mod_list_java) + +# pkg dnssec module +module_group_kdnssec=$(mod_list_dnssec) + +# pkg sctp module +module_group_ksctp=$(mod_list_sctp) + +# pkg auth_ephemeral module +module_group_kautheph=$(mod_list_autheph) # list of static modules # diff --git a/README b/README index e0eae661e..cf5fff4fc 100644 --- a/README +++ b/README @@ -1,18 +1,21 @@ -$Id$ - Welcome to Kamailio v4.0! +Kamailio v4.1 +============= - http://www.kamailio.org/ - ========================== +http://www.kamailio.org + +Table of contents + I. About Kamailio + II. Feature List + III. Getting started + IV. About the project + V. Obtaining Help + VI. More Information -I. About Kamailio -II. Feature List -III. Getting started -IV. About the project -V. Obtaining Help -VI. More Information +I. About Kamailio +================= Kamailio is an industrial-strength, free server for realtime communication, based on the Session Initiation Protocol (SIP RFC3261). diff --git a/action.c b/action.c index e64cf81eb..5fa50ee5a 100644 --- a/action.c +++ b/action.c @@ -89,7 +89,7 @@ #include "tcp_server.h" #endif #ifdef USE_SCTP -#include "sctp_server.h" +#include "sctp_core.h" #endif #include "switch.h" #include "events.h" @@ -111,7 +111,30 @@ int _last_returned_code = 0; struct onsend_info* p_onsend=0; /* onsend route send info */ +/* current action executed from config file */ +static cfg_action_t *_cfg_crt_action = 0; +/* return current action executed from config file */ +cfg_action_t *get_cfg_crt_action(void) +{ + return _cfg_crt_action; +} + +/* return line in config for current executed action */ +int get_cfg_crt_line(void) +{ + if(_cfg_crt_action==0) + return 0; + return _cfg_crt_action->cline; +} + +/* return name of config for current executed action */ +char *get_cfg_crt_name(void) +{ + if(_cfg_crt_action==0) + return 0; + return _cfg_crt_action->cfile; +} /* handle the exit code of a module function call. * (used internally in do_action()) @@ -423,9 +446,11 @@ int do_action(struct run_act_ctx* h, struct action* a, struct sip_msg* msg) case PROTO_UDP: #ifdef USE_TCP case PROTO_TCP: + case PROTO_WS: #endif #ifdef USE_TLS case PROTO_TLS: + case PROTO_WSS: #endif #ifdef USE_SCTP case PROTO_SCTP: @@ -509,7 +534,7 @@ int do_action(struct run_act_ctx* h, struct action* a, struct sip_msg* msg) ret=append_branch(msg, &a->val[0].u.str, &msg->dst_uri, &msg->path_vec, a->val[1].u.number, (flag_t)flags, msg->force_send_socket, - 0, 0); + 0, 0, 0, 0); /* if the uri is the ruri and q was also not changed, mark ruri as consumed, to avoid having an identical branch */ if ((a->val[0].u.str.s == 0 || a->val[0].u.str.len == 0) && @@ -1570,7 +1595,9 @@ int run_actions(struct run_act_ctx* h, struct action* a, struct sip_msg* msg) for (t=a; t!=0; t=t->next){ if(unlikely(cfg_get(core, core_cfg, latency_limit_action)>0)) ms = TICKS_TO_MS(get_ticks_raw()); + _cfg_crt_action = t; ret=do_action(h, t, msg); + _cfg_crt_action = 0; if(unlikely(cfg_get(core, core_cfg, latency_limit_action)>0)) { ms = TICKS_TO_MS(get_ticks_raw()) - ms; if(ms >= cfg_get(core, core_cfg, latency_limit_action)) { diff --git a/action.h b/action.h index a2a539564..2ef00f718 100644 --- a/action.h +++ b/action.h @@ -68,6 +68,9 @@ int run_actions(struct run_act_ctx* c, struct action* a, struct sip_msg* msg); int run_top_route(struct action* a, sip_msg_t* msg, struct run_act_ctx* c); +cfg_action_t *get_cfg_crt_action(void); +int get_cfg_crt_line(void); +char *get_cfg_crt_name(void); #ifdef USE_LONGJMP int run_actions_safe(struct run_act_ctx* c, struct action* a, diff --git a/autover.h b/autover.h index 362485266..331460117 100644 --- a/autover.h +++ b/autover.h @@ -2,6 +2,6 @@ * DO NOT EDIT IT */ -#define REPO_VER "cabe58" -#define REPO_HASH "cabe58" +#define REPO_VER "350d2e" +#define REPO_HASH "350d2e" #define REPO_STATE "" diff --git a/cfg.lex b/cfg.lex index 5a7ce8abb..8e60c1ec8 100644 --- a/cfg.lex +++ b/cfg.lex @@ -337,6 +337,7 @@ AVP_PREF (([ft][rud]?)|g)\. DEBUG debug FORK fork FORK_DELAY fork_delay +MODINIT_DELAY modinit_delay LOGSTDERROR log_stderror LOGFACILITY log_facility LOGNAME log_name @@ -359,6 +360,7 @@ DNS_RETR_NO dns_retr_no DNS_SERVERS_NO dns_servers_no DNS_USE_SEARCH dns_use_search_list DNS_SEARCH_FMATCH dns_search_full_match +DNS_NAPTR_IGNORE_RFC dns_naptr_ignore_rfc /* dns cache */ DNS_CACHE_INIT dns_cache_init DNS_USE_CACHE use_dns_cache @@ -392,7 +394,6 @@ CHILDREN children SOCKET_WORKERS socket_workers CHECK_VIA check_via PHONE2TEL phone2tel -SYN_BRANCH syn_branch MEMLOG "memlog"|"mem_log" MEMDBG "memdbg"|"mem_dbg" MEMSUM "mem_summary" @@ -453,25 +454,6 @@ TLS_SEND_TIMEOUT "tls_send_timeout" DISABLE_SCTP "disable_sctp" ENABLE_SCTP "enable_sctp" SCTP_CHILDREN "sctp_children" -SCTP_SOCKET_RCVBUF "sctp_socket_rcvbuf"|"sctp_socket_receive_buffer" -SCTP_SOCKET_SNDBUF "sctp_socket_sndbuf"|"sctp_socket_send_buffer" -SCTP_AUTOCLOSE "sctp_autoclose" -SCTP_SEND_TTL "sctp_send_ttl" -SCTP_SEND_RETRIES "sctp_send_retries" -SCTP_ASSOC_TRACKING "sctp_assoc_tracking" -SCTP_ASSOC_REUSE "sctp_assoc_reuse" -SCTP_MAX_ASSOCS "sctp_max_assocs" -SCTP_SRTO_INITIAL "sctp_srto_initial" -SCTP_SRTO_MAX "sctp_srto_max" -SCTP_SRTO_MIN "sctp_srto_min" -SCTP_ASOCMAXRXT "sctp_asocmaxrxt" -SCTP_INIT_MAX_ATTEMPTS "sctp_init_max_attempts" -SCTP_INIT_MAX_TIMEO "sctp_init_max_timeo" -SCTP_HBINTERVAL "sctp_hbinterval" -SCTP_PATHMAXRXT "sctp_pathmaxrxt" -SCTP_SACK_DELAY "sctp_sack_delay" -SCTP_SACK_FREQ "sctp_sack_freq" -SCTP_MAX_BURST "sctp_max_burst" ADVERTISED_ADDRESS "advertised_address" ADVERTISED_PORT "advertised_port" @@ -495,14 +477,9 @@ KILL_TIMEOUT "exit_timeout"|"ser_kill_timeout" MAX_WLOOPS "max_while_loops" PVBUFSIZE "pv_buffer_size" PVBUFSLOTS "pv_buffer_slots" -HTTP_REPLY_HACK "http_reply_hack" +HTTP_REPLY_PARSE "http_reply_hack"|"http_reply_parse" VERSION_TABLE_CFG "version_table" -/* stun config variables */ -STUN_REFRESH_INTERVAL "stun_refresh_interval" -STUN_ALLOW_STUN "stun_allow_stun" -STUN_ALLOW_FP "stun_allow_fp" - SERVER_ID "server_id" LATENCY_LOG latency_log @@ -561,10 +538,10 @@ COLON ":" STAR \* DOT \. CR \n -EVENT_RT_NAME [a-zA-Z][0-9a-zA-Z-]*":"[a-zA-Z][0-9a-zA-Z-]* +EVENT_RT_NAME [a-zA-Z][0-9a-zA-Z-]*(":"[a-zA-Z][0-9a-zA-Z-]*)+ -COM_LINE # +COM_LINE "#"|"//" COM_START "/\*" COM_END "\*/" @@ -712,6 +689,7 @@ IMPORTFILE "import_file" {DEBUG} { count(); yylval.strval=yytext; return DEBUG_V; } {FORK} { count(); yylval.strval=yytext; return FORK; } {FORK_DELAY} { count(); yylval.strval=yytext; return FORK_DELAY; } +{MODINIT_DELAY} { count(); yylval.strval=yytext; return MODINIT_DELAY; } {LOGSTDERROR} { yylval.strval=yytext; return LOGSTDERROR; } {LOGFACILITY} { yylval.strval=yytext; return LOGFACILITY; } {LOGNAME} { yylval.strval=yytext; return LOGNAME; } @@ -747,6 +725,8 @@ IMPORTFILE "import_file" return DNS_USE_SEARCH; } {DNS_SEARCH_FMATCH} { count(); yylval.strval=yytext; return DNS_SEARCH_FMATCH; } +{DNS_NAPTR_IGNORE_RFC} { count(); yylval.strval=yytext; + return DNS_NAPTR_IGNORE_RFC; } {DNS_CACHE_INIT} { count(); yylval.strval=yytext; return DNS_CACHE_INIT; } {DNS_USE_CACHE} { count(); yylval.strval=yytext; @@ -795,7 +775,6 @@ IMPORTFILE "import_file" {SOCKET_WORKERS} { count(); yylval.strval=yytext; return SOCKET_WORKERS; } {CHECK_VIA} { count(); yylval.strval=yytext; return CHECK_VIA; } {PHONE2TEL} { count(); yylval.strval=yytext; return PHONE2TEL; } -{SYN_BRANCH} { count(); yylval.strval=yytext; return SYN_BRANCH; } {MEMLOG} { count(); yylval.strval=yytext; return MEMLOG; } {MEMDBG} { count(); yylval.strval=yytext; return MEMDBG; } {MEMSUM} { count(); yylval.strval=yytext; return MEMSUM; } @@ -886,44 +865,6 @@ IMPORTFILE "import_file" {ENABLE_SCTP} { count(); yylval.strval=yytext; return ENABLE_SCTP;} {SCTP_CHILDREN} { count(); yylval.strval=yytext; return SCTP_CHILDREN; } -{SCTP_SOCKET_RCVBUF} { count(); yylval.strval=yytext; - return SCTP_SOCKET_RCVBUF; } -{SCTP_SOCKET_SNDBUF} { count(); yylval.strval=yytext; - return SCTP_SOCKET_SNDBUF; } -{SCTP_AUTOCLOSE} { count(); yylval.strval=yytext; - return SCTP_AUTOCLOSE; } -{SCTP_SEND_TTL} { count(); yylval.strval=yytext; - return SCTP_SEND_TTL; } -{SCTP_SEND_RETRIES} { count(); yylval.strval=yytext; - return SCTP_SEND_RETRIES; } -{SCTP_ASSOC_TRACKING} { count(); yylval.strval=yytext; - return SCTP_ASSOC_TRACKING; } -{SCTP_ASSOC_REUSE} { count(); yylval.strval=yytext; - return SCTP_ASSOC_REUSE; } -{SCTP_MAX_ASSOCS} { count(); yylval.strval=yytext; - return SCTP_MAX_ASSOCS; } -{SCTP_SRTO_INITIAL} { count(); yylval.strval=yytext; - return SCTP_SRTO_INITIAL; } -{SCTP_SRTO_MAX} { count(); yylval.strval=yytext; - return SCTP_SRTO_MAX; } -{SCTP_SRTO_MIN} { count(); yylval.strval=yytext; - return SCTP_SRTO_MIN; } -{SCTP_ASOCMAXRXT} { count(); yylval.strval=yytext; - return SCTP_ASOCMAXRXT; } -{SCTP_INIT_MAX_ATTEMPTS} { count(); yylval.strval=yytext; - return SCTP_INIT_MAX_ATTEMPTS; } -{SCTP_INIT_MAX_TIMEO} { count(); yylval.strval=yytext; - return SCTP_INIT_MAX_TIMEO; } -{SCTP_HBINTERVAL} { count(); yylval.strval=yytext; - return SCTP_HBINTERVAL; } -{SCTP_PATHMAXRXT} { count(); yylval.strval=yytext; - return SCTP_PATHMAXRXT; } -{SCTP_SACK_DELAY} { count(); yylval.strval=yytext; - return SCTP_SACK_DELAY; } -{SCTP_SACK_FREQ} { count(); yylval.strval=yytext; - return SCTP_SACK_FREQ; } -{SCTP_MAX_BURST} { count(); yylval.strval=yytext; - return SCTP_MAX_BURST; } {SERVER_SIGNATURE} { count(); yylval.strval=yytext; return SERVER_SIGNATURE; } {SERVER_HEADER} { count(); yylval.strval=yytext; return SERVER_HEADER; } {USER_AGENT_HEADER} { count(); yylval.strval=yytext; return USER_AGENT_HEADER; } @@ -972,8 +913,8 @@ IMPORTFILE "import_file" return PVBUFSIZE; } {PVBUFSLOTS} { count(); yylval.strval=yytext; return PVBUFSLOTS; } -{HTTP_REPLY_HACK} { count(); yylval.strval=yytext; - return HTTP_REPLY_HACK; } +{HTTP_REPLY_PARSE} { count(); yylval.strval=yytext; + return HTTP_REPLY_PARSE; } {VERSION_TABLE_CFG} { count(); yylval.strval=yytext; return VERSION_TABLE_CFG;} {SERVER_ID} { count(); yylval.strval=yytext; return SERVER_ID;} {LATENCY_LOG} { count(); yylval.strval=yytext; return LATENCY_LOG;} @@ -985,10 +926,6 @@ IMPORTFILE "import_file" {LOADPATH} { count(); yylval.strval=yytext; return LOADPATH; } {MODPARAM} { count(); yylval.strval=yytext; return MODPARAM; } -{STUN_REFRESH_INTERVAL} { count(); yylval.strval=yytext; return STUN_REFRESH_INTERVAL;} -{STUN_ALLOW_STUN} { count(); yylval.strval=yytext; return STUN_ALLOW_STUN;} -{STUN_ALLOW_FP} { count(); yylval.strval=yytext; return STUN_ALLOW_FP;} - {EQUAL} { count(); return EQUAL; } {ADDEQ} { count(); return ADDEQ; } {EQUAL_T} { count(); return EQUAL_T; } @@ -1167,11 +1104,7 @@ IMPORTFILE "import_file" {INET} { count(); yylval.intval=AF_INET; yy_number_str=yytext; return NUMBER; } {INET6} { count(); - #ifdef USE_IPV6 - yylval.intval=AF_INET6; - #else - yylval.intval=-1; /* no match*/ - #endif + yylval.intval=AF_INET6; yy_number_str=yytext; return NUMBER; } {SSLv23} { count(); yylval.strval=yytext; return SSLv23; } diff --git a/cfg.y b/cfg.y index 0c4fb5d8a..195593bc4 100644 --- a/cfg.y +++ b/cfg.y @@ -135,7 +135,7 @@ #include "flags.h" #include "tcp_init.h" #include "tcp_options.h" -#include "sctp_options.h" +#include "sctp_core.h" #include "pvar.h" #include "lvalue.h" #include "rvalue.h" @@ -165,11 +165,7 @@ if (rt!=ONSEND_ROUTE) yyerror( s " allowed only in onsend_routes");\ }while(0) -#ifdef USE_IPV6 #define IF_AUTO_BIND_IPV6(x) x -#else - #define IF_AUTO_BIND_IPV6(x) warn("IPV6 support not compiled"); -#endif #ifdef USE_DNS_CACHE #define IF_DNS_CACHE(x) x @@ -195,12 +191,6 @@ #define IF_DST_BLACKLIST(x) warn("dst blacklist support not compiled in") #endif -#ifdef USE_STUN - #define IF_STUN(x) x -#else - #define IF_STUN(x) warn("stun support not compiled in") -#endif - #ifdef USE_SCTP #define IF_SCTP(x) x #else @@ -396,6 +386,7 @@ extern char *finame; %token DEBUG_V %token FORK %token FORK_DELAY +%token MODINIT_DELAY %token LOGSTDERROR %token LOGFACILITY %token LOGNAME @@ -418,6 +409,7 @@ extern char *finame; %token DNS_SERVERS_NO %token DNS_USE_SEARCH %token DNS_SEARCH_FMATCH +%token DNS_NAPTR_IGNORE_RFC %token DNS_CACHE_INIT %token DNS_USE_CACHE %token DNS_USE_FAILOVER @@ -449,7 +441,6 @@ extern char *finame; %token SOCKET_WORKERS %token CHECK_VIA %token PHONE2TEL -%token SYN_BRANCH %token MEMLOG %token MEMDBG %token MEMSUM @@ -519,25 +510,6 @@ extern char *finame; %token DISABLE_SCTP %token ENABLE_SCTP %token SCTP_CHILDREN -%token SCTP_SOCKET_RCVBUF -%token SCTP_SOCKET_SNDBUF -%token SCTP_AUTOCLOSE -%token SCTP_SEND_TTL -%token SCTP_SEND_RETRIES -%token SCTP_ASSOC_TRACKING -%token SCTP_ASSOC_REUSE -%token SCTP_MAX_ASSOCS -%token SCTP_SRTO_INITIAL -%token SCTP_SRTO_MAX -%token SCTP_SRTO_MIN -%token SCTP_ASOCMAXRXT -%token SCTP_INIT_MAX_ATTEMPTS -%token SCTP_INIT_MAX_TIMEO -%token SCTP_HBINTERVAL -%token SCTP_PATHMAXRXT -%token SCTP_SACK_DELAY -%token SCTP_SACK_FREQ -%token SCTP_MAX_BURST %token ADVERTISED_ADDRESS %token ADVERTISED_PORT %token DISABLE_CORE @@ -560,7 +532,7 @@ extern char *finame; %token MAX_WLOOPS %token PVBUFSIZE %token PVBUFSLOTS -%token HTTP_REPLY_HACK +%token HTTP_REPLY_PARSE %token VERSION_TABLE_CFG %token CFG_DESCRIPTION %token SERVER_ID @@ -586,10 +558,6 @@ extern char *finame; %token ADDEQ -%token STUN_REFRESH_INTERVAL -%token STUN_ALLOW_STUN -%token STUN_ALLOW_FP - /*pre-processor*/ %token SUBST %token SUBSTDEF @@ -852,6 +820,8 @@ assign_stm: | FORK EQUAL error { yyerror("boolean value expected"); } | FORK_DELAY EQUAL NUMBER { set_fork_delay($3); } | FORK_DELAY EQUAL error { yyerror("number expected"); } + | MODINIT_DELAY EQUAL NUMBER { set_modinit_delay($3); } + | MODINIT_DELAY EQUAL error { yyerror("number expected"); } | LOGSTDERROR EQUAL NUMBER { if (!config_check) /* if set from cmd line, don't overwrite from yyparse()*/ if(log_stderr == 0) log_stderr=$3; } @@ -896,6 +866,8 @@ assign_stm: | DNS_USE_SEARCH error { yyerror("boolean value expected"); } | DNS_SEARCH_FMATCH EQUAL NUMBER { default_core_cfg.dns_search_fmatch=$3; } | DNS_SEARCH_FMATCH error { yyerror("boolean value expected"); } + | DNS_NAPTR_IGNORE_RFC EQUAL NUMBER { default_core_cfg.dns_naptr_ignore_rfc=$3; } + | DNS_NAPTR_IGNORE_RFC error { yyerror("boolean value expected"); } | DNS_CACHE_INIT EQUAL NUMBER { IF_DNS_CACHE(dns_cache_init=$3); } | DNS_CACHE_INIT error { yyerror("boolean value expected"); } | DNS_USE_CACHE EQUAL NUMBER { IF_DNS_CACHE(default_core_cfg.use_dns_cache=$3); } @@ -969,8 +941,6 @@ assign_stm: | CHECK_VIA EQUAL error { yyerror("boolean value expected"); } | PHONE2TEL EQUAL NUMBER { phone2tel=$3; } | PHONE2TEL EQUAL error { yyerror("boolean value expected"); } - | SYN_BRANCH EQUAL NUMBER { syn_branch=$3; } - | SYN_BRANCH EQUAL error { yyerror("boolean value expected"); } | MEMLOG EQUAL intno { default_core_cfg.memlog=$3; } | MEMLOG EQUAL error { yyerror("int value expected"); } | MEMDBG EQUAL intno { default_core_cfg.memdbg=$3; } @@ -1131,12 +1101,8 @@ assign_stm: | TCP_SOURCE_IPV4 EQUAL error { yyerror("IPv4 address expected"); } | TCP_SOURCE_IPV6 EQUAL ipv6 { #ifdef USE_TCP - #ifdef USE_IPV6 if (tcp_set_src_addr($3)<0) warn("tcp_source_ipv6 failed"); - #else - warn("IPv6 support not compiled in"); - #endif #else warn("tcp support not compiled in"); #endif @@ -1426,122 +1392,6 @@ assign_stm: #endif } | SCTP_CHILDREN EQUAL error { yyerror("number expected"); } - | SCTP_SOCKET_RCVBUF EQUAL NUMBER { - #ifdef USE_SCTP - sctp_default_cfg.so_rcvbuf=$3; - #else - warn("sctp support not compiled in"); - #endif - } - | SCTP_SOCKET_RCVBUF EQUAL error { yyerror("number expected"); } - | SCTP_SOCKET_SNDBUF EQUAL NUMBER { - #ifdef USE_SCTP - sctp_default_cfg.so_sndbuf=$3; - #else - warn("sctp support not compiled in"); - #endif - } - | SCTP_SOCKET_SNDBUF EQUAL error { yyerror("number expected"); } - | SCTP_AUTOCLOSE EQUAL NUMBER { - #ifdef USE_SCTP - sctp_default_cfg.autoclose=$3; - #else - warn("sctp support not compiled in"); - #endif - } - | SCTP_AUTOCLOSE EQUAL error { yyerror("number expected"); } - | SCTP_SEND_TTL EQUAL NUMBER { - #ifdef USE_SCTP - sctp_default_cfg.send_ttl=$3; - #else - warn("sctp support not compiled in"); - #endif - } - | SCTP_SEND_TTL EQUAL error { yyerror("number expected"); } - | SCTP_SEND_RETRIES EQUAL NUMBER { - #ifdef USE_SCTP - sctp_default_cfg.send_retries=$3; - #else - warn("sctp support not compiled in"); - #endif - } - | SCTP_SEND_RETRIES EQUAL error { yyerror("number expected"); } - | SCTP_ASSOC_TRACKING EQUAL NUMBER { - #ifdef USE_SCTP - #ifdef SCTP_CONN_REUSE - sctp_default_cfg.assoc_tracking=$3; - #else - if ($3) - warn("sctp association tracking/reuse (SCTP_CONN_REUSE) " - "support not compiled in"); - #endif /* SCTP_CONN_REUSE */ - #else - warn("sctp support not compiled in"); - #endif /* USE_SCTP */ - } - | SCTP_ASSOC_TRACKING EQUAL error { yyerror("number expected"); } - | SCTP_ASSOC_REUSE EQUAL NUMBER { - #ifdef USE_SCTP - #ifdef SCTP_CONN_REUSE - sctp_default_cfg.assoc_reuse=$3; - #else - if ($3) - warn("sctp association reuse (SCTP_CONN_REUSE) support" - " not compiled in"); - #endif /* SCTP_CONN_REUSE */ - #else - warn("sctp support not compiled in"); - #endif /* USE_SCTP */ - } - | SCTP_ASSOC_REUSE EQUAL error { yyerror("number expected"); } - | SCTP_MAX_ASSOCS EQUAL intno { - IF_SCTP(sctp_default_cfg.max_assocs=$3); - } - | SCTP_MAX_ASSOCS EQUAL error { yyerror("number expected"); } - | SCTP_SRTO_INITIAL EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.srto_initial=$3); - } - | SCTP_SRTO_INITIAL EQUAL error { yyerror("number expected"); } - | SCTP_SRTO_MAX EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.srto_max=$3); - } - | SCTP_SRTO_MAX EQUAL error { yyerror("number expected"); } - | SCTP_SRTO_MIN EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.srto_min=$3); - } - | SCTP_SRTO_MIN EQUAL error { yyerror("number expected"); } - | SCTP_ASOCMAXRXT EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.asocmaxrxt=$3); - } - | SCTP_ASOCMAXRXT EQUAL error { yyerror("number expected"); } - | SCTP_INIT_MAX_ATTEMPTS EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.init_max_attempts=$3); - } - | SCTP_INIT_MAX_ATTEMPTS EQUAL error { yyerror("number expected"); } - | SCTP_INIT_MAX_TIMEO EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.init_max_timeo=$3); - } - | SCTP_INIT_MAX_TIMEO EQUAL error { yyerror("number expected"); } - | SCTP_HBINTERVAL EQUAL intno { - IF_SCTP(sctp_default_cfg.hbinterval=$3); - } - | SCTP_HBINTERVAL EQUAL error { yyerror("number expected"); } - | SCTP_PATHMAXRXT EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.pathmaxrxt=$3); - } - | SCTP_PATHMAXRXT EQUAL error { yyerror("number expected"); } - | SCTP_SACK_DELAY EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.sack_delay=$3); - } - | SCTP_SACK_DELAY EQUAL error { yyerror("number expected"); } - | SCTP_SACK_FREQ EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.sack_freq=$3); - } - | SCTP_SACK_FREQ EQUAL error { yyerror("number expected"); } - | SCTP_MAX_BURST EQUAL NUMBER { - IF_SCTP(sctp_default_cfg.max_burst=$3); - } - | SCTP_MAX_BURST EQUAL error { yyerror("number expected"); } | SERVER_SIGNATURE EQUAL NUMBER { server_signature=$3; } | SERVER_SIGNATURE EQUAL error { yyerror("boolean value expected"); } | SERVER_HEADER EQUAL STRING { server_hdr.s=$3; @@ -1706,14 +1556,8 @@ assign_stm: | PVBUFSIZE EQUAL error { yyerror("number expected"); } | PVBUFSLOTS EQUAL NUMBER { pv_set_buffer_slots($3); } | PVBUFSLOTS EQUAL error { yyerror("number expected"); } - | HTTP_REPLY_HACK EQUAL NUMBER { http_reply_hack=$3; } - | HTTP_REPLY_HACK EQUAL error { yyerror("boolean value expected"); } - | STUN_REFRESH_INTERVAL EQUAL NUMBER { IF_STUN(stun_refresh_interval=$3); } - | STUN_REFRESH_INTERVAL EQUAL error{ yyerror("number expected"); } - | STUN_ALLOW_STUN EQUAL NUMBER { IF_STUN(stun_allow_stun=$3); } - | STUN_ALLOW_STUN EQUAL error{ yyerror("number expected"); } - | STUN_ALLOW_FP EQUAL NUMBER { IF_STUN(stun_allow_fp=$3) ; } - | STUN_ALLOW_FP EQUAL error{ yyerror("number expected"); } + | HTTP_REPLY_PARSE EQUAL NUMBER { http_reply_parse=$3; } + | HTTP_REPLY_PARSE EQUAL error { yyerror("boolean value expected"); } | SERVER_ID EQUAL NUMBER { server_id=$3; } | LATENCY_LOG EQUAL NUMBER { default_core_cfg.latency_log=$3; } | LATENCY_LOG EQUAL error { yyerror("number expected"); } @@ -1869,17 +1713,12 @@ ipv6addr: if ($$==0) { LOG(L_CRIT, "ERROR: cfg. parser: out of memory.\n"); } else { - #ifdef USE_IPV6 memset($$, 0, sizeof(struct ip_addr)); $$->af=AF_INET6; $$->len=16; if (inet_pton(AF_INET6, $1, $$->u.addr)<=0) { yyerror("bad ipv6 address"); } - #else - yyerror("ipv6 address & no ipv6 support compiled in"); - YYABORT; - #endif } } ; @@ -2256,10 +2095,8 @@ exp_elem: } if (s_tmp.s){ ip_tmp=str2ip(&s_tmp); - #ifdef USE_IPV6 if (ip_tmp==0) ip_tmp=str2ip6(&s_tmp); - #endif pkg_free(s_tmp.s); if (ip_tmp) { $$=mk_elem($2, $1, 0, NET_ST, @@ -2777,17 +2614,10 @@ attr_id_any_str: ; pvar: PVAR { - pv_spec=pkg_malloc(sizeof(*pv_spec)); - if (!pv_spec) { - yyerror("Not enough memory"); - YYABORT; - } - memset(pv_spec, 0, sizeof(*pv_spec)); s_tmp.s=$1; s_tmp.len=strlen($1); - if (pv_parse_spec(&s_tmp, pv_spec)==0){ - yyerror("unknown script pseudo variable %s", $1 ); - pkg_free(pv_spec); - pv_spec=0; + pv_spec=pv_cache_get(&s_tmp); + if (!pv_spec) { + yyerror("Can't get from cache: %s", $1); YYABORT; } $$=pv_spec; @@ -2802,12 +2632,8 @@ avp_pvar: AVP_OR_PVAR { } memset(lval_tmp, 0, sizeof(*lval_tmp)); s_tmp.s=$1; s_tmp.len=strlen(s_tmp.s); - if (pv_parse_spec2(&s_tmp, &lval_tmp->lv.pvs, 1)==0){ - /* not a pvar, try avps */ - /* lval_tmp might be partially filled by the failed - pv_parse_spec2() (especially if the avp name is the - same as a pv class) => clean it again */ - memset(lval_tmp, 0, sizeof(*lval_tmp)); + lval_tmp->lv.pvs = pv_cache_get(&s_tmp); + if (lval_tmp->lv.pvs==NULL){ lval_tmp->lv.avps.type|= AVP_NAME_STR; lval_tmp->lv.avps.name.s.s = s_tmp.s+1; lval_tmp->lv.avps.name.s.len = s_tmp.len-1; @@ -2854,15 +2680,14 @@ lval: attr_id_ass { yyerror("Not enough memory"); YYABORT; } - lval_tmp->type=LV_PVAR; lval_tmp->lv.pvs=*($1); - pkg_free($1); /* free the pvar spec we just copied */ + lval_tmp->type=LV_PVAR; lval_tmp->lv.pvs=$1; $$=lval_tmp; } | avp_pvar { if (($1)->type==LV_PVAR){ - if (!pv_is_w(&($1)->lv.pvs)) + if (!pv_is_w($1->lv.pvs)) yyerror("read only pvar in assignment left side"); - if ($1->lv.pvs.trans!=0) + if ($1->lv.pvs->trans!=0) yyerror("pvar with transformations in assignment" " left side"); } @@ -2874,14 +2699,14 @@ rval: intno {$$=mk_rve_rval(RV_INT, (void*)$1); } | STRING { s_tmp.s=$1; s_tmp.len=strlen($1); $$=mk_rve_rval(RV_STR, &s_tmp); } | attr_id_any {$$=mk_rve_rval(RV_AVP, $1); pkg_free($1); } - | pvar {$$=mk_rve_rval(RV_PVAR, $1); pkg_free($1); } + | pvar {$$=mk_rve_rval(RV_PVAR, $1); } | avp_pvar { switch($1->type){ case LV_AVP: $$=mk_rve_rval(RV_AVP, &$1->lv.avps); break; case LV_PVAR: - $$=mk_rve_rval(RV_PVAR, &$1->lv.pvs); + $$=mk_rve_rval(RV_PVAR, $1->lv.pvs); break; default: yyerror("BUG: invalid lvalue type "); @@ -2934,8 +2759,24 @@ rval_expr: rval { $$=$1; | rval_expr BIN_LSHIFT rval_expr {$$=mk_rve2(RVE_BLSHIFT_OP, $1, $3);} | rval_expr BIN_RSHIFT rval_expr {$$=mk_rve2(RVE_BRSHIFT_OP, $1, $3);} | rval_expr rve_cmpop rval_expr %prec GT { $$=mk_rve2( $2, $1, $3);} - | rval_expr rve_equalop rval_expr %prec EQUAL_T - { $$=mk_rve2( $2, $1, $3);} + | rval_expr rve_equalop rval_expr %prec EQUAL_T { + /* comparing with $null => treat as defined or !defined */ + if($3->op==RVE_RVAL_OP && $3->left.rval.type==RV_PVAR + && $3->left.rval.v.pvs.type==PVT_NULL) { + if($2==RVE_DIFF_OP || $2==RVE_IDIFF_OP + || $2==RVE_STRDIFF_OP) { + DBG("comparison with $null switched to notdefined operator\n"); + $$=mk_rve1(RVE_DEFINED_OP, $1); + } else { + DBG("comparison with $null switched to defined operator\n"); + $$=mk_rve1(RVE_NOTDEFINED_OP, $1); + } + /* free rve struct for $null */ + rve_destroy($3); + } else { + $$=mk_rve2($2, $1, $3); + } + } | rval_expr LOG_AND rval_expr { $$=mk_rve2(RVE_LAND_OP, $1, $3);} | rval_expr LOG_OR rval_expr { $$=mk_rve2(RVE_LOR_OP, $1, $3);} | LPAREN rval_expr RPAREN { $$=$2;} @@ -3173,7 +3014,7 @@ cmd: } | FORWARD_SCTP error { $$=0; yyerror("missing '(' or ')' ?"); } | FORWARD_SCTP LPAREN error RPAREN { $$=0; - yyerror("bad forward_tls argument"); } + yyerror("bad forward_sctp argument"); } | LOG_TOK LPAREN STRING RPAREN {$$=mk_action(LOG_T, 2, NUMBER_ST, (void*)(L_DBG+1), STRING_ST, $3); set_cfg_pos($$); } diff --git a/cfg/cfg.h b/cfg/cfg.h index b85e44e35..478d540c7 100644 --- a/cfg/cfg.h +++ b/cfg/cfg.h @@ -36,10 +36,10 @@ #define CFG_VAR_STR 3U #define CFG_VAR_POINTER 4U -/* number of bits required for the variable type */ +/*! \brief number of bits required for the variable type */ #define CFG_INPUT_SHIFT 3 -/* input type */ +/*! \brief input types */ #define CFG_INPUT_INT (CFG_VAR_INT << CFG_INPUT_SHIFT) #define CFG_INPUT_STRING (CFG_VAR_STRING << CFG_INPUT_SHIFT) #define CFG_INPUT_STR (CFG_VAR_STR << CFG_INPUT_SHIFT) @@ -47,28 +47,25 @@ #define CFG_VAR_MASK(x) ((x)&((1U<var -/* declares a single variable with integer type */ +/*! \brief declares a single variable with integer type */ int cfg_declare_int(char *group_name, char *var_name, int val, int min, int max, char *descr); -/* declares a single variable with str type */ +/*! \brief declares a single variable with str type */ int cfg_declare_str(char *group_name, char *var_name, char *val, char *descr); -/* Add a varibale to a group instance with integer type. +/*! \brief Add a variable to a group instance with integer type. * The group instance is created if it does not exist. * wrapper function for new_add_var() */ int cfg_ginst_var_int(char *group_name, unsigned int group_id, char *var_name, int val); -/* Add a varibale to a group instance with string type. +/*! \brief Add a variable to a group instance with string type. * The group instance is created if it does not exist. * wrapper function for new_add_var() */ int cfg_ginst_var_string(char *group_name, unsigned int group_id, char *var_name, char *val); -/* Create a new group instance. +/*! \brief Create a new group instance. * wrapper function for new_add_var() */ int cfg_new_ginst(char *group_name, unsigned int group_id); -/* returns the handle of a cfg group */ +/*! \brief returns the handle of a cfg group */ void **cfg_get_handle(char *gname); #endif /* _CFG_H */ diff --git a/cfg_core.c b/cfg_core.c index 55a563818..06edb867a 100644 --- a/cfg_core.c +++ b/cfg_core.c @@ -76,11 +76,7 @@ struct cfg_group_core default_core_cfg = { 0, /* blst_sctp_imask */ #endif /* resolver */ -#ifdef USE_IPV6 1, /*!< dns_try_ipv6 -- on by default */ -#else - 0, /*!< dns_try_ipv6 -- off, if no ipv6 support */ -#endif 0, /*!< dns_try_naptr -- off by default */ 30, /*!< udp transport preference (for naptr) */ 20, /*!< tcp transport preference (for naptr) */ @@ -92,6 +88,7 @@ struct cfg_group_core default_core_cfg = { 1, /*!< dns_search_list */ 1, /*!< dns_search_fmatch */ 0, /*!< dns_reinit */ + 1, /*!< dns_naptr_ignore_rfc */ /* DNS cache */ #ifdef USE_DNS_CACHE 1, /*!< use_dns_cache -- on by default */ @@ -220,13 +217,13 @@ cfg_def_t core_cfg_def[] = { {"dns_try_naptr", CFG_VAR_INT, 0, 1, 0, 0, #endif "enable/disable NAPTR DNS lookups"}, - {"dns_udp_pref", CFG_VAR_INT, 0, 0, 0, reinit_naptr_proto_prefs, + {"dns_udp_pref", CFG_VAR_INT, 0, 0, 0, reinit_proto_prefs, "udp protocol preference when doing NAPTR lookups"}, - {"dns_tcp_pref", CFG_VAR_INT, 0, 0, 0, reinit_naptr_proto_prefs, + {"dns_tcp_pref", CFG_VAR_INT, 0, 0, 0, reinit_proto_prefs, "tcp protocol preference when doing NAPTR lookups"}, - {"dns_tls_pref", CFG_VAR_INT, 0, 0, 0, reinit_naptr_proto_prefs, + {"dns_tls_pref", CFG_VAR_INT, 0, 0, 0, reinit_proto_prefs, "tls protocol preference when doing NAPTR lookups"}, - {"dns_sctp_pref", CFG_VAR_INT, 0, 0, 0, reinit_naptr_proto_prefs, + {"dns_sctp_pref", CFG_VAR_INT, 0, 0, 0, reinit_proto_prefs, "sctp protocol preference when doing NAPTR lookups"}, {"dns_retr_time", CFG_VAR_INT, 0, 0, 0, resolv_reinit, "time in s before retrying a dns request"}, @@ -243,6 +240,8 @@ cfg_def_t core_cfg_def[] = { {"dns_reinit", CFG_VAR_INT|CFG_INPUT_INT, 1, 1, dns_reinit_fixup, resolv_reinit, "set to 1 in order to reinitialize the DNS resolver"}, + {"dns_naptr_ignore_rfc", CFG_VAR_INT, 0, 0, 0, reinit_proto_prefs, + "ignore the Order field required by RFC 2915"}, /* DNS cache */ #ifdef USE_DNS_CACHE {"use_dns_cache", CFG_VAR_INT, 0, 1, use_dns_cache_fixup, 0, diff --git a/cfg_core.h b/cfg_core.h index 4bfbfbb01..3739acba9 100644 --- a/cfg_core.h +++ b/cfg_core.h @@ -80,6 +80,7 @@ struct cfg_group_core { int dns_search_list; int dns_search_fmatch; int dns_reinit; + int dns_naptr_ignore_rfc; /* DNS cache */ #ifdef USE_DNS_CACHE int use_dns_cache; diff --git a/config.h b/config.h index fce4c2257..32cd55ccd 100644 --- a/config.h +++ b/config.h @@ -75,6 +75,10 @@ #define MAX_INSTANCE_SIZE 256 /*!< Maximum length of +sip.instance contact header param value buffer */ +#define MAX_RUID_SIZE 65 /*!< Maximum length of ruid for location records */ + +#define MAX_UA_SIZE 255 /*!< Maximum length of user-agent for location records */ + #define MY_VIA "Via: SIP/2.0/UDP " #define MY_VIA_LEN (sizeof(MY_VIA) - 1) diff --git a/core_cmd.c b/core_cmd.c index a31d124f0..304c49d53 100644 --- a/core_cmd.c +++ b/core_cmd.c @@ -47,10 +47,6 @@ #include "tcp_options.h" #include "core_cmd.h" #include "cfg_core.h" -#ifdef USE_SCTP -#include "sctp_options.h" -#include "sctp_server.h" -#endif #ifdef USE_DNS_CACHE void dns_cache_debug(rpc_t* rpc, void* ctx); @@ -765,6 +761,11 @@ static void core_tcp_list(rpc_t* rpc, void* c) struct tcp_connection* con; int i, len, timeout; + if (tcp_disable) { + rpc->fault(c, 500, "tcp support disabled"); + return; + } + TCPCONN_LOCK; for(i = 0; i < TCP_ID_HASH_SIZE; i++) { for (con = tcpconn_id_hash[i]; con; con = con->id_next) { @@ -834,133 +835,6 @@ static void core_tcp_list(rpc_t* rpc, void* c) } - -static const char* core_sctp_options_doc[] = { - "Returns active sctp options. With one parameter" - " it returns the sctp options set in the kernel for a specific socket" - "(debugging), with 0 filled in for non-kernel related options." - " The parameter can be: \"default\" | \"first\" | address[:port] ." - " With no parameters it returns ser's idea of the current sctp options" - " (intended non-debugging use).", - /* Documentation string */ - 0 /* Method signature(s) */ -}; - -static void core_sctp_options(rpc_t* rpc, void* c) -{ -#ifdef USE_SCTP - void *handle; - struct cfg_group_sctp t; - char* param; - struct socket_info* si; - char* host; - str hs; - int hlen; - int port; - int proto; - - param=0; - if (!sctp_disable){ - /* look for optional socket parameter */ - if (rpc->scan(c, "*s", ¶m)>0){ - si=0; - if (strcasecmp(param, "default")==0){ - si=sendipv4_sctp?sendipv4_sctp:sendipv6_sctp; - }else if (strcasecmp(param, "first")==0){ - si=sctp_listen; - }else{ - if (parse_phostport(param, &host, &hlen, &port, &proto)!=0){ - rpc->fault(c, 500, "bad param (use address, address:port," - " default or first)"); - return; - } - if (proto && proto!=PROTO_SCTP){ - rpc->fault(c, 500, "bad protocol in param (only SCTP" - " allowed)"); - return; - } - hs.s=host; - hs.len=hlen; - si=grep_sock_info(&hs, port, PROTO_SCTP); - if (si==0){ - rpc->fault(c, 500, "not listening on sctp %s", param); - return; - } - } - if (si==0 || si->socket==-1){ - rpc->fault(c, 500, "could not find a sctp socket"); - return; - } - memset(&t, 0, sizeof(t)); - if (sctp_get_cfg_from_sock(si->socket, &t)!=0){ - rpc->fault(c, 500, "failed to get socket options"); - return; - } - }else{ - sctp_options_get(&t); - } - rpc->add(c, "{", &handle); - rpc->struct_add(handle, "ddddddddddddddddddd", - "sctp_socket_rcvbuf", t.so_rcvbuf, - "sctp_socket_sndbuf", t.so_sndbuf, - "sctp_autoclose", t.autoclose, - "sctp_send_ttl", t.send_ttl, - "sctp_send_retries", t.send_retries, - "sctp_assoc_tracking", t.assoc_tracking, - "sctp_assoc_reuse", t.assoc_reuse, - "sctp_max_assocs", t.max_assocs, - "sctp_srto_initial", t.srto_initial, - "sctp_srto_max", t.srto_max, - "sctp_srto_min", t.srto_min, - "sctp_asocmaxrxt", t.asocmaxrxt, - "sctp_init_max_attempts", t.init_max_attempts, - "sctp_init_max_timeo",t.init_max_timeo, - "sctp_hbinterval", t.hbinterval, - "sctp_pathmaxrxt", t.pathmaxrxt, - "sctp_sack_delay", t.sack_delay, - "sctp_sack_freq", t.sack_freq, - "sctp_max_burst", t.max_burst - ); - }else{ - rpc->fault(c, 500, "sctp support disabled"); - } -#else - rpc->fault(c, 500, "sctp support not compiled"); -#endif -} - - - -static const char* core_sctpinfo_doc[] = { - "Returns sctp related info.", /* Documentation string */ - 0 /* Method signature(s) */ -}; - -static void core_sctpinfo(rpc_t* rpc, void* c) -{ -#ifdef USE_SCTP - void *handle; - struct sctp_gen_info i; - - if (!sctp_disable){ - sctp_get_info(&i); - rpc->add(c, "{", &handle); - rpc->struct_add(handle, "ddd", - "opened_connections", i.sctp_connections_no, - "tracked_connections", i.sctp_tracked_no, - "total_connections", i.sctp_total_connections - ); - }else{ - rpc->fault(c, 500, "sctp support disabled"); - } -#else - rpc->fault(c, 500, "sctp support not compiled"); -#endif -} - - - - static const char* core_udp4rawinfo_doc[] = { "Returns udp4_raw related info.", /* Documentation string */ 0 /* Method signature(s) */ @@ -1106,9 +980,6 @@ static rpc_export_t core_rpc_methods[] = { {"core.tcp_info", core_tcpinfo, core_tcpinfo_doc, 0}, {"core.tcp_options", core_tcp_options, core_tcp_options_doc,0}, {"core.tcp_list", core_tcp_list, core_tcp_list_doc,0}, - {"core.sctp_options", core_sctp_options, core_sctp_options_doc, - 0}, - {"core.sctp_info", core_sctpinfo, core_sctpinfo_doc, 0}, {"core.udp4_raw_info", core_udp4rawinfo, core_udp4rawinfo_doc, 0}, {"core.aliases_list", core_aliases_list, core_aliases_list_doc, 0}, diff --git a/counters.c b/counters.c index 6e5ffbbb0..3bfe54223 100644 --- a/counters.c +++ b/counters.c @@ -89,12 +89,20 @@ static int grp_no; /* number of groups */ /** counters array. a[proc_no][counter_id] => _cnst_vals[proc_no*cnts_no+counter_id] */ -counter_array_t* _cnts_vals; +counter_array_t* _cnts_vals = 0; int _cnts_row_len; /* number of elements per row */ static int cnts_no; /* number of registered counters */ static int cnts_max_rows; /* set to 0 if not yet fully init */ +int counters_initialized(void) +{ + if (unlikely(_cnts_vals == 0)) { + /* not init yet */ + return 0; + } + return 1; +} /** init the coutner hash table(s). * @return 0 on success, -1 on error. diff --git a/counters.h b/counters.h index ea16e28cf..9fd7c3248 100644 --- a/counters.h +++ b/counters.h @@ -87,6 +87,7 @@ extern int _cnts_row_len; /* number of elements per row */ +int counters_initialized(void); int init_counters(void); void destroy_counters(void); int counters_prefork_init(int max_process_no); diff --git a/data_lump.h b/data_lump.h index 88a1f0d5e..d4b24f097 100644 --- a/data_lump.h +++ b/data_lump.h @@ -75,11 +75,11 @@ struct lump* insert_cond_lump_after(struct lump* after, enum lump_conditions c, struct lump* insert_cond_lump_before(struct lump* after, enum lump_conditions c, enum _hdr_types_t type); -/*! \brief removes an already existing header */ /* set an anchor if there is no existing one at the given offset, * otherwise return the existing anchor */ struct lump* anchor_lump2(struct sip_msg* msg, int offset, int len, enum _hdr_types_t type, int *is_ref); +/*! \brief removes an already existing header */ struct lump* del_lump(struct sip_msg* msg, int offset, int len, enum _hdr_types_t type); /*! \brief set an anchor */ struct lump* anchor_lump(struct sip_msg* msg, int offset, int len, enum _hdr_types_t type); diff --git a/dns_cache.c b/dns_cache.c index 5690cb6d6..41c93d879 100644 --- a/dns_cache.c +++ b/dns_cache.c @@ -1891,10 +1891,8 @@ inline static struct dns_hash_entry* dns_cache_do_request(str* name, int type) #endif /* USE_DNS_CACHE_STATS */ if (type==T_A){ -#ifdef USE_IPV6 if (str2ip6(name)!=0) goto end; -#endif /* USE_IPV6 */ if ((ip=str2ip(name))!=0){ e=dns_cache_mk_ip_entry(name, ip); if (likely(e)) @@ -1902,7 +1900,6 @@ inline static struct dns_hash_entry* dns_cache_do_request(str* name, int type) goto end; /* we do not cache obvious stuff */ } } -#ifdef USE_IPV6 else if (type==T_AAAA){ if (str2ip(name)!=0) goto end; @@ -1913,7 +1910,6 @@ inline static struct dns_hash_entry* dns_cache_do_request(str* name, int type) goto end;/* we do not cache obvious stuff */ } } -#endif /* USE_IPV6 */ #ifdef DNS_WATCHDOG_SUPPORT if (atomic_get(dns_servers_up)==0) goto end; /* the servers are down, needless to perform the query */ @@ -2412,16 +2408,9 @@ inline static struct hostent* dns_entry2he(struct dns_hash_entry* e) len=4; break; case T_AAAA: -#ifdef USE_IPV6 af=AF_INET6; len=16; break; -#else /* USE_IPV6 */ - LOG(L_ERR, "ERROR: dns_entry2he: IPv6 dns cache entry, but " - "IPv6 support disabled at compile time" - " (recompile with -DUSE_IPV6)\n"); - return 0; -#endif /* USE_IPV6 */ default: LOG(L_CRIT, "BUG: dns_entry2he: wrong entry type %d for %.*s\n", e->type, e->name_len, e->name); @@ -2472,10 +2461,8 @@ inline static struct hostent* dns_a_get_he(str* name) struct hostent* he; e=0; -#ifdef USE_IPV6 if (str2ip6(name)!=0) return 0; -#endif if ((ip=str2ip(name))!=0){ return ip_addr2he(name, ip); } @@ -2488,7 +2475,6 @@ inline static struct hostent* dns_a_get_he(str* name) } -#ifdef USE_IPV6 /* gethostbyname compatibility: performs an aaaa_lookup and returns a pointer * to a statical internal hostent structure * returns 0 on success, <0 on error (see the error codes) @@ -2512,7 +2498,6 @@ inline static struct hostent* dns_aaaa_get_he(str* name) dns_hash_put(e); return he; } -#endif @@ -2527,16 +2512,10 @@ inline static int dns_rr2ip(int type, struct dns_rr* rr, struct ip_addr* ip) return 0; break; case T_AAAA: -#ifdef USE_IPV6 ip->af=AF_INET6; ip->len=16; memcpy(ip->u.addr, ((struct aaaa_rdata*)rr->rdata)->ip6, 16); return 0; -#else /* USE_IPV6 */ - LOG(L_ERR, "ERROR: dns_rr2ip: IPv6 dns rr, but IPv6 support" - "disabled at compile time (recompile with " - "-DUSE_IPV6)\n" ); -#endif /*USE_IPV6 */ break; } return -1; @@ -2554,7 +2533,6 @@ inline static int dns_rr2ip(int type, struct dns_rr* rr, struct ip_addr* ip) */ struct hostent* dns_get_he(str* name, int flags) { -#ifdef USE_IPV6 struct hostent* he; if ((flags&(DNS_IPV6_FIRST|DNS_IPV6_ONLY))){ @@ -2570,9 +2548,6 @@ struct hostent* dns_get_he(str* name, int flags) he=dns_aaaa_get_he(name); } return he; -#else /* USE_IPV6 */ - return dns_a_get_he(name); -#endif /* USE_IPV6 */ } @@ -2624,7 +2599,8 @@ struct hostent* dns_resolvehost(char* name) ret = _resolvehost(name); if(unlikely(!ret)){ /* increment dns error counter */ - counter_inc(dns_cnts_h.failed_dns_req); + if(counters_initialized()) + counter_inc(dns_cnts_h.failed_dns_req); } return ret; } @@ -2705,42 +2681,23 @@ struct hostent* dns_srv_sip_resolvehost(str* name, unsigned short* port, }else{ /* check if it's an ip address */ if ( ((ip=str2ip(name))!=0) -#ifdef USE_IPV6 || ((ip=str2ip6(name))!=0) -#endif ){ /* we are lucky, this is an ip address */ return ip_addr2he(name,ip); } + if(srv_proto==PROTO_WS || srv_proto==PROTO_WS) { + /* no srv records for web sockets */ + return 0; + } + switch(srv_proto){ - case PROTO_NONE: /* no proto specified, use udp */ - if (proto) - *proto=PROTO_UDP; - /* no break */ case PROTO_UDP: - memcpy(tmp, SRV_UDP_PREFIX, SRV_UDP_PREFIX_LEN); - memcpy(tmp+SRV_UDP_PREFIX_LEN, name->s, name->len); - tmp[SRV_UDP_PREFIX_LEN + name->len] = '\0'; - len=SRV_UDP_PREFIX_LEN + name->len; - break; case PROTO_TCP: - memcpy(tmp, SRV_TCP_PREFIX, SRV_TCP_PREFIX_LEN); - memcpy(tmp+SRV_TCP_PREFIX_LEN, name->s, name->len); - tmp[SRV_TCP_PREFIX_LEN + name->len] = '\0'; - len=SRV_TCP_PREFIX_LEN + name->len; - break; case PROTO_TLS: - memcpy(tmp, SRV_TLS_PREFIX, SRV_TLS_PREFIX_LEN); - memcpy(tmp+SRV_TLS_PREFIX_LEN, name->s, name->len); - tmp[SRV_TLS_PREFIX_LEN + name->len] = '\0'; - len=SRV_TLS_PREFIX_LEN + name->len; - break; case PROTO_SCTP: - memcpy(tmp, SRV_SCTP_PREFIX, SRV_SCTP_PREFIX_LEN); - memcpy(tmp+SRV_SCTP_PREFIX_LEN, name->s, name->len); - tmp[SRV_SCTP_PREFIX_LEN + name->len] = '\0'; - len=SRV_SCTP_PREFIX_LEN + name->len; + create_srv_name(srv_proto, name, tmp); break; default: LOG(L_CRIT, "BUG: sip_resolvehost: unknown proto %d\n", @@ -2871,17 +2828,13 @@ struct hostent* dns_naptr_sip_resolvehost(str* name, unsigned short* port, *proto=PROTO_UDP; /* just in case we don't find another */ /* check if it's an ip address */ if ( ((tmp_ip=str2ip(name))!=0) -#ifdef USE_IPV6 || ((tmp_ip=str2ip6(name))!=0) -#endif ){ /* we are lucky, this is an ip address */ -#ifdef USE_IPV6 if (((dns_flags&DNS_IPV4_ONLY) && (tmp_ip->af==AF_INET6))|| ((dns_flags&DNS_IPV6_ONLY) && (tmp_ip->af==AF_INET))){ return 0; } -#endif *port=SIP_PORT; return ip_addr2he(name, tmp_ip); } @@ -2984,10 +2937,8 @@ inline static int dns_a_resolve( struct dns_hash_entry** e, ret=-E_DNS_NO_IP; if (*e==0){ /* do lookup */ /* if ip don't set *e */ -#ifdef USE_IPV6 if (str2ip6(name)!=0) goto error; -#endif if ((tmp=str2ip(name))!=0){ *ip=*tmp; *rr_no=0; @@ -3017,7 +2968,6 @@ error: } -#ifdef USE_IPV6 /* lookup, fills the dns_entry pointer and the ip addr. * (with the first good ip). if *e ==0 does the a lookup, and changes it * to the result, if not it uses the current value and tries to use @@ -3064,7 +3014,6 @@ inline static int dns_aaaa_resolve( struct dns_hash_entry** e, error: return ret; } -#endif /* USE_IPV6 */ @@ -3089,7 +3038,6 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e, ret=-E_DNS_NO_IP; if (*e==0){ /* first call */ -#ifdef USE_IPV6 if ((flags&(DNS_IPV6_FIRST|DNS_IPV6_ONLY))){ ret=dns_aaaa_resolve(e, rr_no, name, ip); if (ret>=0) return ret; @@ -3102,9 +3050,6 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e, }else if (!(flags&(DNS_IPV6_ONLY|DNS_IPV4_ONLY))){ ret=dns_aaaa_resolve(e, rr_no, name, ip); } -#else /* USE_IPV6 */ - ret=dns_a_resolve(e, rr_no, name, ip); -#endif /* USE_IPV6 */ }else if ((*e)->type==T_A){ /* continue A resolving */ /* retrieve host name from the hash entry (ignore name which might @@ -3112,7 +3057,6 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e, host.s=(*e)->name; host.len=(*e)->name_len; ret=dns_a_resolve(e, rr_no, &host, ip); -#ifdef USE_IPV6 if (ret>=0) return ret; if (!(flags&(DNS_IPV6_ONLY|DNS_IPV6_FIRST|DNS_IPV4_ONLY))){ /* not found, try with AAAA */ @@ -3123,13 +3067,11 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e, /* delay original record release until we're finished with host*/ dns_hash_put(orig); } -#endif /* USE_IPV6 */ }else if ((*e)->type==T_AAAA){ /* retrieve host name from the hash entry (ignore name which might be null when continuing a srv lookup) */ host.s=(*e)->name; host.len=(*e)->name_len; -#ifdef USE_IPV6 /* continue AAAA resolving */ ret=dns_aaaa_resolve(e, rr_no, &host, ip); if (ret>=0) return ret; @@ -3142,15 +3084,6 @@ inline static int dns_ip_resolve( struct dns_hash_entry** e, /* delay original record release until we're finished with host*/ dns_hash_put(orig); } -#else /* USE_IPV6 */ - /* ipv6 disabled, try with A */ - orig=*e; - *e=0; - *rr_no=0; - ret=dns_a_resolve(e, rr_no, &host, ip); - /* delay original record release until we're finished with host*/ - dns_hash_put(orig); -#endif /* USE_IPV6 */ }else{ LOG(L_CRIT, "BUG: dns_ip_resolve: invalid record type %d\n", (*e)->type); @@ -3282,23 +3215,24 @@ error: * h must be initialized prior to calling this function and can be used to * get the subsequent ips * returns: <0 on error - * 0 on success and it fills *ip, *port, dns_sip_resolve_h - * WARNING: when finished, dns_sip_resolve_put(h) must be called! + * 0 on success and it fills *ip, *port, *h */ inline static int dns_srv_sip_resolve(struct dns_srv_handle* h, str* name, struct ip_addr* ip, unsigned short* port, char* proto, int flags) { + struct dns_srv_proto srv_proto_list[PROTO_LAST]; static char tmp[MAX_DNS_NAME]; /* tmp. buff. for SRV lookups */ - int len; str srv_name; struct ip_addr* tmp_ip; int ret; struct hostent* he; - char srv_proto; + size_t i,list_len; + char origproto; + origproto = *proto; if (dns_hash==0){ /* not init => use normal, non-cached version */ - LOG(L_WARN, "WARNING: dns_sip_resolve: called before dns cache" + LOG(L_WARN, "WARNING: dns_srv_sip_resolve: called before dns cache" " initialization\n"); h->srv=h->a=0; he=_sip_resolvehost(name, port, proto); @@ -3308,92 +3242,63 @@ inline static int dns_srv_sip_resolve(struct dns_srv_handle* h, str* name, } return -E_DNS_NO_SRV; } - len=0; if ((h->srv==0) && (h->a==0)){ /* first call */ - if (proto){ /* makes sure we have a protocol set*/ - if (*proto==0) - *proto=srv_proto=PROTO_UDP; /* default */ - else - srv_proto=*proto; - }else{ - srv_proto=PROTO_UDP; + if (proto && *proto==0){ /* makes sure we have a protocol set*/ + *proto=PROTO_UDP; /* default */ } - h->port=(srv_proto==PROTO_TLS)?SIPS_PORT:SIP_PORT; /* just in case we + h->port=(*proto==PROTO_TLS)?SIPS_PORT:SIP_PORT; /* just in case we don't find another */ - h->proto=srv_proto; /* store initial protocol */ + h->proto=*proto; /* store initial protocol */ if (port){ if (*port==0){ /* try SRV if initial call & no port specified * (draft-ietf-sip-srv-06) */ if ((name->len+SRV_MAX_PREFIX_LEN+1)>MAX_DNS_NAME){ - LOG(L_WARN, "WARNING: dns_sip_resolvehost: domain name too" + LOG(L_WARN, "WARNING: dns_srv_sip_resolve: domain name too" " long (%d), unable to perform SRV lookup\n", name->len); }else{ /* check if it's an ip address */ if ( ((tmp_ip=str2ip(name))!=0) -#ifdef USE_IPV6 || ((tmp_ip=str2ip6(name))!=0) -#endif ){ /* we are lucky, this is an ip address */ -#ifdef USE_IPV6 if (((flags&DNS_IPV4_ONLY) && (tmp_ip->af==AF_INET6))|| ((flags&DNS_IPV6_ONLY) && (tmp_ip->af==AF_INET))){ return -E_DNS_AF_MISMATCH; } -#endif *ip=*tmp_ip; *port=h->port; /* proto already set */ return 0; } - switch(srv_proto){ - case PROTO_NONE: /* no proto specified, use udp */ - if (proto) - *proto=PROTO_UDP; - /* no break */ - case PROTO_UDP: - memcpy(tmp, SRV_UDP_PREFIX, SRV_UDP_PREFIX_LEN); - memcpy(tmp+SRV_UDP_PREFIX_LEN, name->s, name->len); - tmp[SRV_UDP_PREFIX_LEN + name->len] = '\0'; - len=SRV_UDP_PREFIX_LEN + name->len; - break; - case PROTO_TCP: - memcpy(tmp, SRV_TCP_PREFIX, SRV_TCP_PREFIX_LEN); - memcpy(tmp+SRV_TCP_PREFIX_LEN, name->s, name->len); - tmp[SRV_TCP_PREFIX_LEN + name->len] = '\0'; - len=SRV_TCP_PREFIX_LEN + name->len; - break; - case PROTO_TLS: - memcpy(tmp, SRV_TLS_PREFIX, SRV_TLS_PREFIX_LEN); - memcpy(tmp+SRV_TLS_PREFIX_LEN, name->s, name->len); - tmp[SRV_TLS_PREFIX_LEN + name->len] = '\0'; - len=SRV_TLS_PREFIX_LEN + name->len; - break; - case PROTO_SCTP: - memcpy(tmp, SRV_SCTP_PREFIX, SRV_SCTP_PREFIX_LEN); - memcpy(tmp+SRV_SCTP_PREFIX_LEN, name->s, name->len); - tmp[SRV_SCTP_PREFIX_LEN + name->len] = '\0'; - len=SRV_SCTP_PREFIX_LEN + name->len; - break; - default: - LOG(L_CRIT, "BUG: sip_resolvehost: " - "unknown proto %d\n", (int)srv_proto); - return -E_DNS_CRITICAL; - } - srv_name.s=tmp; - srv_name.len=len; - if ((ret=dns_srv_resolve_ip(h, &srv_name, ip, - port, flags))>=0) - { + /* looping on the ordered list until we found a protocol what has srv record */ + list_len = create_srv_pref_list(&origproto, srv_proto_list); + for (i=0; i=0) + { + h->proto = *proto = srv_proto_list[i].proto; #ifdef DNS_CACHE_DEBUG - DBG("dns_sip_resolve(%.*s, %d, %d), srv0, ret=%d\n", - name->len, name->s, h->srv_no, h->ip_no, ret); + DBG("dns_srv_sip_resolve(%.*s, %d, %d), srv0, ret=%d\n", + name->len, name->s, h->srv_no, h->ip_no, ret); #endif - /* proto already set */ - return ret; + return ret; + } } } }else{ /* if (*port==0) */ @@ -3408,13 +3313,12 @@ inline static int dns_srv_sip_resolve(struct dns_srv_handle* h, str* name, ret=dns_srv_resolve_ip(h, &srv_name, ip, port, flags); if (proto) *proto=h->proto; - DBG("dns_sip_resolve(%.*s, %d, %d), srv, ret=%d\n", + DBG("dns_srv_sip_resolve(%.*s, %d, %d), srv, ret=%d\n", name->len, name->s, h->srv_no, h->ip_no, ret); return ret; } -/*skip_srv:*/ if (name->len >= MAX_DNS_NAME) { - LOG(L_ERR, "dns_sip_resolve: domain name too long\n"); + LOG(L_ERR, "dns_srv_sip_resolve: domain name too long\n"); return -E_DNS_NAME_TOO_LONG; } ret=dns_ip_resolve(&h->a, &h->ip_no, name, ip, flags); @@ -3423,7 +3327,7 @@ inline static int dns_srv_sip_resolve(struct dns_srv_handle* h, str* name, if (proto) *proto=h->proto; #ifdef DNS_CACHE_DEBUG - DBG("dns_sip_resolve(%.*s, %d, %d), ip, ret=%d\n", + DBG("dns_srv_sip_resolve(%.*s, %d, %d), ip, ret=%d\n", name->len, name->s, h->srv_no, h->ip_no, ret); #endif return ret; @@ -3453,11 +3357,12 @@ inline static int dns_naptr_sip_resolve(struct dns_srv_handle* h, str* name, struct ip_addr* tmp_ip; naptr_bmp_t tried_bmp; struct dns_hash_entry* e; - char n_proto; + char n_proto, origproto; str srv_name; int ret; ret=-E_DNS_NO_NAPTR; + origproto=*proto; if (dns_hash==0){ /* not init => use normal, non-cached version */ LOG(L_WARN, "WARNING: dns_sip_resolve: called before dns cache" " initialization\n"); @@ -3475,17 +3380,13 @@ inline static int dns_naptr_sip_resolve(struct dns_srv_handle* h, str* name, /* check if it's an ip address */ if ( ((tmp_ip=str2ip(name))!=0) -#ifdef USE_IPV6 || ((tmp_ip=str2ip6(name))!=0) -#endif ){ /* we are lucky, this is an ip address */ -#ifdef USE_IPV6 if (((flags&DNS_IPV4_ONLY) && (tmp_ip->af==AF_INET6))|| ((flags&DNS_IPV6_ONLY) && (tmp_ip->af==AF_INET))){ return -E_DNS_AF_MISMATCH; } -#endif *ip=*tmp_ip; h->port=SIP_PORT; h->proto=*proto; @@ -3517,6 +3418,7 @@ inline static int dns_naptr_sip_resolve(struct dns_srv_handle* h, str* name, from previous dns_srv_sip_resolve calls */ } naptr_not_found: + *proto=origproto; return dns_srv_sip_resolve(h, name, ip, port, proto, flags); } #endif /* USE_NAPTR */ @@ -3534,7 +3436,6 @@ naptr_not_found: * get the subsequent ips * returns: <0 on error * 0 on success and it fills *ip, *port, dns_sip_resolve_h - * WARNING: when finished, dns_sip_resolve_put(h) must be called! */ int dns_sip_resolve(struct dns_srv_handle* h, str* name, struct ip_addr* ip, unsigned short* port, char* proto, @@ -3564,7 +3465,6 @@ inline static int dns_a_get_ip(str* name, struct ip_addr* ip) } -#ifdef USE_IPV6 inline static int dns_aaaa_get_ip(str* name, struct ip_addr* ip) { struct dns_hash_entry* e; @@ -3577,7 +3477,6 @@ inline static int dns_aaaa_get_ip(str* name, struct ip_addr* ip) if (e) dns_hash_put(e); return ret; } -#endif /* USE_IPV6 */ @@ -4288,7 +4187,6 @@ int dns_cache_add_record(unsigned short type, } break; case T_AAAA: -#ifdef USE_IPV6 ip_addr = str2ip6(value); if (!ip_addr) { LOG(L_ERR, "ERROR: Malformed ip address: %.*s\n", @@ -4296,10 +4194,6 @@ int dns_cache_add_record(unsigned short type, return -1; } break; -#else /* USE_IPV6 */ - LOG(L_ERR, "ERROR: IPv6 support is disabled\n"); - return -1; -#endif /* USE_IPV6 */ case T_SRV: rr_name = *value; break; @@ -4596,7 +4490,6 @@ int dns_cache_delete_single_record(unsigned short type, } break; case T_AAAA: -#ifdef USE_IPV6 ip_addr = str2ip6(value); if (!ip_addr) { LOG(L_ERR, "ERROR: Malformed ip address: %.*s\n", @@ -4604,10 +4497,6 @@ int dns_cache_delete_single_record(unsigned short type, return -1; } break; -#else /* USE_IPV6 */ - LOG(L_ERR, "ERROR: IPv6 support is disabled\n"); - return -1; -#endif /* USE_IPV6 */ case T_SRV: rr_name = *value; break; diff --git a/dns_func.c b/dns_func.c new file mode 100644 index 000000000..da2ce7b75 --- /dev/null +++ b/dns_func.c @@ -0,0 +1,55 @@ + +/* + * $Id$ + * + * Copyright (C) 2013 mariuszbi@gmail.com + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +/* + * DNS wrappers + */ +/* + * History: + * -------- + * 2013-03 initial version (marius) +*/ + +#include "dns_func.h" + +#include +#include +#include +#include + +struct hostent; + +struct dns_func_t dns_func = { + res_init, + res_search, + gethostbyname, +#ifdef HAVE_GETHOSTBYNAME2 + gethostbyname2 +#else + NULL +#endif +}; + + +void load_dnsfunc(struct dns_func_t *d) { + dns_func.sr_res_init = d->sr_res_init; + dns_func.sr_res_search = d->sr_res_search; + dns_func.sr_gethostbyname = d->sr_gethostbyname; + dns_func.sr_gethostbyname2 = d->sr_gethostbyname2; +} + diff --git a/dns_func.h b/dns_func.h new file mode 100644 index 000000000..623c3b89b --- /dev/null +++ b/dns_func.h @@ -0,0 +1,55 @@ +/* + * $Id$ + * + * Copyright (C) 2013 mariuszbi@gmail.com + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES + * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF + * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR + * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES + * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN + * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF + * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + */ +/* + * DNS Wrapper functions + */ +/* + * History: + * -------- + * 2013-03 initial version (marius) +*/ + +#ifndef DNS_FUNC_H +#define DNS_FUNC_H + +#include + +struct hostent; + +typedef int (*res_init_t)(void); +typedef int (*res_search_t)(const char*, int, int, unsigned char*, int); +typedef struct hostent* (*gethostbyname_t)(const char*); +typedef struct hostent* (*gethostbyname2_t)(const char*, int); + +struct dns_func_t { + res_init_t sr_res_init; + res_search_t sr_res_search; + gethostbyname_t sr_gethostbyname; + gethostbyname2_t sr_gethostbyname2; +}; + +/* + * initiate structure with system values + */ +//extern struct dns_func_t dns_func; + +extern +void load_dnsfunc(struct dns_func_t *d); + + +#endif diff --git a/doc/cfg_list/Makefile b/doc/cfg_list/Makefile index ca86a8a92..7824c8210 100644 --- a/doc/cfg_list/Makefile +++ b/doc/cfg_list/Makefile @@ -22,20 +22,22 @@ files_list= \ $(COREPATH)/sctp_options.c:sctp \ $(COREPATH)/tcp_options.c:tcp \ $(COREPATH)/modules/tm/config.c:tm \ - $(COREPATH)/modules_k/registrar/config.c:registrar \ - $(COREPATH)/modules_k/siputils/config.c:siputils \ - $(COREPATH)/modules_s/maxfwd/maxfwd.c:maxfwd \ + $(COREPATH)/modules/registrar/config.c:registrar \ + $(COREPATH)/modules/siputils/config.c:siputils \ + $(COREPATH)/modules/maxfwd/maxfwd.c:maxfwd \ $(COREPATH)/modules/carrierroute/config.c:carrierroute \ $(COREPATH)/modules/malloc_test/malloc_test.c:malloc_test \ $(COREPATH)/modules/tls/tls_cfg.c:tls \ - $(COREPATH)/modules_k/dispatcher/config.c:dispatcher - + $(COREPATH)/modules/dispatcher/config.c:dispatcher \ + $(COREPATH)/modules/websocket/config.c:websocket \ + $(COREPATH)/modules/outbound/config.c:outbound \ + $(COREPATH)/modules/stun/config.c:stun # list of excluded groups grp_exclude=pa # list of file prefixes to exclude (full path needed) -file_exclude= $(COREPATH)/modules_s/tls/ +file_exclude= $(COREPATH)/modules/tls/ # special per file group overrides # format= grp_filename=... ,where filename does not contain the extension @@ -61,7 +63,7 @@ gcc=gcc # defines used by gcc c_defs=-D__CPU_i386 -D__OS_linux -DSER_VER=2099099 -DPKG_MALLOC -DSHM_MEM \ - -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP \ + -DSHM_MMAP -DDNS_IP_HACK -DUSE_MCAST -DUSE_TCP \ -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR \ -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK -DCC_GCC_LIKE_ASM \ -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \ diff --git a/doc/cfg_list/cfg_core.txt b/doc/cfg_list/cfg_core.txt index be6a56591..15a731f19 100644 --- a/doc/cfg_list/cfg_core.txt +++ b/doc/cfg_list/cfg_core.txt @@ -254,8 +254,39 @@ Configuration Variables for core memory debugging information displayed on exit (flags): 0 - off, 1 - dump all the pkg used blocks (status), 2 - dump all the shm used blocks (status), 4 - summary of pkg used blocks, 8 - - summary of shm used blocks. + - summary of shm used blocks, 16 - short status instead of + dump. Default: 3. - Range: 0 - 15. + Range: 0 - 31. + Type: integer. + +44. core.mem_safety + safety level for memory operations. + Default: 0. + Type: integer. + +45. core.mem_join + join free memory fragments. + Default: 0. + Type: integer. + +46. core.corelog + log level for non-critical core error messages. + Default: -1. + Type: integer. + +47. core.latency_log + log level for latency limits alert messages. + Default: -1. + Type: integer. + +48. core.latency_limit_db + limit is ms for alerting on time consuming db commands. + Default: 0. + Type: integer. + +49. core.latency_limit_action + limit is ms for alerting on time consuming config actions. + Default: 0. Type: integer. diff --git a/doc/cfg_list/cfg_registrar.txt b/doc/cfg_list/cfg_registrar.txt index b959ea161..231238b2b 100644 --- a/doc/cfg_list/cfg_registrar.txt +++ b/doc/cfg_list/cfg_registrar.txt @@ -4,62 +4,63 @@ Configuration Variables for registrar [ this file is autogenerated, do not edit ] - 1. registrar.default_expires + 1. registrar.realm_pref + Realm prefix to be removed. Default is "". + Default: . + Type: string. + + 2. registrar.default_expires Contains number of second to expire if no expire hf or contact expire present. Default: 3600. Type: integer. - 2. registrar.default_expires_range + 3. registrar.default_expires_range Percent from default_expires that will be used in generating the range for the expire interval. Default: 0. Range: 0 - 100. Type: integer. - 3. registrar.min_expires + 4. registrar.min_expires The minimum expires value of a Contact. Value 0 disables the checking. . Default: 60. Type: integer. - 4. registrar.max_expires + 5. registrar.max_expires The maximum expires value of a Contact. Value 0 disables the checking. . Default: 0. Type: integer. - 5. registrar.max_contacts + 6. registrar.max_contacts The maximum number of Contacts for an AOR. Value 0 disables the checking. . Default: 0. Type: integer. - 6. registrar.retry_after + 7. registrar.retry_after If you want to add the Retry-After header field in 5xx replies, set this parameter to a value grater than zero. Default: 0. Type: integer. - 7. registrar.case_sensitive + 8. registrar.case_sensitive If set to 1 then AOR comparison will be case sensitive. Recommended and default is 0, case insensitive. Default: 0. Type: integer. - 8. registrar.default_q + 9. registrar.default_q The parameter represents default q value for new contacts.. Default: -1. Range: -1 - 1000. Type: integer. - 9. registrar.append_branches +10. registrar.append_branches If set to 1(default), lookup will put all contacts found in msg structure. Default: 1. Type: integer. -10. registrar.realm_pref - Realm prefix to be removed. Default is "". - Type: string. - diff --git a/doc/cfg_list/cfg_tcp.txt b/doc/cfg_list/cfg_tcp.txt index a71fe53df..e7f287241 100644 --- a/doc/cfg_list/cfg_tcp.txt +++ b/doc/cfg_list/cfg_tcp.txt @@ -20,121 +20,126 @@ Configuration Variables for tcp Type: integer. 4. tcp.max_connections - maximum connection number, soft limit. + maximum tcp connections number, soft limit. Range: 0 - 2147483647. Type: integer. - 5. tcp.no_connect + 5. tcp.max_tls_connections + maximum tls connections number, soft limit. + Range: 0 - 2147483647. + Type: integer. + + 6. tcp.no_connect if set only accept new connections, never actively open new ones. Range: 0 - 1. Type: integer. - 6. tcp.fd_cache + 7. tcp.fd_cache file descriptor cache for tcp_send. Range: 0 - 1. Type: integer. Read-only. - 7. tcp.async + 8. tcp.async async mode for writes and connects. Range: 0 - 1. Type: integer. Read-only. - 8. tcp.connect_wait + 9. tcp.connect_wait parallel simultaneous connects to the same dst. (0) or one connect. Range: 0 - 1. Type: integer. Read-only. - 9. tcp.conn_wq_max +10. tcp.conn_wq_max maximum bytes queued for write per connection (depends on async). Range: 0 - 1048576. Type: integer. -10. tcp.wq_max +11. tcp.wq_max maximum bytes queued for write allowed globally (depends on async). Range: 0 - 1073741824. Type: integer. -11. tcp.defer_accept +12. tcp.defer_accept 0/1 on linux, seconds on freebsd (see docs). Range: 0 - 3600. Type: integer. Read-only. -12. tcp.delayed_ack +13. tcp.delayed_ack initial ack will be delayed and sent with the first data segment. Range: 0 - 1. Type: integer. -13. tcp.syncnt +14. tcp.syncnt number of syn retransmissions before aborting a connect (0=not set). Range: 0 - 1024. Type: integer. -14. tcp.linger2 +15. tcp.linger2 lifetime of orphaned sockets in FIN_WAIT2 state in s (0=not set). Range: 0 - 3600. Type: integer. -15. tcp.keepalive +16. tcp.keepalive enables/disables keepalives for tcp. Range: 0 - 1. Type: integer. -16. tcp.keepidle +17. tcp.keepidle time before sending a keepalive if the connection is idle (linux). Range: 0 - 86400. Type: integer. -17. tcp.keepintvl +18. tcp.keepintvl time interval between keepalive probes on failure (linux). Range: 0 - 86400. Type: integer. -18. tcp.keepcnt +19. tcp.keepcnt number of failed keepalives before dropping the connection (linux). Range: 0 - 1024. Type: integer. -19. tcp.crlf_ping +20. tcp.crlf_ping enable responding to CRLF SIP-level keepalives . Range: 0 - 1. Type: integer. -20. tcp.accept_aliases +21. tcp.accept_aliases turn on/off tcp aliases (see tcp_accept_aliases) . Range: 0 - 1. Type: integer. -21. tcp.alias_flags +22. tcp.alias_flags flags used for adding new aliases (FORCE_ADD:1 , REPLACE:2) . Range: 0 - 2. Type: integer. -22. tcp.new_conn_alias_flags +23. tcp.new_conn_alias_flags flags for the def. aliases for a new conn. (FORCE_ADD:1, REPLACE:2 . Range: 0 - 2. Type: integer. -23. tcp.accept_no_cl - accept TCP messges without Content-Lenght . +24. tcp.accept_no_cl + accept TCP messges without Content-Length . Range: 0 - 1. Type: integer. -24. tcp.rd_buf_size +25. tcp.rd_buf_size internal read buffer size (should be > max. expected datagram). - Range: 512 - 65536. + Range: 512 - 16777216. Type: integer. -25. tcp.wq_blk_size +26. tcp.wq_blk_size internal async write block size (debugging use only for now). Range: 1 - 65535. Type: integer. diff --git a/doc/cfg_list/cfg_tm.txt b/doc/cfg_list/cfg_tm.txt index 747821494..5600165fd 100644 --- a/doc/cfg_list/cfg_tm.txt +++ b/doc/cfg_list/cfg_tm.txt @@ -16,95 +16,100 @@ Configuration Variables for tm Range: 0 - 1. Type: integer. - 3. tm.fr_timer + 3. tm.callid_matching + perform callid check in transaction matching. + Default: 0. + Type: integer. + + 4. tm.fr_timer timer which hits if no final reply for a request or ACK for a negative INVITE reply arrives (in milliseconds). Default: 30000. Type: integer. - 4. tm.fr_inv_timer + 5. tm.fr_inv_timer timer which hits if no final reply for an INVITE arrives after a provisional message was received (in milliseconds). Default: 120000. Type: integer. - 5. tm.fr_inv_timer_next + 6. tm.fr_inv_timer_next The value [ms] of fr_inv_timer for subsequent branches during serial forking.. Default: 30000. Type: integer. - 6. tm.wt_timer + 7. tm.wt_timer time for which a transaction stays in memory to absorb delayed messages after it completed. Default: 5000. Type: integer. - 7. tm.delete_timer + 8. tm.delete_timer time after which a to-be-deleted transaction currently ref-ed by a process will be tried to be deleted again.. Default: 200. Type: integer. - 8. tm.retr_timer1 + 9. tm.retr_timer1 initial retransmission period (in milliseconds). Default: 500. Type: integer. - 9. tm.retr_timer2 +10. tm.retr_timer2 maximum retransmission period (in milliseconds). Default: 4000. Type: integer. -10. tm.max_inv_lifetime +11. tm.max_inv_lifetime maximum time an invite transaction can live from the moment of creation. Default: 180000. Type: integer. -11. tm.max_noninv_lifetime +12. tm.max_noninv_lifetime maximum time a non-invite transaction can live from the moment of creation. Default: 32000. Type: integer. -12. tm.noisy_ctimer +13. tm.noisy_ctimer if set, INVITE transactions that time-out (FR INV timer) will be always replied. Default: 1. Range: 0 - 1. Type: integer. -13. tm.auto_inv_100 +14. tm.auto_inv_100 automatically send 100 to an INVITE. Default: 1. Range: 0 - 1. Type: integer. -14. tm.auto_inv_100_reason +15. tm.auto_inv_100_reason reason text of the automatically send 100 to an INVITE. Default: trying -- your call is important to us. Type: string. -15. tm.unix_tx_timeout +16. tm.unix_tx_timeout Unix socket transmission timeout, in milliseconds. Default: 500. Type: integer. -16. tm.restart_fr_on_each_reply +17. tm.restart_fr_on_each_reply restart final response timer on each provisional reply. Default: 1. Range: 0 - 1. Type: integer. -17. tm.pass_provisional_replies +18. tm.pass_provisional_replies enable/disable passing of provisional replies to TMCB_LOCAL_RESPONSE_OUT callbacks. Default: 0. Range: 0 - 1. Type: integer. -18. tm.aggregate_challenges +19. tm.aggregate_challenges if the final response is a 401 or a 407, aggregate all the authorization headers (challenges) (rfc3261 requires this to be on). @@ -112,27 +117,27 @@ Configuration Variables for tm Range: 0 - 1. Type: integer. -19. tm.unmatched_cancel +20. tm.unmatched_cancel determines how CANCELs with no matching transaction are handled (0: statefull forwarding, 1: stateless forwarding, 2: drop). Default: 0. Range: 0 - 2. Type: integer. -20. tm.default_code +21. tm.default_code default SIP response code sent by t_reply(), if the function cannot retrieve its parameters. Default: 500. Range: 400 - 699. Type: integer. -21. tm.default_reason +22. tm.default_reason default SIP reason phrase sent by t_reply(), if the function cannot retrieve its parameters. Default: Server Internal Error. Type: string. -22. tm.reparse_invite +23. tm.reparse_invite if set to 1, the CANCEL and negative ACK requests are constructed from the INVITE message which was sent out instead of building them from the received request. @@ -140,55 +145,55 @@ Configuration Variables for tm Range: 0 - 1. Type: integer. -23. tm.ac_extra_hdrs +24. tm.ac_extra_hdrs header fields prefixed by this parameter value are included in the CANCEL and negative ACK messages if they were present in the outgoing INVITE (depends on reparse_invite). Default: . Type: string. -24. tm.blst_503 +25. tm.blst_503 if set to 1, blacklist 503 SIP response sources. Default: 0. Range: 0 - 1. Type: integer. -25. tm.blst_503_def_timeout +26. tm.blst_503_def_timeout default 503 blacklist time (in s), when no Retry-After header is present. Default: 0. Type: integer. -26. tm.blst_503_min_timeout +27. tm.blst_503_min_timeout minimum 503 blacklist time (in s). Default: 0. Type: integer. -27. tm.blst_503_max_timeout +28. tm.blst_503_max_timeout maximum 503 blacklist time (in s). Default: 3600. Type: integer. -28. tm.blst_methods_add +29. tm.blst_methods_add bitmap of method types that trigger blacklisting on transaction timeouts. Default: 1. Type: integer. -29. tm.blst_methods_lookup +30. tm.blst_methods_lookup Bitmap of method types that are looked-up in the blacklist before statefull forwarding. Default: -9. Type: integer. -30. tm.cancel_b_method +31. tm.cancel_b_method How to cancel branches on which no replies were received: 0 - fake reply, 1 - retransmitting the request, 2 - send cancel. Default: 1. Range: 0 - 2. Type: integer. -31. tm.reparse_on_dns_failover +32. tm.reparse_on_dns_failover if set to 1, the SIP message after a DNS failover is constructed from the outgoing message buffer of the failed branch instead of from the received request. @@ -196,13 +201,13 @@ Configuration Variables for tm Range: 0 - 1. Type: integer. -32. tm.disable_6xx_block +33. tm.disable_6xx_block if set to 1, 6xx is treated like a normal reply (breaks rfc). Default: 0. Range: 0 - 1. Type: integer. -33. tm.local_ack_mode +34. tm.local_ack_mode if set to 1 or 2, local 200 ACKs are sent to the same address as the corresponding INVITE (1) or the source of the 200 reply (2) instead of using the contact and the route set (it breaks @@ -212,14 +217,14 @@ Configuration Variables for tm Range: 0 - 2. Type: integer. -34. tm.local_cancel_reason +35. tm.local_cancel_reason if set to 1, a Reason header is added to locally generated CANCELs (see RFC3326). Default: 1. Range: 0 - 1. Type: integer. -35. tm.e2e_cancel_reason +36. tm.e2e_cancel_reason if set to 1, Reason headers from received CANCELs are copied into the corresponding generated hop-by-hop CANCELs. Default: 1. diff --git a/doc/counter_list/Makefile b/doc/counter_list/Makefile index 5b25e942f..d07566b30 100644 --- a/doc/counter_list/Makefile +++ b/doc/counter_list/Makefile @@ -57,7 +57,7 @@ gcc=gcc # defines used by gcc c_defs=-D__CPU_i386 -D__OS_linux -DSER_VER=2099099 -DPKG_MALLOC -DSHM_MEM \ - -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP \ + -DSHM_MMAP -DDNS_IP_HACK -DUSE_MCAST -DUSE_TCP \ -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR \ -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK -DCC_GCC_LIKE_ASM \ -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \ diff --git a/doc/rpc_list/Makefile b/doc/rpc_list/Makefile index 4c2f9e03c..69a9ba56e 100644 --- a/doc/rpc_list/Makefile +++ b/doc/rpc_list/Makefile @@ -22,35 +22,52 @@ docbook_output_dir=docbook # files_list= \ $(COREPATH)/core_cmd.c:core \ + $(COREPATH)/modules/app_lua/app_lua_mod.c:app_lua \ + $(COREPATH)/modules/carrierroute/carrierroute.c:carrierroute \ $(COREPATH)/modules/cfg_rpc/cfg_rpc.c:cfg_rpc \ + $(COREPATH)/modules/cnxcc/cnxcc_mod.c:cnxcc \ + $(COREPATH)/modules/corex/corex_rpc.c:corex \ $(COREPATH)/modules/counters/counters.c:counters \ $(COREPATH)/modules/ctl/ctl.c:ctl \ $(COREPATH)/modules/db_flatstore/flat_rpc.c:db_flatstore \ + $(COREPATH)/modules/db_flatstore/km_flatstore_mod.c:db_flatstore \ + $(COREPATH)/modules/db_text/dbtext.c:db_text \ $(COREPATH)/modules/debugger/debugger_api.c:debugger \ + $(COREPATH)/modules/dialog/dialog.c:dialog \ + $(COREPATH)/modules/dialog_ng/dialog.c:dialog_ng \ $(COREPATH)/modules/dialplan/dialplan.c:dialplan \ + $(COREPATH)/modules/dispatcher/dispatcher.c:dispatcher \ + $(COREPATH)/modules/domain/domain_mod.c:domain \ + $(COREPATH)/modules/drouting/drouting.c:drouting \ + $(COREPATH)/modules/htable/htable.c:htable \ + $(COREPATH)/modules/ims_usrloc_pcscf/ul_rpc.c:ims_usrloc_pcscf \ + $(COREPATH)/modules/ims_usrloc_scscf/ul_rpc.c:ims_usrloc_scscf \ + $(COREPATH)/modules/kex/pkg_stats.c:kex \ $(COREPATH)/modules/lcr/lcr_rpc.c:lcr \ $(COREPATH)/modules/malloc_test/malloc_test.c:malloc_test \ $(COREPATH)/modules/mi_rpc/mi_rpc_mod.c:mi_rpc \ + $(COREPATH)/modules/msrp/msrp_cmap.c:msrp \ + $(COREPATH)/modules/mtree/mtree_mod.c:mtree \ + $(COREPATH)/modules/pdt/pdt.c:pdt \ + $(COREPATH)/modules/permissions/permissions.c:permissions \ + $(COREPATH)/modules/pike/pike_rpc.c:pike \ + $(COREPATH)/modules/pipelimit/pipelimit.c:pipelimit \ $(COREPATH)/modules/prefix_route/pr_rpc.c:prefix_route \ + $(COREPATH)/modules/presence/presence.c:presence \ + $(COREPATH)/modules/pv/pv.c:pv \ $(COREPATH)/modules/ratelimit/ratelimit.c:ratelimit \ + $(COREPATH)/modules/sca/sca.c:sca \ + $(COREPATH)/modules/sctp/sctp_rpc.c:sctp \ + $(COREPATH)/modules/sipcapture/sipcapture.c:sipcapture \ + $(COREPATH)/modules/siptrace/siptrace.c:siptrace \ $(COREPATH)/modules/sl/sl_stats.c:sl \ $(COREPATH)/modules/tls/tls_rpc.c:tls \ $(COREPATH)/modules/tm/tm.c:tm \ - $(COREPATH)/modules_k/dialog/dialog.c:dialog \ - $(COREPATH)/modules_k/dispatcher/dispatcher.c:dispatcher \ - $(COREPATH)/modules_k/domain/domain_mod.c:domain \ - $(COREPATH)/modules_k/htable/htable.c:htable \ - $(COREPATH)/modules_k/kex/pkg_stats.c:kex \ - $(COREPATH)/modules_k/uac/uac_reg.c:uac \ - $(COREPATH)/modules_k/usrloc/ul_rpc.c:usrloc \ - $(COREPATH)/modules_s/cpl-c/cpl_rpc.c:cpl-c \ - $(COREPATH)/modules_s/dispatcher/ds_rpc.c:dispatcher_s \ - $(COREPATH)/modules_s/domain/domain_rpc.c:domain_s \ - $(COREPATH)/modules_s/gflags/gflags.c:gflags \ - $(COREPATH)/modules_s/pdt/pdt.c:pdt \ - $(COREPATH)/modules_s/pike/rpc.c:pike \ - $(COREPATH)/modules_s/presence_b2b/rpc.c:presence_b2b \ - $(COREPATH)/modules_s/usrloc/ul_rpc.c:usrloc_s + $(COREPATH)/modules/uac/uac_reg.c:uac \ + $(COREPATH)/modules/uid_domain/domain_rpc.c:uid_domain \ + $(COREPATH)/modules/uid_gflags/uid_gflags.c:uid_gflags \ + $(COREPATH)/modules/usrloc/ul_rpc.c:usrloc \ + $(COREPATH)/modules/xhttp_pi/xhttp_pi.c:xhttp_pi # list of excluded groups grp_exclude=pa @@ -84,7 +101,7 @@ gcc=gcc # -D__CPU_i386 -DARCH="i386" c_defsX= -D__CPU_x86_64 -D__OS_linux -DSER_VER=3003000 -DPKG_MALLOC -DSHM_MEM \ -DVERSION='\"3.3.0-dev2\"' -DARCH='\"x86_64\"' -DOS=linux_ -DOS_QUOTED='\"linux\"' \ - -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP \ + -DSHM_MMAP -DDNS_IP_HACK -DUSE_MCAST -DUSE_TCP \ -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR \ -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK -DCC_GCC_LIKE_ASM \ -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \ diff --git a/doc/rpc_list/docbook/rpc_dispatcher_s.xml b/doc/rpc_list/docbook/rpc_app_lua.xml similarity index 53% rename from doc/rpc_list/docbook/rpc_dispatcher_s.xml rename to doc/rpc_list/docbook/rpc_app_lua.xml index 7a86537d8..0925d429e 100644 --- a/doc/rpc_list/docbook/rpc_dispatcher_s.xml +++ b/doc/rpc_list/docbook/rpc_app_lua.xml @@ -2,23 +2,23 @@ - + -RPC Exports for dispatcher_s +RPC Exports for app_lua -
dispatcher.dump +
app_lua.reload - Dump dispatcher set configuration + Reload lua script
-
dispatcher.reload +
app_lua.list - Reload dispatcher list from file + list lua scripts diff --git a/doc/rpc_list/docbook/rpc_carrierroute.xml b/doc/rpc_list/docbook/rpc_carrierroute.xml new file mode 100644 index 000000000..c424a8fb0 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_carrierroute.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for carrierroute + + + +
cr.reload_routes + + Reload routes + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_cpl-c.xml b/doc/rpc_list/docbook/rpc_cnxcc.xml similarity index 50% rename from doc/rpc_list/docbook/rpc_cpl-c.xml rename to doc/rpc_list/docbook/rpc_cnxcc.xml index bb22ae620..03f6085b2 100644 --- a/doc/rpc_list/docbook/rpc_cpl-c.xml +++ b/doc/rpc_list/docbook/rpc_cnxcc.xml @@ -2,31 +2,31 @@ - + -RPC Exports for cpl-c +RPC Exports for cnxcc -
cpl.load +
cnxcc.active_clients - Load a CPL script to the server. + List of clients with active calls
-
cpl.remove +
cnxcc.check_client - Remove a CPL script from server. + Check specific client calls
-
cpl.get +
cnxcc.kill_call - Return a CPL script. + Kill call using its call ID diff --git a/doc/rpc_list/docbook/rpc_core.xml b/doc/rpc_list/docbook/rpc_core.xml index dd7e5be3e..851d7702b 100644 --- a/doc/rpc_list/docbook/rpc_core.xml +++ b/doc/rpc_list/docbook/rpc_core.xml @@ -163,31 +163,33 @@ RPC Exports for core
-
core.sctp_options +
core.tcp_list - Returns active sctp options. With one parameter it returns the - sctp options set in the kernel for a specific - socket(debugging), with 0 filled in for non-kernel related - options. The parameter can be: "default" | - "first" | address[:port] . With no parameters it - returns ser's idea of the current sctp options (intended - non-debugging use). + Returns tcp connections details.
-
core.sctp_info +
core.udp4_raw_info - Returns sctp related info. + Returns udp4_raw related info.
-
core.udp4_raw_info +
core.aliases_list - Returns udp4_raw related info. + List local SIP server host aliases + + + +
+ +
core.sockets_list + + List local SIP server listen sockets diff --git a/doc/rpc_list/docbook/rpc_presence_b2b.xml b/doc/rpc_list/docbook/rpc_corex.xml similarity index 57% rename from doc/rpc_list/docbook/rpc_presence_b2b.xml rename to doc/rpc_list/docbook/rpc_corex.xml index 550161145..fcc4f4869 100644 --- a/doc/rpc_list/docbook/rpc_presence_b2b.xml +++ b/doc/rpc_list/docbook/rpc_corex.xml @@ -2,23 +2,23 @@ - + -RPC Exports for presence_b2b +RPC Exports for corex -
presence_b2b.test +
corex.list_sockets - Testing events. + List listening sockets
-
presence_b2b.trace +
corex.list_aliases - Trace events. + List socket aliases diff --git a/doc/rpc_list/docbook/rpc_db_flatstore.xml b/doc/rpc_list/docbook/rpc_db_flatstore.xml index 013ae62e3..fe3739131 100644 --- a/doc/rpc_list/docbook/rpc_db_flatstore.xml +++ b/doc/rpc_list/docbook/rpc_db_flatstore.xml @@ -8,9 +8,9 @@ RPC Exports for db_flatstore -
flatstore.rotate +
flatstore.k_rotate - Documentation missing (flat_rotate_doc). + Close and reopen flatrotate files during log rotation. diff --git a/doc/rpc_list/docbook/rpc_db_text.xml b/doc/rpc_list/docbook/rpc_db_text.xml new file mode 100644 index 000000000..ba99147e0 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_db_text.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for db_text + + + +
db_text.dump + + Write back to disk modified tables + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_debugger.xml b/doc/rpc_list/docbook/rpc_debugger.xml index 893691f2b..59ce7bf43 100644 --- a/doc/rpc_list/docbook/rpc_debugger.xml +++ b/doc/rpc_list/docbook/rpc_debugger.xml @@ -10,7 +10,7 @@ RPC Exports for debugger
dbg.bp - Documentation missing (dbg_rpc_bp_doc). + Breakpoint command @@ -32,4 +32,20 @@ RPC Exports for debugger
+
dbg.mod_level + + Specify module log level + + + +
+ +
dbg.reset_msgid + + Reset msgid on all process + + + +
+ diff --git a/doc/rpc_list/docbook/rpc_usrloc_k.xml b/doc/rpc_list/docbook/rpc_dialog_ng.xml similarity index 66% rename from doc/rpc_list/docbook/rpc_usrloc_k.xml rename to doc/rpc_list/docbook/rpc_dialog_ng.xml index 38c7a0e59..33a4da97e 100644 --- a/doc/rpc_list/docbook/rpc_usrloc_k.xml +++ b/doc/rpc_list/docbook/rpc_dialog_ng.xml @@ -2,15 +2,15 @@ - + -RPC Exports for usrloc_k +RPC Exports for dialog_ng -
ul.dump +
dlg2.list - Dump user location tables + Print all dialogs diff --git a/doc/rpc_list/docbook/rpc_dialplan.xml b/doc/rpc_list/docbook/rpc_dialplan.xml index 72eae4656..b2f64dd9f 100644 --- a/doc/rpc_list/docbook/rpc_dialplan.xml +++ b/doc/rpc_list/docbook/rpc_dialplan.xml @@ -16,7 +16,7 @@ RPC Exports for dialplan
-
dialplan.dump +
dialplan.translate Perform dialplan translation diff --git a/doc/rpc_list/docbook/rpc_domain.xml b/doc/rpc_list/docbook/rpc_domain.xml index 0168ef955..64866424c 100644 --- a/doc/rpc_list/docbook/rpc_domain.xml +++ b/doc/rpc_list/docbook/rpc_domain.xml @@ -10,7 +10,7 @@ RPC Exports for domain
domain.reload - Reload domain table from database + Reload domain tables from database @@ -18,7 +18,7 @@ RPC Exports for domain
domain.dump - Return the contents of domain table + Return the contents of domain and domain_attrs tables diff --git a/doc/rpc_list/docbook/rpc_drouting.xml b/doc/rpc_list/docbook/rpc_drouting.xml new file mode 100644 index 000000000..11af66dbb --- /dev/null +++ b/doc/rpc_list/docbook/rpc_drouting.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for drouting + + + +
drouting.reload + + Write back to disk modified tables + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_htable.xml b/doc/rpc_list/docbook/rpc_htable.xml index ddfa8fd23..84d02c663 100644 --- a/doc/rpc_list/docbook/rpc_htable.xml +++ b/doc/rpc_list/docbook/rpc_htable.xml @@ -16,4 +16,60 @@ RPC Exports for htable
+
htable.delete + + Delete one key from a hash table. + + + +
+ +
htable.get + + Get one key from a hash table. + + + +
+ +
htable.sets + + Set one key in a hash table to a string value. + + + +
+ +
htable.seti + + Set one key in a hash table to an integer value. + + + +
+ +
htable.listTables + + List all htables. + + + +
+ +
htable.reload + + Reload hash table. + + + +
+ +
htable.stats + + Statistics about htables. + + + +
+ diff --git a/doc/rpc_list/docbook/rpc_ims_usrloc_pcscf.xml b/doc/rpc_list/docbook/rpc_ims_usrloc_pcscf.xml new file mode 100644 index 000000000..eaf758c76 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_ims_usrloc_pcscf.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for ims_usrloc_pcscf + + + +
ulpcscf.status + + Dump PCSCF contacts and associated identitites + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_ims_usrloc_scscf.xml b/doc/rpc_list/docbook/rpc_ims_usrloc_scscf.xml new file mode 100644 index 000000000..57b2864ed --- /dev/null +++ b/doc/rpc_list/docbook/rpc_ims_usrloc_scscf.xml @@ -0,0 +1,27 @@ + + + + + +RPC Exports for ims_usrloc_scscf + + + +
ulscscf.status + + Dump SCSCF user location tables + + + +
+ +
ulscscf.showimpu + + Dump SCSCF IMPU information + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_lcr.xml b/doc/rpc_list/docbook/rpc_lcr.xml index 7dc8d82f4..3662eb940 100644 --- a/doc/rpc_list/docbook/rpc_lcr.xml +++ b/doc/rpc_list/docbook/rpc_lcr.xml @@ -32,4 +32,12 @@ RPC Exports for lcr
+
lcr.defunct_gw + + Defunct gateway until specified time (Unix timestamp). + + + +
+ diff --git a/doc/rpc_list/docbook/rpc_list.xml b/doc/rpc_list/docbook/rpc_list.xml index 4d031e446..ad06aab4c 100644 --- a/doc/rpc_list/docbook/rpc_list.xml +++ b/doc/rpc_list/docbook/rpc_list.xml @@ -8,41 +8,58 @@ RPC Exports List - sip-router git-0ea931 - Fri, 25 Nov 2011 23:59:50 +0100 + sip-router git-99c4af + Wed, 04 Dec 2013 14:45:52 +0100 Automatically generated by: make -C doc/rpc_list all + + + + + + + + + + + + + + + + + + + + + + + + + + + - - - - - + + - - - - - - - - + diff --git a/doc/rpc_list/docbook/rpc_msrp.xml b/doc/rpc_list/docbook/rpc_msrp.xml new file mode 100644 index 000000000..8868d3709 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_msrp.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for msrp + + + +
msrp.cmaplist + + Return the content of dispatcher sets + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_mtree.xml b/doc/rpc_list/docbook/rpc_mtree.xml new file mode 100644 index 000000000..c9026e9b6 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_mtree.xml @@ -0,0 +1,27 @@ + + + + + +RPC Exports for mtree + + + +
mtree.summary + + Print summary of loaded mtree tables + + + +
+ +
mtree.reload + + Reload mtrees from database to memory + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_pdt.xml b/doc/rpc_list/docbook/rpc_pdt.xml index 5a1a12401..249bac3b2 100644 --- a/doc/rpc_list/docbook/rpc_pdt.xml +++ b/doc/rpc_list/docbook/rpc_pdt.xml @@ -8,17 +8,9 @@ RPC Exports for pdt -
pdt.add +
pdt.reload - Add new prefix/domain translation rule. - - - -
- -
pdt.delete - - Delete prefix/domain translation rule. + Reload PDT database records @@ -26,10 +18,9 @@ RPC Exports for pdt
pdt.list - List existin prefix/domain translation rules + List PDT memory records - Returns an array.
diff --git a/doc/rpc_list/docbook/rpc_permissions.xml b/doc/rpc_list/docbook/rpc_permissions.xml new file mode 100644 index 000000000..fdc1f3571 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_permissions.xml @@ -0,0 +1,68 @@ + + + + + +RPC Exports for permissions + + + +
permissions.trustedReload + + Reload permissions trusted table + + + +
+ +
permissions.addressReload + + Reload permissions address table + + + +
+ +
permissions.trustedDump + + Dump permissions trusted table + + + +
+ +
permissions.addressDump + + Dump permissions address table + + + +
+ +
permissions.subnetDump + + Dump permissions subnet table + + + +
+ +
permissions.domainDump + + Dump permissions domain name table + + + +
+ +
permissions.testUri + + Tests if (URI, Contact) pair is allowed according to allow/deny + files + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_pike.xml b/doc/rpc_list/docbook/rpc_pike.xml index ef90c0b2b..b8f06a642 100644 --- a/doc/rpc_list/docbook/rpc_pike.xml +++ b/doc/rpc_list/docbook/rpc_pike.xml @@ -10,7 +10,7 @@ RPC Exports for pike
pike.top - pike.top doc. + pike.top Dump parts of the pike table diff --git a/doc/rpc_list/docbook/rpc_pipelimit.xml b/doc/rpc_list/docbook/rpc_pipelimit.xml new file mode 100644 index 000000000..f9e308fae --- /dev/null +++ b/doc/rpc_list/docbook/rpc_pipelimit.xml @@ -0,0 +1,65 @@ + + + + + +RPC Exports for pipelimit + + + +
pl.stats + + Print pipelimit statistics: <id> <load> + <counter> + + + +
+ +
pl.get_pipes + + Print pipes info: <id> <algorithm> <limit> + <counter> + + + +
+ +
pl.set_pipe + + Sets a pipe params: <pipe_id> <pipe_algorithm> + <pipe_limit> + + + +
+ +
pl.get_pid + + Print PID Controller parameters for the FEEDBACK algorithm: + <ki> <kp> <kd> + + + +
+ +
pl.set_pid + + Sets the PID Controller parameters for the FEEDBACK algorithm: + <ki> <kp> <kd> + + + +
+ +
pl.push_load + + Force the value of the load parameter for FEEDBACK algorithm: + <load> + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_prefix_route.xml b/doc/rpc_list/docbook/rpc_prefix_route.xml index 83efa27b4..e3b45c60c 100644 --- a/doc/rpc_list/docbook/rpc_prefix_route.xml +++ b/doc/rpc_list/docbook/rpc_prefix_route.xml @@ -10,7 +10,7 @@ RPC Exports for prefix_route
prefix_route.reload - Documentation missing (rpc_reload_doc). + Reload prefix routes from DB @@ -18,7 +18,7 @@ RPC Exports for prefix_route
prefix_route.dump - Documentation missing (rpc_dump_doc). + Dump the prefix route tree diff --git a/doc/rpc_list/docbook/rpc_presence.xml b/doc/rpc_list/docbook/rpc_presence.xml new file mode 100644 index 000000000..07279b3a7 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_presence.xml @@ -0,0 +1,20 @@ + + + + + +RPC Exports for presence + + + +
presence.cleanup + + Manually triggers the cleanup functions for the + active_watchers, presentity, and watchers tables. + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_pv.xml b/doc/rpc_list/docbook/rpc_pv.xml new file mode 100644 index 000000000..c0ef27753 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_pv.xml @@ -0,0 +1,27 @@ + + + + + +RPC Exports for pv + + + +
pv.shvSet + + Set a shared variable (args: name type value) + + + +
+ +
pv.shvGet + + Get the value of a shared variable. If no argument, dumps all + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_sca.xml b/doc/rpc_list/docbook/rpc_sca.xml new file mode 100644 index 000000000..e50fb1c22 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_sca.xml @@ -0,0 +1,100 @@ + + + + + +RPC Exports for sca + + + +
sca.all_subscriptions + + Documentation missing (sca_rpc_show_all_subscriptions_doc). + + + +
+ +
sca.subscription_count + + Documentation missing (sca_rpc_subscription_count_doc). + + + +
+ +
sca.show_subscription + + Documentation missing (sca_rpc_show_subscription_doc). + + + +
+ +
sca.subscribers + + Documentation missing (sca_rpc_show_subscribers_doc). + + + +
+ +
sca.deactivate_all_subscriptions + + Documentation missing + (sca_rpc_deactivate_all_subscriptions_doc). + + + +
+ +
sca.deactivate_subscription + + Documentation missing (sca_rpc_deactivate_subscription_doc). + + + +
+ +
sca.all_appearances + + Documentation missing (sca_rpc_show_all_appearances_doc). + + + +
+ +
sca.show_appearance + + Documentation missing (sca_rpc_show_appearance_doc). + + + +
+ +
sca.seize_appearance + + Documentation missing (sca_rpc_seize_appearance_doc). + + + +
+ +
sca.update_appearance + + Documentation missing (sca_rpc_update_appearance_doc). + + + +
+ +
sca.release_appearance + + Documentation missing (sca_rpc_release_appearance_doc). + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_sctp.xml b/doc/rpc_list/docbook/rpc_sctp.xml new file mode 100644 index 000000000..5609e3e85 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_sctp.xml @@ -0,0 +1,33 @@ + + + + + +RPC Exports for sctp + + + +
sctp.options + + Returns active sctp options. With one parameter it returns the + sctp options set in the kernel for a specific + socket(debugging), with 0 filled in for non-kernel related + options. The parameter can be: "default" | + "first" | address[:port] . With no parameters it + returns ser's idea of the current sctp options (intended + non-debugging use). + + + +
+ +
sctp.info + + Returns sctp related info. + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_sipcapture.xml b/doc/rpc_list/docbook/rpc_sipcapture.xml new file mode 100644 index 000000000..21aee4856 --- /dev/null +++ b/doc/rpc_list/docbook/rpc_sipcapture.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for sipcapture + + + +
sipcapture.status + + Get status or turn on/off sipcapture. + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_siptrace.xml b/doc/rpc_list/docbook/rpc_siptrace.xml new file mode 100644 index 000000000..deca4be7e --- /dev/null +++ b/doc/rpc_list/docbook/rpc_siptrace.xml @@ -0,0 +1,20 @@ + + + + + +RPC Exports for siptrace + + + +
siptrace.status + + Get status or turn on/off siptrace. Parameters: on, off or + check. + + + +
+ +
diff --git a/doc/rpc_list/docbook/rpc_sl.xml b/doc/rpc_list/docbook/rpc_sl.xml index a352b75a9..cd1fdbc5c 100644 --- a/doc/rpc_list/docbook/rpc_sl.xml +++ b/doc/rpc_list/docbook/rpc_sl.xml @@ -10,7 +10,7 @@ RPC Exports for sl
sl.stats - Documentation missing (rpc_stats_doc). + Print reply statistics. diff --git a/doc/rpc_list/docbook/rpc_tls.xml b/doc/rpc_list/docbook/rpc_tls.xml index a730de88b..57cede275 100644 --- a/doc/rpc_list/docbook/rpc_tls.xml +++ b/doc/rpc_list/docbook/rpc_tls.xml @@ -10,7 +10,7 @@ RPC Exports for tls
tls.reload - Documentation missing (tls_reload_doc). + Reload TLS configuration file @@ -18,7 +18,7 @@ RPC Exports for tls
tls.list - Documentation missing (tls_list_doc). + List currently open TLS connections Returns an array. @@ -27,7 +27,7 @@ RPC Exports for tls
tls.info - Documentation missing (tls_info_doc). + Returns internal tls related info. @@ -35,7 +35,7 @@ RPC Exports for tls
tls.options - Documentation missing (tls_options_doc). + Dumps all the tls config options. diff --git a/doc/rpc_list/docbook/rpc_tm.xml b/doc/rpc_list/docbook/rpc_tm.xml index 9147b1f4a..6b59300b3 100644 --- a/doc/rpc_list/docbook/rpc_tm.xml +++ b/doc/rpc_list/docbook/rpc_tm.xml @@ -10,7 +10,7 @@ RPC Exports for tm
tm.cancel - Documentation missing (rpc_cancel_doc). + Cancel a pending transaction @@ -18,7 +18,7 @@ RPC Exports for tm
tm.reply - Documentation missing (rpc_reply_doc). + Reply transaction @@ -26,7 +26,7 @@ RPC Exports for tm
tm.stats - Documentation missing (tm_rpc_stats_doc). + Print transaction statistics. @@ -34,7 +34,8 @@ RPC Exports for tm
tm.hash_stats - Documentation missing (tm_rpc_hash_stats_doc). + Prints hash table statistics (can be used only if tm is + compiled with -DTM_HASH_STATS). @@ -42,7 +43,9 @@ RPC Exports for tm
tm.t_uac_start - Documentation missing (rpc_t_uac_start_doc). + starts a tm uac using a list of string parameters: method, + ruri, dst_uri, send_sock, headers (CRLF separated) and body + (optional) @@ -50,7 +53,9 @@ RPC Exports for tm
tm.t_uac_wait - Documentation missing (rpc_t_uac_wait_doc). + starts a tm uac and waits for the final reply, using a list of + string parameters: method, ruri, dst_uri send_sock, headers + (CRLF separated) and body (optional) Returns an array. diff --git a/doc/rpc_list/docbook/rpc_domain_s.xml b/doc/rpc_list/docbook/rpc_uid_domain.xml similarity index 88% rename from doc/rpc_list/docbook/rpc_domain_s.xml rename to doc/rpc_list/docbook/rpc_uid_domain.xml index 171c0c6f4..93543d671 100644 --- a/doc/rpc_list/docbook/rpc_domain_s.xml +++ b/doc/rpc_list/docbook/rpc_uid_domain.xml @@ -2,9 +2,9 @@ - + -RPC Exports for domain_s +RPC Exports for uid_domain diff --git a/doc/rpc_list/docbook/rpc_gflags.xml b/doc/rpc_list/docbook/rpc_uid_gflags.xml similarity index 94% rename from doc/rpc_list/docbook/rpc_gflags.xml rename to doc/rpc_list/docbook/rpc_uid_gflags.xml index 141a7140f..436478832 100644 --- a/doc/rpc_list/docbook/rpc_gflags.xml +++ b/doc/rpc_list/docbook/rpc_uid_gflags.xml @@ -2,9 +2,9 @@ - + -RPC Exports for gflags +RPC Exports for uid_gflags diff --git a/doc/rpc_list/docbook/rpc_usrloc.xml b/doc/rpc_list/docbook/rpc_usrloc.xml index 166197861..23510f566 100644 --- a/doc/rpc_list/docbook/rpc_usrloc.xml +++ b/doc/rpc_list/docbook/rpc_usrloc.xml @@ -16,4 +16,71 @@ RPC Exports for usrloc
+
ul.lookup + + Lookup one AOR in the usrloc location table + + + +
+ +
ul.rm + + Delete a address of record including its contacts + + + +
+ +
ul.rm_contact + + Delete a contact from an AOR record + + + +
+ +
ul.flush + + Flush the usrloc memory cache to DB + + + +
+ +
ul.add + + Add a new contact for an address of record + + + +
+ +
ul.db_users + + Tell number of different unexpired users (AoRs) in database + table (db_mode!=0 only) + + + +
+ +
ul.db_contacts + + Tell number of unexpired contacts in database table (db_mode=3 + only) + + + +
+ +
ul.db_expired_contacts + + Tell number of expired contacts in database table (db_mode=3 + only) + + + +
+ diff --git a/doc/rpc_list/docbook/rpc_usrloc_s.xml b/doc/rpc_list/docbook/rpc_usrloc_s.xml deleted file mode 100644 index adb2f158d..000000000 --- a/doc/rpc_list/docbook/rpc_usrloc_s.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - -RPC Exports for usrloc_s - - - -
usrloc.stats - - Documentation missing (rpc_stats_doc). - - - Returns an array. - -
- -
usrloc.delete_uid - - Documentation missing (rpc_delete_uid_doc). - - - -
- -
usrloc.delete_contact - - Documentation missing (rpc_delete_contact_doc). - - - -
- -
usrloc.dump - - Documentation missing (rpc_dump_doc). - - - -
- -
usrloc.dump_file - - Documentation missing (rpc_dump_file_doc). - - - -
- -
usrloc.flush - - Documentation missing (rpc_flush_doc). - - - -
- -
usrloc.add_contact - - Documentation missing (rpc_add_contact_doc). - - - -
- -
usrloc.show_contacts - - Documentation missing (rpc_show_contacts_doc). - - - Returns an array. - -
- -
diff --git a/doc/rpc_list/docbook/rpc_xhttp_pi.xml b/doc/rpc_list/docbook/rpc_xhttp_pi.xml new file mode 100644 index 000000000..9f6f90bdd --- /dev/null +++ b/doc/rpc_list/docbook/rpc_xhttp_pi.xml @@ -0,0 +1,19 @@ + + + + + +RPC Exports for xhttp_pi + + + +
xhttp_pi.reload + + Reload the xml framework + + + +
+ +
diff --git a/doc/rpc_list/rpc_app_lua.txt b/doc/rpc_list/rpc_app_lua.txt new file mode 100644 index 000000000..a1393ded6 --- /dev/null +++ b/doc/rpc_list/rpc_app_lua.txt @@ -0,0 +1,12 @@ +RPC Exports for app_lua +======================= + + [ this file is autogenerated, do not edit ] + + + 1. app_lua.reload + Reload lua script + + 2. app_lua.list + list lua scripts + diff --git a/doc/rpc_list/rpc_carrierroute.txt b/doc/rpc_list/rpc_carrierroute.txt new file mode 100644 index 000000000..80a250b0e --- /dev/null +++ b/doc/rpc_list/rpc_carrierroute.txt @@ -0,0 +1,9 @@ +RPC Exports for carrierroute +============================ + + [ this file is autogenerated, do not edit ] + + + 1. cr.reload_routes + Reload routes + diff --git a/doc/rpc_list/rpc_cnxcc.txt b/doc/rpc_list/rpc_cnxcc.txt new file mode 100644 index 000000000..f8af0add2 --- /dev/null +++ b/doc/rpc_list/rpc_cnxcc.txt @@ -0,0 +1,15 @@ +RPC Exports for cnxcc +===================== + + [ this file is autogenerated, do not edit ] + + + 1. cnxcc.active_clients + List of clients with active calls + + 2. cnxcc.check_client + Check specific client calls + + 3. cnxcc.kill_call + Kill call using its call ID + diff --git a/doc/rpc_list/rpc_core.txt b/doc/rpc_list/rpc_core.txt index 938789690..97369a5e6 100644 --- a/doc/rpc_list/rpc_core.txt +++ b/doc/rpc_list/rpc_core.txt @@ -69,88 +69,86 @@ RPC Exports for core 18. core.tcp_options Returns active tcp options. -19. core.sctp_options - Returns active sctp options. With one parameter it returns the - sctp options set in the kernel for a specific - socket(debugging), with 0 filled in for non-kernel related - options. The parameter can be: "default" | "first" | - address[:port] . With no parameters it returns ser's idea of - the current sctp options (intended non-debugging use). - -20. core.sctp_info - Returns sctp related info. - -21. core.udp4_raw_info +19. core.tcp_list + Returns tcp connections details. + +20. core.udp4_raw_info Returns udp4_raw related info. -22. dns.mem_info +21. core.aliases_list + List local SIP server host aliases + +22. core.sockets_list + List local SIP server listen sockets + +23. dns.mem_info dns cache memory info. -23. dns.debug +24. dns.debug dns debug info. -24. dns.debug_all +25. dns.debug_all complete dns debug dump -25. dns.view +26. dns.view dns cache dump in a human-readable format -26. dns.lookup +27. dns.lookup perform a dns lookup -27. dns.delete_all +28. dns.delete_all deletes all the non-permanent entries from the DNS cache -28. dns.delete_all_force +29. dns.delete_all_force deletes all the entries from the DNS cache including the permanent ones -29. dns.add_a +30. dns.add_a adds an A record to the DNS cache -30. dns.add_aaaa +31. dns.add_aaaa adds an AAAA record to the DNS cache -31. dns.add_srv +32. dns.add_srv adds an SRV record to the DNS cache -32. dns.delete_a +33. dns.delete_a deletes an A record from the DNS cache -33. dns.delete_aaaa +34. dns.delete_aaaa deletes an AAAA record from the DNS cache -34. dns.delete_srv +35. dns.delete_srv deletes an SRV record from the DNS cache -35. dns.delete_naptr +36. dns.delete_naptr deletes a NAPTR record from the DNS cache -36. dns.delete_cname +37. dns.delete_cname deletes a CNAME record from the DNS cache -37. dns.delete_txt +38. dns.delete_txt deletes a TXT record from the DNS cache -38. dns.delete_ebl +39. dns.delete_ebl deletes an EBL record from the DNS cache -39. dns.delete_ptr +40. dns.delete_ptr deletes an PTR record from the DNS cache -40. dst_blacklist.mem_info +41. dst_blacklist.mem_info dst blacklist memory usage info. -41. dst_blacklist.debug +42. dst_blacklist.debug dst blacklist debug info. -42. dst_blacklist.view +43. dst_blacklist.view dst blacklist dump in human-readable format. -43. dst_blacklist.delete_all +44. dst_blacklist.delete_all Deletes all the entries from the dst blacklist except the permanent ones. -44. dst_blacklist.add +45. dst_blacklist.add Adds a new entry to the dst blacklist. diff --git a/doc/rpc_list/rpc_corex.txt b/doc/rpc_list/rpc_corex.txt new file mode 100644 index 000000000..db5125c27 --- /dev/null +++ b/doc/rpc_list/rpc_corex.txt @@ -0,0 +1,12 @@ +RPC Exports for corex +===================== + + [ this file is autogenerated, do not edit ] + + + 1. corex.list_sockets + List listening sockets + + 2. corex.list_aliases + List socket aliases + diff --git a/doc/rpc_list/rpc_cpl-c.txt b/doc/rpc_list/rpc_cpl-c.txt deleted file mode 100644 index 9f4db5532..000000000 --- a/doc/rpc_list/rpc_cpl-c.txt +++ /dev/null @@ -1,15 +0,0 @@ -RPC Exports for cpl-c -===================== - - [ this file is autogenerated, do not edit ] - - - 1. cpl.load - Load a CPL script to the server. - - 2. cpl.remove - Remove a CPL script from server. - - 3. cpl.get - Return a CPL script. - diff --git a/doc/rpc_list/rpc_db_flatstore.txt b/doc/rpc_list/rpc_db_flatstore.txt index f4b0b9c57..f8322c130 100644 --- a/doc/rpc_list/rpc_db_flatstore.txt +++ b/doc/rpc_list/rpc_db_flatstore.txt @@ -4,6 +4,6 @@ RPC Exports for db_flatstore [ this file is autogenerated, do not edit ] - 1. flatstore.rotate - Documentation missing (flat_rotate_doc). + 1. flatstore.k_rotate + Close and reopen flatrotate files during log rotation. diff --git a/doc/rpc_list/rpc_db_text.txt b/doc/rpc_list/rpc_db_text.txt new file mode 100644 index 000000000..4f682f494 --- /dev/null +++ b/doc/rpc_list/rpc_db_text.txt @@ -0,0 +1,9 @@ +RPC Exports for db_text +======================= + + [ this file is autogenerated, do not edit ] + + + 1. db_text.dump + Write back to disk modified tables + diff --git a/doc/rpc_list/rpc_debugger.txt b/doc/rpc_list/rpc_debugger.txt index 3db09a0de..53e7afa1e 100644 --- a/doc/rpc_list/rpc_debugger.txt +++ b/doc/rpc_list/rpc_debugger.txt @@ -5,7 +5,7 @@ RPC Exports for debugger 1. dbg.bp - Documentation missing (dbg_rpc_bp_doc). + Breakpoint command 2. dbg.ls List debugging process array @@ -13,3 +13,9 @@ RPC Exports for debugger 3. dbg.trace Config trace command + 4. dbg.mod_level + Specify module log level + + 5. dbg.reset_msgid + Reset msgid on all process + diff --git a/doc/rpc_list/rpc_dialog_ng.txt b/doc/rpc_list/rpc_dialog_ng.txt new file mode 100644 index 000000000..598cc3b27 --- /dev/null +++ b/doc/rpc_list/rpc_dialog_ng.txt @@ -0,0 +1,9 @@ +RPC Exports for dialog_ng +========================= + + [ this file is autogenerated, do not edit ] + + + 1. dlg2.list + Print all dialogs + diff --git a/doc/rpc_list/rpc_dialplan.txt b/doc/rpc_list/rpc_dialplan.txt index 47831b5ee..929785507 100644 --- a/doc/rpc_list/rpc_dialplan.txt +++ b/doc/rpc_list/rpc_dialplan.txt @@ -7,6 +7,6 @@ RPC Exports for dialplan 1. dialplan.reload Reload dialplan table from database - 2. dialplan.dump + 2. dialplan.translate Perform dialplan translation diff --git a/doc/rpc_list/rpc_dispatcher_s.txt b/doc/rpc_list/rpc_dispatcher_s.txt deleted file mode 100644 index 45f9fcb33..000000000 --- a/doc/rpc_list/rpc_dispatcher_s.txt +++ /dev/null @@ -1,12 +0,0 @@ -RPC Exports for dispatcher_s -============================ - - [ this file is autogenerated, do not edit ] - - - 1. dispatcher.dump - Dump dispatcher set configuration - - 2. dispatcher.reload - Reload dispatcher list from file - diff --git a/doc/rpc_list/rpc_domain.txt b/doc/rpc_list/rpc_domain.txt index 1d8b17bab..fe690775d 100644 --- a/doc/rpc_list/rpc_domain.txt +++ b/doc/rpc_list/rpc_domain.txt @@ -5,8 +5,8 @@ RPC Exports for domain 1. domain.reload - Reload domain table from database + Reload domain tables from database 2. domain.dump - Return the contents of domain table + Return the contents of domain and domain_attrs tables diff --git a/doc/rpc_list/rpc_drouting.txt b/doc/rpc_list/rpc_drouting.txt new file mode 100644 index 000000000..0ae997911 --- /dev/null +++ b/doc/rpc_list/rpc_drouting.txt @@ -0,0 +1,9 @@ +RPC Exports for drouting +======================== + + [ this file is autogenerated, do not edit ] + + + 1. drouting.reload + Write back to disk modified tables + diff --git a/doc/rpc_list/rpc_htable.txt b/doc/rpc_list/rpc_htable.txt index 6e071db53..1314ba530 100644 --- a/doc/rpc_list/rpc_htable.txt +++ b/doc/rpc_list/rpc_htable.txt @@ -7,3 +7,24 @@ RPC Exports for htable 1. htable.dump Dump the contents of hash table. + 2. htable.delete + Delete one key from a hash table. + + 3. htable.get + Get one key from a hash table. + + 4. htable.sets + Set one key in a hash table to a string value. + + 5. htable.seti + Set one key in a hash table to an integer value. + + 6. htable.listTables + List all htables. + + 7. htable.reload + Reload hash table. + + 8. htable.stats + Statistics about htables. + diff --git a/doc/rpc_list/rpc_ims_usrloc_pcscf.txt b/doc/rpc_list/rpc_ims_usrloc_pcscf.txt new file mode 100644 index 000000000..dd211833e --- /dev/null +++ b/doc/rpc_list/rpc_ims_usrloc_pcscf.txt @@ -0,0 +1,9 @@ +RPC Exports for ims_usrloc_pcscf +================================ + + [ this file is autogenerated, do not edit ] + + + 1. ulpcscf.status + Dump PCSCF contacts and associated identitites + diff --git a/doc/rpc_list/rpc_ims_usrloc_scscf.txt b/doc/rpc_list/rpc_ims_usrloc_scscf.txt new file mode 100644 index 000000000..5859d71d2 --- /dev/null +++ b/doc/rpc_list/rpc_ims_usrloc_scscf.txt @@ -0,0 +1,12 @@ +RPC Exports for ims_usrloc_scscf +================================ + + [ this file is autogenerated, do not edit ] + + + 1. ulscscf.status + Dump SCSCF user location tables + + 2. ulscscf.showimpu + Dump SCSCF IMPU information + diff --git a/doc/rpc_list/rpc_lcr.txt b/doc/rpc_list/rpc_lcr.txt index cb3be623e..1de7652d4 100644 --- a/doc/rpc_list/rpc_lcr.txt +++ b/doc/rpc_list/rpc_lcr.txt @@ -13,3 +13,6 @@ RPC Exports for lcr 3. lcr.dump_rules Dump the contents of the lcr_rules table. + 4. lcr.defunct_gw + Defunct gateway until specified time (Unix timestamp). + diff --git a/doc/rpc_list/rpc_msrp.txt b/doc/rpc_list/rpc_msrp.txt new file mode 100644 index 000000000..20993d024 --- /dev/null +++ b/doc/rpc_list/rpc_msrp.txt @@ -0,0 +1,9 @@ +RPC Exports for msrp +==================== + + [ this file is autogenerated, do not edit ] + + + 1. msrp.cmaplist + Return the content of dispatcher sets + diff --git a/doc/rpc_list/rpc_mtree.txt b/doc/rpc_list/rpc_mtree.txt new file mode 100644 index 000000000..4efb50017 --- /dev/null +++ b/doc/rpc_list/rpc_mtree.txt @@ -0,0 +1,12 @@ +RPC Exports for mtree +===================== + + [ this file is autogenerated, do not edit ] + + + 1. mtree.summary + Print summary of loaded mtree tables + + 2. mtree.reload + Reload mtrees from database to memory + diff --git a/doc/rpc_list/rpc_pdt.txt b/doc/rpc_list/rpc_pdt.txt index 3034874a5..28818778d 100644 --- a/doc/rpc_list/rpc_pdt.txt +++ b/doc/rpc_list/rpc_pdt.txt @@ -4,13 +4,9 @@ RPC Exports for pdt [ this file is autogenerated, do not edit ] - 1. pdt.add - Add new prefix/domain translation rule. + 1. pdt.reload + Reload PDT database records - 2. pdt.delete - Delete prefix/domain translation rule. - - 3. pdt.list - List existin prefix/domain translation rules - Returns an array. + 2. pdt.list + List PDT memory records diff --git a/doc/rpc_list/rpc_permissions.txt b/doc/rpc_list/rpc_permissions.txt new file mode 100644 index 000000000..fcc46c88c --- /dev/null +++ b/doc/rpc_list/rpc_permissions.txt @@ -0,0 +1,28 @@ +RPC Exports for permissions +=========================== + + [ this file is autogenerated, do not edit ] + + + 1. permissions.trustedReload + Reload permissions trusted table + + 2. permissions.addressReload + Reload permissions address table + + 3. permissions.trustedDump + Dump permissions trusted table + + 4. permissions.addressDump + Dump permissions address table + + 5. permissions.subnetDump + Dump permissions subnet table + + 6. permissions.domainDump + Dump permissions domain name table + + 7. permissions.testUri + Tests if (URI, Contact) pair is allowed according to allow/deny + files + diff --git a/doc/rpc_list/rpc_pike.txt b/doc/rpc_list/rpc_pike.txt index 177d5b34c..68217b9ca 100644 --- a/doc/rpc_list/rpc_pike.txt +++ b/doc/rpc_list/rpc_pike.txt @@ -5,5 +5,5 @@ RPC Exports for pike 1. pike.top - pike.top doc. + pike.top Dump parts of the pike table diff --git a/doc/rpc_list/rpc_pipelimit.txt b/doc/rpc_list/rpc_pipelimit.txt new file mode 100644 index 000000000..163076c3f --- /dev/null +++ b/doc/rpc_list/rpc_pipelimit.txt @@ -0,0 +1,27 @@ +RPC Exports for pipelimit +========================= + + [ this file is autogenerated, do not edit ] + + + 1. pl.stats + Print pipelimit statistics: + + 2. pl.get_pipes + Print pipes info: + + 3. pl.set_pipe + Sets a pipe params: + + 4. pl.get_pid + Print PID Controller parameters for the FEEDBACK algorithm: + + + 5. pl.set_pid + Sets the PID Controller parameters for the FEEDBACK algorithm: + + + 6. pl.push_load + Force the value of the load parameter for FEEDBACK algorithm: + + diff --git a/doc/rpc_list/rpc_prefix_route.txt b/doc/rpc_list/rpc_prefix_route.txt index 8f51fa956..809329400 100644 --- a/doc/rpc_list/rpc_prefix_route.txt +++ b/doc/rpc_list/rpc_prefix_route.txt @@ -5,8 +5,8 @@ RPC Exports for prefix_route 1. prefix_route.reload - Documentation missing (rpc_reload_doc). + Reload prefix routes from DB 2. prefix_route.dump - Documentation missing (rpc_dump_doc). + Dump the prefix route tree diff --git a/doc/rpc_list/rpc_presence.txt b/doc/rpc_list/rpc_presence.txt new file mode 100644 index 000000000..c7338c62a --- /dev/null +++ b/doc/rpc_list/rpc_presence.txt @@ -0,0 +1,10 @@ +RPC Exports for presence +======================== + + [ this file is autogenerated, do not edit ] + + + 1. presence.cleanup + Manually triggers the cleanup functions for the + active_watchers, presentity, and watchers tables. + diff --git a/doc/rpc_list/rpc_presence_b2b.txt b/doc/rpc_list/rpc_presence_b2b.txt deleted file mode 100644 index bf7a31770..000000000 --- a/doc/rpc_list/rpc_presence_b2b.txt +++ /dev/null @@ -1,12 +0,0 @@ -RPC Exports for presence_b2b -============================ - - [ this file is autogenerated, do not edit ] - - - 1. presence_b2b.test - Testing events. - - 2. presence_b2b.trace - Trace events. - diff --git a/doc/rpc_list/rpc_pv.txt b/doc/rpc_list/rpc_pv.txt new file mode 100644 index 000000000..effd93875 --- /dev/null +++ b/doc/rpc_list/rpc_pv.txt @@ -0,0 +1,12 @@ +RPC Exports for pv +================== + + [ this file is autogenerated, do not edit ] + + + 1. pv.shvSet + Set a shared variable (args: name type value) + + 2. pv.shvGet + Get the value of a shared variable. If no argument, dumps all + diff --git a/doc/rpc_list/rpc_sca.txt b/doc/rpc_list/rpc_sca.txt new file mode 100644 index 000000000..9dec0cc39 --- /dev/null +++ b/doc/rpc_list/rpc_sca.txt @@ -0,0 +1,40 @@ +RPC Exports for sca +=================== + + [ this file is autogenerated, do not edit ] + + + 1. sca.all_subscriptions + Documentation missing (sca_rpc_show_all_subscriptions_doc). + + 2. sca.subscription_count + Documentation missing (sca_rpc_subscription_count_doc). + + 3. sca.show_subscription + Documentation missing (sca_rpc_show_subscription_doc). + + 4. sca.subscribers + Documentation missing (sca_rpc_show_subscribers_doc). + + 5. sca.deactivate_all_subscriptions + Documentation missing + (sca_rpc_deactivate_all_subscriptions_doc). + + 6. sca.deactivate_subscription + Documentation missing (sca_rpc_deactivate_subscription_doc). + + 7. sca.all_appearances + Documentation missing (sca_rpc_show_all_appearances_doc). + + 8. sca.show_appearance + Documentation missing (sca_rpc_show_appearance_doc). + + 9. sca.seize_appearance + Documentation missing (sca_rpc_seize_appearance_doc). + +10. sca.update_appearance + Documentation missing (sca_rpc_update_appearance_doc). + +11. sca.release_appearance + Documentation missing (sca_rpc_release_appearance_doc). + diff --git a/doc/rpc_list/rpc_sctp.txt b/doc/rpc_list/rpc_sctp.txt new file mode 100644 index 000000000..771bf141d --- /dev/null +++ b/doc/rpc_list/rpc_sctp.txt @@ -0,0 +1,17 @@ +RPC Exports for sctp +==================== + + [ this file is autogenerated, do not edit ] + + + 1. sctp.options + Returns active sctp options. With one parameter it returns the + sctp options set in the kernel for a specific + socket(debugging), with 0 filled in for non-kernel related + options. The parameter can be: "default" | "first" | + address[:port] . With no parameters it returns ser's idea of + the current sctp options (intended non-debugging use). + + 2. sctp.info + Returns sctp related info. + diff --git a/doc/rpc_list/rpc_sipcapture.txt b/doc/rpc_list/rpc_sipcapture.txt new file mode 100644 index 000000000..d59bb132b --- /dev/null +++ b/doc/rpc_list/rpc_sipcapture.txt @@ -0,0 +1,9 @@ +RPC Exports for sipcapture +========================== + + [ this file is autogenerated, do not edit ] + + + 1. sipcapture.status + Get status or turn on/off sipcapture. + diff --git a/doc/rpc_list/rpc_siptrace.txt b/doc/rpc_list/rpc_siptrace.txt new file mode 100644 index 000000000..dedb583ed --- /dev/null +++ b/doc/rpc_list/rpc_siptrace.txt @@ -0,0 +1,10 @@ +RPC Exports for siptrace +======================== + + [ this file is autogenerated, do not edit ] + + + 1. siptrace.status + Get status or turn on/off siptrace. Parameters: on, off or + check. + diff --git a/doc/rpc_list/rpc_sl.txt b/doc/rpc_list/rpc_sl.txt index 5e1e52c4d..8b4600545 100644 --- a/doc/rpc_list/rpc_sl.txt +++ b/doc/rpc_list/rpc_sl.txt @@ -5,5 +5,5 @@ RPC Exports for sl 1. sl.stats - Documentation missing (rpc_stats_doc). + Print reply statistics. diff --git a/doc/rpc_list/rpc_tls.txt b/doc/rpc_list/rpc_tls.txt index ff372cdc3..520ac592b 100644 --- a/doc/rpc_list/rpc_tls.txt +++ b/doc/rpc_list/rpc_tls.txt @@ -5,15 +5,15 @@ RPC Exports for tls 1. tls.reload - Documentation missing (tls_reload_doc). + Reload TLS configuration file 2. tls.list - Documentation missing (tls_list_doc). + List currently open TLS connections Returns an array. 3. tls.info - Documentation missing (tls_info_doc). + Returns internal tls related info. 4. tls.options - Documentation missing (tls_options_doc). + Dumps all the tls config options. diff --git a/doc/rpc_list/rpc_tm.txt b/doc/rpc_list/rpc_tm.txt index 177ff056e..60b080239 100644 --- a/doc/rpc_list/rpc_tm.txt +++ b/doc/rpc_list/rpc_tm.txt @@ -5,21 +5,26 @@ RPC Exports for tm 1. tm.cancel - Documentation missing (rpc_cancel_doc). + Cancel a pending transaction 2. tm.reply - Documentation missing (rpc_reply_doc). + Reply transaction 3. tm.stats - Documentation missing (tm_rpc_stats_doc). + Print transaction statistics. 4. tm.hash_stats - Documentation missing (tm_rpc_hash_stats_doc). + Prints hash table statistics (can be used only if tm is + compiled with -DTM_HASH_STATS). 5. tm.t_uac_start - Documentation missing (rpc_t_uac_start_doc). + starts a tm uac using a list of string parameters: method, + ruri, dst_uri, send_sock, headers (CRLF separated) and body + (optional) 6. tm.t_uac_wait - Documentation missing (rpc_t_uac_wait_doc). + starts a tm uac and waits for the final reply, using a list of + string parameters: method, ruri, dst_uri send_sock, headers + (CRLF separated) and body (optional) Returns an array. diff --git a/doc/rpc_list/rpc_domain_s.txt b/doc/rpc_list/rpc_uid_domain.txt similarity index 77% rename from doc/rpc_list/rpc_domain_s.txt rename to doc/rpc_list/rpc_uid_domain.txt index bd547caae..042d1100d 100644 --- a/doc/rpc_list/rpc_domain_s.txt +++ b/doc/rpc_list/rpc_uid_domain.txt @@ -1,5 +1,5 @@ -RPC Exports for domain_s -======================== +RPC Exports for uid_domain +========================== [ this file is autogenerated, do not edit ] diff --git a/doc/rpc_list/rpc_gflags.txt b/doc/rpc_list/rpc_uid_gflags.txt similarity index 88% rename from doc/rpc_list/rpc_gflags.txt rename to doc/rpc_list/rpc_uid_gflags.txt index 2855345f1..574633992 100644 --- a/doc/rpc_list/rpc_gflags.txt +++ b/doc/rpc_list/rpc_uid_gflags.txt @@ -1,5 +1,5 @@ -RPC Exports for gflags -====================== +RPC Exports for uid_gflags +========================== [ this file is autogenerated, do not edit ] diff --git a/doc/rpc_list/rpc_usrloc.txt b/doc/rpc_list/rpc_usrloc.txt index 3514a2ba7..02a7aba96 100644 --- a/doc/rpc_list/rpc_usrloc.txt +++ b/doc/rpc_list/rpc_usrloc.txt @@ -7,3 +7,30 @@ RPC Exports for usrloc 1. ul.dump Dump user location tables + 2. ul.lookup + Lookup one AOR in the usrloc location table + + 3. ul.rm + Delete a address of record including its contacts + + 4. ul.rm_contact + Delete a contact from an AOR record + + 5. ul.flush + Flush the usrloc memory cache to DB + + 6. ul.add + Add a new contact for an address of record + + 7. ul.db_users + Tell number of different unexpired users (AoRs) in database + table (db_mode!=0 only) + + 8. ul.db_contacts + Tell number of unexpired contacts in database table (db_mode=3 + only) + + 9. ul.db_expired_contacts + Tell number of expired contacts in database table (db_mode=3 + only) + diff --git a/doc/rpc_list/rpc_usrloc_s.txt b/doc/rpc_list/rpc_usrloc_s.txt deleted file mode 100644 index 830100d8b..000000000 --- a/doc/rpc_list/rpc_usrloc_s.txt +++ /dev/null @@ -1,32 +0,0 @@ -RPC Exports for usrloc_s -======================== - - [ this file is autogenerated, do not edit ] - - - 1. usrloc.stats - Documentation missing (rpc_stats_doc). - Returns an array. - - 2. usrloc.delete_uid - Documentation missing (rpc_delete_uid_doc). - - 3. usrloc.delete_contact - Documentation missing (rpc_delete_contact_doc). - - 4. usrloc.dump - Documentation missing (rpc_dump_doc). - - 5. usrloc.dump_file - Documentation missing (rpc_dump_file_doc). - - 6. usrloc.flush - Documentation missing (rpc_flush_doc). - - 7. usrloc.add_contact - Documentation missing (rpc_add_contact_doc). - - 8. usrloc.show_contacts - Documentation missing (rpc_show_contacts_doc). - Returns an array. - diff --git a/doc/rpc_list/rpc_usrloc_k.txt b/doc/rpc_list/rpc_xhttp_pi.txt similarity index 53% rename from doc/rpc_list/rpc_usrloc_k.txt rename to doc/rpc_list/rpc_xhttp_pi.txt index 2800197d5..f2ba4e3a1 100644 --- a/doc/rpc_list/rpc_usrloc_k.txt +++ b/doc/rpc_list/rpc_xhttp_pi.txt @@ -1,9 +1,9 @@ -RPC Exports for usrloc_k +RPC Exports for xhttp_pi ======================== [ this file is autogenerated, do not edit ] - 1. ul.dump - Dump user location tables + 1. xhttp_pi.reload + Reload the xml framework diff --git a/doc/select_list/Makefile b/doc/select_list/Makefile index ae8403769..2b658f624 100644 --- a/doc/select_list/Makefile +++ b/doc/select_list/Makefile @@ -67,7 +67,7 @@ gcc=gcc # defines used by gcc c_defs=-D__CPU_i386 -D__OS_linux -DSER_VER=2099099 -DPKG_MALLOC -DSHM_MEM \ - -DSHM_MMAP -DDNS_IP_HACK -DUSE_IPV6 -DUSE_MCAST -DUSE_TCP \ + -DSHM_MMAP -DDNS_IP_HACK -DUSE_MCAST -DUSE_TCP \ -DUSE_DNS_CACHE -DUSE_DNS_FAILOVER -DUSE_DST_BLACKLIST -DUSE_NAPTR \ -DUSE_TLS -DTLS_HOOKS -DFAST_LOCK -DCC_GCC_LIKE_ASM \ -DHAVE_GETHOSTBYNAME2 -DHAVE_UNION_SEMUN -DHAVE_SCHED_YIELD \ diff --git a/doc/stylesheets/dbschema_k/xsl/mysql.xsl b/doc/stylesheets/dbschema_k/xsl/mysql.xsl index 627c7349e..641a4ef19 100644 --- a/doc/stylesheets/dbschema_k/xsl/mysql.xsl +++ b/doc/stylesheets/dbschema_k/xsl/mysql.xsl @@ -43,8 +43,10 @@ ) - ENGINE= - + + ENGINE= + + ; diff --git a/dprint.c b/dprint.c index 12259d485..b99174dd2 100644 --- a/dprint.c +++ b/dprint.c @@ -115,12 +115,29 @@ int log_facility_fixup(void *handle, str *gname, str *name, void **val) /* the local debug log level */ static int _local_debug_level = UNSET_LOCAL_DEBUG_LEVEL; +/* callback to get per module debug level */ +static get_module_debug_level_f _module_debug_level = NULL; + +/** + * @brief set callback function for per module debug level + */ +void set_module_debug_level_cb(get_module_debug_level_f f) +{ + _module_debug_level = f; +} /** * @brief return the log level - the local one if it set, * otherwise the global value */ -int get_debug_level(void) { +int get_debug_level(char *mname, int mnlen) { + int mlevel = L_DBG; + /*important -- no LOGs inside, because it will loop */ + if(unlikely(_module_debug_level!=NULL && mnlen>0)) { + if(_module_debug_level(mname, mnlen, &mlevel)==0) { + return mlevel; + } + } return (_local_debug_level != UNSET_LOCAL_DEBUG_LEVEL) ? _local_debug_level : cfg_get(core, core_cfg, debug); } diff --git a/dprint.h b/dprint.h index 285c9f167..084298882 100644 --- a/dprint.h +++ b/dprint.h @@ -59,8 +59,10 @@ #ifdef NO_DEBUG # ifdef MOD_NAME # define LOC_INFO MOD_NAME ": " +# define LOG_MNAME MOD_NAME # else # define LOC_INFO ": " +# define LOG_MNAME "core" # endif #else # define XCT2STR(i) #i @@ -68,8 +70,10 @@ # # ifdef MOD_NAME # define LOC_INFO MOD_NAME " [" __FILE__ ":" CT2STR(__LINE__) "]: " +# define LOG_MNAME MOD_NAME # else # define LOC_INFO " [" __FILE__ ":" CT2STR(__LINE__) "]: " +# define LOG_MNAME "core" # endif # # ifdef NO_LOG @@ -77,6 +81,7 @@ # endif #endif /* NO_DEBUG */ +#define LOG_MNAME_LEN (sizeof(LOG_MNAME)-1) /* * Log levels @@ -121,11 +126,13 @@ struct log_level_info { }; /** @brief per process debug level handling */ -int get_debug_level(void); +int get_debug_level(char *mname, int mnlen); void set_local_debug_level(int level); void reset_local_debug_level(void); +typedef int (*get_module_debug_level_f)(char *mname, int mnlen, int *mlevel); +void set_module_debug_level_cb(get_module_debug_level_f f); -#define is_printable(level) (get_debug_level()>=(level)) +#define is_printable(level) (get_debug_level(LOG_MNAME, LOG_MNAME_LEN)>=(level)) extern struct log_level_info log_level_info[]; extern char *log_name; @@ -179,7 +186,7 @@ void dprint_term_color(char f, char b, str *obuf); # ifdef __SUNPRO_C # define LOG_(facility, level, prefix, fmt, ...) \ do { \ - if (unlikely(get_debuglevel() >= (level) && \ + if (unlikely(get_debug_level(LOG_MNAME, LOG_MNAME_LEN) >= (level) && \ DPRINT_NON_CRIT)) { \ DPRINT_CRIT_ENTER; \ if (likely(((level) >= L_ALERT) && ((level) <= L_DBG))){ \ @@ -245,7 +252,7 @@ void dprint_term_color(char f, char b, str *obuf); # else /* ! __SUNPRO_C */ # define LOG_(facility, level, prefix, fmt, args...) \ do { \ - if (get_debug_level() >= (level) && \ + if (get_debug_level(LOG_MNAME, LOG_MNAME_LEN) >= (level) && \ DPRINT_NON_CRIT) { \ DPRINT_CRIT_ENTER; \ if (likely(((level) >= L_ALERT) && ((level) <= L_DBG))){ \ diff --git a/dset.c b/dset.c index 31b8b38a3..13b000ba4 100644 --- a/dset.c +++ b/dset.c @@ -37,6 +37,7 @@ #include "dprint.h" #include "config.h" #include "parser/parser_f.h" +#include "parser/parse_uri.h" #include "parser/msg_parser.h" #include "ut.h" #include "hash_func.h" @@ -215,7 +216,8 @@ void set_branch_iterator(int n) */ char* get_branch(unsigned int i, int* len, qvalue_t* q, str* dst_uri, str* path, unsigned int *flags, - struct socket_info** force_socket) + struct socket_info** force_socket, + str *ruid, str *instance, str *location_ua) { if (i < nr_branches) { *len = branches[i].len; @@ -232,6 +234,19 @@ char* get_branch(unsigned int i, int* len, qvalue_t* q, str* dst_uri, *force_socket = branches[i].force_send_socket; if (flags) *flags = branches[i].flags; + if (ruid) { + ruid->len = branches[i].ruid_len; + ruid->s = (ruid->len)?branches[i].ruid:0; + } + if (instance) { + instance->len = branches[i].instance_len; + instance->s = (instance->len)?branches[i].instance:0; + } + if (location_ua) { + location_ua->len = branches[i].location_ua_len; + location_ua->s + = (location_ua->len)?branches[i].location_ua:0; + } return branches[i].uri; } else { *len = 0; @@ -248,6 +263,18 @@ char* get_branch(unsigned int i, int* len, qvalue_t* q, str* dst_uri, *force_socket = 0; if (flags) *flags = 0; + if (ruid) { + ruid->s = 0; + ruid->len = 0; + } + if (instance) { + instance->s = 0; + instance->len = 0; + } + if (location_ua) { + location_ua->s = 0; + location_ua->len = 0; + } return 0; } } @@ -258,12 +285,13 @@ char* get_branch(unsigned int i, int* len, qvalue_t* q, str* dst_uri, * 0 is returned if there are no more branches */ char* next_branch(int* len, qvalue_t* q, str* dst_uri, str* path, - unsigned int* flags, struct socket_info** force_socket) + unsigned int* flags, struct socket_info** force_socket, + str* ruid, str *instance, str *location_ua) { char* ret; ret=get_branch(branch_iterator, len, q, dst_uri, path, flags, - force_socket); + force_socket, ruid, instance, location_ua); if (likely(ret)) branch_iterator++; return ret; @@ -297,7 +325,8 @@ void clear_branches(void) int append_branch(struct sip_msg* msg, str* uri, str* dst_uri, str* path, qvalue_t q, unsigned int flags, struct socket_info* force_socket, - str* instance, unsigned int reg_id) + str* instance, unsigned int reg_id, + str* ruid, str* location_ua) { str luri; @@ -381,6 +410,37 @@ int append_branch(struct sip_msg* msg, str* uri, str* dst_uri, str* path, /* copy reg_id */ branches[nr_branches].reg_id = reg_id; + /* copy ruid string */ + if (unlikely(ruid && ruid->len && ruid->s)) { + if (unlikely(ruid->len > MAX_RUID_SIZE - 1)) { + LOG(L_ERR, "too long ruid: %.*s\n", + ruid->len, ruid->s); + return -1; + } + memcpy(branches[nr_branches].ruid, ruid->s, + ruid->len); + branches[nr_branches].ruid[ruid->len] = 0; + branches[nr_branches].ruid_len = ruid->len; + } else { + branches[nr_branches].ruid[0] = '\0'; + branches[nr_branches].ruid_len = 0; + } + + if (unlikely(location_ua && location_ua->len && location_ua->s)) { + if (unlikely(location_ua->len > MAX_UA_SIZE)) { + LOG(L_ERR, "too long location_ua: %.*s\n", + location_ua->len, location_ua->s); + return -1; + } + memcpy(branches[nr_branches].location_ua, location_ua->s, + location_ua->len); + branches[nr_branches].location_ua[location_ua->len] = 0; + branches[nr_branches].location_ua_len = location_ua->len; + } else { + branches[nr_branches].location_ua[0] = '\0'; + branches[nr_branches].location_ua_len = 0; + } + nr_branches++; return 1; } @@ -417,7 +477,7 @@ char* print_dset(struct sip_msg* msg, int* len) crt_branch = get_branch_iterator(); init_branch_iterator(); - while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0))) { + while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0, 0, 0, 0))) { cnt++; *len += uri.len + 1 /*'<'*/; if (q != Q_UNSPECIFIED) { @@ -460,7 +520,7 @@ char* print_dset(struct sip_msg* msg, int* len) } init_branch_iterator(); - while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0))) { + while ((uri.s = next_branch(&uri.len, &q, 0, 0, 0, 0, 0, 0, 0))) { if (i) { memcpy(p, CONTACT_DELIM, CONTACT_DELIM_LEN); p += CONTACT_DELIM_LEN; @@ -546,3 +606,274 @@ int rewrite_uri(struct sip_msg* _m, str* _s) return 1; } +/** + * return src ip, port and proto as a SIP uri or proxy address + * - value stored in a static buffer + * - mode=0 return uri, mode=1 return proxy address + */ +int msg_get_src_addr(sip_msg_t *msg, str *uri, int mode) +{ + static char buf[80]; + char* p; + str ip, port; + int len; + str proto; + + if (msg==NULL || uri==NULL) { + LM_ERR("invalid parameter value\n"); + return -1; + } + + ip.s = ip_addr2a(&msg->rcv.src_ip); + ip.len = strlen(ip.s); + + port.s = int2str(msg->rcv.src_port, &port.len); + + switch(msg->rcv.proto) { + case PROTO_NONE: + case PROTO_UDP: + if(mode==0) { + proto.s = 0; /* Do not add transport parameter, UDP is default */ + proto.len = 0; + } else { + proto.s = "udp"; + proto.len = 3; + } + break; + + case PROTO_TCP: + proto.s = "tcp"; + proto.len = 3; + break; + + case PROTO_TLS: + proto.s = "tls"; + proto.len = 3; + break; + + case PROTO_SCTP: + proto.s = "sctp"; + proto.len = 4; + break; + + case PROTO_WS: + case PROTO_WSS: + proto.s = "ws"; + proto.len = 2; + break; + + default: + LM_ERR("unknown transport protocol\n"); + return -1; + } + + len = ip.len + 2*(msg->rcv.src_ip.af==AF_INET6)+ 1 + port.len; + if (mode==0) { + len += 4; + if(proto.s) { + len += TRANSPORT_PARAM_LEN; + len += proto.len; + } + } else { + len += proto.len + 1; + } + + if (len > 79) { + LM_ERR("buffer too small\n"); + return -1; + } + + p = buf; + if(mode==0) { + memcpy(p, "sip:", 4); + p += 4; + } else { + memcpy(p, proto.s, proto.len); + p += proto.len; + *p++ = ':'; + } + + if (msg->rcv.src_ip.af==AF_INET6) + *p++ = '['; + memcpy(p, ip.s, ip.len); + p += ip.len; + if (msg->rcv.src_ip.af==AF_INET6) + *p++ = ']'; + + *p++ = ':'; + + memcpy(p, port.s, port.len); + p += port.len; + + if (mode==0 && proto.s) { + memcpy(p, TRANSPORT_PARAM, TRANSPORT_PARAM_LEN); + p += TRANSPORT_PARAM_LEN; + + memcpy(p, proto.s, proto.len); + p += proto.len; + } + + uri->s = buf; + uri->len = len; + uri->s[uri->len] = '\0'; + + return 0; +} + +/** + * add alias parameter with encoding of source address + * - nuri->s must point to a buffer of nuri->len size + */ +int uri_add_rcv_alias(sip_msg_t *msg, str *uri, str *nuri) +{ + char* p; + str ip, port; + int len; + + if (msg==NULL || uri==NULL || nuri==NULL) { + LM_ERR("invalid parameter value\n"); + return -1; + } + + ip.s = ip_addr2a(&msg->rcv.src_ip); + ip.len = strlen(ip.s); + + port.s = int2str(msg->rcv.src_port, &port.len); + + /*uri;alias=[ip]~port~proto*/ + len = uri->len+ip.len+port.len+12; + if(len>=nuri->len) { + LM_ERR("not enough space for new uri: %d\n", len); + return -1; + } + p = nuri->s; + memcpy(p, uri->s, uri->len); + p += uri->len; + memcpy(p, ";alias=", 7); + p += 7; + if (msg->rcv.src_ip.af == AF_INET6) + *p++ = '['; + memcpy(p, ip.s, ip.len); + p += ip.len; + if (msg->rcv.src_ip.af == AF_INET6) + *p++ = ']'; + *p++ = '~'; + memcpy(p, port.s, port.len); + p += port.len; + *p++ = '~'; + *p++ = msg->rcv.proto + '0'; + nuri->len = p - nuri->s; + nuri->s[nuri->len] = '\0'; + + LM_DBG("encoded <%.*s> => [%.*s]\n", + uri->len, uri->s, nuri->len, nuri->s); + return 0; +} + +/** + * restore from alias parameter with encoding of source address + * - nuri->s must point to a buffer of nuri->len size + * - suri->s must point to a buffer of suri->len size + */ +int uri_restore_rcv_alias(str *uri, str *nuri, str *suri) +{ + char* p; + str skip; + str ip, port, sproto; + int proto; + + if (uri==NULL || nuri==NULL || suri==NULL) { + LM_ERR("invalid parameter value\n"); + return -1; + } + + /* sip:x;alias=1.1.1.1~0~0 */ + if(uri->len < 23) { + /* no alias possible */ + return -2; + } + p = uri->s + uri->len-18; + skip.s = 0; + while(p>uri->s+5) { + if(strncmp(p, ";alias=", 7)==0) { + skip.s = p; + break; + } + p--; + } + if(skip.s==0) { + /* alias parameter not found */ + return -2; + } + p += 7; + ip.s = p; + p = (char*)memchr(ip.s, '~', (size_t)(uri->s+uri->len-ip.s)); + if(p==NULL) { + /* proper alias parameter not found */ + return -2; + } + ip.len = p - ip.s; + p++; + if(p>=uri->s+uri->len) { + /* proper alias parameter not found */ + return -2; + } + port.s = p; + p = (char*)memchr(port.s, '~', (size_t)(uri->s+uri->len-port.s)); + if(p==NULL) { + /* proper alias parameter not found */ + return -2; + } + port.len = p - port.s; + p++; + if(p>=uri->s+uri->len) { + /* proper alias parameter not found */ + return -2; + } + proto = (int)(*p - '0'); + p++; + + if(p!=uri->s+uri->len && *p!=';') { + /* proper alias parameter not found */ + return -2; + } + skip.len = (int)(p - skip.s); + + if(suri->len<=4+ip.len+1+port.len+11/*;transport=*/+4) { + LM_ERR("address buffer too small\n"); + return -1; + } + if(nuri->len<=uri->len - skip.len) { + LM_ERR("uri buffer too small\n"); + return -1; + } + + p = nuri->s; + memcpy(p, uri->s, (size_t)(skip.s-uri->s)); + p += skip.s-uri->s; + memcpy(p, skip.s+skip.len, (size_t)(uri->s+uri->len - skip.s - skip.len)); + p += uri->s+uri->len - skip.s - skip.len; + nuri->len = p - nuri->s; + + p = suri->s; + strncpy(p, "sip:", 4); + p += 4; + strncpy(p, ip.s, ip.len); + p += ip.len; + *p++ = ':'; + strncpy(p, port.s, port.len); + p += port.len; + proto_type_to_str((unsigned short)proto, &sproto); + if(sproto.len>0 && proto!=PROTO_UDP) { + strncpy(p, ";transport=", 11); + p += 11; + strncpy(p, sproto.s, sproto.len); + p += sproto.len; + } + suri->len = p - suri->s; + + LM_DBG("decoded <%.*s> => [%.*s] [%.*s]\n", + uri->len, uri->s, nuri->len, nuri->s, suri->len, suri->s); + + return 0; +} diff --git a/dset.h b/dset.h index bc131efb5..af9031221 100644 --- a/dset.h +++ b/dset.h @@ -66,6 +66,13 @@ struct branch /* reg-id contact header param value */ unsigned int reg_id; + /* ruid value from usrloc */ + char ruid[MAX_RUID_SIZE]; + unsigned int ruid_len; + + char location_ua[MAX_UA_SIZE + 1]; + unsigned int location_ua_len; + /* Branch flags */ flag_t flags; }; @@ -88,11 +95,12 @@ int drop_sip_branch(int idx); int append_branch(struct sip_msg* msg, str* uri, str* dst_uri, str* path, qvalue_t q, unsigned int flags, struct socket_info* force_socket, - str* instance, unsigned int reg_id); + str* instance, unsigned int reg_id, + str* ruid, str* location_ua); /*! \brief kamailio compatible version */ #define km_append_branch(msg, uri, dst_uri, path, q, flags, force_socket) \ - append_branch(msg, uri, dst_uri, path, q, flags, force_socket, 0, 0) + append_branch(msg, uri, dst_uri, path, q, flags, force_socket, 0, 0, 0, 0) /*! \brief ser compatible append_branch version. * append_branch version compatible with ser: no path or branch flags support @@ -109,7 +117,7 @@ static inline int ser_append_branch(struct sip_msg* msg, s_uri.len=uri_len; s_dst_uri.s=dst_uri; s_dst_uri.len=dst_uri_len; - return append_branch(msg, &s_uri, &s_dst_uri, 0, q, 0, force_socket, 0, 0); + return append_branch(msg, &s_uri, &s_dst_uri, 0, q, 0, force_socket, 0, 0, 0, 0); } @@ -134,11 +142,13 @@ void set_branch_iterator(int n); * *len) or 0 if there are no more branches. */ char* next_branch(int* len, qvalue_t* q, str* dst_uri, str* path, - unsigned int* flags, struct socket_info** force_socket); + unsigned int* flags, struct socket_info** force_socket, + str *ruid, str *instance, str *location_ua); char* get_branch( unsigned int i, int* len, qvalue_t* q, str* dst_uri, str* path, unsigned int *flags, - struct socket_info** force_socket); + struct socket_info** force_socket, + str* ruid, str *instance, str *location_ua); /*! \brief * Empty the array of branches @@ -159,6 +169,11 @@ char* print_dset(struct sip_msg* msg, int* len); void set_ruri_q(qvalue_t q); +/*! \brief + * Get src ip, port and proto as SIP uri or proxy address + */ +int msg_get_src_addr(sip_msg_t *msg, str *uri, int mode); + /*! \brief * Get the q value of the Request-URI */ @@ -240,4 +255,7 @@ int getbflagsval(unsigned int branch, flag_t* res); */ int setbflagsval(unsigned int branch, flag_t val); +int uri_add_rcv_alias(sip_msg_t *msg, str *uri, str *nuri); +int uri_restore_rcv_alias(str *uri, str *nuri, str *suri); + #endif /* _DSET_H */ diff --git a/dst_blacklist.c b/dst_blacklist.c index d368e5134..1e48a16e9 100644 --- a/dst_blacklist.c +++ b/dst_blacklist.c @@ -338,12 +338,10 @@ static ticks_t blst_timer(ticks_t ticks, struct timer_ln* tl, void* data); inline static void dst_blst_entry2ip(struct ip_addr* ip, struct dst_blst_entry* e) { -#ifdef USE_IPV6 if (e->flags & BLST_IS_IPV6){ ip->af=AF_INET6; ip->len=16; }else -#endif /* USE_IPV6 */ { ip->af=AF_INET; ip->len=4; @@ -566,12 +564,7 @@ inline static struct dst_blst_entry* _dst_blacklist_lst_find( unsigned char type; head=&dst_blst_hash[hash].first; -#ifdef USE_IPV6 type=(ip->af==AF_INET6)*BLST_IS_IPV6; -#else /* USE_IPV6 */ - if (unlikely(ip->af!=AF_INET)) return 0; - type=0; -#endif /* USE_IPV6 */ for (crt=head, tmp=&(*head)->next; *crt; crt=tmp, tmp=&(*crt)->next){ e=*crt; prefetch_loc_r((*crt)->next, 1); @@ -612,12 +605,7 @@ inline static int _dst_blacklist_del( unsigned char type; head=&dst_blst_hash[hash].first; -#ifdef USE_IPV6 type=(ip->af==AF_INET6)*BLST_IS_IPV6; -#else /* USE_IPV6 */ - if (unlikely(ip->af!=AF_INET)) return 0; - type=0; -#endif /* USE_IPV6 */ for (crt=head, tmp=&(*head)->next; *crt; crt=tmp, tmp=&(*crt)->next){ e=*crt; prefetch_loc_r((*crt)->next, 1); @@ -1159,24 +1147,14 @@ void dst_blst_add(rpc_t* rpc, void* ctx) } if (err_flags & BLST_IS_IPV6) { -#ifdef USE_IPV6 /* IPv6 address is specified */ ip_addr = str2ip6(&ip); -#else /* USE_IPV6 */ - rpc->fault(ctx, 400, "IPv6 support disabled"); - return; -#endif /* USE_IPV6 */ } else { /* try IPv4 first, than IPv6 */ ip_addr = str2ip(&ip); if (!ip_addr) { -#ifdef USE_IPV6 ip_addr = str2ip6(&ip); err_flags |= BLST_IS_IPV6; -#else /* USE_IPV6 */ - rpc->fault(ctx, 400, "Malformed or IPv6 ip address"); - return; -#endif /* USE_IPV6 */ } } if (!ip_addr) { diff --git a/etc/kamailio-basic.cfg b/etc/kamailio-basic.cfg new file mode 100644 index 000000000..5f403abe7 --- /dev/null +++ b/etc/kamailio-basic.cfg @@ -0,0 +1,612 @@ +#!KAMAILIO +# +# Kamailio (OpenSER) SIP Server v4.0 - default configuration script +# - web: http://www.kamailio.org +# - git: http://sip-router.org +# +# Direct your questions about this file to: +# +# Refer to the Core CookBook at http://www.kamailio.org/wiki/ +# for an explanation of possible statements, functions and parameters. +# +# Several features can be enabled using '#!define WITH_FEATURE' directives: +# +# *** To run in debug mode: +# - define WITH_DEBUG +# +# *** To enable mysql: +# - define WITH_MYSQL +# +# *** To enable authentication execute: +# - enable mysql +# - define WITH_AUTH +# - add users using 'kamctl' +# +# *** To enable IP authentication execute: +# - enable mysql +# - enable authentication +# - define WITH_IPAUTH +# - add IP addresses with group id '1' to 'address' table +# +# *** To enable persistent user location execute: +# - enable mysql +# - define WITH_USRLOCDB +# +# *** To enable nat traversal execute: +# - define WITH_NAT +# - install RTPProxy: http://www.rtpproxy.org +# - start RTPProxy: +# rtpproxy -l _your_public_ip_ -s udp:localhost:7722 +# +# *** To enable TLS support execute: +# - adjust CFGDIR/tls.cfg as needed +# - define WITH_TLS +# +# *** To enhance accounting execute: +# - enable mysql +# - define WITH_ACCDB +# - add following columns to database +#!ifdef ACCDB_COMMENT + ALTER TABLE acc ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT ''; + ALTER TABLE acc ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT ''; + ALTER TABLE acc ADD COLUMN src_ip varchar(64) NOT NULL default ''; + ALTER TABLE acc ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT ''; + ALTER TABLE acc ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT ''; + ALTER TABLE acc ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT ''; + ALTER TABLE missed_calls ADD COLUMN src_user VARCHAR(64) NOT NULL DEFAULT ''; + ALTER TABLE missed_calls ADD COLUMN src_domain VARCHAR(128) NOT NULL DEFAULT ''; + ALTER TABLE missed_calls ADD COLUMN src_ip varchar(64) NOT NULL default ''; + ALTER TABLE missed_calls ADD COLUMN dst_ouser VARCHAR(64) NOT NULL DEFAULT ''; + ALTER TABLE missed_calls ADD COLUMN dst_user VARCHAR(64) NOT NULL DEFAULT ''; + ALTER TABLE missed_calls ADD COLUMN dst_domain VARCHAR(128) NOT NULL DEFAULT ''; +#!endif + +####### Include Local Config If Exists ######### +import_file "kamailio-local.cfg" + +####### Defined Values ######### + +# *** Value defines - IDs used later in config +#!ifdef WITH_MYSQL +# - database URL - used to connect to database server by modules such +# as: auth_db, acc, usrloc, a.s.o. +#!ifndef DBURL +#!define DBURL "mysql://kamailio:kamailiorw@localhost/kamailio" +#!endif +#!endif +#!define MULTIDOMAIN 0 + +# - flags +# FLT_ - per transaction (message) flags +# FLB_ - per branch flags +#!define FLT_ACC 1 +#!define FLT_ACCMISSED 2 +#!define FLT_ACCFAILED 3 +#!define FLT_NATS 5 + +#!define FLB_NATB 6 +#!define FLB_NATSIPPING 7 + +####### Global Parameters ######### + +### LOG Levels: 3=DBG, 2=INFO, 1=NOTICE, 0=WARN, -1=ERR +#!ifdef WITH_DEBUG +debug=4 +log_stderror=yes +#!else +debug=2 +log_stderror=no +#!endif + +memdbg=5 +memlog=5 + +log_facility=LOG_LOCAL0 + +fork=yes +children=4 + +/* uncomment the next line to disable TCP (default on) */ +#disable_tcp=yes + +/* uncomment the next line to disable the auto discovery of local aliases + based on reverse DNS on IPs (default on) */ +#auto_aliases=no + +/* add local domain aliases */ +#alias="sip.mydomain.com" + +/* uncomment and configure the following line if you want Kamailio to + bind on a specific interface/port/proto (default bind on all available) */ +#listen=udp:10.0.0.10:5060 + +/* port to listen to + * - can be specified more than once if needed to listen on many ports */ +port=5060 + +#!ifdef WITH_TLS +enable_tls=yes +#!endif + +# life time of TCP connection when there is no traffic +# - a bit higher than registration expires to cope with UA behind NAT +tcp_connection_lifetime=3605 + +####### Modules Section ######## + +# set paths to location of modules (to sources or installation folders) +#!ifdef WITH_SRCPATH +mpath="modules_k:modules" +#!else +mpath="/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/" +#!endif + +#!ifdef WITH_MYSQL +loadmodule "db_mysql.so" +#!endif + +loadmodule "mi_fifo.so" +loadmodule "kex.so" +loadmodule "corex.so" +loadmodule "tm.so" +loadmodule "tmx.so" +loadmodule "sl.so" +loadmodule "rr.so" +loadmodule "pv.so" +loadmodule "maxfwd.so" +loadmodule "usrloc.so" +loadmodule "registrar.so" +loadmodule "textops.so" +loadmodule "siputils.so" +loadmodule "xlog.so" +loadmodule "sanity.so" +loadmodule "ctl.so" +loadmodule "cfg_rpc.so" +loadmodule "mi_rpc.so" +loadmodule "acc.so" + +#!ifdef WITH_AUTH +loadmodule "auth.so" +loadmodule "auth_db.so" +#!ifdef WITH_IPAUTH +loadmodule "permissions.so" +#!endif +#!endif + +#!ifdef WITH_NAT +loadmodule "nathelper.so" +loadmodule "rtpproxy.so" +#!endif + +#!ifdef WITH_TLS +loadmodule "tls.so" +#!endif + +#!ifdef WITH_DEBUG +loadmodule "debugger.so" +#!endif + +# ----------------- setting module-specific parameters --------------- + + +# ----- mi_fifo params ----- +modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") + + +# ----- tm params ----- +# auto-discard branches from previous serial forking leg +modparam("tm", "failure_reply_mode", 3) +# default retransmission timeout: 30sec +modparam("tm", "fr_timer", 30000) +# default invite retransmission timeout after 1xx: 120sec +modparam("tm", "fr_inv_timer", 120000) + + +# ----- rr params ----- +# add value to ;lr param to cope with most of the UAs +modparam("rr", "enable_full_lr", 1) +# do not append from tag to the RR (no need for this script) +modparam("rr", "append_fromtag", 0) + + +# ----- registrar params ----- +modparam("registrar", "method_filtering", 1) +/* uncomment the next line to disable parallel forking via location */ +# modparam("registrar", "append_branches", 0) +/* uncomment the next line not to allow more than 10 contacts per AOR */ +#modparam("registrar", "max_contacts", 10) +# max value for expires of registrations +modparam("registrar", "max_expires", 3600) +# set it to 1 to enable GRUU +modparam("registrar", "gruu_enabled", 0) + + +# ----- acc params ----- +/* what special events should be accounted ? */ +modparam("acc", "early_media", 0) +modparam("acc", "report_ack", 0) +modparam("acc", "report_cancels", 0) +/* by default ww do not adjust the direct of the sequential requests. + if you enable this parameter, be sure the enable "append_fromtag" + in "rr" module */ +modparam("acc", "detect_direction", 0) +/* account triggers (flags) */ +modparam("acc", "log_flag", FLT_ACC) +modparam("acc", "log_missed_flag", FLT_ACCMISSED) +modparam("acc", "log_extra", + "src_user=$fU;src_domain=$fd;src_ip=$si;" + "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd") +modparam("acc", "failed_transaction_flag", FLT_ACCFAILED) +/* enhanced DB accounting */ +#!ifdef WITH_ACCDB +modparam("acc", "db_flag", FLT_ACC) +modparam("acc", "db_missed_flag", FLT_ACCMISSED) +modparam("acc", "db_url", DBURL) +modparam("acc", "db_extra", + "src_user=$fU;src_domain=$fd;src_ip=$si;" + "dst_ouser=$tU;dst_user=$rU;dst_domain=$rd") +#!endif + + +# ----- usrloc params ----- +/* enable DB persistency for location entries */ +#!ifdef WITH_USRLOCDB +modparam("usrloc", "db_url", DBURL) +modparam("usrloc", "db_mode", 2) +modparam("usrloc", "use_domain", MULTIDOMAIN) +#!endif + + +# ----- auth_db params ----- +#!ifdef WITH_AUTH +modparam("auth_db", "db_url", DBURL) +modparam("auth_db", "calculate_ha1", yes) +modparam("auth_db", "password_column", "password") +modparam("auth_db", "load_credentials", "") +modparam("auth_db", "use_domain", MULTIDOMAIN) + +# ----- permissions params ----- +#!ifdef WITH_IPAUTH +modparam("permissions", "db_url", DBURL) +modparam("permissions", "db_mode", 1) +#!endif + +#!endif + + +#!ifdef WITH_NAT +# ----- rtpproxy params ----- +modparam("rtpproxy", "rtpproxy_sock", "udp:127.0.0.1:7722") + +# ----- nathelper params ----- +modparam("nathelper", "natping_interval", 30) +modparam("nathelper", "ping_nated_only", 1) +modparam("nathelper", "sipping_bflag", FLB_NATSIPPING) +modparam("nathelper", "sipping_from", "sip:pinger@kamailio.org") + +# params needed for NAT traversal in other modules +modparam("nathelper|registrar", "received_avp", "$avp(RECEIVED)") +modparam("usrloc", "nat_bflag", FLB_NATB) +#!endif + + +#!ifdef WITH_TLS +# ----- tls params ----- +modparam("tls", "config", "/usr/local/etc/kamailio/tls.cfg") +#!endif + +#!ifdef WITH_DEBUG +# ----- debugger params ----- +modparam("debugger", "cfgtrace", 1) +#!endif + +####### Routing Logic ######## + + +# Main SIP request routing logic +# - processing of any incoming SIP request starts with this route +# - note: this is the same as route { ... } +request_route { + + # per request initial checks + route(REQINIT); + + # NAT detection + route(NATDETECT); + + # CANCEL processing + if (is_method("CANCEL")) { + if (t_check_trans()) { + route(RELAY); + } + exit; + } + + # handle requests within SIP dialogs + route(WITHINDLG); + + ### only initial requests (no To tag) + + t_check_trans(); + + # authentication + route(AUTH); + + # record routing for dialog forming requests (in case they are routed) + # - remove preloaded route headers + remove_hf("Route"); + if (is_method("INVITE|SUBSCRIBE")) + record_route(); + + # account only INVITEs + if (is_method("INVITE")) { + setflag(FLT_ACC); # do accounting + } + + # dispatch requests to foreign domains + route(SIPOUT); + + ### requests for my local domains + + # handle registrations + route(REGISTRAR); + + if ($rU==$null) { + # request with no Username in RURI + sl_send_reply("484","Address Incomplete"); + exit; + } + + # user location service + route(LOCATION); +} + + +route[RELAY] { + # enable additional event routes for forwarded requests + # - serial forking, RTP relaying handling, a.s.o. + if (is_method("INVITE|BYE|SUBSCRIBE|UPDATE")) { + if(!t_is_set("branch_route")) t_on_branch("MANAGE_BRANCH"); + } + if (is_method("INVITE|SUBSCRIBE|UPDATE")) { + if(!t_is_set("onreply_route")) t_on_reply("MANAGE_REPLY"); + } + if (is_method("INVITE")) { + if(!t_is_set("failure_route")) t_on_failure("MANAGE_FAILURE"); + } + + if (!t_relay()) { + sl_reply_error(); + } + exit; +} + +# Per SIP request initial checks +route[REQINIT] { +#!ifdef WITH_ANTIFLOOD + # flood dection from same IP and traffic ban for a while + # be sure you exclude checking trusted peers, such as pstn gateways + # - local host excluded (e.g., loop to self) + if(src_ip!=myself) { + if($sht(ipban=>$si)!=$null) { + # ip is already blocked + xdbg("request from blocked IP - $rm from $fu (IP:$si:$sp)\n"); + exit; + } + if (!pike_check_req()) { + xlog("L_ALERT","ALERT: pike blocking $rm from $fu (IP:$si:$sp)\n"); + $sht(ipban=>$si) = 1; + exit; + } + } +#!endif + + if (!mf_process_maxfwd_header("10")) { + sl_send_reply("483","Too Many Hops"); + exit; + } + + if(!sanity_check("1511", "7")) { + xlog("Malformed SIP message from $si:$sp\n"); + exit; + } +} + +# Handle requests within SIP dialogs +route[WITHINDLG] { + if (has_totag()) { + # sequential request withing a dialog should + # take the path determined by record-routing + if (loose_route()) { + route(DLGURI); + if (is_method("BYE")) { + setflag(FLT_ACC); # do accounting ... + setflag(FLT_ACCFAILED); # ... even if the transaction fails + } + else if ( is_method("ACK") ) { + # ACK is forwarded statelessy + route(NATMANAGE); + } + else if ( is_method("NOTIFY") ) { + # Add Record-Route for in-dialog NOTIFY as per RFC 6665. + record_route(); + } + route(RELAY); + } else { + if ( is_method("ACK") ) { + if ( t_check_trans() ) { + # no loose-route, but stateful ACK; + # must be an ACK after a 487 + # or e.g. 404 from upstream server + route(RELAY); + exit; + } else { + # ACK without matching transaction ... ignore and discard + exit; + } + } + sl_send_reply("404","Not here"); + } + exit; + } +} + +# Handle SIP registrations +route[REGISTRAR] { + if (is_method("REGISTER")) { + if(isflagset(FLT_NATS)) { + setbflag(FLB_NATB); + # uncomment next line to do SIP NAT pinging + ## setbflag(FLB_NATSIPPING); + } + if (!save("location")) + sl_reply_error(); + + exit; + } +} + +# USER location service +route[LOCATION] { + if (!lookup("location")) { + $var(rc) = $rc; + t_newtran(); + switch ($var(rc)) { + case -1: + case -3: + send_reply("404", "Not Found"); + exit; + case -2: + send_reply("405", "Method Not Allowed"); + exit; + } + } + + # when routing via usrloc, log the missed calls also + if (is_method("INVITE")) { + setflag(FLT_ACCMISSED); + } + + route(RELAY); + exit; +} + + +# Authentication route +route[AUTH] { +#!ifdef WITH_AUTH + +#!ifdef WITH_IPAUTH + if((!is_method("REGISTER")) && allow_source_address()) { + # source IP allowed + return; + } +#!endif + + if (is_method("REGISTER") || from_uri==myself) { + # authenticate requests + if (!auth_check("$fd", "subscriber", "1")) { + auth_challenge("$fd", "0"); + exit; + } + # user authenticated - remove auth header + if(!is_method("REGISTER|PUBLISH")) + consume_credentials(); + } + # if caller is not local subscriber, then check if it calls + # a local destination, otherwise deny, not an open relay here + if (from_uri!=myself && uri!=myself) { + sl_send_reply("403","Not relaying"); + exit; + } + +#!endif + return; +} + +# Caller NAT detection route +route[NATDETECT] { +#!ifdef WITH_NAT + force_rport(); + if (nat_uac_test("19")) { + if (is_method("REGISTER")) { + fix_nated_register(); + } else { + add_contact_alias(); + } + setflag(FLT_NATS); + } +#!endif + return; +} + +# RTPProxy control +route[NATMANAGE] { +#!ifdef WITH_NAT + if (is_request()) { + if(has_totag()) { + if(check_route_param("nat=yes")) { + setbflag(FLB_NATB); + } + } + } + if (!(isflagset(FLT_NATS) || isbflagset(FLB_NATB))) + return; + + rtpproxy_manage("co"); + + if (is_request()) { + if (!has_totag()) { + if(t_is_branch_route()) { + add_rr_param(";nat=yes"); + } + } + } + if (is_reply()) { + if(isbflagset(FLB_NATB)) { + add_contact_alias(); + } + } +#!endif + return; +} + +# URI update for dialog requests +route[DLGURI] { +#!ifdef WITH_NAT + if(!isdsturiset()) { + handle_ruri_alias(); + } +#!endif + return; +} + +# Routing to foreign domains +route[SIPOUT] { + if (!uri==myself) { + append_hf("P-hint: outbound\r\n"); + route(RELAY); + } +} + +# manage outgoing branches +branch_route[MANAGE_BRANCH] { + xdbg("new branch [$T_branch_idx] to $ru\n"); + route(NATMANAGE); +} + +# manage incoming replies +onreply_route[MANAGE_REPLY] { + xdbg("incoming reply\n"); + if(status=~"[12][0-9][0-9]") + route(NATMANAGE); +} + +# manage failure routing cases +failure_route[MANAGE_FAILURE] { + route(NATMANAGE); + + if (t_is_canceled()) { + exit; + } +} diff --git a/etc/kamailio.cfg b/etc/kamailio.cfg index 911b7d627..ca4934003 100644 --- a/etc/kamailio.cfg +++ b/etc/kamailio.cfg @@ -1,6 +1,6 @@ #!KAMAILIO # -# Kamailio (OpenSER) SIP Server v4.0 - default configuration script +# Kamailio (OpenSER) SIP Server v4.1 - default configuration script # - web: http://www.kamailio.org # - git: http://sip-router.org # @@ -207,9 +207,9 @@ voicemail.srv_port = "5060" desc "VoiceMail Port" # set paths to location of modules (to sources or installation folders) #!ifdef WITH_SRCPATH -mpath="modules_k:modules" +mpath="modules/" #!else -mpath="/usr/local/lib/kamailio/modules_k/:/usr/local/lib/kamailio/modules/" +mpath="/usr/local/lib/kamailio/modules/" #!endif #!ifdef WITH_MYSQL @@ -680,21 +680,25 @@ route[PRESENCE] { if(!is_method("PUBLISH|SUBSCRIBE")) return; + if(is_method("SUBSCRIBE") && $hdr(Event)=="message-summary") { + route(TOVOICEMAIL); + # returns here if no voicemail server is configured + sl_send_reply("404", "No voicemail service"); + exit; + } + #!ifdef WITH_PRESENCE if (!t_newtran()) { sl_reply_error(); exit; - }; + } if(is_method("PUBLISH")) { handle_publish(); t_release(); - } - else - if( is_method("SUBSCRIBE")) - { + } else if(is_method("SUBSCRIBE")) { handle_subscribe(); t_release(); } @@ -753,7 +757,8 @@ route[NATDETECT] { if (is_method("REGISTER")) { fix_nated_register(); } else { - add_contact_alias(); + if(is_first_hop()) + set_contact_alias(); } setflag(FLT_NATS); } @@ -785,7 +790,8 @@ route[NATMANAGE] { } if (is_reply()) { if(isbflagset(FLB_NATB)) { - add_contact_alias(); + if(is_first_hop()) + set_contact_alias(); } } #!endif @@ -868,7 +874,7 @@ route[XMLRPC] { # route to voicemail server route[TOVOICEMAIL] { #!ifdef WITH_VOICEMAIL - if(!is_method("INVITE")) + if(!is_method("INVITE|SUBSCRIBE")) return; # check if VoiceMail server IP is defined @@ -876,11 +882,17 @@ route[TOVOICEMAIL] { xlog("SCRIPT: VoiceMail rotuing enabled but IP not defined\n"); return; } - if($avp(oexten)==$null) - return; - - $ru = "sip:" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip) + if(is_method("INVITE")) { + if($avp(oexten)==$null) + return; + $ru = "sip:" + $avp(oexten) + "@" + $sel(cfg_get.voicemail.srv_ip) + ":" + $sel(cfg_get.voicemail.srv_port); + } else { + if($rU==$null) + return; + $ru = "sip:" + $rU + "@" + $sel(cfg_get.voicemail.srv_ip) + + ":" + $sel(cfg_get.voicemail.srv_port); + } route(RELAY); exit; #!endif diff --git a/events.c b/events.c index d26ae9b2f..a72eb935f 100644 --- a/events.c +++ b/events.c @@ -27,11 +27,57 @@ #include "dprint.h" #include "mem/mem.h" +#include "route.h" #include "events.h" static sr_event_cb_t _sr_events_list; static int _sr_events_inited = 0; +typedef struct _sr_core_ert { + int init_parse_error; +} sr_core_ert_t; + +static sr_core_ert_t _sr_core_ert_list; + +/** + * + */ +void sr_core_ert_init(void) +{ + memset(&_sr_core_ert_list, 0, sizeof(sr_core_ert_t)); + /* 0 - is not a valid index in event_route blocks list */ + _sr_core_ert_list.init_parse_error = route_get(&event_rt, + "core:receive-parse-error"); + if(_sr_core_ert_list.init_parse_error<=0 + || event_rt.rlist[_sr_core_ert_list.init_parse_error]==NULL) { + _sr_core_ert_list.init_parse_error = -1; + } else { + LM_DBG("event_route[core:receive-parse-error] is defined\n"); + } +} + +/** + * + */ +void sr_core_ert_run(sip_msg_t *msg, int e) +{ + struct run_act_ctx ctx; + int rtb; + + switch(e) { + case SR_CORE_ERT_RECEIVE_PARSE_ERROR: + if(likely(_sr_core_ert_list.init_parse_error<=0)) + return; + rtb = get_route_type(); + set_route_type(REQUEST_ROUTE); + init_run_actions_ctx(&ctx); + run_top_route(event_rt.rlist[_sr_core_ert_list.init_parse_error], + msg, &ctx); + set_route_type(rtb); + break; + } +} + /** * */ @@ -106,6 +152,11 @@ int sr_event_register_cb(int type, sr_event_cb_f f) _sr_events_list.tcp_ws_frame_out = f; else return -1; break; + case SREV_STUN_IN: + if(_sr_events_list.stun_in==0) + _sr_events_list.stun_in = f; + else return -1; + break; default: return -1; } @@ -209,6 +260,12 @@ int sr_event_exec(int type, void *data) ret = _sr_events_list.tcp_ws_frame_out(data); return ret; } else return 1; + case SREV_STUN_IN: + if(unlikely(_sr_events_list.stun_in!=0)) + { + ret = _sr_events_list.stun_in(data); + return ret; + } else return 1; default: return -1; } @@ -242,6 +299,8 @@ int sr_event_enabled(int type) return (_sr_events_list.tcp_ws_frame_in!=0)?1:0; case SREV_TCP_WS_FRAME_OUT: return (_sr_events_list.tcp_ws_frame_out!=0)?1:0; + case SREV_STUN_IN: + return (_sr_events_list.stun_in!=0)?1:0; } return 0; } diff --git a/events.h b/events.h index 734e90c18..376da07b1 100644 --- a/events.h +++ b/events.h @@ -28,12 +28,13 @@ #define SREV_CORE_STATS 3 #define SREV_CFG_RUN_ACTION 4 #define SREV_PKG_SET_USED 5 -#define SREV_PKG_SET_REAL_USED 6 +#define SREV_PKG_SET_REAL_USED 6 #define SREV_NET_DGRAM_IN 7 #define SREV_TCP_HTTP_100C 8 #define SREV_TCP_MSRP_FRAME 9 #define SREV_TCP_WS_FRAME_IN 10 #define SREV_TCP_WS_FRAME_OUT 11 +#define SREV_STUN_IN 12 typedef int (*sr_event_cb_f)(void *data); @@ -50,6 +51,7 @@ typedef struct sr_event_cb { sr_event_cb_f tcp_msrp_frame; sr_event_cb_f tcp_ws_frame_in; sr_event_cb_f tcp_ws_frame_out; + sr_event_cb_f stun_in; } sr_event_cb_t; void sr_event_cb_init(void); @@ -57,4 +59,12 @@ int sr_event_register_cb(int type, sr_event_cb_f f); int sr_event_exec(int type, void *data); int sr_event_enabled(int type); + +/* shortcut types for core event routes */ +/* initial parsing error in message receive function */ +#define SR_CORE_ERT_RECEIVE_PARSE_ERROR 1 + +void sr_core_ert_init(void); +void sr_core_ert_run(sip_msg_t *msg, int e); + #endif diff --git a/examples/icscf/icscf.cfg b/examples/icscf/icscf.cfg index e78255749..a8cea3751 100644 --- a/examples/icscf/icscf.cfg +++ b/examples/icscf/icscf.cfg @@ -17,16 +17,20 @@ # Set a forced CX/DX-Peer, do not try to find one #!define CXDX_FORCED_PEER "hss.kamailio-ims.org" +# Allowed IPs for XML-RPC-Queries +#!define XMLRPC_WHITELIST_1 "127.0.0.1" +##!define XMLRPC_WHITELIST_2 "127.0.0.1" +##!define XMLRPC_WHITELIST_3 "127.0.0.1" + # *** To run in debug mode: # - define WITH_DEBUG # -# *** To enable TLS support execute: -# - adjust CFGDIR/tls.cfg as needed -# - define WITH_TLS +# *** To enable TCP support execute: +# - define WITH_TCP # # *** To enable XMLRPC support execute: # - define WITH_XMLRPC -# - adjust route[XMLRPC] for access policy +# - this will automagically enable TCP # # *** To enable a Homer SIP-Capter-Node: # - define CAPTURE_NODE with a proper address diff --git a/examples/icscf/kamailio.cfg b/examples/icscf/kamailio.cfg index c68f83fd1..0da30a8d1 100644 --- a/examples/icscf/kamailio.cfg +++ b/examples/icscf/kamailio.cfg @@ -60,16 +60,23 @@ dns_srv_lb=yes # Always: Also try IPv6: dns_try_ipv6=yes -#!ifdef WITH_TLS +#!ifdef WITH_XMLRPC +#!ifndef WITH_TCP #!define WITH_TCP -enable_tls=yes +#!endif +#!ifndef TCP_PROCESSES +# Number of TCP Processes +#!define TCP_PROCESSES 3 +#!endif #!endif -/* uncomment the next line to disable TCP (default on) */ #!ifdef WITH_TCP # life time of TCP connection when there is no traffic # - a bit higher than registration expires to cope with UA behind NAT tcp_connection_lifetime=3615 +#!ifdef TCP_PROCESSES +tcp_children=TCP_PROCESSES +#!endif #!else disable_tcp=yes #!endif @@ -260,8 +267,18 @@ route[REQINIT] { ###################################################################### #!ifdef WITH_XMLRPC route[XMLRPC] { - # allow XMLRPC from localhost - if ((method=="POST" || method=="GET") && (src_ip==127.0.0.1)) { + if ((method=="POST" || method=="GET") +#!ifdef XMLRPC_WHITELIST_1 +&& ((src_ip == XMLRPC_WHITELIST_1) +#!ifdef XMLRPC_WHITELIST_2 + || (src_ip == XMLRPC_WHITELIST_2) +#!endif +#!ifdef XMLRPC_WHITELIST_3 + || (src_ip == XMLRPC_WHITELIST_3) +#!endif +) +#!endif +) { # close connection only for xmlrpclib user agents (there is a bug in # xmlrpclib: it waits for EOF before interpreting the response). if ($hdr(User-Agent) =~ "xmlrpclib") @@ -295,29 +312,44 @@ route[register] #free this from the failed I_scscf_select call I_scscf_drop(); # Do an asynchronous UAR: - I_perform_user_authorization_request("0"); - if ($avp(uaa_return_code) == 1) { - if (I_scscf_select("0")) { - t_on_reply("register_reply"); - t_on_failure("register_failure"); - if (!t_relay()) { - t_reply("500","Error forwarding towards S-CSCF"); - break; - } - break; - } else { - I_scscf_drop(); - t_reply("500", "Server error on UAR select S-CSCF"); - break; - } - } else { - t_reply("500", "Server error on UAR select S-CSCF"); - break; - } + I_perform_user_authorization_request("REG_UAR_REPLY","0"); #0=REG/DEREG; 1=REG+Capabilities + exit; } break; } +route[REG_UAR_REPLY] +{ + #this is async so to know status we have to check the reply avp + switch ($avp(s:uaa_return_code)){ + case 1: #success + if (I_scscf_select("0")){ + t_on_failure("register_failure"); + t_on_reply("register_reply"); + #now relay to appropriate SCSCF + if (!t_relay()) { + t_reply("500", "Error forwarding to SCSCF"); + } + } else {#select failed + I_scscf_drop(); + t_reply("500", "Server error on SCSCF Select (UAR)"); + } + break; + case -1: #failure + xlog("L_ERR", "UAR failure - error response sent from module\n"); + break; + case -2: #error + xlog("L_ERR", "UAR error - sending error response now\n"); + t_reply("500", "UAR failed"); + break; + default: + xlog("L_ERR", "Unknown return code from UAR, value is [$avp(s:uaa_return_code)]\n"); + t_reply("500", "Unknown response code from UAR"); + break; + } +} + + ###################################################################### # Replies to REGISTER requests, ###################################################################### @@ -371,7 +403,10 @@ failure_route[register_failure] ###################################################################### route[initial_request] { - I_perform_location_information_request("0"); + I_perform_location_information_request("LIR_REPLY", "0"); +} + +route[LIR_REPLY] { if ($avp(lia_return_code) == 1) { if (I_scscf_select("0")) { append_branch(); diff --git a/examples/ims_dnszone/kamailio-ims.org.dnszone b/examples/ims_dnszone/kamailio-ims.org.dnszone new file mode 100644 index 000000000..9ee6ff552 --- /dev/null +++ b/examples/ims_dnszone/kamailio-ims.org.dnszone @@ -0,0 +1,34 @@ +$ORIGIN kamailio-ims.org. +$TTL 1W +@ 1D IN SOA localhost. root.localhost. ( + 2006101001 ; serial + 3H ; refresh + 15M ; retry + 1W ; expiry + 1D ) ; minimum + + 1D IN NS ns +ns 1D IN A 127.0.0.1 + +pcscf 1D IN A 127.0.0.1 +_sip.pcscf 1D SRV 0 0 5060 pcscf +_sip._udp.pcscf 1D SRV 0 0 5060 pcscf +_sip._tcp.pcscf 1D SRV 0 0 5060 pcscf + + +icscf 1D IN A 127.0.0.1 +_sip 1D SRV 0 0 5060 icscf +_sip._udp 1D SRV 0 0 5060 icscf +_sip._tcp 1D SRV 0 0 5060 icscf + +kamailio-ims.org. 1D IN A 127.0.0.1 +kamailio-ims.org. 1D IN NAPTR 10 50 "s" "SIP+D2U" "" _sip._udp +kamailio-ims.org. 1D IN NAPTR 20 50 "s" "SIP+D2T" "" _sip._tcp + +scscf 1D IN A 127.0.0.1 +_sip.scscf 1D SRV 0 0 5060 scscf +_sip._udp.scscf 1D SRV 0 0 5060 scscf +_sip._tcp.scscf 1D SRV 0 0 5060 scscf + +hss 1D IN A 127.0.0.1 + diff --git a/examples/outbound/edge.cfg b/examples/outbound/edge.cfg new file mode 100644 index 000000000..2bdf93b77 --- /dev/null +++ b/examples/outbound/edge.cfg @@ -0,0 +1,172 @@ +#!KAMAILIO +# +# Edge proxy configuration +# + +#!substdef "!REGISTRAR_IP!a.b.c.d!g" +#!substdef "!REGISTRAR_PORT!5060!g" +#!substdef "!FLOW_TIMER!20!g" + +####### Global Parameters ######### + +debug=2 +log_stderror=no +log_facility=LOG_LOCAL0 +fork=yes +children=4 +alias="example.com" +mpath="/usr/lib64/kamailio/modules" +tcp_connection_lifetime=30 # FLOW_TIMER + 10 +force_rport=yes + + +####### Modules Section ######## + +loadmodule "tm.so" +loadmodule "sl.so" +loadmodule "outbound.so" +loadmodule "rr.so" +loadmodule "path.so" +loadmodule "pv.so" +loadmodule "maxfwd.so" +loadmodule "xlog.so" +loadmodule "sanity.so" +loadmodule "ctl.so" +loadmodule "mi_rpc.so" +loadmodule "mi_fifo.so" +loadmodule "textops.so" +loadmodule "siputils.so" +loadmodule "stun.so" + +# ----------------- setting module-specific parameters --------------- + +# ----- mi_fifo params ----- +modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") + +# ----- tm params ----- +modparam("tm", "failure_reply_mode", 3) + +# ----- rr params ----- +modparam("rr", "append_fromtag", 0) + + +####### Routing Logic ######## + +request_route { + route(REQINIT); + + if (is_method("CANCEL")) { + if (t_check_trans()) { + route(RELAY); + } + exit; + } + + route(WITHINDLG); + + t_check_trans(); + + if (is_method("REGISTER")) { + remove_hf("Route"); + add_path(); + $du = "sip:REGISTRAR_IP:REGISTRAR_PORT"; + } else { + if (is_method("INVITE|SUBSCRIBE")) + record_route(); + + if (@via[2] == "") { + # From client so route to registrar... + + if ($rU == $null) { + sl_send_reply("484", "Address Incomplete"); + exit; + } + remove_hf("Route"); + $du = "sip:REGISTRAR_IP:REGISTRAR_PORT"; + } else { + # From registrar so route using "Route:" headers... + + if (!loose_route()) { + switch($rc) { + case -2: + sl_send_reply("403", "Forbidden"); + exit; + default: + xlog("L_ERR", "in request_route\n"); + sl_reply_error(); + exit; + } + } + + t_on_failure("FAIL_OUTBOUND"); + } + } + + route(RELAY); +} + +route[RELAY] { + if (!t_relay()) { + sl_reply_error(); + } + exit; +} + +route[REQINIT] { + if (!mf_process_maxfwd_header("10")) { + sl_send_reply("483","Too Many Hops"); + exit; + } + + if(!sanity_check("1511", "7")) + { + xlog("Malformed SIP message from $si:$sp\n"); + exit; + } +} + +route[WITHINDLG] { + if (has_totag()) { + if (!loose_route()) { + switch($rc) { + case -2: + sl_send_reply("403", "Forbidden"); + exit; + default: + if (is_method("ACK")) { + if ( t_check_trans() ) { + route(RELAY); + exit; + } else { + exit; + } + } + sl_send_reply("404","Not Found"); + } + } else { + if (is_method("NOTIFY")) { + record_route(); + } + route(RELAY); + } + exit; + } +} + +onreply_route { + if (!t_check_trans()) { + drop; + } + + if ($rm == "REGISTER" && $rs >= 200 && $rs <= 299) { + remove_hf("Flow-Timer"); + if ($(hdr(Require)[*])=~"outbound") + insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID"); + } +} + +failure_route[FAIL_OUTBOUND] { + if (t_branch_timeout() || !t_branch_replied()) { + send_reply("430", "Flow Failed"); + } +} diff --git a/examples/outbound/edge_websocket.cfg b/examples/outbound/edge_websocket.cfg new file mode 100644 index 000000000..843ec204b --- /dev/null +++ b/examples/outbound/edge_websocket.cfg @@ -0,0 +1,293 @@ +#!KAMAILIO +# +# Edge proxy configuration with SIP over WebSocket support +# + +#!substdef "!DBURL!sqlite:///etc/kamailio/db.sqlite!g" +#!substdef "!MY_IP_ADDR!a.b.c.d!g" +#!substdef "!MY_DOMAIN!example.com!g" +#!substdef "!MY_WS_PORT!80!g" +#!substdef "!MY_WSS_PORT!443!g" +#!substdef "!MY_WS_ADDR!tcp:MY_IP_ADDR:MY_WS_PORT!g" +#!substdef "!MY_WSS_ADDR!tls:MY_IP_ADDR:MY_WSS_PORT!g" + +#!substdef "!REGISTRAR_IP!e.f.g.h!g" +#!substdef "!REGISTRAR_PORT!5060!g" +#!substdef "!FLOW_TIMER!20!g" + +#!define WITH_TLS +#!define WITH_WEBSOCKETS + + +####### Global Parameters ######### + +debug=2 +log_stderror=no +log_facility=LOG_LOCAL0 +fork=yes +children=4 +mpath="/usr/lib64/kamailio/modules/" +force_rport=yes + +#!ifdef WITH_TLS +enable_tls=1 +#!endif + +listen=MY_IP_ADDR +#!ifdef WITH_WEBSOCKETS +listen=MY_WS_ADDR +#!ifdef WITH_TLS +listen=MY_WSS_ADDR +#!endif +#!endif + +tcp_connection_lifetime=30 # FLOW_TIMER + 10 +tcp_accept_no_cl=yes +tcp_rd_buf_size=16384 + + +####### Modules Section ######## + +loadmodule "tm.so" +loadmodule "sl.so" +loadmodule "outbound.so" +loadmodule "rr.so" +loadmodule "path.so" +loadmodule "pv.so" +loadmodule "maxfwd.so" +loadmodule "xlog.so" +loadmodule "sanity.so" +loadmodule "ctl.so" +loadmodule "mi_rpc.so" +loadmodule "mi_fifo.so" +loadmodule "textops.so" +loadmodule "siputils.so" +loadmodule "stun.so" +loadmodule "kex.so" +loadmodule "corex.so" +#!ifdef WITH_TLS +loadmodule "tls.so" +#!endif +#!ifdef WITH_WEBSOCKETS +loadmodule "xhttp.so" +loadmodule "websocket.so" +#!endif + +# ----------------- setting module-specific parameters --------------- + +# ----- mi_fifo params ----- +modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") + +# ----- tm params ----- +modparam("tm", "failure_reply_mode", 3) + +# ----- rr params ----- +modparam("rr", "append_fromtag", 0) + +# ----- corex params ----- +modparam("corex", "alias_subdomains", "MY_DOMAIN") + +#!ifdef WITH_TLS +# ----- tls params ----- +modparam("tls", "tls_method", "SSLv23") +modparam("tls", "certificate", "/etc/pki/CA/ser1_cert.pem") +modparam("tls", "private_key", "/etc/pki/CA/privkey.pem") +modparam("tls", "ca_list", "/etc/pki/CA/calist.pem") +#!endif + +#!ifdef WITH_WEBSOCKETS +# ----- websocket params ----- +modparam("websocket", "keepalive_timeout", 25) # FLOW_TIMER + 5 +#!endif + + +####### Routing Logic ######## + +request_route { + if (($Rp == MY_WS_PORT || $Rp == MY_WSS_PORT) + && !(proto == WS || proto == WSS)) { + xlog("L_WARN", "SIP request received on $Rp\n"); + sl_send_reply("403", "Forbidden"); + exit; + } + + route(REQINIT); + + if (is_method("CANCEL")) { + if (t_check_trans()) { + route(RELAY); + } + exit; + } + + route(WITHINDLG); + + t_check_trans(); + + if (is_method("REGISTER")) { + remove_hf("Route"); + add_path(); + $du = "sip:REGISTRAR_IP:REGISTRAR_PORT"; + } else { + if (is_method("INVITE|SUBSCRIBE")) + record_route(); + + if (@via[2] == "") { + # From client so route to registrar... + + if ($rU == $null) { + sl_send_reply("484", "Address Incomplete"); + exit; + } + remove_hf("Route"); + $du = "sip:REGISTRAR_IP:REGISTRAR_PORT"; + } else { + # From registrar so route using "Route:" headers... + + if (!loose_route()) { + switch($rc) { + case -2: + sl_send_reply("403", "Forbidden"); + exit; + default: + xlog("L_ERR", "in request_route\n"); + sl_reply_error(); + exit; + } + } + + t_on_failure("FAIL_OUTBOUND"); + } + } + + route(RELAY); +} + +route[RELAY] { + if (!t_relay()) { + sl_reply_error(); + } + exit; +} + +route[REQINIT] { + if (!mf_process_maxfwd_header("10")) { + sl_send_reply("483","Too Many Hops"); + exit; + } + + if(!sanity_check("1511", "7")) + { + xlog("Malformed SIP message from $si:$sp\n"); + exit; + } +} + +route[WITHINDLG] { + if (has_totag()) { + if (!loose_route()) { + switch($rc) { + case -2: + sl_send_reply("403", "Forbidden"); + exit; + default: + if (is_method("ACK")) { + if ( t_check_trans() ) { + route(RELAY); + exit; + } else { + exit; + } + } + sl_send_reply("404","Not Found"); + } + } else { + if (is_method("NOTIFY")) { + record_route(); + } + route(RELAY); + } + exit; + } +} + +onreply_route { + if (($Rp == MY_WS_PORT || $Rp == MY_WSS_PORT) + && !(proto == WS || proto == WSS)) { + xlog("L_WARN", "SIP response received on $Rp\n"); + drop; + } + + if (!t_check_trans()) { + drop; + } + + if ($rm == "REGISTER" && $rs >= 200 && $rs <= 299) { + remove_hf("Flow-Timer"); + if ($(hdr(Require)[*])=~"outbound") + insert_hf("Flow-Timer: FLOW_TIMER\r\n", "Call-ID"); + } +} + +failure_route[FAIL_OUTBOUND] { + if (t_branch_timeout() || !t_branch_replied()) { + send_reply("430", "Flow Failed"); + } +} + +event_route[xhttp:request] { + set_reply_close(); + set_reply_no_connect(); + + if ($Rp != MY_WS_PORT +#!ifdef WITH_TLS + && $Rp != MY_WSS_PORT +#!endif + ) { + xlog("L_WARN", "HTTP request received on $Rp\n"); + xhttp_reply("403", "Forbidden", "", ""); + exit; + } + + xlog("L_DBG", "HTTP Request Received\n"); + + if ($hdr(Upgrade)=~"websocket" + && $hdr(Connection)=~"Upgrade" + && $rm=~"GET") { + + # Validate Host - make sure the client is using the correct + # alias for WebSockets + if ($hdr(Host) == $null || !is_myself("sip:" + $hdr(Host))) { + xlog("L_WARN", "Bad host $hdr(Host)\n"); + xhttp_reply("403", "Forbidden", "", ""); + exit; + } + + # Optional... validate Origin - make sure the client is from an + # authorised website. For example, + # + # if ($hdr(Origin) != "http://communicator.MY_DOMAIN" + # && $hdr(Origin) != "https://communicator.MY_DOMAIN") { + # xlog("L_WARN", "Unauthorised client $hdr(Origin)\n"); + # xhttp_reply("403", "Forbidden", "", ""); + # exit; + # } + + # Optional... perform HTTP authentication + + # ws_handle_handshake() exits (no further configuration file + # processing of the request) when complete. + if (ws_handle_handshake()) + { + # Optional... cache some information about the + # successful connection + exit; + } + } + + xhttp_reply("404", "Not Found", "", ""); +} + +event_route[websocket:closed] { + xlog("L_INFO", "WebSocket connection from $si:$sp has closed\n"); +} diff --git a/examples/outbound/registrar.cfg b/examples/outbound/registrar.cfg new file mode 100644 index 000000000..db920fa63 --- /dev/null +++ b/examples/outbound/registrar.cfg @@ -0,0 +1,202 @@ +#!KAMAILIO +# +# Registrar configuration +# + + +####### Global Parameters ######### + +debug=2 +log_stderror=no +log_facility=LOG_LOCAL0 +fork=yes +children=4 +alias="example.com" +mpath="/usr/lib64/kamailio/modules" + + +####### Modules Section ######## + +loadmodule "tm.so" +loadmodule "tmx.so" +loadmodule "sl.so" +loadmodule "rr.so" +loadmodule "pv.so" +loadmodule "maxfwd.so" +loadmodule "xlog.so" +loadmodule "sanity.so" +loadmodule "ctl.so" +loadmodule "mi_rpc.so" +loadmodule "mi_fifo.so" +loadmodule "textops.so" +loadmodule "siputils.so" +loadmodule "usrloc.so" +loadmodule "registrar.so" + +# ----------------- setting module-specific parameters --------------- + +# ----- mi_fifo params ----- +modparam("mi_fifo", "fifo_name", "/tmp/kamailio_fifo") + + +# ----- tm params ----- +modparam("tm", "failure_reply_mode", 3) +modparam("tm", "restart_fr_on_each_reply", 0) +modparam("tm", "contact_flows_avp", "tm_contact_flows") +modparam("tm", "contacts_avp", "tm_contacts") + +# ----- rr params ----- +modparam("rr", "append_fromtag", 0) + +# ----- registrar params ----- +modparam("registrar", "use_path", 1) +modparam("registrar", "gruu_enabled", 1) +modparam("registrar", "outbound_mode", 1) + + +####### Routing Logic ######## + +request_route { + route(REQINIT); + + if (is_method("CANCEL")) { + if (t_check_trans()) { + route(RELAY); + } + exit; + } + + route(WITHINDLG); + + t_check_trans(); + + remove_hf("Route"); + if (is_method("INVITE|SUBSCRIBE")) + record_route(); + + route(REGISTRAR); + + if ($rU==$null) { + xlog("L_INFO", "Address Incomplete\n"); + send_reply("484","Address Incomplete"); + exit; + } + + route(LOCATION); +} + + +route[RELAY] { + if (!t_relay()) { + xlog("L_ERR", "t_relay() failed\n"); + sl_reply_error(); + } + exit; +} + +route[REQINIT] { + if (!mf_process_maxfwd_header("10")) { + xlog("L_INFO", "Too Many Hops\n"); + send_reply("483","Too Many Hops"); + exit; + } + + if(!sanity_check("1511", "7")) + { + xlog("Malformed SIP message from $si:$sp\n"); + exit; + } +} + +route[WITHINDLG] { + if (has_totag()) { + if (loose_route()) { + if (is_method("NOTIFY")) { + record_route(); + } + route(RELAY); + } else { + if (is_method("ACK")) { + if (t_check_trans()) { + route(RELAY); + exit; + } else { + exit; + } + } + xlog("L_INFO", "Not Found"); + send_reply("404","Not Found"); + } + exit; + } +} + +route[REGISTRAR] { + if (is_method("REGISTER")) + { + if (!save("location")) { + xlog("L_ERR", "Unable to save location\n"); + sl_reply_error(); + } + exit; + } +} + +route[LOCATION] { + if (!lookup("location")) { + $var(rc) = $rc; + t_newtran(); + switch ($var(rc)) { + case -1: + case -3: + send_reply("404", "Not Found"); + exit; + case -2: + send_reply("405", "Method Not Allowed"); + exit; + } + } + + if (!t_load_contacts() || !t_next_contacts()) { + xlog("L_ERR", "t_(load|next)_contacts() failed\n"); + sl_reply_error(); + exit; + } + + t_on_failure("FAIL_TRANSACTION"); + t_on_branch_failure("FAIL-BRANCH"); + route(RELAY); + exit; +} + +onreply_route { + if (!t_check_trans()) { + drop; + } +} + +failure_route[FAIL_TRANSACTION] { + if (!t_check_status("6[0-9][0-9]")) { + if (t_next_contacts()) { + t_relay(); + exit; + } + } + + if (t_check_status("430")) { + t_reply("480", "Temporarily Unavailable"); + exit; + } +} + +event_route[tm:branch-failure:FAIL-BRANCH] { + if (t_check_status("403|430") + || (t_branch_timeout() && !t_branch_replied())) { + unregister("location", "$tu", "$T_reply_ruid"); + + if (t_next_contact_flow()) { + t_on_branch_failure("FAIL-BRANCH"); + t_relay(); + } + } +} diff --git a/examples/pcscf/kamailio.cfg b/examples/pcscf/kamailio.cfg index 8daf8b116..c44d587d3 100644 --- a/examples/pcscf/kamailio.cfg +++ b/examples/pcscf/kamailio.cfg @@ -46,7 +46,6 @@ sip_warning=no children=64 #!endif -syn_branch=0 # Locks all ser pages into memory making it unswappable (in general one # doesn't want his sip proxy swapped out ) mlock_pages=yes @@ -90,10 +89,19 @@ auto_aliases=no #!ifndef WITH_TCP #!define WITH_TCP #!endif - enable_tls=yes #!endif +#!ifdef WITH_XMLRPC +#!ifndef WITH_TCP +#!define WITH_TCP +#!endif +#!ifndef TCP_PROCESSES +# Number of TCP Processes +#!define TCP_PROCESSES 3 +#!endif +#!endif + # Check, if NAT is enabled (in case you want to Force all calls through the RTPProxy) #!ifdef FORCE_RTPRELAY #!ifndef WITH_NAT @@ -101,6 +109,13 @@ enable_tls=yes #!endif #!endif +# Check, if NAT is enabled (in case you want to Force all calls through the RTPProxy) +#!ifdef WITH_RTPIPV4 +#!ifndef WITH_NAT +#!define WITH_NAT +#!endif +#!endif + #!ifdef WITH_TCP # life time of TCP connection when there is no traffic # - a bit higher than registration expires to cope with UA behind NAT @@ -115,6 +130,9 @@ tcp_connection_lifetime=3615 tcp_accept_aliases=no # Enable SIP outbound TCP keep-alive using PING-PONG (CRLFCRLF - CRLF). tcp_crlf_ping=yes +#!ifdef TCP_PROCESSES +tcp_children=TCP_PROCESSES +#!endif #!else disable_tcp=yes #!endif @@ -137,8 +155,6 @@ loadmodule "textops" loadmodule "textopsx" loadmodule "maxfwd" loadmodule "xlog" -loadmodule "pua" -loadmodule "db_sqlite" loadmodule "ims_registrar_pcscf" loadmodule "sanity" loadmodule "siputils" @@ -191,11 +207,6 @@ modparam("mi_fifo", "fifo_mode", 0666) modparam("mi_fifo", "fifo_user", "kamailio") modparam("mi_fifo", "fifo_group", "kamailio") -# ----- pua params ----- -# Database is disabled (for now) -modparam("pua", "db_mode", 0) -modparam("pua", "db_url", "sqlite:///etc/kamailio/kamailio.db") - # ----- tm params ----- # auto-discard branches from previous serial forking leg modparam("tm", "failure_reply_mode", 3) @@ -455,8 +466,18 @@ route[REQINIT] { ###################################################################### #!ifdef WITH_XMLRPC route[XMLRPC] { - # allow XMLRPC from localhost - if ((method=="POST" || method=="GET") && (src_ip==127.0.0.1)) { + if ((method=="POST" || method=="GET") +#!ifdef XMLRPC_WHITELIST_1 +&& ((src_ip == XMLRPC_WHITELIST_1) +#!ifdef XMLRPC_WHITELIST_2 + || (src_ip == XMLRPC_WHITELIST_2) +#!endif +#!ifdef XMLRPC_WHITELIST_3 + || (src_ip == XMLRPC_WHITELIST_3) +#!endif +) +#!endif +) { # close connection only for xmlrpclib user agents (there is a bug in # xmlrpclib: it waits for EOF before interpreting the response). if ($hdr(User-Agent) =~ "xmlrpclib") diff --git a/examples/pcscf/pcscf.cfg b/examples/pcscf/pcscf.cfg index 69c8cb874..5e38d7f9d 100644 --- a/examples/pcscf/pcscf.cfg +++ b/examples/pcscf/pcscf.cfg @@ -13,6 +13,11 @@ # SIP-Address of capturing node, if not set, capturing is disabled. ##!define CAPTURE_NODE "sip:10.0.6.1" +# Allowed IPs for XML-RPC-Queries +#!define XMLRPC_WHITELIST_1 "127.0.0.1" +##!define XMLRPC_WHITELIST_2 "127.0.0.1" +##!define XMLRPC_WHITELIST_3 "127.0.0.1" + # IP-Adress(es) of the RTP-Proxy #!define RTPPROXY_ADDRESS "udp:127.0.0.1:22222" # @@ -28,13 +33,25 @@ # - start RTPProxy: # rtpproxy -l _your_public_ip_ -s udp:localhost:7722 # +# *** To force alls calls through the RTP-Proxy +# - this will automagically enable NAT-Traversal +# - define FORCE_RTPRELAY +# +# *** To enable IPv4/IPv6 Translation (RTPProxy) +# - this will automagically enable NAT-Traversal +# - define WITH_RTPIPV4 +# +# *** To enable TCP support execute: +# - define WITH_TCP +# # *** To enable TLS support execute: # - adjust CFGDIR/tls.cfg as needed # - define WITH_TLS +# - this will automagically enable TCP # # *** To enable XMLRPC support execute: # - define WITH_XMLRPC -# - adjust route[XMLRPC] for access policy +# - this will automagically enable TCP # # *** To enable anti-flood detection execute: # - adjust pike and htable=>ipban settings as needed (default is @@ -51,8 +68,12 @@ # Enabled Features for this host: ##!define WITH_DEBUG ##!define WITH_NAT +##!define FORCE_RTPRELAY ##!define WITH_TLS #!define WITH_XMLRPC #!define WITH_ANTIFLOOD ##!define WITH_RX +##!define WITH_TCP +##!define WITH_RTPIPV4 + diff --git a/examples/scscf/kamailio.cfg b/examples/scscf/kamailio.cfg index 4fa09b0aa..b8c9f1b6d 100644 --- a/examples/scscf/kamailio.cfg +++ b/examples/scscf/kamailio.cfg @@ -73,15 +73,23 @@ dns_try_ipv6=yes # Try onle IPv6: dns_cache_flags=6 -#!ifdef WITH_TLS +#!ifdef WITH_XMLRPC +#!ifndef WITH_TCP #!define WITH_TCP -enable_tls=yes +#!endif +#!ifndef TCP_PROCESSES +# Number of TCP Processes +#!define TCP_PROCESSES 3 +#!endif #!endif #!ifdef WITH_TCP # life time of TCP connection when there is no traffic # - a bit higher than registration expires to cope with UA behind NAT tcp_connection_lifetime=3615 +#!ifdef TCP_PROCESSES +tcp_children=TCP_PROCESSES +#!endif #!else disable_tcp=yes #!endif @@ -223,11 +231,11 @@ modparam("siptrace", "hep_mode_on", 1) # -- ims_auth params -- modparam("ims_auth", "name", URI) modparam("ims_auth", "registration_default_algorithm", REG_AUTH_DEFAULT_ALG) -modparam("ims_auth","ignore_failed_auth",1) #!ifdef CXDX_FORCED_PEER modparam("ims_auth", "cxdx_forced_peer", CXDX_FORCED_PEER) #!endif modparam("ims_auth", "cxdx_dest_realm", NETWORKNAME) +modparam("ims_auth", "av_check_only_impu", 1) # -- ims_registrar_scscf params -- #!ifdef WITH_DEBUG @@ -286,9 +294,9 @@ modparam("dispatcher", "ds_probing_mode", 1) # - processing of any incoming SIP request starts with this route route { -#!ifdef WITH_DEBUG +##!ifdef WITH_DEBUG xlog("L_ERR", "$rm ($fu ($si:$sp) to $tu, $ci)\n"); -#!endif +##!endif # per request initial checks route(REQINIT); @@ -345,7 +353,8 @@ route { if (uri=~"sip:(.*)@"+NETWORKNAME_ESC +"(.*)" || uri=~"tel:.*") { if (!term_impu_registered("location")) { xlog("L_ERR", "We need to do an UNREG server SAR assignemnt"); - assign_server_unreg("location", "term"); + assign_server_unreg("UNREG_SAR_REPLY", "location", "term"); + exit; } } else { sl_send_reply("403","Forbidden - Dialog not found on S-CSCF or Terminating user not suitable for unregistered services"); @@ -356,6 +365,28 @@ route { } } +route[UNREG_SAR_REPLY] +{ + xlog("L_DBG","saa_return code is $avp(s:saa_return_code)\n"); + switch ($avp(s:saa_return_code)){ + case 1: #success + xlog("L_DBG", "SAR success - will route message\n"); + route(term); + break; + case -1: #failure + xlog("L_ERR", "SAR failure - error response sent from module\n"); + break; + case -2: #error + xlog("L_ERR", "SAR error - error response sent from module\n"); + break; + default: + xlog("L_ERR", "Unknown return code from SAR, value is [$avp(s:saa_return_code)]\n"); + break; + } + exit; +} + + ###################################################################### # Helper routes (Basic-Checks, NAT-Handling/RTP-Control, XML-RPC) ###################################################################### @@ -411,8 +442,18 @@ route[subscribe] ###################################################################### #!ifdef WITH_XMLRPC route[XMLRPC] { - # allow XMLRPC from localhost - if ((method=="POST" || method=="GET") && (src_ip==127.0.0.1)) { + if ((method=="POST" || method=="GET") +#!ifdef XMLRPC_WHITELIST_1 +&& ((src_ip == XMLRPC_WHITELIST_1) +#!ifdef XMLRPC_WHITELIST_2 + || (src_ip == XMLRPC_WHITELIST_2) +#!endif +#!ifdef XMLRPC_WHITELIST_3 + || (src_ip == XMLRPC_WHITELIST_3) +#!endif +) +#!endif +) { # close connection only for xmlrpclib user agents (there is a bug in # xmlrpclib: it waits for EOF before interpreting the response). if ($hdr(User-Agent) =~ "xmlrpclib") @@ -430,34 +471,103 @@ route[XMLRPC] { # Route for handling Registrations: ###################################################################### route[REGISTER] { - xlog("L_ERR", "Enter register block"); - t_newtran(); - - ims_www_authenticate(NETWORKNAME); - - #check to see if user is authenticated - ie sip header has auth information - (already challenged) - if ($avp(maa_return_code) == 1) { - # user has not been authenticated. Lets send a challenge via 401 Unauthorized - ims_www_challenge("$td"); - exit; + if (!ims_www_authenticate(NETWORKNAME)) { + if ($? == -2) { + t_reply("403", "Authentication Failed"); + exit; + } else if ($? == -3) { + t_reply("400", "Bad Request"); + exit; + } else { + #user has not been authenticated. Lets send a challenge via 401 Unauthorized + xlog("L_DBG","About to challenge! auth_ims\n"); + ims_www_challenge("REG_MAR_REPLY", "$td"); + exit; + } } else { + xlog("L_DBG", "Auth succeeded\n"); # We need to check if this user is registered or not if (!impu_registered("location")) { - save("location"); - if ($avp(saa_return_code) == 1) { - isc_match_filter_reg("0","location"); - exit; - } + xlog("L_ERR", "Not REGISTERED\n"); + save("PRE_REG_SAR_REPLY","location"); + exit; } else { - save("location"); - if($avp(saa_return_code) == 1) { - isc_match_filter_reg("1","location"); - exit; - } + isc_match_filter_reg("1","location"); + save("REG_SAR_REPLY","location"); + exit; } } } +route[REG_MAR_REPLY] +{ + #this is async so to know status we have to check the reply avp + xlog("L_DBG","maa_return code is $avp(s:maa_return_code)\n"); + + switch ($avp(s:maa_return_code)){ + case 1: #success + xlog("L_DBG", "MAR success - 401/407 response sent from module\n"); + break; + case -1: #failure + xlog("L_ERR", "MAR failure - error response sent from module\n"); + break; + case -2: #error + xlog("L_ERR", "MAR error - sending error response now\n"); + t_reply("500", "MAR failed"); + break; + default: + xlog("L_ERR", "Unknown return code from MAR, value is [$avp(s:uaa_return_code)]\n"); + t_reply("500", "Unknown response code from MAR"); + break; + } + exit; +} + +route[PRE_REG_SAR_REPLY] +{ + xlog("L_DBG","saa_return code is $avp(s:saa_return_code)\n"); + #this is async so to know status we have to check the reply avp + xlog("L_DBG","saa_return code (for scscf_save on register) is $avp(s:saa_return_code)\n"); + switch ($avp(s:saa_return_code)){ + case 1: #success + xlog("L_DBG", "SAR success - 200 response sent from module\n"); + isc_match_filter_reg("0","location"); + exit; + case -1: #failure + xlog("L_ERR", "SAR failure - error response sent from module\n"); + break; + case -2: #error + xlog("L_ERR", "SAR error - error response sent from module\n"); + break; + default: + xlog("L_ERR", "Unknown return code from SAR, value is [$avp(s:uaa_return_code)]\n"); + break; + } + exit; +} + +route[REG_SAR_REPLY] +{ + xlog("L_DBG","saa_return code is $avp(s:saa_return_code)\n"); + #this is async so to know status we have to check the reply avp + xlog("L_DBG","saa_return code (for scscf_save on register) is $avp(s:saa_return_code)\n"); + switch ($avp(s:saa_return_code)){ + case 1: #success + xlog("L_DBG", "SAR success - 200 response sent from module\n"); + exit; + case -1: #failure + xlog("L_ERR", "SAR failure - error response sent from module\n"); + break; + case -2: #error + xlog("L_ERR", "SAR error - error response sent from module\n"); + break; + default: + xlog("L_ERR", "Unknown return code from SAR, value is [$avp(s:uaa_return_code)]\n"); + break; + } + exit; +} + ###################################################################### # Apply privacy, if requested ###################################################################### diff --git a/examples/scscf/scscf.cfg b/examples/scscf/scscf.cfg index 5da0b251e..b1ffdc16c 100644 --- a/examples/scscf/scscf.cfg +++ b/examples/scscf/scscf.cfg @@ -26,14 +26,25 @@ # Let the HSS decide ##!define REG_AUTH_DEFAULT_ALG "HSS-Selected" +# Number of TCP Processes +#!define TCP_PROCESSES 3 + +# Allowed IPs for XML-RPC-Queries +#!define XMLRPC_WHITELIST_1 "127.0.0.1" +##!define XMLRPC_WHITELIST_2 "127.0.0.1" +##!define XMLRPC_WHITELIST_3 "127.0.0.1" + # Several features can be enabled using '#!define WITH_FEATURE' directives: # # *** To run in debug mode: # - define WITH_DEBUG # +# *** To enable TCP support execute: +# - define WITH_TCP +# # *** To enable XMLRPC support execute: # - define WITH_XMLRPC -# - adjust route[XMLRPC] for access policy +# - this will automagically enable TCP # # *** To enable basic dialplan support: # - define WITH_DIALPLAN diff --git a/examples/websocket.cfg b/examples/websocket.cfg index 4176af0a8..9fa4229c6 100644 --- a/examples/websocket.cfg +++ b/examples/websocket.cfg @@ -45,14 +45,12 @@ tcp_connection_lifetime=3604 tcp_accept_no_cl=yes tcp_rd_buf_size=16384 -syn_branch=0 - #!ifdef LOCAL_TEST_RUN debug=2 -mpath="modules_k:modules" +mpath="modules" #!else debug=0 -mpath="/usr/lib64/kamailio/modules_k/:/usr/lib64/kamailio/modules/" +mpath="/usr/lib64/kamailio/modules/" #!endif loadmodule "db_sqlite.so" @@ -345,7 +343,6 @@ onreply_route { && !(proto == WS || proto == WSS)) || $Rp == MY_MSRP_PORT) { xlog("L_WARN", "SIP response received on $Rp\n"); drop; - exit; } if (nat_uac_test(64)) { diff --git a/forward.c b/forward.c index 380b20447..81a0e1da1 100644 --- a/forward.c +++ b/forward.c @@ -120,9 +120,7 @@ static int mhomed_sock_cache_disabled = 0; static int sock_inet = -1; -#ifdef USE_IPV6 static int sock_inet6 = -1; -#endif /* USE_IPV6 */ static void apply_force_send_socket(struct dest_info* dst, struct sip_msg* msg); @@ -155,7 +153,6 @@ retry: temp_sock = &sock_inet; break; } -#ifdef USE_IPV6 case AF_INET6 : { if(unlikely(sock_inet6 < 0)){ sock_inet6 = socket(AF_INET6, SOCK_DGRAM, 0); @@ -167,7 +164,6 @@ retry: temp_sock = &sock_inet6; break; } -#endif /* USE_IPV6 */ default: { LM_ERR("Unknown protocol family \n"); return 0; @@ -189,12 +185,10 @@ retry: close(sock_inet); sock_inet=-1; } -#ifdef USE_IPV6 if (sock_inet6>=0){ close(sock_inet6); sock_inet6=-1; } -#endif /* USE_IPV6 */ goto retry; } LOG(L_ERR, "ERROR: get_out_socket: connect failed: %s\n", @@ -332,10 +326,8 @@ not_forced: /* FIXME */ case AF_INET: send_sock=sendipv4_tcp; break; -#ifdef USE_IPV6 case AF_INET6: send_sock=sendipv6_tcp; break; -#endif default: LOG(L_ERR, "get_send_socket: BUG: don't know how" " to forward to af %d\n", to->s.sa_family); } @@ -348,10 +340,8 @@ not_forced: /* FIXME */ case AF_INET: send_sock=sendipv4_tls; break; -#ifdef USE_IPV6 case AF_INET6: send_sock=sendipv6_tls; break; -#endif default: LOG(L_ERR, "get_send_socket: BUG: don't know how" " to forward to af %d\n", to->s.sa_family); } @@ -365,10 +355,8 @@ not_forced: switch(to->s.sa_family){ case AF_INET: send_sock=sendipv4_sctp; break; -#ifdef USE_IPV6 case AF_INET6: send_sock=sendipv6_sctp; break; -#endif default: LOG(L_ERR, "get_send_socket: BUG: don't know" " how to forward to af %d\n", to->s.sa_family); @@ -383,10 +371,8 @@ not_forced: switch(to->s.sa_family){ case AF_INET: send_sock=sendipv4; break; -#ifdef USE_IPV6 case AF_INET6: send_sock=sendipv6; break; -#endif default: LOG(L_ERR, "get_send_socket: BUG: don't know" " how to forward to af %d\n", to->s.sa_family); @@ -549,31 +535,23 @@ int forward_request(struct sip_msg* msg, str* dst, unsigned short port, } }/* dst */ send_info->send_flags=msg->fwd_send_flags; - /* calculate branch for outbound request; if syn_branch is turned off, + /* calculate branch for outbound request; calculate is from transaction key, i.e., as an md5 of From/To/CallID/ CSeq exactly the same way as TM does; good for reboot -- than messages belonging to transaction lost due to reboot will still be forwarded with the same branch parameter and will be match-able downstream - - if it is turned on, we don't care about reboot; we simply put a simple - value in there; better for performance */ - if (syn_branch ) { - memcpy(msg->add_to_branch_s, "z9hG4bKcydzigwkX", 16); - msg->add_to_branch_len=16; - } else { - if (!char_msg_val( msg, md5 )) { /* parses transaction key */ - LOG(L_ERR, "ERROR: forward_request: char_msg_val failed\n"); - ret=E_UNSPEC; - goto error; - } - msg->hash_index=hash( msg->callid->body, get_cseq(msg)->number); - if (!branch_builder( msg->hash_index, 0, md5, 0 /* 0-th branch */, - msg->add_to_branch_s, &msg->add_to_branch_len )) { - LOG(L_ERR, "ERROR: forward_request: branch_builder failed\n"); - ret=E_UNSPEC; - goto error; - } + if (!char_msg_val( msg, md5 )) { /* parses transaction key */ + LOG(L_ERR, "ERROR: forward_request: char_msg_val failed\n"); + ret=E_UNSPEC; + goto error; + } + msg->hash_index=hash( msg->callid->body, get_cseq(msg)->number); + if (!branch_builder( msg->hash_index, 0, md5, 0 /* 0-th branch */, + msg->add_to_branch_s, &msg->add_to_branch_len )) { + LOG(L_ERR, "ERROR: forward_request: branch_builder failed\n"); + ret=E_UNSPEC; + goto error; } /* try to send the message until success or all the ips are exhausted * (if dns lookup is performed && the dns cache used ) */ diff --git a/forward.h b/forward.h index 0e1d725f9..4680a8e2b 100644 --- a/forward.h +++ b/forward.h @@ -57,7 +57,7 @@ #include "tcp_conn.h" #endif #ifdef USE_SCTP -#include "sctp_server.h" +#include "sctp_core.h" #endif #include "compiler_opt.h" @@ -261,7 +261,7 @@ static inline int msg_send(struct dest_info* dst, char* buf, int len) } dst=&new_dst; } - if (unlikely(sctp_msg_send(dst, outb.s, outb.len)<0)){ + if (unlikely(sctp_core_msg_send(dst, outb.s, outb.len)<0)){ STATS_TX_DROPS; LOG(L_ERR, "msg_send: ERROR: sctp_msg_send failed\n"); goto error; diff --git a/globals.h b/globals.h index 01b6f28e0..b535ca802 100644 --- a/globals.h +++ b/globals.h @@ -111,7 +111,6 @@ extern int dont_daemonize; extern int check_via; extern int phone2tel; extern int received_dns; -extern int syn_branch; /* extern int process_no; */ extern int child_rank; extern int sip_warning; @@ -136,15 +135,7 @@ extern int mcast_loopback; extern int mcast_ttl; #endif /* USE_MCAST */ -#ifdef USE_STUN -extern unsigned int stun_refresh_interval; -extern int stun_allow_stun; -extern int stun_allow_fp; -#endif - -#ifdef USE_IPV6 extern int auto_bind_ipv6; -#endif extern int tos; extern int pmtu_discovery; @@ -215,7 +206,7 @@ extern int rt_timer2_prio; /* "slow" timer */ extern int rt_timer1_policy; /* "fast" timer, SCHED_OTHER */ extern int rt_timer2_policy; /* "slow" timer, SCHED_OTHER */ -extern int http_reply_hack; +extern int http_reply_parse; #ifdef USE_DNS_CACHE extern int dns_cache_init; /* if 0, the DNS cache is not initialized at startup */ diff --git a/ip_addr.c b/ip_addr.c index c071f83f9..5f8881e05 100644 --- a/ip_addr.c +++ b/ip_addr.c @@ -184,10 +184,8 @@ int mk_net_str(struct net* dst, str* s) /* test for ip only */ t = str2ip(s); -#ifdef USE_IPV6 if (unlikely(t == 0)) t = str2ip6(s); -#endif /* USE_IPV6 */ if (likely(t)) return mk_net_bitlen(dst, t, t->len*8); /* not a simple ip, maybe an ip/netmask pair */ @@ -212,7 +210,6 @@ int mk_net_str(struct net* dst, str* s) /* error */ return -1; } -#ifdef USE_IPV6 else { t = str2ip6(&addr); if (likely(t)) { @@ -227,7 +224,6 @@ int mk_net_str(struct net* dst, str* s) return -1; } } -#endif /* USE_IPV6 */ } return -1; } @@ -246,7 +242,6 @@ void print_ip(char* p, struct ip_addr* ip, char *s) (s)?s:"" ); break; -#ifdef USE_IPV6 case AF_INET6: DBG("%s%x:%x:%x:%x:%x:%x:%x:%x%s", (p)?p:"", htons(ip->u.addr16[0]), @@ -260,7 +255,6 @@ void print_ip(char* p, struct ip_addr* ip, char *s) (s)?s:"" ); break; -#endif /* USE_IPV6 */ default: DBG("print_ip: warning unknown address family %d\n", ip->af); } @@ -277,7 +271,6 @@ void stdout_print_ip(struct ip_addr* ip) ip->u.addr[2], ip->u.addr[3]); break; -#ifdef USE_IPV6 case AF_INET6: printf("%x:%x:%x:%x:%x:%x:%x:%x", htons(ip->u.addr16[0]), htons(ip->u.addr16[1]), @@ -289,7 +282,6 @@ void stdout_print_ip(struct ip_addr* ip) htons(ip->u.addr16[7]) ); break; -#endif /* USE_IPV6 */ default: DBG("print_ip: warning unknown address family %d\n", ip->af); } @@ -319,10 +311,8 @@ int is_mcast(struct ip_addr* ip) if (ip->af==AF_INET){ return IN_MULTICAST(htonl(ip->u.addr32[0])); -#ifdef USE_IPV6 } else if (ip->af==AF_INET6){ return IN6_IS_ADDR_MULTICAST((struct in6_addr*)ip->u.addr32); -#endif /* USE_IPV6 */ } else { LOG(L_ERR, "ERROR: is_mcast: Unsupported protocol family\n"); return -1; @@ -351,9 +341,8 @@ char* get_proto_name(unsigned int proto) case PROTO_SCTP: return "sctp"; case PROTO_WS: - return "ws"; case PROTO_WSS: - return "wss"; + return "ws"; default: return "unknown"; } diff --git a/ip_addr.h b/ip_addr.h index 115e4b4b3..20b3ec275 100644 --- a/ip_addr.h +++ b/ip_addr.h @@ -82,9 +82,7 @@ struct net{ union sockaddr_union{ struct sockaddr s; struct sockaddr_in sin; - #ifdef USE_IPV6 struct sockaddr_in6 sin6; - #endif }; @@ -217,13 +215,9 @@ struct socket_id{ #ifdef HAVE_SOCKADDR_SA_LEN #define sockaddru_len(su) ((su).s.sa_len) #else -#ifdef USE_IPV6 #define sockaddru_len(su) \ (((su).s.sa_family==AF_INET6)?sizeof(struct sockaddr_in6):\ sizeof(struct sockaddr_in)) -#else -#define sockaddru_len(su) sizeof(struct sockaddr_in) -#endif /*USE_IPV6*/ #endif /* HAVE_SOCKADDR_SA_LEN*/ /* inits an ip_addr with the addr. info from a hostent structure @@ -243,11 +237,7 @@ struct socket_id{ /* gets the protocol family corresponding to a specific address family * ( PF_INET - AF_INET, PF_INET6 - AF_INET6, af for others) */ -#ifdef USE_IPV6 #define AF2PF(af) (((af)==AF_INET)?PF_INET:((af)==AF_INET6)?PF_INET6:(af)) -#else -#define AF2PF(af) (((af)==AF_INET)?PF_INET:(af)) -#endif @@ -294,10 +284,8 @@ inline static int ip_addr_loopback(struct ip_addr* ip) { if (ip->af==AF_INET) return ip->u.addr32[0]==htonl(INADDR_LOOPBACK); -#ifdef USE_IPV6 else if (ip->af==AF_INET6) return IN6_IS_ADDR_LOOPBACK((struct in6_addr*)ip->u.addr32); -#endif /* USE_IPV6 */ return 0; } @@ -311,7 +299,6 @@ inline static void ip_addr_mk_any(int af, struct ip_addr* ip) ip->len=4; ip->u.addr32[0]=0; } -#ifdef USE_IPV6 else{ ip->len=16; #if (defined (ULONG_MAX) && ULONG_MAX > 4294967295) || defined LP64 @@ -325,7 +312,6 @@ inline static void ip_addr_mk_any(int af, struct ip_addr* ip) ip->u.addr32[3]=0; #endif /* ULONG_MAX */ } -#endif } /* returns 1 if ip & net.mask == net.ip ; 0 otherwise & -1 on error @@ -359,13 +345,11 @@ static inline void sockaddr2ip_addr(struct ip_addr* ip, struct sockaddr* sa) ip->len=4; memcpy(ip->u.addr, &((struct sockaddr_in*)sa)->sin_addr, 4); break; -#ifdef USE_IPV6 case AF_INET6: ip->af=AF_INET6; ip->len=16; memcpy(ip->u.addr, &((struct sockaddr_in6*)sa)->sin6_addr, 16); break; -#endif default: LOG(L_CRIT, "sockaddr2ip_addr: BUG: unknown address family %d\n", sa->sa_family); @@ -390,11 +374,9 @@ static inline int su_cmp(const union sockaddr_union* s1, case AF_INET: return (s1->sin.sin_port==s2->sin.sin_port)&& (memcmp(&s1->sin.sin_addr, &s2->sin.sin_addr, 4)==0); -#ifdef USE_IPV6 case AF_INET6: return (s1->sin6.sin6_port==s2->sin6.sin6_port)&& (memcmp(&s1->sin6.sin6_addr, &s2->sin6.sin6_addr, 16)==0); -#endif default: LOG(L_CRIT,"su_cmp: BUG: unknown address family %d\n", s1->s.sa_family); @@ -410,10 +392,8 @@ static inline unsigned short su_getport(const union sockaddr_union* su) switch(su->s.sa_family){ case AF_INET: return ntohs(su->sin.sin_port); -#ifdef USE_IPV6 case AF_INET6: return ntohs(su->sin6.sin6_port); -#endif default: LOG(L_CRIT,"su_get_port: BUG: unknown address family %d\n", su->s.sa_family); @@ -430,11 +410,9 @@ static inline void su_setport(union sockaddr_union* su, unsigned short port) case AF_INET: su->sin.sin_port=htons(port); break; -#ifdef USE_IPV6 case AF_INET6: su->sin6.sin6_port=htons(port); break; -#endif default: LOG(L_CRIT,"su_set_port: BUG: unknown address family %d\n", su->s.sa_family); @@ -452,13 +430,11 @@ static inline void su2ip_addr(struct ip_addr* ip, union sockaddr_union* su) ip->len=4; memcpy(ip->u.addr, &su->sin.sin_addr, 4); break; -#ifdef USE_IPV6 case AF_INET6: ip->af=AF_INET6; ip->len=16; memcpy(ip->u.addr, &su->sin6.sin6_addr, 16); break; -#endif default: LOG(L_CRIT,"su2ip_addr: BUG: unknown address family %d\n", su->s.sa_family); @@ -479,7 +455,6 @@ static inline int init_su( union sockaddr_union* su, memset(su, 0, sizeof(union sockaddr_union));/*needed on freebsd*/ su->s.sa_family=ip->af; switch(ip->af){ -#ifdef USE_IPV6 case AF_INET6: memcpy(&su->sin6.sin6_addr, ip->u.addr, ip->len); #ifdef HAVE_SOCKADDR_SA_LEN @@ -487,7 +462,6 @@ static inline int init_su( union sockaddr_union* su, #endif su->sin6.sin6_port=htons(port); break; -#endif case AF_INET: memcpy(&su->sin.sin_addr, ip->u.addr, ip->len); #ifdef HAVE_SOCKADDR_SA_LEN @@ -516,7 +490,6 @@ static inline int hostent2su( union sockaddr_union* su, memset(su, 0, sizeof(union sockaddr_union)); /*needed on freebsd*/ su->s.sa_family=he->h_addrtype; switch(he->h_addrtype){ -#ifdef USE_IPV6 case AF_INET6: memcpy(&su->sin6.sin6_addr, he->h_addr_list[idx], he->h_length); #ifdef HAVE_SOCKADDR_SA_LEN @@ -524,7 +497,6 @@ static inline int hostent2su( union sockaddr_union* su, #endif su->sin6.sin6_port=htons(port); break; -#endif case AF_INET: memcpy(&su->sin.sin_addr, he->h_addr_list[idx], he->h_length); #ifdef HAVE_SOCKADDR_SA_LEN @@ -546,7 +518,6 @@ static inline int hostent2su( union sockaddr_union* su, #define IP6_MAX_STR_SIZE 39 /*1234:5678:9012:3456:7890:1234:5678:9012*/ #define IP4_MAX_STR_SIZE 15 /*123.456.789.012*/ -#ifdef USE_IPV6 /* converts a raw ipv6 addr (16 bytes) to ascii */ static inline int ip6tosbuf(unsigned char* ip6, char* buff, int len) { @@ -619,7 +590,6 @@ static inline int ip6tosbuf(unsigned char* ip6, char* buff, int len) return offset; } -#endif /* USE_IPV6 */ @@ -688,11 +658,9 @@ static inline int ip4tosbuf(unsigned char* ip4, char* buff, int len) static inline int ip_addr2sbuf(struct ip_addr* ip, char* buff, int len) { switch(ip->af){ - #ifdef USE_IPV6 case AF_INET6: return ip6tosbuf(ip->u.addr, buff, len); break; - #endif /* USE_IPV6 */ case AF_INET: return ip4tosbuf(ip->u.addr, buff, len); break; @@ -736,7 +704,6 @@ static inline char* su2a(union sockaddr_union* su, int su_len) static char buf[SU2A_MAX_STR_SIZE]; int offs; -#ifdef USE_IPV6 if (unlikely(su->s.sa_family==AF_INET6)){ if (unlikely(su_lensin6))) return ""; @@ -746,7 +713,6 @@ static inline char* su2a(union sockaddr_union* su, int su_len) buf[offs]=']'; offs++; }else -#endif /* USE_IPV6*/ if (unlikely(su_lensin))) return ""; else @@ -766,7 +732,6 @@ static inline char* suip2a(union sockaddr_union* su, int su_len) static char buf[SUIP2A_MAX_STR_SIZE]; int offs; -#ifdef USE_IPV6 if (unlikely(su->s.sa_family==AF_INET6)){ if (unlikely(su_lensin6))) return ""; @@ -776,7 +741,6 @@ static inline char* suip2a(union sockaddr_union* su, int su_len) buf[offs]=']'; offs++; }else -#endif /* USE_IPV6*/ if (unlikely(su_lensin))) return ""; else diff --git a/lib/ims/ims_getters.c b/lib/ims/ims_getters.c index d1c84c763..05450f1d9 100644 --- a/lib/ims/ims_getters.c +++ b/lib/ims/ims_getters.c @@ -990,6 +990,109 @@ str cscf_get_charging_vector(struct sip_msg *msg, struct hdr_field **h) return cv; } +int cscf_get_p_charging_vector(struct sip_msg *msg, str * icid, str * orig_ioi, + str * term_ioi) { + struct hdr_field* header = 0; + str header_body = { 0, 0 }; + char * p; + int index; + str temp = { 0, 0 }; + + if (parse_headers(msg, HDR_EOH_F, 0) < 0) { + LM_ERR("cscf_get_p_charging_vector: error parsing headers\n"); + return 0; + } + header = msg->headers; + while (header) { + if (header->name.len == cscf_p_charging_vector.len + && strncasecmp(header->name.s, cscf_p_charging_vector.s, cscf_p_charging_vector.len) == 0) + break; + header = header->next; + } + if (!header) { + LM_DBG("no header %.*s was found\n", cscf_p_charging_vector.len, cscf_p_charging_vector.s); + return 0; + } + if (!header->body.s || !header->body.len) + return 0; + + str_dup(header_body, header->body, pkg); + + LM_DBG("p_charging_vector body is %.*s\n", header_body.len, header_body.s); + + p = strtok(header_body.s, " ;:\r\t\n\"="); + loop: if (p > (header_body.s + header_body.len)) + return 1; + + if (strncmp(p, "icid-value", 10) == 0) { + p = strtok(NULL, " ;:\r\t\n\"="); + if (p > (header_body.s + header_body.len)) { + LM_ERR("cscf_get_p_charging_vector: no value for icid\n"); + return 0; + } + temp.s = p; + temp.len = 0; + while (*p != '\"') { + temp.len = temp.len + 1; + p++; + } + icid->len = temp.len; + index = temp.s - header_body.s; + LM_DBG("icid len %i, index %i\n", temp.len, index); + icid->s = header->body.s + index; + LM_DBG("icid is %.*s\n", icid->len, icid->s); + p = strtok(NULL, " ;:\r\t\n\"="); + goto loop; + } else if (strncmp(p, "orig-ioi", 8) == 0) { + + p = strtok(NULL, " ;:\r\t\n\"="); + if (p > (header_body.s + header_body.len)) { + LM_ERR("cscf_get_p_charging_vector: no value for icid\n"); + return 0; + } + temp.s = p; + temp.len = 0; + while (*p != '\"') { + temp.len = temp.len + 1; + p++; + } + orig_ioi->len = temp.len; + index = temp.s - header_body.s; + LM_DBG("orig ioi len %i, index %i\n", temp.len, index); + orig_ioi->s = header->body.s + index; + LM_DBG("orig_ioi is %.*s\n", orig_ioi->len, orig_ioi->s); + p = strtok(NULL, " ;:\r\t\n\"="); + goto loop; + } else if (strncmp(p, "term-ioi", 8) == 0) { + + p = strtok(NULL, " ;:\r\t\n\"="); + if (p > (header_body.s + header_body.len)) { + LM_ERR("cscf_get_p_charging_vector: no value for icid\n"); + return 0; + } + temp.s = p; + temp.len = 0; + while (*p != '\"') { + temp.len = temp.len + 1; + p++; + } + term_ioi->len = temp.len; + term_ioi->s = header->body.s + (temp.s - header_body.s); + p = strtok(NULL, " ;:\r\t\n\"="); + goto loop; + } else { + p = strtok(NULL, " ;:\r\t\n\"="); + goto loop; + } + + LM_DBG("end\n"); + str_free(header_body, pkg); + return 1; + out_of_memory: + LM_ERR("cscf_get_p_charging_vector:out of pkg memory\n"); + return 0; +} + /** * Get the from tag * @param msg - the SIP message to look into diff --git a/lib/ims/ims_getters.h b/lib/ims/ims_getters.h index a36e0f3a8..e78310fe2 100644 --- a/lib/ims/ims_getters.h +++ b/lib/ims/ims_getters.h @@ -294,6 +294,14 @@ str cscf_get_access_network_info(struct sip_msg *msg, struct hdr_field **h); str cscf_get_charging_vector(struct sip_msg *msg, struct hdr_field **h); +/** + * Return the P-Charging-Vector tokens + * @param msg - the SIP message + * @returns the str with icid, orig_ioi and term_ioi + */ +int cscf_get_p_charging_vector(struct sip_msg *msg, str * icid, str * orig_ioi, + str * term_ioi); + /** * Get the to tag diff --git a/lib/kcore/parse_pai.c b/lib/kcore/parse_pai.c deleted file mode 100644 index d0dda3dae..000000000 --- a/lib/kcore/parse_pai.c +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2006 Juha Heinanen - * - * This file is part of Kamailio, a free SIP server. - * - * Kamailio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version - * - * Kamailio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/*! - * \file - * \brief P-Asserted-Identity header parser - * \ingroup parser - */ - -#include "../../parser/parse_from.h" -#include "../../parser/parse_to.h" -#include -#include -#include "../../dprint.h" -#include "../../parser/msg_parser.h" -#include "../../ut.h" -#include "../../mem/mem.h" - -/*! - * This method is used to parse P-Asserted-Identity header (RFC 3325). - * - * Currently only one name-addr / addr-spec is supported in the header - * and it must contain a sip or sips URI. - * \param msg sip msg - * \return 0 on success, -1 on failure. - */ -int parse_pai_header( struct sip_msg *msg ) -{ - struct to_body* pai_b; - - if ( !msg->pai && (parse_headers(msg, HDR_PAI_F,0)==-1 || !msg->pai)) { - goto error; - } - - /* maybe the header is already parsed! */ - if (msg->pai->parsed) - return 0; - - /* bad luck! :-( - we have to parse it */ - /* first, get some memory */ - pai_b = pkg_malloc(sizeof(struct to_body)); - if (pai_b == 0) { - LM_ERR("out of pkg_memory\n"); - goto error; - } - - /* now parse it!! */ - memset(pai_b, 0, sizeof(struct to_body)); - parse_to(msg->pai->body.s, msg->pai->body.s + msg->pai->body.len+1, pai_b); - if (pai_b->error == PARSE_ERROR) { - LM_ERR("bad P-Asserted-Identity header\n"); - free_to(pai_b); - goto error; - } - msg->pai->parsed = pai_b; - - return 0; -error: - return -1; -} diff --git a/lib/kcore/parse_ppi.c b/lib/kcore/parse_ppi.c deleted file mode 100644 index 863f06104..000000000 --- a/lib/kcore/parse_ppi.c +++ /dev/null @@ -1,119 +0,0 @@ -/* - * $Id$ - * - * Copyright (C) 2006 Juha Heinanen - * - * This file is part of Kamailio, a free SIP server. - * - * Kamailio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version - * - * Kamailio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/*! - * \file - * \brief P-Preferred-Identity header parser - * \ingroup parser - */ - -#include "parse_ppi.h" -#include "../../parser/parse_to.h" -#include "../../parser/parse_uri.h" -#include -#include -#include "../../dprint.h" -#include "../../parser/msg_parser.h" -#include "../../ut.h" -#include "../../mem/mem.h" - - -/*! - * \brief This method is used to parse P-Preferred-Identity header (RFC 3325). - * - * Currently only one name-addr / addr-spec is supported in the header - * and it must contain a sip or sips URI. - * \param msg sip msg - * \return 0 on success, -1 on failure. - */ -int parse_ppi_header( struct sip_msg *msg ) -{ - struct to_body* ppi_b; - - if ( !msg->ppi && - (parse_headers(msg, HDR_PPI_F,0)==-1 || !msg->ppi)) { - goto error; - } - - /* maybe the header is already parsed! */ - if (msg->ppi->parsed) - return 0; - - /* bad luck! :-( - we have to parse it */ - /* first, get some memory */ - ppi_b = pkg_malloc(sizeof(struct to_body)); - if (ppi_b == 0) { - LM_ERR("out of pkg_memory\n"); - goto error; - } - - /* now parse it!! */ - memset(ppi_b, 0, sizeof(struct to_body)); - parse_to(msg->ppi->body.s, - msg->ppi->body.s + msg->ppi->body.len+1, - ppi_b); - if (ppi_b->error == PARSE_ERROR) { - LM_ERR("bad P-Preferred-Identity header\n"); - free_to(ppi_b); - goto error; - } - msg->ppi->parsed = ppi_b; - - return 0; - error: - return -1; -} - - -/*! - * \brief Parse P-Preferred-Identity header URI - */ -struct sip_uri *parse_ppi_uri(struct sip_msg *msg) -{ - struct to_body *tb = NULL; - - if(msg==NULL) - return NULL; - - if(parse_ppi_header(msg)<0) - { - LM_ERR("cannot parse P-P-I header\n"); - return NULL; - } - - if(msg->ppi==NULL || get_ppi(msg)==NULL) - return NULL; - - tb = get_ppi(msg); - - if(tb->parsed_uri.user.s!=NULL || tb->parsed_uri.host.s!=NULL) - return &tb->parsed_uri; - - if (parse_uri(tb->uri.s, tb->uri.len , &tb->parsed_uri)<0) - { - LM_ERR("failed to parse P-P-I URI\n"); - memset(&tb->parsed_uri, 0, sizeof(struct sip_uri)); - return NULL; - } - - return &tb->parsed_uri; -} diff --git a/lib/kcore/parse_supported.c b/lib/kcore/parse_supported.c deleted file mode 100644 index eb902909f..000000000 --- a/lib/kcore/parse_supported.c +++ /dev/null @@ -1,190 +0,0 @@ -/* - * $Id$ - * - * Copyright (C) 2006 Andreas Granig - * - * This file is part of Kamailio, a free SIP server. - * - * Kamailio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version - * - * Kamailio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -/*! - * \file - * \brief Supported parser - * \ingroup parser - */ - -#include "../../mem/mem.h" -#include "../../parser/keys.h" -#include "parse_supported.h" - -#define _100r_ 0x72303031 /* "100r" for "100rel" */ -#define _time_ 0x656d6974 /*!< "time" */ - -#define IS_DELIM(c) (*(c) == ' ' || *(c) == '\t' || *(c) == '\r' || *(c) == '\n' || *(c) == ',') - -/* from parser/parse_hname2.c: */ -#define LOWER_BYTE(b) ((b) | 0x20) -#define LOWER_DWORD(d) ((d) | 0x20202020) -#define READ(val) \ - (*(val + 0) + (*(val + 1) << 8) + (*(val + 2) << 16) + (*(val + 3) << 24)) - - -/*! - * Parse Supported HF body. - */ -static inline int parse_supported_body(str *body, unsigned int *sup) -{ - register char* p; - register unsigned int val; - int len, pos = 0; - - *sup = 0; - - p = body->s; - len = body->len; - - while (pos < len) { - /* skip spaces and commas */ - for (; pos < len && IS_DELIM(p); ++pos, ++p); - - val = LOWER_DWORD(READ(p)); - switch (val) { - - /* "path" */ - case _path_: - if(pos + 4 <= len && IS_DELIM(p+4)) { - *sup |= F_SUPPORTED_PATH; - pos += 5; p += 5; - } - break; - - /* "100rel" */ - case _100r_: - if ( pos+6 <= len - && LOWER_BYTE(*(p+4))=='e' && LOWER_BYTE(*(p+5))=='l' - && IS_DELIM(p+6)) { - *sup |= F_SUPPORTED_100REL; - pos += SUPPORTED_100REL_LEN + 1; - p += SUPPORTED_100REL_LEN + 1; - } - break; - - /* "timer" */ - case _time_: - if ( pos+5 <= len && LOWER_BYTE(*(p+4))=='r' - && IS_DELIM(p+5) ) { - *sup |= F_SUPPORTED_TIMER; - pos += SUPPORTED_TIMER_LEN + 1; - p += SUPPORTED_TIMER_LEN + 1; - } - break; - - /* extra supported or unknown */ - default: - if(pos+SUPPORTED_EVENTLIST_LEN<=len - && strncasecmp(p, SUPPORTED_EVENTLIST_STR, - SUPPORTED_EVENTLIST_LEN)==0 - && IS_DELIM(p+SUPPORTED_EVENTLIST_LEN) ) { - *sup |= F_SUPPORTED_EVENTLIST; - pos += SUPPORTED_EVENTLIST_LEN + 1; - p += SUPPORTED_EVENTLIST_LEN + 1; - } else if(pos+SUPPORTED_GRUU_LEN<=len - && strncasecmp(p, SUPPORTED_GRUU_STR, - SUPPORTED_GRUU_LEN)==0 - && IS_DELIM(p+SUPPORTED_GRUU_LEN)) { - *sup |= F_SUPPORTED_GRUU; - pos += SUPPORTED_GRUU_LEN + 1; - p += SUPPORTED_GRUU_LEN + 1; - } else if(pos+SUPPORTED_OUTBOUND_LEN<=len - && strncasecmp(p, SUPPORTED_OUTBOUND_STR, - SUPPORTED_OUTBOUND_LEN)==0 - && IS_DELIM(p+SUPPORTED_OUTBOUND_LEN)) { - *sup |= F_SUPPORTED_OUTBOUND; - pos += SUPPORTED_OUTBOUND_LEN + 1; - p += SUPPORTED_OUTBOUND_LEN + 1; - } else { - /* skip element */ - for (; pos < len && !IS_DELIM(p); ++pos, ++p); - } - break; - } - } - - return 0; -} - - -/** - * wrapper to free the content of parsed supported header - */ -void hf_free_supported(void *parsed) -{ - struct supported_body *sb; - sb = (struct supported_body*)parsed; - free_supported(&sb); -} - -/*! - * Parse all Supported headers - */ -int parse_supported( struct sip_msg *msg) -{ - unsigned int supported; - struct hdr_field *hdr; - struct supported_body *sb; - - /* maybe the header is already parsed! */ - if (msg->supported && msg->supported->parsed) - return 0; - - /* parse to the end in order to get all SUPPORTED headers */ - if (parse_headers(msg,HDR_EOH_F,0)==-1 || !msg->supported) - return -1; - - /* bad luck! :-( - we have to parse them */ - supported = 0; - for( hdr=msg->supported ; hdr ; hdr=next_sibling_hdr(hdr)) { - if (hdr->parsed) { - supported |= ((struct supported_body*)hdr->parsed)->supported; - continue; - } - - sb = (struct supported_body*)pkg_malloc(sizeof(struct supported_body)); - if (sb == 0) { - LM_ERR("out of pkg_memory\n"); - return -1; - } - - parse_supported_body(&(hdr->body), &(sb->supported)); - sb->hfree = hf_free_supported; - sb->supported_all = 0; - hdr->parsed = (void*)sb; - supported |= sb->supported; - } - - ((struct supported_body*)msg->supported->parsed)->supported_all = - supported; - return 0; -} - -/* free supported header structure */ -void free_supported(struct supported_body **sb) -{ - if (sb && *sb) { - pkg_free(*sb); - *sb = 0; - } -} diff --git a/lib/kcore/parse_supported.h b/lib/kcore/parse_supported.h deleted file mode 100644 index 2a37073b3..000000000 --- a/lib/kcore/parse_supported.h +++ /dev/null @@ -1,94 +0,0 @@ -/* - * $Id$ - * - * Copyright (C) 2006 Andreas Granig - * - * This file is part of Kamailio, a free SIP server. - * - * Kamailio is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version - * - * Kamailio is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * - * History: - * ------- - * 2006-03-02 parse_supported() parses and cumulates all SUPPORTED - * headers (bogdan) - */ - -/*! - * \file - * \brief Supported parser - * \ingroup parser - */ - -#ifndef PARSE_SUPPORTED_H -#define PARSE_SUPPORTED_H - -#include "../../parser/msg_parser.h" -#include "../../parser/hf.h" -#include "../../mem/mem.h" - - -#define F_SUPPORTED_PATH (1 << 0) -#define F_SUPPORTED_100REL (1 << 1) -#define F_SUPPORTED_TIMER (1 << 2) -#define F_SUPPORTED_EVENTLIST (1 << 3) -#define F_SUPPORTED_GRUU (1 << 4) -#define F_SUPPORTED_OUTBOUND (1 << 5) - -#define SUPPORTED_PATH_STR "path" -#define SUPPORTED_PATH_LEN (sizeof(SUPPORTED_PATH_STR)-1) - -/* RFC 3262 (PRACK) */ -#define SUPPORTED_100REL_STR "100rel" -#define SUPPORTED_100REL_LEN (sizeof(SUPPORTED_100REL_STR)-1) - -/* RFC 4028 */ -#define SUPPORTED_TIMER_STR "timer" -#define SUPPORTED_TIMER_LEN (sizeof(SUPPORTED_TIMER_STR)-1) - -/* RFC 4662 (RLS) */ -#define SUPPORTED_EVENTLIST_STR "eventlist" -#define SUPPORTED_EVENTLIST_LEN (sizeof(SUPPORTED_EVENTLIST_STR)-1) - -/* RFC 5627 */ -#define SUPPORTED_GRUU_STR "gruu" -#define SUPPORTED_GRUU_LEN (sizeof(SUPPORTED_GRUU_STR)-1) - -/* RFC 5626 */ -#define SUPPORTED_OUTBOUND_STR "outbound" -#define SUPPORTED_OUTBOUND_LEN (sizeof(SUPPORTED_OUTBOUND_STR)-1) - -#define get_supported(p_msg) \ - ((p_msg)->supported ? ((struct supported_body*)(p_msg)->supported->parsed)->supported_all : 0) - - -struct supported_body { - hf_parsed_free_f hfree; /* function to free the content */ - unsigned int supported; /* supported mask for the current hdr */ - unsigned int supported_all; /* suppoted mask for the all "supported" hdr - * - it's set only for the first hdr in - * sibling list*/ -}; - - -/*! - * Parse all Supported headers. - */ -int parse_supported( struct sip_msg *msg); - - -void free_supported(struct supported_body **sb); - -#endif /* PARSE_SUPPORTED_H */ diff --git a/lib/kcore/statistics.c b/lib/kcore/statistics.c index c94bde0c3..ec5c69107 100644 --- a/lib/kcore/statistics.c +++ b/lib/kcore/statistics.c @@ -113,11 +113,37 @@ stat_var *get_stat_var_from_num_code(unsigned int numerical_code, int out_codes) * contents, to avoid a nasty memory leak. */ int get_socket_list_from_proto(int **ipList, int protocol) { + return get_socket_list_from_proto_and_family(ipList, protocol, AF_INET); +} + + +/*! + * This function will retrieve a list of all ip addresses and ports that Kamailio + * is listening on, with respect to the transport protocol specified with + * 'protocol'. This function supports both IPv4 and IPv6 + * + * The first parameter, ipList, is a pointer to a pointer. It will be assigned a + * new block of memory holding the IP Addresses and ports being listened to with + * respect to 'protocol'. The array maps a 2D array into a 1 dimensional space, + * and is layed out as follows: + * + * The first NUM_IP_OCTETS indices will be the IP address, and the next index + * the port. So if NUM_IP_OCTETS is equal to 4 and there are two IP addresses + * found, then: + * + * - ipList[0] will be the first octet of the first ip address + * - ipList[3] will be the last octet of the first ip address. + * - iplist[4] will be the port of the first ip address + * - + * - iplist[5] will be the first octet of the first ip address, + * - and so on. + */ +int get_socket_list_from_proto_and_family(int **ipList, int protocol, int family) { struct socket_info *si; struct socket_info** list; - int num_ip_octets = 4; + int num_ip_octets = family == AF_INET ? NUM_IP_OCTETS : NUM_IPV6_OCTETS; int numberOfSockets = 0; int currentRow = 0; @@ -136,6 +162,13 @@ int get_socket_list_from_proto(int **ipList, int protocol) { return 0; } #endif +#ifndef USE_SCTP + if (protocol == PROTO_SCTP) + { + return 0; + } +#endif + /* We have no "interfaces" for websockets */ if (protocol == PROTO_WS || protocol == PROTO_WSS) return 0; @@ -145,8 +178,7 @@ int get_socket_list_from_proto(int **ipList, int protocol) { /* Find out how many sockets are in the list. We need to know this so * we can malloc an array to assign to ipList. */ for(si=list?*list:0; si; si=si->next){ - /* We only support IPV4 at this point. */ - if (si->address.af == AF_INET) { + if (si->address.af == family) { numberOfSockets++; } } @@ -172,21 +204,18 @@ int get_socket_list_from_proto(int **ipList, int protocol) { /* Extract out the IP Addresses and ports. */ for(si=list?*list:0; si; si=si->next){ + int i; /* We currently only support IPV4. */ - if (si->address.af != AF_INET) { + if (si->address.af != family) { continue; } - (*ipList)[currentRow*(num_ip_octets + 1) ] = - si->address.u.addr[0]; - (*ipList)[currentRow*(num_ip_octets + 1)+1] = - si->address.u.addr[1]; - (*ipList)[currentRow*(num_ip_octets + 1)+2] = - si->address.u.addr[2]; - (*ipList)[currentRow*(num_ip_octets + 1)+3] = - si->address.u.addr[3]; - (*ipList)[currentRow*(num_ip_octets + 1)+4] = + for (i = 0; i < num_ip_octets; i++) { + (*ipList)[currentRow*(num_ip_octets + 1) + i ] = + si->address.u.addr[i]; + } + (*ipList)[currentRow*(num_ip_octets + 1) + i] = si->port_no; currentRow++; @@ -401,16 +430,27 @@ int get_total_bytes_waiting(void) int *UDPList = NULL; int *TCPList = NULL; int *TLSList = NULL; + int *UDP6List = NULL; + int *TCP6List = NULL; + int *TLS6List = NULL; int numUDPSockets = 0; int numTCPSockets = 0; int numTLSSockets = 0; + int numUDP6Sockets = 0; + int numTCP6Sockets = 0; + int numTLS6Sockets = 0; /* Extract out the IP address address for UDP, TCP, and TLS, keeping * track of the number of IP addresses from each transport */ numUDPSockets = get_socket_list_from_proto(&UDPList, PROTO_UDP); numTCPSockets = get_socket_list_from_proto(&TCPList, PROTO_TCP); numTLSSockets = get_socket_list_from_proto(&TLSList, PROTO_TLS); + + numUDP6Sockets = get_socket_list_from_proto_and_family(&UDP6List, PROTO_UDP, AF_INET6); + numTCP6Sockets = get_socket_list_from_proto_and_family(&TCP6List, PROTO_TCP, AF_INET6); + numTLS6Sockets = get_socket_list_from_proto_and_family(&TLS6List, PROTO_TLS, AF_INET6); + /* Deliberately not looking at PROTO_WS or PROTO_WSS here as they are just upgraded TCP/TLS connections */ @@ -420,22 +460,38 @@ int get_total_bytes_waiting(void) bytesWaiting += get_used_waiting_queue(1, TCPList, numTCPSockets); bytesWaiting += get_used_waiting_queue(1, TLSList, numTLSSockets); + bytesWaiting += get_used_waiting_queue(0, UDP6List, numUDP6Sockets); + bytesWaiting += get_used_waiting_queue(1, TCP6List, numTCP6Sockets); + bytesWaiting += get_used_waiting_queue(1, TLS6List, numTLS6Sockets); + /* get_socket_list_from_proto() allocated a chunk of memory, so we need * to free it. */ if (numUDPSockets > 0) { pkg_free(UDPList); } + if (numUDP6Sockets > 0) + { + pkg_free(UDP6List); + } if (numTCPSockets > 0) { pkg_free(TCPList); } + if (numTCP6Sockets > 0) + { + pkg_free(TCP6List); + } if (numTLSSockets > 0) { pkg_free(TLSList); } + if (numTLS6Sockets > 0) + { + pkg_free(TLS6List); + } return bytesWaiting; } diff --git a/lib/kcore/statistics.h b/lib/kcore/statistics.h index 08bf20db0..110f02cb0 100644 --- a/lib/kcore/statistics.h +++ b/lib/kcore/statistics.h @@ -40,6 +40,7 @@ #define NUM_IP_OCTETS 4 +#define NUM_IPV6_OCTETS 16 #ifdef STATISTICS @@ -63,7 +64,7 @@ stat_var *get_stat_var_from_num_code(unsigned int numerical_code, int in_codes); /*! * This function will retrieve a list of all ip addresses and ports that Kamailio * is listening on, with respect to the transport protocol specified with - * 'protocol'. + * 'protocol'. This function only returns IPv4 addresses. * * The first parameter, ipList, is a pointer to a pointer. It will be assigned a * new block of memory holding the IP Addresses and ports being listened to with @@ -93,6 +94,13 @@ stat_var *get_stat_var_from_num_code(unsigned int numerical_code, int in_codes); */ int get_socket_list_from_proto(int **ipList, int protocol); +/*! \brief Function to get a list of all IP addresses and ports in a specific + * family, like AF_INET or AF_INET6 + * + * For documentation see \ref get_socket_list_from_proto() + */ +int get_socket_list_from_proto_and_family(int **ipList, int protocol, int family); + /*! * Returns the sum of the number of bytes waiting to be consumed on all network diff --git a/lib/srdb1/schema/acc_cdrs.xml b/lib/srdb1/schema/acc_cdrs.xml new file mode 100644 index 000000000..22cba1441 --- /dev/null +++ b/lib/srdb1/schema/acc_cdrs.xml @@ -0,0 +1,57 @@ + + +%entities; + +]> + + + acc_cdrs + 1 + &MYSQL_TABLE_TYPE; + + This table is used by the ACC module to report on CDRs relying on dialog callbacks. More information is available at: &KAMAILIO_MOD_DOC;acc.html + + + + + id + unsigned int + &table_id_len; + + + int,auto + unique ID + + + + start_time + string + 32 + Start time + + + + + end_time + string + 32 + End time + + + + + duration + string + 32 + Duration + + + + + start_time_idx + + +
diff --git a/lib/srdb1/schema/dbaliases.xml b/lib/srdb1/schema/dbaliases.xml index 04c2c0365..12078e329 100644 --- a/lib/srdb1/schema/dbaliases.xml +++ b/lib/srdb1/schema/dbaliases.xml @@ -12,7 +12,10 @@ 1 &MYSQL_TABLE_TYPE; - This table us used by the alias_db module as an alternative for user aliases via userloc. More information about the alias_db module can be found at: &KAMAILIO_MOD_DOC;alias_db.html + This table us used by the alias_db module as an + alternative for user aliases via userloc. More information + about the alias_db module can be found at: + &KAMAILIO_MOD_DOC;alias_db.html @@ -60,11 +63,15 @@ Domain name + + alias_user_idx + + + alias_idx - diff --git a/lib/srdb1/schema/entities.xml b/lib/srdb1/schema/entities.xml index 282515748..526ac554f 100644 --- a/lib/srdb1/schema/entities.xml +++ b/lib/srdb1/schema/entities.xml @@ -19,7 +19,7 @@ - + diff --git a/lib/srdb1/schema/kamailio-acc.xml b/lib/srdb1/schema/kamailio-acc.xml index 86ed8f087..eea6a06ed 100644 --- a/lib/srdb1/schema/kamailio-acc.xml +++ b/lib/srdb1/schema/kamailio-acc.xml @@ -10,5 +10,6 @@ Accounting + diff --git a/lib/srdb1/schema/kamailio-mohqueue.xml b/lib/srdb1/schema/kamailio-mohqueue.xml new file mode 100644 index 000000000..27d9a0de1 --- /dev/null +++ b/lib/srdb1/schema/kamailio-mohqueue.xml @@ -0,0 +1,14 @@ + + +%entities; + +]> + + + mohqueue + + + diff --git a/lib/srdb1/schema/kamailio-rtpproxy.xml b/lib/srdb1/schema/kamailio-rtpproxy.xml new file mode 100644 index 000000000..50aadd2af --- /dev/null +++ b/lib/srdb1/schema/kamailio-rtpproxy.xml @@ -0,0 +1,12 @@ + + + %entities; +]> + + + RTPProxy + + diff --git a/lib/srdb1/schema/mohqcalls.xml b/lib/srdb1/schema/mohqcalls.xml new file mode 100644 index 000000000..6c45c59b6 --- /dev/null +++ b/lib/srdb1/schema/mohqcalls.xml @@ -0,0 +1,75 @@ + + +%entities; + +]> + + + mohqcalls + 1 + &MYSQL_TABLE_TYPE; + + This table is used by the mohqueue module to store call information. This is a read-only table from the viewpoint of outside processes. More information about the mohqueue module can be found at: &KAMAILIO_MOD_DOC;mohqueue.html + + + + + id + unsigned int + &table_id_len; + + + int,auto + Unique ID + + + + mohq_id + unsigned int + &table_id_len; + queue id + + + + call_id + string + 100 + Call-ID header + + + + call_status + unsigned int + status of call + + + + call_from + string + 100 + From header + + + + call_contact + string + 100 + + Contact header + + + + call_time + datetime + time when call first entered queue + + + + mohqcalls_idx + + + +
diff --git a/lib/srdb1/schema/mohqueues.xml b/lib/srdb1/schema/mohqueues.xml new file mode 100644 index 000000000..168e1ca7f --- /dev/null +++ b/lib/srdb1/schema/mohqueues.xml @@ -0,0 +1,75 @@ + + +%entities; + +]> + + + mohqueues + 1 + &MYSQL_TABLE_TYPE; + + This table is used by the mohqueue module to store queue definitions. This is a read-only table from the viewpoint of the module. More information about the mohqueue module can be found at: &KAMAILIO_MOD_DOC;mohqueue.html + + + + + id + unsigned int + &table_id_len; + + + int,auto + Unique ID + + + + name + string + 25 + queue name + + + + uri + string + 100 + URI for the queue + + + + mohdir + string + 100 + + directory for MOH files + + + + mohfile + string + 100 + base name for the MOH file + + + + debug + int + debug flag + + + + mohqueue_uri_idx + + + + + + mohqueue_name_idx + + + +
diff --git a/lib/srdb1/schema/rtpproxy.xml b/lib/srdb1/schema/rtpproxy.xml new file mode 100644 index 000000000..bab9e0c77 --- /dev/null +++ b/lib/srdb1/schema/rtpproxy.xml @@ -0,0 +1,69 @@ + + +%entities; + +]> + + + rtpproxy + 1 + &MYSQL_TABLE_TYPE; + + This table is used by the rtpproxy module. It contains the sets of rtpproxy instances used for proxying media between endpoints. More information about the rtpproxy module can be found at: &KAMAILIO_MOD_DOC;rtpproxy.html + + + + + id + unsigned int + &table_id_len; + + + int,auto + unique ID + + + + setid + string + 32 + Set ID + 00 + + + + url + string + 64 + RTPProxy instance socket URL + + + + + flags + int + Flags of the rtpproxy instance + 0 + + + + + weight + int + Weighting of this rtpproxy instance in the set + 1 + + + + + description + string + 64 + + Description for this instance + + +
diff --git a/lvalue.c b/lvalue.c index a89cfce79..156e5067c 100644 --- a/lvalue.c +++ b/lvalue.c @@ -36,7 +36,16 @@ #include "dprint.h" #include "route.h" +/* callback to log assign actions */ +static log_assign_action_f _log_assign_action = NULL; +/** + * @brief set callback function log assign actions + */ +void set_log_assign_action_cb(log_assign_action_f f) +{ + _log_assign_action = f; +} /** * @brief eval rve and assign the result to an avp @@ -255,7 +264,7 @@ inline static int lval_pvar_assign(struct run_act_ctx* h, struct sip_msg* msg, pv_get_null(msg, 0, &pval) destroy_pval=0; - pvar=&lv->lv.pvs; + pvar=lv->lv.pvs; if (unlikely(!pv_is_w(pvar))){ ERR("read only pvar\n"); goto error; @@ -406,6 +415,11 @@ int lval_assign(struct run_act_ctx* h, struct sip_msg* msg, rve->fpos.s_line, rve->fpos.s_col, rve->fpos.e_line, rve->fpos.e_col); } + else + { + if(unlikely(_log_assign_action!=NULL)) + _log_assign_action(msg, lv); + } rval_destroy(rv); return ret; error: diff --git a/lvalue.h b/lvalue.h index 566f84ed0..b5eccd439 100644 --- a/lvalue.h +++ b/lvalue.h @@ -35,7 +35,7 @@ #include "action.h" union lval_u{ - pv_spec_t pvs; + pv_spec_t *pvs; avp_spec_t avps; }; @@ -51,7 +51,8 @@ struct lvalue{ /* lval operators */ #define EQ_T 254 /* k compatibility */ - +typedef int (*log_assign_action_f)(struct sip_msg* msg, struct lvalue *lv); +void set_log_assign_action_cb(log_assign_action_f f); /** eval rve and assign the result to lv * lv=eval(rve) diff --git a/main.c b/main.c index 31a31af20..05d431e15 100644 --- a/main.c +++ b/main.c @@ -145,6 +145,7 @@ #include "script_cb.h" #include "nonsip_hooks.h" #include "ut.h" +#include "events.h" #include "signals.h" #ifdef USE_RAW_SOCKS #include "raw_sock.h" @@ -162,8 +163,7 @@ #endif /* CORE_TLS */ #endif /* USE_TCP */ #ifdef USE_SCTP -#include "sctp_options.h" -#include "sctp_server.h" +#include "sctp_core.h" #endif #include "usr_avp.h" #include "rpc_lookup.h" @@ -383,8 +383,6 @@ int config_check = 0; int check_via = 0; /* translate user=phone URIs to TEL URIs */ int phone2tel = 1; -/* shall use stateful synonym branches? faster but not reboot-safe */ -int syn_branch = 1; /* debugging level for timer debugging */ int timerlog = L_WARN; /* should replies include extensive warnings? by default no, @@ -458,9 +456,7 @@ int mcast_ttl = -1; /* if -1, don't touch it, use the default (usually 1) */ int tos = IPTOS_LOWDELAY; int pmtu_discovery = 0; -#ifdef USE_IPV6 int auto_bind_ipv6 = 0; -#endif #if 0 char* names[MAX_LISTEN]; /* our names */ @@ -504,15 +500,6 @@ unsigned short port_no=0; /* default port*/ unsigned short tls_port_no=0; /* default port */ #endif -#ifdef USE_STUN -/* refresh interval in miliseconds */ -unsigned int stun_refresh_interval=0; -/* stun can be switch off even if it is compiled */ -int stun_allow_stun=1; -/* use or don't use fingerprint */ -int stun_allow_fp=1; -#endif - struct host_alias* aliases=0; /* name aliases list */ /* Parameter to child_init */ @@ -595,7 +582,7 @@ void cleanup(show_status) #endif /* USE_TLS */ #endif /* USE_TCP */ #ifdef USE_SCTP - destroy_sctp(); + sctp_core_destroy(); #endif destroy_timer(); pv_destroy_api(); @@ -938,7 +925,7 @@ error: /* returns -1 on error, 0 on success * sets proto */ -static int parse_proto(unsigned char* s, long len, int* proto) +int parse_proto(unsigned char* s, long len, int* proto) { #define PROTO2UINT3(a, b, c) (( (((unsigned int)(a))<<16)+ \ (((unsigned int)(b))<<8)+ \ @@ -1459,11 +1446,9 @@ int main_loop(void) if ((si->address.af==AF_INET)&& ((sendipv4==0)||(sendipv4->flags&(SI_IS_LO|SI_IS_MCAST)))) sendipv4=si; - #ifdef USE_IPV6 if ( ((sendipv6==0)||(sendipv6->flags&(SI_IS_LO|SI_IS_MCAST))) && (si->address.af==AF_INET6)) sendipv6=si; - #endif /* children_no per each socket */ cfg_register_child((si->workers>0)?si->workers:children_no); } @@ -1506,18 +1491,16 @@ int main_loop(void) #ifdef USE_SCTP if (!sctp_disable){ for(si=sctp_listen; si; si=si->next){ - if (sctp_init_sock(si)==-1) goto error; + if (sctp_core_init_sock(si)==-1) goto error; /* get first ipv4/ipv6 socket*/ if ((si->address.af==AF_INET) && ((sendipv4_sctp==0) || (sendipv4_sctp->flags&(SI_IS_LO|SI_IS_MCAST)))) sendipv4_sctp=si; - #ifdef USE_IPV6 if( ((sendipv6_sctp==0) || (sendipv6_sctp->flags&(SI_IS_LO|SI_IS_MCAST))) && (si->address.af==AF_INET6)) sendipv6_sctp=si; - #endif /* sctp_children_no per each socket */ cfg_register_child((si->workers>0)?si->workers:sctp_children_no); } @@ -1533,12 +1516,10 @@ int main_loop(void) ((sendipv4_tcp==0) || (sendipv4_tcp->flags&(SI_IS_LO|SI_IS_MCAST)))) sendipv4_tcp=si; - #ifdef USE_IPV6 if( ((sendipv6_tcp==0) || (sendipv6_tcp->flags&(SI_IS_LO|SI_IS_MCAST))) && (si->address.af==AF_INET6)) sendipv6_tcp=si; - #endif } /* the number of sockets does not matter */ cfg_register_child(tcp_children_no + 1 /* tcp main */); @@ -1553,12 +1534,10 @@ int main_loop(void) ((sendipv4_tls==0) || (sendipv4_tls->flags&(SI_IS_LO|SI_IS_MCAST)))) sendipv4_tls=si; - #ifdef USE_IPV6 if( ((sendipv6_tls==0) || (sendipv6_tls->flags&(SI_IS_LO|SI_IS_MCAST))) && (si->address.af==AF_INET6)) sendipv6_tls=si; - #endif } } #endif /* USE_TLS */ @@ -1667,7 +1646,7 @@ int main_loop(void) #ifdef STATS setstats( i+r*children_no ); #endif - return sctp_rcv_loop(); + return sctp_core_rcv_loop(); } } /*parent*/ @@ -1922,9 +1901,6 @@ int main(int argc, char** argv) goto error; #ifdef USE_TCP init_tcp_options(); /* set the defaults before the config */ -#endif -#ifdef USE_SCTP - init_sctp_options(); /* set defaults before the config */ #endif /* process command line (cfg. file path etc) */ optind = 1; /* reset getopt */ @@ -1963,12 +1939,6 @@ int main(int argc, char** argv) printf("version: %s\n", full_version); printf("flags: %s\n", ver_flags ); print_ct_constants(); -#ifdef USE_SCTP - tmp=malloc(256); - if (tmp && (sctp_check_compiled_sockopts(tmp, 256)!=0)) - printf("sctp unsupported socket options: %s\n", tmp); - if (tmp) free(tmp); -#endif printf("id: %s\n", ver_id); printf("compiled on %s with %s\n", ver_compiled_time, ver_compiler ); @@ -2284,6 +2254,9 @@ try_again: if (pv_reinit_buffer()<0) goto error; + /* init lookup for core event routes */ + sr_core_ert_init(); + if (dont_fork_cnt) dont_fork = dont_fork_cnt; /* override by command line */ @@ -2303,7 +2276,7 @@ try_again: #ifdef USE_SCTP if (sctp_disable!=1){ /* fix it */ - if (sctp_check_support()==-1){ + if (sctp_core_check_support()==-1){ /* check if sctp support is auto, if not warn about disabling it */ if (sctp_disable!=2){ fprintf(stderr, "ERROR: " "sctp enabled, but not supported by" @@ -2424,12 +2397,6 @@ try_again: goto error; } #endif /* USE_TCP */ -#ifdef USE_SCTP - if (sctp_register_cfg()){ - LOG(L_CRIT, "could not register the sctp configuration\n"); - goto error; - } -#endif /* USE_SCTP */ /*init timer, before parsing the cfg!*/ if (init_timer()<0){ LOG(L_CRIT, "could not initialize timer, exiting...\n"); @@ -2475,7 +2442,7 @@ try_again: #endif /* USE_TCP */ #ifdef USE_SCTP if (!sctp_disable){ - if (init_sctp()<0){ + if (sctp_core_init()<0){ LOG(L_CRIT, "Could not initialize sctp, exiting...\n"); goto error; } diff --git a/mem/f_malloc.c b/mem/f_malloc.c index 008874b21..7a0e115a2 100644 --- a/mem/f_malloc.c +++ b/mem/f_malloc.c @@ -361,6 +361,8 @@ void* fm_malloc(struct fm_block* qm, unsigned long size) MDBG("fm_malloc(%p, %lu) called from %s: %s(%d)\n", qm, size, file, func, line); #endif + /*malloc(0) should return a valid pointer according to specs*/ + if(unlikely(size==0)) size=4; /*size must be a multiple of 8*/ size=ROUNDUP(size); /* if (size>(qm->size-qm->real_used)) return 0; */ diff --git a/mem/q_malloc.c b/mem/q_malloc.c index bfa46fd0d..50acab919 100644 --- a/mem/q_malloc.c +++ b/mem/q_malloc.c @@ -368,6 +368,8 @@ void* qm_malloc(struct qm_block* qm, unsigned long size) MDBG("qm_malloc(%p, %lu) called from %s: %s(%d)\n", qm, size, file, func, line); #endif + /*malloc(0) should return a valid pointer according to specs*/ + if(unlikely(size==0)) size=4; /*size must be a multiple of 8*/ size=ROUNDUP(size); if (size>(qm->size-qm->real_used)) return 0; diff --git a/modules/acc/README b/modules/acc/README index 55bde38a9..f6b1c5cfd 100644 --- a/modules/acc/README +++ b/modules/acc/README @@ -125,6 +125,12 @@ Sven Knoblich 6.42. cdr_start_id (string) 6.43. cdr_end_id (string) 6.44. cdr_duration_id (string) + 6.45. cdr_log_enable (int) + 6.46. cdrs_table (str) + 6.47. time_mode (int) + 6.48. time_attr (str) + 6.49. time_exten (str) + 6.50. time_format (str) 7. Functions @@ -181,10 +187,16 @@ Sven Knoblich 1.42. cdr_start_id example 1.43. cdr_end_id example 1.44. cdr_duration_id example - 1.45. acc_log_request usage - 1.46. acc_db_request usage - 1.47. acc_rad_request usage - 1.48. acc_diam_request usage + 1.45. cdr_log_enable example + 1.46. cdrs_table example + 1.47. time_mode example + 1.48. time_attr example + 1.49. time_exten example + 1.50. time_format example + 1.51. acc_log_request usage + 1.52. acc_db_request usage + 1.53. acc_rad_request usage + 1.54. acc_diam_request usage Chapter 1. Admin Guide @@ -273,6 +285,12 @@ Chapter 1. Admin Guide 6.42. cdr_start_id (string) 6.43. cdr_end_id (string) 6.44. cdr_duration_id (string) + 6.45. cdr_log_enable (int) + 6.46. cdrs_table (str) + 6.47. time_mode (int) + 6.48. time_attr (str) + 6.49. time_exten (str) + 6.50. time_format (str) 7. Functions @@ -586,6 +604,7 @@ Note 4.3.2.1. Example for a spiraled Proxy +... # A calls B (transaction 1) $avp(caller)='A' $avp(callee)='B'; @@ -604,6 +623,7 @@ $dlg_var(chain)=$dlg_var(chain) + "|" + "C;cfnr;D"; # C confirms call (200 reply of transaction 2) $dlg_var(caller) = $avp(caller); #caller='B' $dlg_var(callee) = $avp(callee); #callee='C' +... 4.3.3. Logged data @@ -679,6 +699,12 @@ $dlg_var(callee) = $avp(callee); #callee='C' 6.42. cdr_start_id (string) 6.43. cdr_end_id (string) 6.44. cdr_duration_id (string) + 6.45. cdr_log_enable (int) + 6.46. cdrs_table (str) + 6.47. time_mode (int) + 6.48. time_attr (str) + 6.49. time_exten (str) + 6.50. time_format (str) 6.1. early_media (integer) @@ -687,7 +713,9 @@ $dlg_var(callee) = $avp(callee); #callee='C' Default value is 0 (no). Example 1.1. early_media example +... modparam("acc", "early_media", 1) +... 6.2. failed_transaction_flag (integer) @@ -697,7 +725,9 @@ modparam("acc", "early_media", 1) Default value is not-set (no flag). Example 1.2. failed_transaction_flag example +... modparam("acc", "failed_transaction_flag", 4) +... 6.3. failed_filter (string) @@ -708,7 +738,9 @@ modparam("acc", "failed_transaction_flag", 4) Default value is not-set (failure filtering is off). Example 1.3. failed_filter example +... modparam("acc", "failed_filter", "404,407") +... 6.4. report_ack (integer) @@ -720,7 +752,9 @@ modparam("acc", "failed_filter", "404,407") Default value is 0 (no). Example 1.4. report_ack example +... modparam("acc", "report_ack", 1) +... 6.5. report_cancels (integer) @@ -731,7 +765,9 @@ modparam("acc", "report_ack", 1) Default value is 0 (no). Example 1.5. report_cancels example +... modparam("acc", "report_cancels", 1) +... 6.6. detect_direction (integer) @@ -746,7 +782,9 @@ modparam("acc", "report_cancels", 1) Default value is 0 (disabled). Example 1.6. detect_direction example +... modparam("acc", "detect_direction", 1) +... 6.7. acc_prepare_flag (integer) @@ -755,12 +793,14 @@ modparam("acc", "detect_direction", 1) failure_route). If this flag is not set and acc or missed_call flag are not set either in request route block, there is no way to mark the request for transaction later. If either acc or missed_call flags are - set in request route block, it is no need to set this flag. + set in request route block, there is no need to set this flag. Default value is not-set (no flag). Example 1.7. acc_prepare_flag example +... modparam("acc", "acc_prepare_flag", 5) +... 6.8. multi_leg_info (string) @@ -773,6 +813,7 @@ modparam("acc", "acc_prepare_flag", 5) Default value is 0 (disabled). Example 1.8. multi_leg_info example +... # for syslog-based accounting, use any text you want to be printed modparam("acc", "multi_leg_info", "text1=$avp(src);text2=$avp(dst)") @@ -785,6 +826,7 @@ modparam("acc", "multi_leg_info", # for DIAMETER-based accounting, use the DIAMETER AVP ID (as integer) modparam("acc", "multi_leg_info", "2345=$avp(src);2346=$avp(dst)") +... 6.9. log_flag (integer) @@ -793,7 +835,9 @@ modparam("acc", "multi_leg_info", Default value is not-set (no flag). Example 1.9. log_flag example +... modparam("acc", "log_flag", 2) +... 6.10. log_missed_flag (integer) @@ -802,7 +846,9 @@ modparam("acc", "log_flag", 2) Default value is not-set (no flag). Example 1.10. log_missed_flag example +... modparam("acc", "log_missed_flag", 3) +... 6.11. log_level (integer) @@ -811,7 +857,9 @@ modparam("acc", "log_missed_flag", 3) Default value is L_NOTICE. Example 1.11. log_level example +... modparam("acc", "log_level", 2) # Set log_level to 2 +... 6.12. log_facility (string) @@ -822,7 +870,9 @@ modparam("acc", "log_level", 2) # Set log_level to 2 Default value is LOG_DAEMON. Example 1.12. log_facility example +... modparam("acc", "log_facility", "LOG_DAEMON") +... 6.13. log_extra (string) @@ -832,7 +882,9 @@ modparam("acc", "log_facility", "LOG_DAEMON") Default value is NULL. Example 1.13. log_extra example +... modparam("acc", "log_extra", "ua=$hdr(User-Agent);uuid=$avp(i:123)") +... 6.14. radius_config (string) @@ -848,7 +900,9 @@ modparam("acc", "log_extra", "ua=$hdr(User-Agent);uuid=$avp(i:123)") Default value is "NULL". Example 1.14. radius_config example +... modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf") +... 6.15. radius_flag (integer) @@ -858,7 +912,9 @@ modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf") Default value is not-set (no flag). Example 1.15. radius_flag example +... modparam("acc", "radius_flag", 2) +... 6.16. radius_missed_flag (integer) @@ -868,7 +924,9 @@ modparam("acc", "radius_flag", 2) Default value is not-set (no flag). Example 1.16. radius_missed_flag example +... modparam("acc", "radius_missed_flag", 3) +... 6.17. service_type (integer) @@ -877,7 +935,9 @@ modparam("acc", "radius_missed_flag", 3) Default value is 15 (SIP). Example 1.17. service_type example +... modparam("acc", "service_type", 16) +... 6.18. radius_extra (string) @@ -887,7 +947,9 @@ modparam("acc", "service_type", 16) Default value is NULL. Example 1.18. radius_extra example +... modparam("acc", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)") +... 6.19. db_flag (integer) @@ -897,7 +959,9 @@ modparam("acc", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)") Default value is not-set (no flag). Example 1.19. db_flag example +... modparam("acc", "db_flag", 2) +... 6.20. db_missed_flag (integer) @@ -907,7 +971,9 @@ modparam("acc", "db_flag", 2) Default value is not-set (no flag). Example 1.20. db_missed_flag example +... modparam("acc", "db_missed_flag", 3) +... 6.21. db_table_acc (string) @@ -917,8 +983,10 @@ modparam("acc", "db_missed_flag", 3) Default value is "acc" Example 1.21. db_table_acc example +... modparam("acc", "db_table_acc", "myacc_table") modparam("acc", "db_table_acc", "acc_$time(year)_$time(mon)") +... 6.22. db_table_missed_calls (string) @@ -928,7 +996,9 @@ modparam("acc", "db_table_acc", "acc_$time(year)_$time(mon)") Default value is "missed_calls" Example 1.22. db_table_missed_calls example +... modparam("acc", "db_table_missed_calls", "myMC_table") +... 6.23. db_url (string) @@ -938,7 +1008,9 @@ modparam("acc", "db_table_missed_calls", "myMC_table") Default value is "NULL" (SQL disabled). Example 1.23. db_url example -modparam("acc", "db_url", "mysql://user:password@localhost/openser") +... +modparam("acc", "db_url", "mysql://user:password@localhost/kamailio") +... 6.24. acc_method_column (string) @@ -948,7 +1020,9 @@ modparam("acc", "db_url", "mysql://user:password@localhost/openser") Default value is "method". Example 1.24. acc_method_column example +... modparam("acc", "acc_method_column", "method") +... 6.25. acc_from_tag_column (string) @@ -957,7 +1031,9 @@ modparam("acc", "acc_method_column", "method") Default value is "from_tag". Example 1.25. acc_from_tag_column example +... modparam("acc", "acc_from_tag_column", "from_tag") +... 6.26. acc_to_tag_column (string) @@ -966,7 +1042,9 @@ modparam("acc", "acc_from_tag_column", "from_tag") Default value is "to_tag". Example 1.26. acc_to_tag_column example +... modparam("acc", "acc_to_tag_column", "to_tag") +... 6.27. acc_callid_column (string) @@ -975,7 +1053,9 @@ modparam("acc", "acc_to_tag_column", "to_tag") Default value is "callid". Example 1.27. acc_callid_column example +... modparam("acc", "acc_callid_column", "callid") +... 6.28. acc_sip_code_column (string) @@ -985,7 +1065,9 @@ modparam("acc", "acc_callid_column", "callid") Default value is "sip_code". Example 1.28. acc_sip_code_column example +... modparam("acc", "acc_sip_code_column", "sip_code") +... 6.29. acc_sip_reason_column (string) @@ -995,7 +1077,9 @@ modparam("acc", "acc_sip_code_column", "sip_code") Default value is "sip_reason". Example 1.29. acc_sip_reason_column example +... modparam("acc", "acc_sip_reason_column", "sip_reason") +... 6.30. acc_time_column (string) @@ -1005,7 +1089,9 @@ modparam("acc", "acc_sip_reason_column", "sip_reason") Default value is "time". Example 1.30. acc_time_column example +... modparam("acc", "acc_time_column", "time") +... 6.31. db_extra (string) @@ -1015,7 +1101,9 @@ modparam("acc", "acc_time_column", "time") Default value is NULL. Example 1.31. db_extra example +... modparam("acc", "db_extra", "ct=$hdr(Content-type); email=$avp(s:email)") +... 6.32. db_insert_mode (integer) @@ -1026,7 +1114,9 @@ modparam("acc", "db_extra", "ct=$hdr(Content-type); email=$avp(s:email)") Default value is 0 (no INSERT DELAYED). Example 1.32. db_insert_mode example +... modparam("acc", "db_insert_mode", 1) +... 6.33. diameter_flag (integer) @@ -1036,7 +1126,9 @@ modparam("acc", "db_insert_mode", 1) Default value is not-set (no flag). Example 1.33. diameter_flag example +... modparam("acc", "diameter_flag", 2) +... 6.34. diameter_missed_flag (integer) @@ -1046,7 +1138,9 @@ modparam("acc", "diameter_flag", 2) Default value is not-set (no flag). Example 1.34. diameter_missed_flag example +... modparam("acc", "diameter_missed_flag", 3) +... 6.35. diameter_client_host (string) @@ -1056,7 +1150,9 @@ modparam("acc", "diameter_missed_flag", 3) Default value is "localhost". Example 1.35. diameter_client_host example +... modparam("acc", "diameter_client_host", "3a_server.net") +... 6.36. diameter_client_port (int) @@ -1066,7 +1162,9 @@ modparam("acc", "diameter_client_host", "3a_server.net") Default value is 3000. Example 1.36. diameter_client_host example +... modparam("acc", "diameter_client_port", 3000) +... 6.37. diameter_extra (string) @@ -1076,16 +1174,20 @@ modparam("acc", "diameter_client_port", 3000) Default value is NULL. Example 1.37. diameter_extra example +... modparam("acc", "diameter_extra", "7846=$hdr(Content-type);7847=$avp(s:email)") +... 6.38. cdr_enable (integer) Should CDR-based logging be enabled? - 0 - off (default) 1 - on + 0 - off (default). 1 - on. Example 1.38. cdr_enable example +... modparam("acc", "cdr_enable", 1) +... 6.39. cdr_start_on_confirmed (integer) @@ -1096,7 +1198,9 @@ modparam("acc", "cdr_enable", 1) confirmation. Example 1.39. cdr_start_on_confirmed example +... modparam("acc", "cdr_start_on_confirmed", 1) +... 6.40. cdr_facility (integer) @@ -1106,7 +1210,9 @@ modparam("acc", "cdr_start_on_confirmed", 1) Default value is LOG_DAEMON. Example 1.40. cdr_facility example +... modparam("acc", "cdr_facility", "LOG_DAEMON") +... 6.41. cdr_extra (string) @@ -1116,34 +1222,127 @@ modparam("acc", "cdr_facility", "LOG_DAEMON") Default value is NULL. Example 1.41. cdr_extra example +... modparam("acc", "cdr_extra", "c1=$dlg_var(caller);c2=$dlg_var(callee)" +... 6.42. cdr_start_id (string) - Modifying the start id which is used to store the start time. + Modifying the id which is used to store the start time. - Default value is 'st' + Default value is 'start_time' Example 1.42. cdr_start_id example +... modparam("acc", "cdr_start_id", "start") +... 6.43. cdr_end_id (string) - Modifying the end id which is used to store the end time. + Modifying the id which is used to store the end time. - Default value is 'et' + Default value is 'end_time' Example 1.43. cdr_end_id example +... modparam("acc", "cdr_end_id", "end") +... 6.44. cdr_duration_id (string) - Modifying the duration id which is used to store the duration. + Modify the id which is used to store the duration. - Default value is 'd' + Default value is 'duration' Example 1.44. cdr_duration_id example -modparam("acc", "cdr_duration_id", "start") +... +modparam("acc", "cdr_duration_id", "d") +... + +6.45. cdr_log_enable (int) + + Control if CDR-based accounting should be written to syslog. + + 0 - off. 1 - on (default). + + Example 1.45. cdr_log_enable example +... +modparam("acc", "cdr_log_enable", 0) +... + +6.46. cdrs_table (str) + + Name of db table to store dialog-based CDRs. + + Default value is "" (no db storage for dialog-based CDRs). + + Example 1.46. cdrs_table example +... +modparam("acc", "cdrs_table", "acc_cdrs") +... + +6.47. time_mode (int) + + Store additional value related to the time of event. + + Values can be: + * 0 - (default), save only unix timestamp for syslog and datetime for + database. + * 1 - save seconds in time_attr and microseconds in time_exten. + * 2 - save seconds.miliseconds in time_attr. + * 3 - save formatted time according to time_format parameter, using + the output of localtime(). + * 4 - save formatted time according to time_format parameter, using + the output of gmtime(). + + Example 1.47. time_mode example +... +modparam("acc", "time_mode", 1) +... + +6.48. time_attr (str) + + Name of the syslog attribute or database column where to store + additional value related to the time of event. + + For db accounting, the column has to be of different types, depending + on time_mode value. When time_mode is: + * 1 - time_attr column has to be int. + * 2 - time_attr column has to be double. + * 3 - time_attr column has to be varchar(128). + * 4 - time_attr column has to be varchar(128). + + For time_mode=1, this attribute is not written in syslog, because time + value is already unix timestamp, but in db accounting time value is + datetime and requires a function to get the timestamp. + + Example 1.48. time_attr example +... +modparam("acc", "time_attr", "seconds") +... + +6.49. time_exten (str) + + Name of the syslog attribute or database column where to store extended + value related to the time of event. + + It is used now only for time_mode=1 and database column has to be int: + + Example 1.49. time_exten example +... +modparam("acc", "time_exten", "micorsecs") +... + +6.50. time_format (str) + + Specify the format to print the time for time_mode 3 or 4. + + Default value is %Y-%m-%d %H:%M:%S". + + Example 1.50. time_format example +... +modparam("acc", "time_format", "%Y/%m/%d %H:%M:%S") +... 7. Functions @@ -1164,7 +1363,7 @@ modparam("acc", "cdr_duration_id", "start") This function can be used from ANY_ROUTE. - Example 1.45. acc_log_request usage + Example 1.51. acc_log_request usage ... acc_log_request("Some comment"); ... @@ -1182,7 +1381,7 @@ acc_log_request("Some comment"); This function can be used from ANY_ROUTE. - Example 1.46. acc_db_request usage + Example 1.52. acc_db_request usage ... acc_db_request("Some comment", "SomeTable"); acc_db_request("Some comment", "acc_$time(year)_$time(mon)"); @@ -1198,7 +1397,7 @@ acc_db_request("Some comment", "acc_$time(year)_$time(mon)"); This function can be used from ANY_ROUTE. - Example 1.47. acc_rad_request usage + Example 1.53. acc_rad_request usage ... acc_rad_request("Some comment"); ... @@ -1213,7 +1412,7 @@ acc_rad_request("Some comment"); This function can be used from ANY_ROUTE. - Example 1.48. acc_diam_request usage + Example 1.54. acc_diam_request usage ... acc_diam_request("Some comment"); ... diff --git a/modules/acc/acc.c b/modules/acc/acc.c index 0a563d6e9..efaebc0d3 100644 --- a/modules/acc/acc.c +++ b/modules/acc/acc.c @@ -75,6 +75,7 @@ extern struct acc_extra *log_extra; extern struct acc_extra *leg_info; extern struct acc_enviroment acc_env; +extern char *acc_time_format; #ifdef RAD_ACC extern struct acc_extra *rad_extra; @@ -90,14 +91,17 @@ extern struct acc_extra *dia_extra; static db_func_t acc_dbf; static db1_con_t* db_handle=0; extern struct acc_extra *db_extra; -extern int acc_db_insert_mode; #endif /* arrays used to collect the values before being - * pushed to the storage backend (whatever used) */ -static str val_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG]; -static int int_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG]; -static char type_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG]; + * pushed to the storage backend (whatever used) + * (3 = datetime + max 2 from time_mode) */ +static str val_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG+3]; +static int int_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG+3]; +static char type_arr[ACC_CORE_LEN+MAX_ACC_EXTRA+MAX_ACC_LEG+3]; + +#define ACC_TIME_FORMAT_SIZE 128 +static char acc_time_format_buf[ACC_TIME_FORMAT_SIZE]; /******************************************** * acc CORE function @@ -173,7 +177,9 @@ int core2strar(struct sip_msg *req, str *c_vals, int *i_vals, char *t_vals) c_vals[5] = acc_env.reason; t_vals[5] = TYPE_STR; - acc_env.ts = time(NULL); + gettimeofday(&acc_env.tv, NULL); + acc_env.ts = acc_env.tv.tv_sec; + return ACC_CORE_LEN; } @@ -224,6 +230,7 @@ int acc_log_request( struct sip_msg *rq) int n; int m; int i; + struct tm *t; /* get default values */ m = core2strar( rq, val_arr, int_arr, type_arr); @@ -275,8 +282,38 @@ int acc_log_request( struct sip_msg *rq) *(p++) = '\n'; *(p++) = 0; - LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu%s", - acc_env.text.len, acc_env.text.s,(unsigned long) acc_env.ts, log_msg); + if(acc_time_mode==1) { + LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu;%s=%u%s", + acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts, + acc_time_exten.s, (unsigned int)acc_env.tv.tv_usec, + log_msg); + } else if(acc_time_mode==2) { + LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu;%s=%.3f%s", + acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts, + acc_time_attr.s, + (((double)(acc_env.tv.tv_sec * 1000) + + (acc_env.tv.tv_usec / 1000)) / 1000), + log_msg); + } else if(acc_time_mode==3 || acc_time_mode==4) { + if(acc_time_mode==3) { + t = localtime(&acc_env.ts); + } else { + t = gmtime(&acc_env.ts); + } + if(strftime(acc_time_format_buf, ACC_TIME_FORMAT_SIZE, + acc_time_format, t)<0) { + acc_time_format_buf[0] = '\0'; + } + LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu;%s=%s%s", + acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts, + acc_time_attr.s, + acc_time_format_buf, + log_msg); + } else { + LM_GEN2(log_facility, log_level, "%.*stimestamp=%lu%s", + acc_env.text.len, acc_env.text.s,(unsigned long)acc_env.ts, + log_msg); + } return 1; } @@ -288,11 +325,20 @@ int acc_log_request( struct sip_msg *rq) #ifdef SQL_ACC -/* caution: keys need to be aligned to core format */ -static db_key_t db_keys[ACC_CORE_LEN+1+MAX_ACC_EXTRA+MAX_ACC_LEG]; -static db_val_t db_vals[ACC_CORE_LEN+1+MAX_ACC_EXTRA+MAX_ACC_LEG]; +/* caution: keys need to be aligned to core format + * (3 = datetime + max 2 from time_mode) */ +static db_key_t db_keys[ACC_CORE_LEN+3+MAX_ACC_EXTRA+MAX_ACC_LEG]; +static db_val_t db_vals[ACC_CORE_LEN+3+MAX_ACC_EXTRA+MAX_ACC_LEG]; +int acc_get_db_handlers(void **vf, void **vh) { + if(db_handle==0) + return -1; + *vf = (void*)&acc_dbf; + *vh = (void*)db_handle; + return 0; +} + static void acc_db_init_keys(void) { struct acc_extra *extra; @@ -311,6 +357,13 @@ static void acc_db_init_keys(void) db_keys[n++] = &acc_sipreason_col; db_keys[n++] = &acc_time_col; time_idx = n-1; + if(acc_time_mode==1 || acc_time_mode==2 + || acc_time_mode==3 || acc_time_mode==4) { + db_keys[n++] = &acc_time_attr; + if(acc_time_mode==1) { + db_keys[n++] = &acc_time_exten; + } + } /* init the extra db keys */ for(extra=db_extra; extra ; extra=extra->next) @@ -326,6 +379,14 @@ static void acc_db_init_keys(void) VAL_NULL(db_vals+i)=0; } VAL_TYPE(db_vals+time_idx)=DB1_DATETIME; + if(acc_time_mode==1) { + VAL_TYPE(db_vals+time_idx+1)=DB1_INT; + VAL_TYPE(db_vals+time_idx+2)=DB1_INT; + } else if(acc_time_mode==2) { + VAL_TYPE(db_vals+time_idx+1)=DB1_DOUBLE; + } else if(acc_time_mode==3 || acc_time_mode==4) { + VAL_TYPE(db_vals+time_idx+1)=DB1_STRING; + } } @@ -376,6 +437,7 @@ int acc_db_request( struct sip_msg *rq) int m; int n; int i; + struct tm *t; /* formated database columns */ m = core2strar( rq, val_arr, int_arr, type_arr ); @@ -384,6 +446,29 @@ int acc_db_request( struct sip_msg *rq) VAL_STR(db_vals+i) = val_arr[i]; /* time value */ VAL_TIME(db_vals+(m++)) = acc_env.ts; + /* extra time value */ + if(acc_time_mode==1) { + VAL_INT(db_vals+(m++)) = (int)acc_env.tv.tv_sec; + i++; + VAL_INT(db_vals+(m++)) = (int)acc_env.tv.tv_usec; + i++; + } else if(acc_time_mode==2) { + VAL_DOUBLE(db_vals+(m++)) = ((double)(acc_env.tv.tv_sec * 1000) + + (acc_env.tv.tv_usec / 1000)) / 1000; + i++; + } else if(acc_time_mode==3 || acc_time_mode==4) { + if(acc_time_mode==3) { + t = localtime(&acc_env.ts); + } else { + t = gmtime(&acc_env.ts); + } + if(strftime(acc_time_format_buf, ACC_TIME_FORMAT_SIZE, + acc_time_format, t)<0) { + acc_time_format_buf[0] = '\0'; + } + VAL_STRING(db_vals+(m++)) = acc_time_format_buf; + i++; + } /* extra columns */ m += extra2strar( db_extra, rq, val_arr+m, int_arr+m, type_arr+m); diff --git a/modules/acc/acc.h b/modules/acc/acc.h index ef9a92231..12acf980f 100644 --- a/modules/acc/acc.h +++ b/modules/acc/acc.h @@ -92,6 +92,7 @@ int acc_db_init(const str* db_url); int acc_db_init_child(const str* db_url); void acc_db_close(void); int acc_db_request( struct sip_msg *req); +int acc_get_db_handlers(void **vf, void **vh); #endif #ifdef RAD_ACC diff --git a/modules/acc/acc_api.h b/modules/acc/acc_api.h index bc52eee0f..aa51380c6 100644 --- a/modules/acc/acc_api.h +++ b/modules/acc/acc_api.h @@ -36,6 +36,7 @@ #include #include +#include #include "../../str.h" #include "../../dprint.h" @@ -57,6 +58,7 @@ typedef struct acc_enviroment { struct hdr_field *to; str text; time_t ts; + struct timeval tv; } acc_enviroment_t; /* acc extra parameter */ @@ -104,7 +106,7 @@ typedef struct acc_engine { #define MAX_ACC_EXTRA 64 #define MAX_ACC_LEG 16 -#define ACC_CORE_LEN 6 +#define ACC_CORE_LEN 6 enum {TYPE_NULL = 0, TYPE_INT, TYPE_STR}; diff --git a/modules/acc/acc_cdr.c b/modules/acc/acc_cdr.c index 996ebf474..68792e901 100644 --- a/modules/acc/acc_cdr.c +++ b/modules/acc/acc_cdr.c @@ -45,6 +45,10 @@ #include "acc_extra.h" #include "acc.h" +#ifdef SQL_ACC +#include "../../lib/srdb1/db.h" +#endif + #include /* Solaris does not provide timersub macro in */ @@ -75,13 +79,15 @@ static const str empty_string = { "", 0}; // buffers which are used to collect the crd data for writing static str cdr_attrs[ MAX_CDR_CORE + MAX_CDR_EXTRA]; static str cdr_value_array[ MAX_CDR_CORE + MAX_CDR_EXTRA]; -static int cdr_int_arr[ MAX_CDR_CORE + MAX_CDR_EXTRA]; +static int cdr_int_array[ MAX_CDR_CORE + MAX_CDR_EXTRA]; static char cdr_type_array[ MAX_CDR_CORE + MAX_CDR_EXTRA]; extern struct tm_binds tmb; extern str cdr_start_str; extern str cdr_end_str; extern str cdr_duration_str; +extern str acc_cdrs_table; +extern int cdr_log_enable; /* write all basic information to buffers(e.g. start-time ...) */ static int cdr_core2strar( struct dlg_cell* dlg, @@ -115,8 +121,81 @@ static int cdr_core2strar( struct dlg_cell* dlg, return MAX_CDR_CORE; } +#ifdef SQL_ACC +/* caution: keys need to be aligned to core format */ +static db_key_t db_cdr_keys[ MAX_CDR_CORE + MAX_CDR_EXTRA]; +static db_val_t db_cdr_vals[ MAX_CDR_CORE + MAX_CDR_EXTRA]; + /* collect all crd data and write it to a syslog */ -static int write_cdr( struct dlg_cell* dialog, +static int db_write_cdr( struct dlg_cell* dialog, + struct sip_msg* message) +{ + int m = 0; + int i; + db_func_t *df=NULL; + db1_con_t *dh=NULL; + void *vf=NULL; + void *vh=NULL; + + if(acc_cdrs_table.len<=0) + return 0; + + if(acc_get_db_handlers(&vf, &vh)<0) { + LM_ERR("cannot get db handlers\n"); + return -1; + } + df = (db_func_t*)vf; + dh = (db1_con_t*)vh; + + /* get default values */ + m = cdr_core2strar( dialog, + cdr_value_array, + cdr_int_array, + cdr_type_array); + + for(i=0; iuse_table(dh, &acc_cdrs_table /*table*/) < 0) { + LM_ERR("error in use_table\n"); + return -1; + } + + if(acc_db_insert_mode==1 && df->insert_delayed!=NULL) { + if (df->insert_delayed(dh, db_cdr_keys, db_cdr_vals, m) < 0) { + LM_ERR("failed to insert delayed into database\n"); + return -1; + } + } else { + if (df->insert(dh, db_cdr_keys, db_cdr_vals, m) < 0) { + LM_ERR("failed to insert into database\n"); + return -1; + } + } + + return 0; +} +#endif + +/* collect all crd data and write it to a syslog */ +static int log_write_cdr( struct dlg_cell* dialog, struct sip_msg* message) { static char cdr_message[ MAX_SYSLOG_SIZE]; @@ -127,23 +206,20 @@ static int write_cdr( struct dlg_cell* dialog, int message_index = 0; int counter = 0; - if( !dialog || !message) - { - LM_ERR( "dialog and/or message is/are empty!"); - return -1; - } + if(cdr_log_enable==0) + return 0; /* get default values */ message_index = cdr_core2strar( dialog, cdr_value_array, - cdr_int_arr, + cdr_int_array, cdr_type_array); /* get extra values */ message_index += extra2strar( cdr_extra, message, cdr_value_array + message_index, - cdr_int_arr + message_index, + cdr_int_array + message_index, cdr_type_array + message_index); for( counter = 0, message_position = cdr_message; @@ -194,6 +270,23 @@ static int write_cdr( struct dlg_cell* dialog, return 0; } +/* collect all crd data and write it to a syslog */ +static int write_cdr( struct dlg_cell* dialog, + struct sip_msg* message) +{ + int ret = 0; + if( !dialog || !message) + { + LM_ERR( "dialog or message is empty!"); + return -1; + } + ret = log_write_cdr(dialog, message); +#ifdef SQL_ACC + ret |= db_write_cdr(dialog, message); +#endif + return ret; +} + /* convert a string into a timeval struct */ static int string2time( str* time_str, struct timeval* time_value) { @@ -495,7 +588,7 @@ static void cdr_on_end( struct dlg_cell* dialog, } } -/* callback for a expired dialog. */ +/* callback for an expired dialog. */ static void cdr_on_expired( struct dlg_cell* dialog, int type, struct dlg_cb_params* params) diff --git a/modules/acc/acc_logic.c b/modules/acc/acc_logic.c index c9bdd20cc..50278fbe7 100644 --- a/modules/acc/acc_logic.c +++ b/modules/acc/acc_logic.c @@ -197,8 +197,7 @@ int acc_db_set_table_name(struct sip_msg *msg, void *param, str *table) return -1; } strncpy(db_table_name_buf, dbtable.s, dbtable.len); - /* FS#327: since the buffer is static terminate the table name */ - db_table_name_buf[dbtable.len] = '\0'; + db_table_name_buf[dbtable.len] = '\0'; env_set_text(db_table_name_buf, dbtable.len); } else { if(table==NULL) { diff --git a/modules/acc/acc_mod.c b/modules/acc/acc_mod.c index 9f40e14d6..2fb9258e8 100644 --- a/modules/acc/acc_mod.c +++ b/modules/acc/acc_mod.c @@ -109,7 +109,17 @@ unsigned short failed_filter[MAX_FAILED_FILTER_COUNT + 1]; static char* leg_info_str = 0; /*!< multi call-leg support */ struct acc_extra *leg_info = 0; int acc_prepare_flag = -1; /*!< should the request be prepared for later acc */ +char *acc_time_format = "%Y-%m-%d %H:%M:%S"; +/* ----- time mode variables ------- */ +/*! \name AccTimeModeVariables Time Mode Variables */ +/*@{*/ + +int acc_time_mode = 0; +str acc_time_attr = str_init("time_attr"); +str acc_time_exten = str_init("time_exten"); + +/*@}*/ /* ----- SYSLOG acc variables ----------- */ /*! \name AccSyslogVariables Syslog Variables */ @@ -130,15 +140,18 @@ struct acc_extra *log_extra = 0; /*!< Log extra attributes */ /*@{*/ int cdr_enable = 0; +int cdr_log_enable = 1; int cdr_start_on_confirmed = 0; static char* cdr_facility_str = 0; static char* cdr_log_extra_str = 0; -str cdr_start_str = str_init("st"); -str cdr_end_str = str_init("et"); -str cdr_duration_str = str_init("d"); +str cdr_start_str = str_init("start_time"); +str cdr_end_str = str_init("end_time"); +str cdr_duration_str = str_init("duration"); +/* name for db table to store dialog-based cdrs */ +str acc_cdrs_table = str_init(""); -/*@{*/ +/*@}*/ /* ----- RADIUS acc variables ----------- */ /*! \name AccRadiusVariables Radius Variables */ @@ -253,6 +266,7 @@ static param_export_t params[] = { {"log_extra", STR_PARAM, &log_extra_str }, /* cdr specific */ {"cdr_enable", INT_PARAM, &cdr_enable }, + {"cdr_log_enable", INT_PARAM, &cdr_log_enable }, {"cdr_start_on_confirmed", INT_PARAM, &cdr_start_on_confirmed }, {"cdr_facility", STR_PARAM, &cdr_facility_str }, {"cdr_extra", STR_PARAM, &cdr_log_extra_str }, @@ -291,6 +305,12 @@ static param_export_t params[] = { {"acc_time_column", STR_PARAM, &acc_time_col.s }, {"db_insert_mode", INT_PARAM, &acc_db_insert_mode }, #endif + /* time-mode-specific */ + {"time_mode", INT_PARAM, &acc_time_mode }, + {"time_attr", PARAM_STR, &acc_time_attr }, + {"time_exten", PARAM_STR, &acc_time_exten }, + {"cdrs_table", PARAM_STR, &acc_cdrs_table }, + {"time_format", STR_PARAM, &acc_time_format }, {0,0,0} }; diff --git a/modules/acc/acc_mod.h b/modules/acc/acc_mod.h index 5e7792a8a..98cef3311 100644 --- a/modules/acc/acc_mod.h +++ b/modules/acc/acc_mod.h @@ -92,7 +92,14 @@ extern str acc_cseqno_col; extern str acc_sipcode_col; extern str acc_sipreason_col; extern str acc_time_col; + +extern int acc_db_insert_mode; #endif /* SQL_ACC */ +/* time mode */ +extern int acc_time_mode; +extern str acc_time_attr; +extern str acc_time_exten; + #endif diff --git a/modules/acc/doc/acc_admin.xml b/modules/acc/doc/acc_admin.xml index a60ba3441..97858bee0 100644 --- a/modules/acc/doc/acc_admin.xml +++ b/modules/acc/doc/acc_admin.xml @@ -373,7 +373,7 @@ if (uri=~"sip:+40") /* calls to Romania */ { cdr_extra_definition = cdr_log_name '=' pseudo_variable - See also . + See also . The full list of supported pseudo-variables in Sip-Router is available at: @@ -415,6 +415,7 @@ if (uri=~"sip:+40") /* calls to Romania */ {
Example for a spiraled Proxy +... # A calls B (transaction 1) $avp(caller)='A' $avp(callee)='B'; @@ -433,6 +434,7 @@ $dlg_var(chain)=$dlg_var(chain) + "|" + "C;cfnr;D"; # C confirms call (200 reply of transaction 2) $dlg_var(caller) = $avp(caller); #caller='B' $dlg_var(callee) = $avp(callee); #callee='C' +...
@@ -493,7 +495,7 @@ $dlg_var(callee) = $avp(callee); #callee='C'
Parameters -
+
<varname>early_media</varname> (integer) Should be early media (any provisional reply with body) accounted too ? @@ -504,11 +506,13 @@ $dlg_var(callee) = $avp(callee); #callee='C' early_media example +... modparam("acc", "early_media", 1) +...
-
+
<varname>failed_transaction_flag</varname> (integer) Per transaction flag which says if the transaction should be @@ -520,11 +524,13 @@ modparam("acc", "early_media", 1) failed_transaction_flag example +... modparam("acc", "failed_transaction_flag", 4) +...
-
+
<varname>failed_filter</varname> (string) A string of failure response codes from 300 to 999 @@ -538,11 +544,13 @@ modparam("acc", "failed_transaction_flag", 4) failed_filter example +... modparam("acc", "failed_filter", "404,407") +...
-
+
<varname>report_ack</varname> (integer) Shall acc attempt to account e2e ACKs too ? Note that this is really @@ -556,11 +564,13 @@ modparam("acc", "failed_filter", "404,407") report_ack example +... modparam("acc", "report_ack", 1) +...
-
+
<varname>report_cancels</varname> (integer) By default, CANCEL reporting is disabled -- most accounting @@ -573,11 +583,13 @@ modparam("acc", "report_ack", 1) report_cancels example +... modparam("acc", "report_cancels", 1) +...
-
+
<varname>detect_direction</varname> (integer) Controlles the direction detection for sequential requests. If @@ -595,11 +607,13 @@ modparam("acc", "report_cancels", 1) detect_direction example +... modparam("acc", "detect_direction", 1) +...
-
+
<varname>acc_prepare_flag</varname> (integer) Per transaction flag which says if the transaction may be accounted @@ -607,7 +621,7 @@ modparam("acc", "detect_direction", 1) failure_route). If this flag is not set and acc or missed_call flag are not set either in request route block, there is no way to mark the request for transaction later. If either acc or missed_call flags are - set in request route block, it is no need to set this flag. + set in request route block, there is no need to set this flag. Default value is not-set (no flag). @@ -615,11 +629,13 @@ modparam("acc", "detect_direction", 1) acc_prepare_flag example +... modparam("acc", "acc_prepare_flag", 5) +...
-
+
<varname>multi_leg_info</varname> (string) Defines the AVP set to be used in per-call-leg accounting. @@ -635,6 +651,7 @@ modparam("acc", "acc_prepare_flag", 5) multi_leg_info example +... # for syslog-based accounting, use any text you want to be printed modparam("acc", "multi_leg_info", "text1=$avp(src);text2=$avp(dst)") @@ -647,11 +664,12 @@ modparam("acc", "multi_leg_info", # for DIAMETER-based accounting, use the DIAMETER AVP ID (as integer) modparam("acc", "multi_leg_info", "2345=$avp(src);2346=$avp(dst)") +...
-
+
<varname>log_flag</varname> (integer) Request flag which needs to be set to account a transaction via syslog. @@ -662,11 +680,13 @@ modparam("acc", "multi_leg_info", log_flag example +... modparam("acc", "log_flag", 2) +...
-
+
<varname>log_missed_flag</varname> (integer) Request flag which needs to be set to account missed calls via syslog. @@ -677,11 +697,13 @@ modparam("acc", "log_flag", 2) log_missed_flag example +... modparam("acc", "log_missed_flag", 3) +...
-
+
<varname>log_level</varname> (integer) Log level at which accounting messages are issued to syslog. @@ -692,11 +714,13 @@ modparam("acc", "log_missed_flag", 3) log_level example +... modparam("acc", "log_level", 2) # Set log_level to 2 +...
-
+
<varname>log_facility</varname> (string) Log facility to which accounting messages are issued to syslog. @@ -709,11 +733,13 @@ modparam("acc", "log_level", 2) # Set log_level to 2 log_facility example +... modparam("acc", "log_facility", "LOG_DAEMON") +...
-
+
<varname>log_extra</varname> (string) Extra values to be logged. @@ -725,12 +751,14 @@ modparam("acc", "log_facility", "LOG_DAEMON") log_extra example +... modparam("acc", "log_extra", "ua=$hdr(User-Agent);uuid=$avp(i:123)") +...
-
+
<varname>radius_config</varname> (string) This parameter is radius specific. Path to @@ -750,11 +778,13 @@ modparam("acc", "log_extra", "ua=$hdr(User-Agent);uuid=$avp(i:123)") radius_config example +... modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf") +...
-
+
<varname>radius_flag</varname> (integer) Request flag which needs to be set to account a @@ -766,11 +796,13 @@ modparam("acc", "radius_config", "/etc/radiusclient/radiusclient.conf") radius_flag example +... modparam("acc", "radius_flag", 2) +...
-
+
<varname>radius_missed_flag</varname> (integer) Request flag which needs to be set to account missed @@ -782,11 +814,13 @@ modparam("acc", "radius_flag", 2) radius_missed_flag example +... modparam("acc", "radius_missed_flag", 3) +...
-
+
<varname>service_type</varname> (integer) Radius service type used for accounting. @@ -797,11 +831,13 @@ modparam("acc", "radius_missed_flag", 3) service_type example +... modparam("acc", "service_type", 16) +...
-
+
<varname>radius_extra</varname> (string) Extra values to be logged via RADIUS - RADIUS specific. @@ -813,12 +849,14 @@ modparam("acc", "service_type", 16) radius_extra example +... modparam("acc", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)") +...
-
+
<varname>db_flag</varname> (integer) Request flag which needs to be set to account a @@ -830,11 +868,13 @@ modparam("acc", "radius_extra", "via=$hdr(Via[*]); email=$avp(s:email)") db_flag example +... modparam("acc", "db_flag", 2) +...
-
+
<varname>db_missed_flag</varname> (integer) Request flag which needs to be set to account missed @@ -846,11 +886,13 @@ modparam("acc", "db_flag", 2) db_missed_flag example +... modparam("acc", "db_missed_flag", 3) +...
-
+
<varname>db_table_acc</varname> (string) Table name of accounting successfull calls -- database specific. It @@ -862,12 +904,14 @@ modparam("acc", "db_missed_flag", 3) db_table_acc example +... modparam("acc", "db_table_acc", "myacc_table") modparam("acc", "db_table_acc", "acc_$time(year)_$time(mon)") +...
-
+
<varname>db_table_missed_calls</varname> (string) Table name for accounting missed calls -- database specific. It @@ -879,11 +923,13 @@ modparam("acc", "db_table_acc", "acc_$time(year)_$time(mon)") db_table_missed_calls example +... modparam("acc", "db_table_missed_calls", "myMC_table") +...
-
+
<varname>db_url</varname> (string) SQL address -- database specific. If is set to NULL or emty string, @@ -895,11 +941,13 @@ modparam("acc", "db_table_missed_calls", "myMC_table") db_url example -modparam("acc", "db_url", "mysql://user:password@localhost/openser") +... +modparam("acc", "db_url", "mysql://user:password@localhost/kamailio") +...
-
+
<varname>acc_method_column</varname> (string) Column name in accounting table to store the request's method name as @@ -911,11 +959,13 @@ modparam("acc", "db_url", "mysql://user:password@localhost/openser") acc_method_column example +... modparam("acc", "acc_method_column", "method") +...
-
+
<varname>acc_from_tag_column</varname> (string) Column name in accounting table to store the From header TAG parameter. @@ -926,11 +976,13 @@ modparam("acc", "acc_method_column", "method") acc_from_tag_column example +... modparam("acc", "acc_from_tag_column", "from_tag") +...
-
+
<varname>acc_to_tag_column</varname> (string) Column name in accounting table to store the To header TAG parameter. @@ -941,11 +993,13 @@ modparam("acc", "acc_from_tag_column", "from_tag") acc_to_tag_column example +... modparam("acc", "acc_to_tag_column", "to_tag") +...
-
+
<varname>acc_callid_column</varname> (string) Column name in accounting table to store the request's Callid value. @@ -956,11 +1010,13 @@ modparam("acc", "acc_to_tag_column", "to_tag") acc_callid_column example +... modparam("acc", "acc_callid_column", "callid") +...
-
+
<varname>acc_sip_code_column</varname> (string) Column name in accounting table to store the final reply's numric code @@ -972,11 +1028,13 @@ modparam("acc", "acc_callid_column", "callid") acc_sip_code_column example +... modparam("acc", "acc_sip_code_column", "sip_code") +...
-
+
<varname>acc_sip_reason_column</varname> (string) Column name in accounting table to store the final reply's reason @@ -988,11 +1046,13 @@ modparam("acc", "acc_sip_code_column", "sip_code") acc_sip_reason_column example +... modparam("acc", "acc_sip_reason_column", "sip_reason") +...
-
+
<varname>acc_time_column</varname> (string) Column name in accounting table to store the time stamp of the @@ -1004,11 +1064,13 @@ modparam("acc", "acc_sip_reason_column", "sip_reason") acc_time_column example +... modparam("acc", "acc_time_column", "time") +...
-
+
<varname>db_extra</varname> (string) Extra values to be logged into database - DB specific. @@ -1020,11 +1082,13 @@ modparam("acc", "acc_time_column", "time") db_extra example +... modparam("acc", "db_extra", "ct=$hdr(Content-type); email=$avp(s:email)") +...
-
+
<varname>db_insert_mode</varname> (integer) If set to 1, use INSERT DELAYED to add records to accounting tables @@ -1037,12 +1101,14 @@ modparam("acc", "db_extra", "ct=$hdr(Content-type); email=$avp(s:email)") db_insert_mode example +... modparam("acc", "db_insert_mode", 1) +...
-
+
<varname>diameter_flag</varname> (integer) Request flag which needs to be set to account a @@ -1054,11 +1120,13 @@ modparam("acc", "db_insert_mode", 1) diameter_flag example +... modparam("acc", "diameter_flag", 2) +...
-
+
<varname>diameter_missed_flag</varname> (integer) Request flag which needs to be set to account missed @@ -1070,11 +1138,13 @@ modparam("acc", "diameter_flag", 2) diameter_missed_flag example +... modparam("acc", "diameter_missed_flag", 3) +...
-
+
<varname>diameter_client_host</varname> (string) Hostname of the machine where the DIAMETER Client is @@ -1086,11 +1156,13 @@ modparam("acc", "diameter_missed_flag", 3) diameter_client_host example +... modparam("acc", "diameter_client_host", "3a_server.net") +...
-
+
<varname>diameter_client_port</varname> (int) Port number where the Diameter Client is @@ -1102,11 +1174,13 @@ modparam("acc", "diameter_client_host", "3a_server.net") diameter_client_host example +... modparam("acc", "diameter_client_port", 3000) +...
-
+
<varname>diameter_extra</varname> (string) Extra values to be logged via DIAMETER - DIAMETER specific. @@ -1118,31 +1192,35 @@ modparam("acc", "diameter_client_port", 3000) diameter_extra example +... modparam("acc", "diameter_extra", "7846=$hdr(Content-type);7847=$avp(s:email)") +...
-
+
<varname>cdr_enable</varname> (integer) Should CDR-based logging be enabled? - 0 - off (default) - 1 - on + 0 - off (default). + 1 - on. cdr_enable example +... modparam("acc", "cdr_enable", 1) +...
-
+
<varname>cdr_start_on_confirmed</varname> (integer) Should the start time be taken from the time when the dialog is created, - or when the dialog is confirmed? + or when the dialog is confirmed? 0 - use time of dialog creation (default). @@ -1151,11 +1229,13 @@ modparam("acc", "cdr_enable", 1) cdr_start_on_confirmed example +... modparam("acc", "cdr_start_on_confirmed", 1) +...
-
+
<varname>cdr_facility</varname> (integer) Log facility to which CDR messages are issued to syslog. @@ -1168,11 +1248,13 @@ modparam("acc", "cdr_start_on_confirmed", 1) cdr_facility example +... modparam("acc", "cdr_facility", "LOG_DAEMON") +...
-
+
<varname>cdr_extra</varname> (string) Set of pseudo-variables defining custom CDR fields. See @@ -1184,52 +1266,210 @@ modparam("acc", "cdr_facility", "LOG_DAEMON") cdr_extra example +... modparam("acc", "cdr_extra", "c1=$dlg_var(caller);c2=$dlg_var(callee)" +...
-
+
<varname>cdr_start_id</varname> (string) - Modifying the start id which is used to store the start time. + Modifying the id which is used to store the start time. - Default value is 'st' + Default value is 'start_time' cdr_start_id example +... modparam("acc", "cdr_start_id", "start") +...
-
+
<varname>cdr_end_id</varname> (string) - Modifying the end id which is used to store the end time. + Modifying the id which is used to store the end time. - Default value is 'et' + Default value is 'end_time' cdr_end_id example +... modparam("acc", "cdr_end_id", "end") +...
-
+
<varname>cdr_duration_id</varname> (string) - Modifying the duration id which is used to store the duration. + Modify the id which is used to store the duration. - Default value is 'd' + Default value is 'duration' cdr_duration_id example -modparam("acc", "cdr_duration_id", "start") +... +modparam("acc", "cdr_duration_id", "d") +... + + +
+
+ <varname>cdr_log_enable</varname> (int) + + Control if CDR-based accounting should be written to syslog. + + + 0 - off. + 1 - on (default). + + + cdr_log_enable example + +... +modparam("acc", "cdr_log_enable", 0) +... + + +
+
+ <varname>cdrs_table</varname> (str) + + Name of db table to store dialog-based CDRs. + + + Default value is "" (no db storage for dialog-based CDRs). + + + cdrs_table example + +... +modparam("acc", "cdrs_table", "acc_cdrs") +... + + +
+
+ <varname>time_mode</varname> (int) + + Store additional value related to the time of event. + + + Values can be: + + + + 0 - (default), save only unix + timestamp for syslog and datetime for database. + + + 1 - save seconds in time_attr and + microseconds in time_exten. + + + 2 - save seconds.miliseconds + in time_attr. + + + 3 - save formatted time according + to time_format parameter, using the output of localtime(). + + + + 4 - save formatted time according + to time_format parameter, using the output of gmtime(). + + + + + + time_mode example + +... +modparam("acc", "time_mode", 1) +... + + +
+
+ <varname>time_attr</varname> (str) + + Name of the syslog attribute or database column where to store additional + value related to the time of event. + + + For db accounting, the column has to be of different types, depending on + time_mode value. When time_mode is: + + + + 1 - time_attr column has to be int. + + + 2 - time_attr column has to be double. + + + 3 - time_attr column has to be varchar(128). + + + 4 - time_attr column has to be varchar(128). + + + + For time_mode=1, this attribute is not written in syslog, because time + value is already unix timestamp, but in db accounting time value is + datetime and requires a function to get the timestamp. + + + time_attr example + +... +modparam("acc", "time_attr", "seconds") +... + + +
+
+ <varname>time_exten</varname> (str) + + Name of the syslog attribute or database column where to store extended + value related to the time of event. + + + It is used now only for time_mode=1 and database column has to be int: + + + time_exten example + +... +modparam("acc", "time_exten", "micorsecs") +... + + +
+
+ <varname>time_format</varname> (str) + + Specify the format to print the time for time_mode 3 or 4. + + + Default value is %Y-%m-%d %H:%M:%S". + + + time_format example + +... +modparam("acc", "time_format", "%Y/%m/%d %H:%M:%S") +...
diff --git a/modules/acc_radius/acc_radius_mod.c b/modules/acc_radius/acc_radius_mod.c index 07f39ff71..11f311539 100644 --- a/modules/acc_radius/acc_radius_mod.c +++ b/modules/acc_radius/acc_radius_mod.c @@ -125,8 +125,10 @@ struct module_exports exports= { static int mod_init( void ) { - if (radius_config==NULL || radius_config[0]=='\0') - return 0; + if (radius_config==NULL || radius_config[0]=='\0') { + LM_ERR("radius config file not set\n"); + return -1; + } /* bind the ACC API */ if (acc_load_api(&accb)<0) { diff --git a/modules/alias_db/README b/modules/alias_db/README index 8a802cdf0..43fb90420 100644 --- a/modules/alias_db/README +++ b/modules/alias_db/README @@ -126,7 +126,7 @@ Chapter 1. Admin Guide Database URL. - Default value is "mysql://kamailioro:kamailioro@localhost/kamailio". + Default value is "mysql://openserro:openserro@localhost/openser". Example 1.1. Set db_url parameter ... diff --git a/modules/alias_db/alookup.c b/modules/alias_db/alookup.c index 9aff3d832..443754948 100644 --- a/modules/alias_db/alookup.c +++ b/modules/alias_db/alookup.c @@ -202,7 +202,7 @@ int alias_db_lookup(struct sip_msg* _msg, str table_s) } else { user_s.s = useruri_buf; if (append_branch(_msg, &user_s, 0, 0, MIN_Q, 0, 0, - 0, 0) == -1) + 0, 0, 0, 0) == -1) { LM_ERR("error while appending branches\n"); goto err_server; diff --git a/modules/app_java/BUILDING_JAR.TXT b/modules/app_java/BUILDING_JAR.TXT new file mode 100644 index 000000000..61eb724e5 --- /dev/null +++ b/modules/app_java/BUILDING_JAR.TXT @@ -0,0 +1,54 @@ + +Prerequistites: +1) Java JDK (either openjdk or oracle's) +2) GNU Java Compiler (gcj) +3) Apache ANT (http://ant.apache.org/) + +Build process: + +1) Open Kamailio.java with any text editor and change (if differs) a FULL PATH to app_java.so : + Example: + static + { + System.load("/opt/kamailio/lib/kamailio/modules/app_java.so"); + } + +2) Type: ant + Example: ant +Buildfile: /opt/dev/kamailio/modules/app_java/build.xml + +clean: + [delete] Deleting directory /opt/dev/kamailio/modules/app_java/build + [delete] Deleting: /opt/dev/kamailio/modules/app_java/Kamailio.class + +make.dirs: + [mkdir] Created dir: /opt/dev/kamailio/modules/app_java/build + +siprouter_compile: + [javac] Compiling 4 source files to /opt/dev/kamailio/modules/app_java/build + +kamailio.jar: + [jar] Building jar: /opt/dev/kamailio/modules/app_java/kamailio.jar + +main_compile: + [javac] Compiling 1 source file to /opt/dev/kamailio/modules/app_java + +all: + [echo] Building Kamailio examples + +BUILD SUCCESSFUL +Total time: 4 seconds + +3) If no errors, copy file kamailio.jar into 'java' directory (see file app_java.mod) +4) Copy file Kamailio.class to 'java' folder. +5) Enjoy! :) + + + + + + + + + + diff --git a/modules/app_java/Makefile b/modules/app_java/Makefile new file mode 100644 index 000000000..6a9525184 --- /dev/null +++ b/modules/app_java/Makefile @@ -0,0 +1,35 @@ +# $Id$ +# +# +# WARNING: do not run this directly, it should be run by the master Makefile + +include ../../Makefile.defs +auto_gen= +NAME=app_java.so + +#DEFS += -DEXTRA_DEBUG + +DIST = $(shell if [ -f "/etc/redhat-release" ]; then cat /etc/redhat-release | sed "s/.*\([0-9]\)\.[0-9].*/\1/g"; fi) +ifeq ($(DIST),6) +JVM_PATH = $(shell dirname `find /usr/lib/jvm/java/ -name "libjvm.so"`) +DEFS += $(shell pkg-config libgcj-4.4 --cflags) +LIBS += $(shell pkg-config libgcj-4.4 --cflags) -L$(JVM_PATH) -ljvm +else +# for now is hard coded, will resolve this later +JAVA_HOME ?= /usr/lib/jvm/java-gcj-4.7 +DEFS += $(shell pkg-config libgcj-4.7 --cflags) -I$(JAVA_HOME)/include +LIBS += $(shell pkg-config libgcj-4.7 --libs) -L$(JAVA_HOME)/lib -ljvm + +ifeq ($(OS), freebsd) +LIBS+=-pthread +endif +endif + +# disable optimisation for segfaults debugging +INCLUDE += -O0 -g +INCLUDES += -O0 -g + +DEFS+=-DKAMAILIO_MOD_INTERFACE + +include ../../Makefile.modules + diff --git a/modules/app_java/QUICKSTART.TXT b/modules/app_java/QUICKSTART.TXT new file mode 100644 index 000000000..3864af06e --- /dev/null +++ b/modules/app_java/QUICKSTART.TXT @@ -0,0 +1,25 @@ + +Quick start: +---------------------- +1) Supposed that kamailio home folder is '/opt/kamailio' (I'll use a term '') +2) mkdir /java (I'll use a term ) +3) copy kamailio.jar to +4) copy Kamailio.class to +5) add to kamailio configuration file: + +loadmodule "app_java.so" +modparam("app_java", "class_name", "Kamailio") +modparam("app_java", "child_init_method", "child_init") +modparam("app_java", "java_options", "-Djava.compiler=NONE -Djava.class.path=/lib/kamailio/modules::/kamailio.jar -verbose:gc,jni") + +# This parameter forces execution a kamailio comnmand with java native method KamExec. +# Note: this is an untested feature, may cause (but may not) a memory leaks if used from embedded languages. +modparam("app_java", "force_cmd_exec", 1); + + + +Rebulding java stuff: +---------------------- + +For re-building kamailio.jar see: BUILD_JAR.TXT + diff --git a/modules/app_java/README b/modules/app_java/README new file mode 100644 index 000000000..5bbad0b88 --- /dev/null +++ b/modules/app_java/README @@ -0,0 +1,573 @@ +app_java Module + +Konstantin Mosesov + +Edited by + +Konstantin Mosesov + + Copyright © 2013 Konstantin Mosesov + __________________________________________________________________ + + Table of Contents + + 1. Admin Guide + + 1. Overview + 2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + + 3. Java runtime + + 3.1. + + 4. Parameters + + 4.1. class_name (string) + 4.2. child_init_method (string) + 4.3. java_options (string) + 4.4. force_cmd_exec (int) + + 5. Functions + + 5.1. Common requirements + 5.2. java_method_exec(method, method_signature, [param1[, + param2[, ...]]]) + + 5.3. java_staticmethod_exec(method, method_signature, + [param1[, param2[, ...]]]) + + 5.4. java_s_method_exec(method, method_signature, [param1[, + param2[, ...]]]) + + 5.5. java_s_staticmethod_exec(method, method_signature, + [param1[, param2[, ...]]]) + + 6. Java Module API + + 6.1. Minimal program skeleton + + List of Examples + + 1.1. Set class_name parameter + 1.2. Set child_init_method parameter + 1.3. Set java_options parameter + 1.4. Set java_options parameter (live configuration) + 1.5. Set java_options parameter (verbose configuration) + 1.6. Set java_options parameter (debug configuration) + 1.7. Set force_cmd_exec parameter + 1.8. Signature: "V" + 1.9. Signature: "Ljava/lang/String;I" + 1.10. Signature: "ZB" + 1.11. Signature: "V" + 1.12. Signature: "Ljava/lang/String;I" + 1.13. Signature: "ZB" + 1.14. Signature: "V" + 1.15. Signature: "Ljava/lang/String;I" + 1.16. Signature: "ZB" + 1.17. Signature: "V" + 1.18. Signature: "Ljava/lang/String;I" + 1.19. Signature: "ZB" + 1.20. Minimal program skeleton + +Chapter 1. Admin Guide + + Table of Contents + + 1. Overview + 2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + + 3. Java runtime + + 3.1. + + 4. Parameters + + 4.1. class_name (string) + 4.2. child_init_method (string) + 4.3. java_options (string) + 4.4. force_cmd_exec (int) + + 5. Functions + + 5.1. Common requirements + 5.2. java_method_exec(method, method_signature, [param1[, param2[, + ...]]]) + + 5.3. java_staticmethod_exec(method, method_signature, [param1[, + param2[, ...]]]) + + 5.4. java_s_method_exec(method, method_signature, [param1[, + param2[, ...]]]) + + 5.5. java_s_staticmethod_exec(method, method_signature, [param1[, + param2[, ...]]]) + + 6. Java Module API + + 6.1. Minimal program skeleton + +1. Overview + + This module allows executing Java compiled classes from config file, + exporting functions to access the SIP message from Java using Java + Native Interface (JNI). + +2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + +2.1. Kamailio Modules + + The following modules must be loaded before this module: + * none. + +2.2. External Libraries or Applications + + The following packages are runtime libraries, required to launch + * java-common Base of all Java packages. + * default-jre Standard Java or Java compatible Runtime. + * gcj-jre Java runtime environment using GIJ/classpath. + * libgcj12 (>=12) Java runtime library for use with gcj. + + The following packages are optional, required for development + * ant Java based build tool like make. + * ant-contrib Collection of tasks, types and other tools for Apache + Ant. + * ant-gcj Java based build tool like make (GCJ). + * default-jdk Standard Java or Java compatible Development Kit + * gcj-jdk gcj and classpath development tools for Java(TM) + * libgcj13-dev (>=12) Java development headers for use with gcj + * jdk JDK Development Kit (either oracle jdk or openjdk) + + The following libraries or applications must be compiled before running + Kamailio with this module loaded: + + The following packages are runtime libraries, required to launch + * .class + * kamailio.jar + +3. Java runtime + + 3.1. + +3.1. + + Java runtime library (JRE or JDK) is required to use this module. + +4. Parameters + + 4.1. class_name (string) + 4.2. child_init_method (string) + 4.3. java_options (string) + 4.4. force_cmd_exec (int) + +4.1. class_name (string) + + The class name should have the same compiled file name. If the value is + "Kamailio", then the compiled file should be named as "Kamailio.class". + + Default value is “Kamailioâ€. + + Example 1.1. Set class_name parameter +... +modparam("app_java", "class_name", "Kamailio") +... + +4.2. child_init_method (string) + + TBD. + + Default value is “child_initâ€. + + Example 1.2. Set child_init_method parameter +... +modparam("app_java", "child_init_method", "my_mod_init") +... + +4.3. java_options (string) + + Java options for Java Virtual Machine. For more info read java docs + + Default value is “-Djava.compiler=NONEâ€. + + Example 1.3. Set java_options parameter +... +modparam("app_java", "java_options", "-Djava.compiler=NONE") +... + + Example 1.4. Set java_options parameter (live configuration) +... +# Assumes "application java folder" is located at /opt/kamailio/java +modparam("app_java", "java_options", "-Djava.compiler=NONE -Djava.class.path=/pa +th/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar") +... + + Example 1.5. Set java_options parameter (verbose configuration) +... +# Assumes "application java folder" is located at /opt/kamailio/java +modparam("app_java", "java_options", "-verbose:gc,class,jni -Djava.compiler=NONE + -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/ja +va/kamailio.jar") +... + + Example 1.6. Set java_options parameter (debug configuration) +... +# Assumes "application java folder" is located at /opt/kamailio/java +modparam("app_java", "java_options", "-Xdebug -verbose:gc,class,jni -Djava.compi +ler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kam +ailio/java/kamailio.jar") +... + +4.4. force_cmd_exec (int) + + This parameter forces execution a kamailio comnmand with java native + method “KamExecâ€. # Note: this is an untested yet feature, may cause + (but may not) a memory leaks if used from embedded languages. + + Default value is “0 (off)â€. + + Example 1.7. Set force_cmd_exec parameter +... +modparam("app_java", "force_cmd_exec", 1) +... + +5. Functions + + 5.1. Common requirements + 5.2. java_method_exec(method, method_signature, [param1[, param2[, + ...]]]) + + 5.3. java_staticmethod_exec(method, method_signature, [param1[, + param2[, ...]]]) + + 5.4. java_s_method_exec(method, method_signature, [param1[, param2[, + ...]]]) + + 5.5. java_s_staticmethod_exec(method, method_signature, [param1[, + param2[, ...]]]) + +5.1. Common requirements + + Each function has a required parameter “method_signatureâ€. For more + info see Determine the signature of a method. Signature represents the + variable type. The mapping between the Java type and C type is + Type Chararacter + boolean Z + byte B + char C + double D + float F + int I + long J + object L + short S + void V + Note that to specify an object, the "L" is followed by the objec +t's class name and ends with a semi-colon, ';' . + + app_java supports the following signatures: + Primitives: Z,B,C,D,F,I,J,L,S,V + Objects: + Ljava/lang/Boolean; + Ljava/lang/Byte; + Ljava/lang/Character; + Ljava/lang/Double; + Ljava/lang/Float; + Ljava/lang/Integer; + Ljava/lang/Long; + Ljava/lang/Short; + Ljava/lang/String; + NULL parameter: V + + Each parameter passed to function will be cast according to given signat +ure. + + Parameters are optional, ommitting a parameter meant the passed value is + NULL. + Parameters count should be exactly the same as signature count. + Note 1: Arrays representation (symbol '[') is not supported yet. + Note 2: You shall use a correct signature, e.g. the following examples o +f combinations are invalid: + java_method_exec("ExampleMethod", "ZI", "False"); + java_method_exec("ExampleMethod", "LI", "something", "5"); + +5.2. java_method_exec(method, method_signature, [param1[, param2[, ...]]]) + + Executes a java class method method. Parameter method_signature is + required. + * Example 1.8. Signature: "V" + Kamailio prototype +java_method_exec("ExampleMethod", "V"); + Java prototype +public int ExampleMethod(); + Example of usage: +# Kamailio +java_method_exec("ExampleMethod", "V"); + +# Java +public int ExampleMethod() +{ + ... do something; + return 1; +} + * Example 1.9. Signature: "Ljava/lang/String;I" + Kamailio prototype +java_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); + Java prototype +public int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer + representation. + Example of usage: +# Kamailio +java_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public int ExampleMethod(String SipMessageBuffer, int SipMessageLenght) +{ + ... do something with buffer; + return 1; +} + * Example 1.10. Signature: "ZB" + Kamailio prototype +java_method_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype +public int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean + representation. + Example of usage: +# Kamailio +java_method_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + +5.3. java_staticmethod_exec(method, method_signature, [param1[, param2[, +...]]]) + + Executes a java static method method. Parameter method_signature is + required. + * Example 1.11. Signature: "V" + Kamailio prototype +java_staticmethod_exec("ExampleMethod", "V"); + Java prototype +public static int ExampleMethod(); + Example of usage: +# Kamailio +java_staticmethod_exec("ExampleMethod", "V"); + +# Java +public static int ExampleMethod() +{ + ... do something; + return 1; +} + * Example 1.12. Signature: "Ljava/lang/String;I" + Kamailio prototype +java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5 +"); + Java prototype +public static int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer + representation. + Example of usage: +# Kamailio +java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public static int ExampleMethod(String SipMessageBuffer, int SipMessageLenght) +{ + ... do something with buffer; + return 1; +} + * Example 1.13. Signature: "ZB" + Kamailio prototype +java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype +public static int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean + representation. + Example of usage: +# Kamailio +java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public static int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + +5.4. java_s_method_exec(method, method_signature, [param1[, param2[, ...]]]) + + Executes a java class synchronized method method. Parameter + method_signature is required. + + For more info see Synchronized Methods + * Example 1.14. Signature: "V" + Kamailio prototype +java_s_method_exec("ExampleMethod", "V"); + Java prototype +public synchronized int ExampleMethod(); + Example of usage: +# Kamailio +java_s_method_exec("ExampleMethod", "V"); + +# Java +public synchronized int ExampleMethod() +{ + ... do something; + return 1; +} + * Example 1.15. Signature: "Ljava/lang/String;I" + Kamailio prototype +java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); + Java prototype +public synchronized int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer + representation. + Example of usage: +# Kamailio +java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLen +ght) +{ + ... do something with buffer; + return 1; +} + * Example 1.16. Signature: "ZB" + Kamailio prototype +java_s_method_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype +public synchronized int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean + representation. + Example of usage: +# Kamailio +java_s_method_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public synchronized int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + +5.5. java_s_staticmethod_exec(method, method_signature, [param1[, param2[, +...]]]) + + Executes a java synchronized static method method. Parameter + method_signature is required. + + For more info see Synchronized Methods + * Example 1.17. Signature: "V" + Kamailio prototype +java_s_staticmethod_exec("ExampleMethod", "V"); + Java prototype +public static synchronized int ExampleMethod(); + Example of usage: +# Kamailio +java_s_staticmethod_exec("ExampleMethod", "V"); + +# Java +public static synchronized int ExampleMethod() +{ + ... do something; + return 1; +} + * Example 1.18. Signature: "Ljava/lang/String;I" + Kamailio prototype +java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", +"5"); + Java prototype +public static synchronized int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer + representation. + Example of usage: +# Kamailio +java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public static synchronized int ExampleMethod(String SipMessageBuffer, int SipMes +sageLenght) +{ + ... do something with buffer; + return 1; +} + * Example 1.19. Signature: "ZB" + Kamailio prototype +java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype +public static synchronized int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean + representation. + Example of usage: +# Kamailio +java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public static synchronized int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + +6. Java Module API + + 6.1. Minimal program skeleton + +6.1. Minimal program skeleton + + Example 1.20. Minimal program skeleton + +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +public class Kamailio extends NativeMethods +{ + /* Here you should specify a full path to app_java.so */ + static + { + System.load("/opt/kamailio/lib/kamailio/modules/ +app_java.so"); + } + + /* Constructor. Do not remove !!! */ + public Kamailio() + { + } + + /* + This method should be executed for each children process, immedi +ately after forking. + Required. Do not remove !!! + */ + public int child_init(int rank) + { + return 1; + } +} diff --git a/modules/app_java/README-draft b/modules/app_java/README-draft new file mode 100644 index 000000000..02c442bb2 --- /dev/null +++ b/modules/app_java/README-draft @@ -0,0 +1,837 @@ +app_java Module + +Konstantin Mosesov + +Edited by + +Konstantin Mosesov + + + + Copyright © 2013 Konstantin Mosesov + __________________________________________________________________ + + Table of Contents + + 1. Admin Guide + + 1. Overview + 2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + + 3. Parameters + + 3.1. class_name (string) + 3.2. child_init_method (string) + 3.3. java_options (string) + 3.4. force_cmd_exec (int) + + 4. Functions + + 4.0. Common requirements. + 4.1. java_method_exec(method, method_signature, [param1[, param2]]) + 4.2. java_s_method_exec(method, method_signature, [param1[, param2]]) + 4.3. java_staticmethod_exec(method, method_signature, [param1[, param2]]) + 4.4. java_s_staticmethod_exec(method, method_signature, [param1[, param2]]) + + 5. Java module API + + 5.0. Minimal program skeleton and structure of package org.siprouter + 5.0.1. Minimal program skeleton + 5.0.2. Structure of package org.siprouter + 5.1. abstract class NativeMethods + 5.1.1. General logging + 5.1.1.0. Logging levels and facilities + 5.1.1.1. native void LM_GEN1(int logLevel, String s); + 5.1.1.2. native void LM_GEN2(int logFacility, int logLevel, String s); + 5.1.1.3. native void LM_ALERT(String s); + 5.1.1.4. native void LM_CRIT(String s); + 5.1.1.5. native void LM_WARN(String s); + 5.1.1.6. native void LM_NOTICE(String s); + 5.1.1.7. native void LM_ERR(String s); + 5.1.1.8. native void LM_INFO(String s); + 5.1.1.9. native void LM_DBG(String s); + 5.1.2. Execution of kamailio commands + 5.1.2.1. static native int KamExec(String fname, String... params); + 5.1.2.2. static native int SetURI(String ruri); + 5.1.2.3. static native int RewriteURI(String ruri); + + 5.2. class IPPair. + 5.2.1. final String ip; + 5.2.2. final int port; + 5.3. abstract class SipMsg + 5.3.0. Internal structure understanding. + 5.3.1. int id; + 5.3.2. int pid; + 5.3.3. String eoh; + 5.3.4. String unparsed; + 5.3.5. String buf; + 5.3.6. int len; + 5.3.7. String new_uri; + 5.3.8. String dst_uri; + 5.3.9. int parsed_uri_ok; + 5.3.10. int parsed_orig_ruri_ok; + 5.3.11. String add_to_branch_s; + 5.3.12. int add_to_branch_len; + 5.3.13. int hash_index; + 5.3.14. int msg_flags; + 5.3.15. static native SipMsg ParseSipMsg(); + 5.3.16. static native String getMsgType(); + 5.3.17. static native String getRURI(); + 5.3.18. static native IPPair getSrcAddress(); + 5.3.19. static native IPPair getDstAddress(); + 5.3.20. static native String getBuffer(); + 5.4. interface NativeInterface + 5.4.1. abstract class Ranks + 5.4.1.1. static final int PROC_MAIN + 5.4.1.2. static final int PROC_TIMER + 5.4.1.3. static final int PROC_RPC + 5.4.1.4. static final int PROC_FIFO + 5.4.1.5. static final int PROC_TCP_MAIN + 5.4.1.6. static final int PROC_UNIXSOCK + 5.4.1.7. static final int PROC_ATTENDANT + 5.4.1.8. static final int PROC_INIT + 5.4.1.9. static final int PROC_NOCHLDINIT + 5.4.1.10. static final int PROC_SIPINIT + 5.4.1.11. static final int PROC_SIPRPC + 5.4.1.12. static final int PROC_MIN + 5.4.2. abstract class LogParams + 5.4.2.0. Loggigng params + 5.4.2.1. static final int L_ALERT + 5.4.2.2. static final int L_BUG + 5.4.2.3. static final int L_CRIT2 + 5.4.2.4. static final int L_CRIT + 5.4.2.5. static final int L_ERR + 5.4.2.6. static final int L_WARN + 5.4.2.7. static final int L_NOTICE + 5.4.2.8. static final int L_INFO + 5.4.2.9. static final int L_DBG + 5.4.2.10. static final int DEFAULT_FACILITY + 5.5. Examples of usage Java API + + List of Examples + + 1.1. Set class_name parameter + 1.2. Set child_init_method parameter + 1.3. Set java_options parameter + 1.4. Set java_options parameter (live configuration) + 1.5. Set java_options parameter (verbose configuration) + 1.6. Set java_options parameter (debug configuration) + + 2.0. Example of usage signatures. + 2.1. Example of usage java_method_exec() + 2.2. Example of usage java_s_method_exec() + 2.3. Example of usage java_staticmethod_exec() + 3.4. Example of usage java_s_staticmethod_exec() + +Chapter 1. Admin Guide + + Table of Contents + + 1. Overview + 2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + + 3. Parameters + + 3.1. class_name (string) + 3.2. child_init_method (string) + 3.3. java_options (string) + 3.4. force_cmd_exec (int) + + 4. Functions + + 4.0. Common requirements. + 4.1. java_method_exec(method, method_signature, [param1[, param2]]) - class method + 4.2. java_s_method_exec(method, method_signature, [param1[, param2]]) - class synchronized method + 4.3. java_staticmethod_exec(method, method_signature, [param1[, param2]]) - static method + 4.4. java_s_staticmethod_exec(method, method_signature, [param1[, param2]]) - static synchronized method + +1. Overview + + This module allows executing Java compiled classes from config file, exporting + functions to access the SIP message from Java using Java Native Interface (JNI). + +2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + 2.3. Java runtime + +2.1. Kamailio Modules + + The following modules must be loaded before this module: + * none. + +2.2. External Libraries or Applications + + Legend: + * - Runtime library, required to launch + R - Required + O - Optional + D - Development (for building-rebuilding java) + P - Dependance of package + + The following libraries or applications must be installed before + running Kamailio with this module loaded: + [*] java-common - Base of all Java packages + [*] default-jre - Standard Java or Java compatible Runtime + [*] gcj-jre - Java runtime environment using GIJ/classpath + [*] libgcj12 (>=12) - Java runtime library for use with gcj + [DR] ant - Java based build tool like make + [DO] ant-contrib - collection of tasks, types and other tools for Apache Ant + [DPO] ant-gcj - Java based build tool like make (GCJ) + [DPO] ant-optional - Java based build tool like make - optional libraries + [DPO] ant-optional-gcj - Java based build tool like make - optional libraries (GCJ) + [DR] default-jdk - Standard Java or Java compatible Development Kit + [DR] gcj-jdk - gcj and classpath development tools for Java(TM) + [DR] libgcj13-dev (>=12) - Java development headers for use with gcj + [DO] jdk - JDK Development Kit (either oracle jdk or openjdk) + + The following libraries or applications must be compiled before + running Kamailio with this module loaded: + [*] .class + [*] kamailio.jar + +2.3. Java runtime + + Java runtime library (JRE or JDK) is required to use this module. + +3. Parameters + + 3.1. class_name (string) + 3.2. child_init_method (string) + 3.3. java_options (string) + 3.4. force_cmd_exec (int) + +3.1. class_name (string) + + The class name should have the same compiled file name. + If the value is "Kamailio", then the compiled file should be named as "Kamailio.class". + + Default value is “Kamailioâ€. + + Example 1.1. Set class_name parameter +... +modparam("app_java", "class_name", "Kamailio") +... + +3.2. child_init_method (string) + + TBD. + + Default value is “child_initâ€. + + Example 1.2. Set child_init_method parameter +... +modparam("app_java", "child_init_method", "my_mod_init") +... + +3.3. java_options (string) + + Java options for Java Virtual Machine. + For more info see: http://docs.oracle.com/javase/6/docs/technotes/tools/windows/java.html + + Default value is “-Djava.compiler=NONEâ€. + + Example 1.3. Set java_options parameter +... +modparam("app_java", "java_options", "-Djava.compiler=NONE") +... + + Example 1.4. Set java_options parameter (live configuration) +... +modparam("app_java", "java_options", "-Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/path/to/_file_directory:/path/to/kamailio.jar") +... + + Example 1.5. Set java_options parameter (verbose configuration) +... +modparam("app_java", "java_options", "-verbose:gc,class,jni -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/path/to/class_name_file_directory:/path/to/kamailio.jar") +... + + Example 1.6. Set java_options parameter (debug configuration) +... +modparam("app_java", "java_options", "-Xdebug -verbose:gc,class,jni -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/path/to/class_name_file_directory:/path/to/kamailio.jar") +... + +3.4. force_cmd_exec (int) + + This parameter forces execution a kamailio comnmand with java native method KamExec_raw. + Note: may cause a memory leaks if used from embedded languages. + + Default value is 0 (off). + +4. Functions + + 4.0. Common requirements. + 4.1. java_method_exec(method, method_signature, [param1[, param2]]) + 4.2. java_s_method_exec(method, method_signature, [param1[, param2]]) + 4.3. java_staticmethod_exec(method, method_signature, [param1[, param2]]) + 4.4. java_s_staticmethod_exec(method, method_signature, [param1[, param2]]) + +4.0. Common requirements. + + Each function has a required parameter “method_signatureâ€. + For more info see: http://www.rgagnon.com/javadetails/java-0286.html + There are two parts to the signature. The first part is enclosed within the parentheses and represents the method's arguments. + The second portion follows the closing parenthesis and represents the return type. The mapping between the Java type and C type is + Type Chararacter + boolean Z + byte B + char C + double D + float F + int I + long J + object L + short S + void V + array [ + Note that to specify an object, the "L" is followed by the object's class name and ends with a semi-colon, ';' . + + app_java supports the following signatures + primitives: Z,B,C,D,F,I,J,L,S,V + objects: + Ljava/lang/Boolean; + Ljava/lang/Byte; + Ljava/lang/Character; + Ljava/lang/Double; + Ljava/lang/Float; + Ljava/lang/Integer; + Ljava/lang/Long; + Ljava/lang/Short; + Ljava/lang/String; + NULL parameter: V + + Each parameter passed to function will be cast according to given signature. + + Example 2.0. Example of usage signatures. + 0. Equivalent of java prototype: public int ExampleMethod(); +... +java_method_exec("ExampleMethod", "V"); +... + + 1. Equivalent of java prototype: public int ExampleMethod(String param1, int param2); +... +java_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); +... + In the above scenario parameter 2 ("5") will be cast to integer representation. + + 2. Equivalent of java prototype: public int ExampleMethod(boolean param1, byte param2); +... +java_method_exec("ExampleMethod", "ZB", "true", "0x05"); +... + In the above scenario parameter 1 ("true") will be cast to boolean representation. + + Parameters are optional, ommitting a parameter meant the passed value is NULL. + Parameters count should be exactly the same as signature count. + Note, you shall use a correct signature, e.g. the following examples of combinations are invalid: + *) java_method_exec("ExampleMethod", "ZI", "False"); + *) java_method_exec("ExampleMethod", "VI", "", "5"); + *) java_method_exec("ExampleMethod", "LI", "something", "5"); + + +4.1. java_method_exec(method, method_signature, [param1[, param2]]) + + Executes a java method “methodâ€. Parameter “method_signature†is required (see 4.0). + + Example 2.1. java_method_exec usage +... +# Equivalent of java prototype: public int ExampleMethod(); +java_method_exec("ExampleMethod", "V"); + +# Equivalent of java prototype: public int ExampleMethod(String SipMessageBuffer, int SipMessageLenght); +java_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); +... + + +4.2. java_s_method_exec(method, method_signature, [param1[, param2]]) + + Executes a java synchronized method “methodâ€. Parameter “method_signature†is required (see 4.0). + See a more info about to synchronization: http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html + + Example 2.2. java_s_method_exec usage +... +# Equivalent of java prototype: public synchronized int ExampleMethod(); +java_s_method_exec("ExampleMethod", "V"); + +# Equivalent of java prototype: public synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght); +java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); +... + + +4.3. java_staticmethod_exec(method, method_signature, [param1[, param2]]) + + Executes a java static method “methodâ€. Parameter “method_signature†is required (see 4.0). + + Example 2.3. java_staticmethod_exec usage +... +# Equivalent of java prototype: public static int ExampleMethod(); +java_staticmethod_exec("ExampleMethod", "V"); + +# Equivalent of java prototype: public static int ExampleMethod(String SipMessageBuffer, int SipMessageLenght); +java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); +... + + +4.4. java_s_staticmethod_exec(method, method_signature, [param1[, param2]]) + + Executes a java synchronized static method “methodâ€. Parameter “method_signature†is required (see 4.0). + See a more info about to synchronization: http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html + + Example 2.4. java_s_staticmethod_exec usage +... +# Equivalent of java prototype: public static synchronized int ExampleMethod(); +java_s_staticmethod_exec("ExampleMethod", "V"); + +# Equivalent of java prototype: public static synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght); +java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); +... + + +5. Java module API + + +5.0. Minimal program skeleton and structure of package org.siprouter + + 5.0.1. Minimal program skeleton + +... +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +public class Kamailio extends NativeMethods +{ + /* Here you should specify a full path to app_java.so */ + static + { + System.load("/opt/kamailio/lib/kamailio/modules/app_java.so"); + } + + /* Constructor. Do not remove !!! */ + public Kamailio() + { + } + + /* + This method should be executed for each children process, immediately after forking. + Required. Do not remove !!! + */ + public int child_init(int rank) + { + return 1; + } +} +... + + 5.0.2. Structure of package org.siprouter + + org.siprouter ---*---*--*-------> class NativeMethods + | | +--> class IPPair + | +--> class SipMsg + +--> interface NativeInterface + | + +--> class Ranks + +--> class LogParams + + +5.1. abstract class NativeMethods + + 5.1.1. General logging + + 5.1.1.0. Log levels and facilities + + Log levels: + L_ALERT = -5 + L_BUG = -4 + L_CRIT2 = -3 + L_CRIT = -2 + L_ERR = -1 + L_WARN = 0 + L_NOTICE = 1 + L_INFO = 2 + L_DBG = 3 + + Log facilities (see man syslog(3)): + DEFAULT_FACILITY = 0 (LOG_KERN (Linux)) + + 1. Example of usage log levels and facilities: + LM_GEN1(LogParams.L_BUG, "Hello World!\n"); + produces (example of output): + 0(3003) BUG: app_java [java_native_methods.c:255]: Hello World! + + 2. Example of usage log levels and facilities: + LM_GEN2(LogParams.DEFAULT_FACILITY, LogParams.L_WARN, "Hello World!\n"); + produces (example of output): + 2(3147) WARNING: app_java [java_native_methods.c:279]: Hello World! + + + 5.1.1.1. native void LM_GEN1(int logLevel, String s); + 5.1.1.2. native void LM_GEN2(int logFacility, int logLevel, String s); + 5.1.1.3. native void LM_ALERT(String s); + 5.1.1.4. native void LM_CRIT(String s); + 5.1.1.5. native void LM_WARN(String s); + 5.1.1.6. native void LM_NOTICE(String s); + 5.1.1.7. native void LM_ERR(String s); + 5.1.1.8. native void LM_INFO(String s); + 5.1.1.9. native void LM_DBG(String s); + + 5.1.2. Execution of kamailio commands + + 5.1.2.1. static native int KamExec(String fname, String... params); + + Executes a kamailio command. + + Parameter 'fname' - Required. Kamailio function name. + Parameter 'params' - An array of string parameters. Note, this method allows up to 6 params, + it will ignore all parameters if more than 6. + + Returns: + 1 - command was successfully executed. + -1 - execution of command was failed. + + 5.1.2.2. static native int SetURI(String ruri); + + Rewrites the request URI. + + Returns: + 1 - Ok + -1 - Failed + + Online reference: http://www.kamailio.org/wiki/cookbooks/3.3.x/core#rewriteuri + + 5.1.2.3. static native int RewriteURI(String ruri); + + Rewrites the request URI. + Alias method: SetURI + + Returns: + 1 - Ok + -1 - Failed + + Online reference: http://www.kamailio.org/wiki/cookbooks/3.3.x/core#rewriteuri + + + +5.2. class IPPair. + + Represents an IP-address pair (IP, Port) + + 5.2.1. final String ip; + + IP Address + + 5.2.2. final int port; + + Port + + +5.3. abstract class SipMsg + + 5.3.0. Internal structure understanding. + + The class SipMsg is partially incapsulating kamailio's struct sip_msg. + References: parser/msg_parser.h, parser/parse_fline.h + + 5.3.1. int id; + + Message id, unique/process + + 5.3.2. int pid; + + Process ID + + 5.3.3. String eoh; + + Pointer to the end of header (if found) or null + + 5.3.4. String unparsed; + + Here we stopped parsing + + 5.3.5. String buf; + + Scratch pad, holds a modified message, via, etc. point into it. + + 5.3.6. int len; + + Message len (orig) + + 5.3.7. String new_uri; + + Changed first line uri, when you change this + + 5.3.8. String dst_uri; + + Destination URI, must be forwarded to this URI if dst_url lenght != 0 + + 5.3.9. int parsed_uri_ok; + + 1 if parsed_orig_uri is valid, 0 if not, set if to 0 if you modify the uri (e.g change new_uri) + + 5.3.10. int parsed_orig_ruri_ok; + + 1 if parsed_orig_uri is valid, 0 if not, set if to 0 if you modify the uri (e.g change new_uri) + + 5.3.11. String add_to_branch_s; + + Whatever whoever want to append to branch comes here + + 5.3.12. int add_to_branch_len; + + Lenght of add_to_branch_s + + 5.3.13. int hash_index; + + Index to TM hash table; stored in core to avoid unnecessary calculations + + 5.3.14. int msg_flags; + + Flags used by core. Allows to set various flags on the message; may be used + for simple inter-module communication or remembering processing state reache. + + 5.3.15. static native SipMsg ParseSipMsg(); + + This method is using to get an instance of class SipMsg and populate a properties + of this class with a fields specified at 5.3.1 - 5.3.14. + + 5.3.16. static native String getMsgType(); + + Gets a message type. Return value: + 'SIP_REQUEST' - if message is request + 'SIP_REPLY' - if message is reply + 'SIP_INVALID' - if invalid message + + 5.3.17. static native String getRURI(); + + Gets a request URI (RURI). + + 5.3.18. static native IPPair getSrcAddress(); + + Gets a source IP address and port. + + 5.3.19. static native IPPair getDstAddress(); + + Gets a destination IP address and port. + + 5.3.20. static native String getBuffer(); + + Gets a message buffer. + + +5.4. interface NativeInterface + + 5.4.1. abstract class Ranks + + 5.4.1.1. static final int PROC_MAIN + + Main ser process + + 5.4.1.2. static final int PROC_TIMER + + Timer attendant process + + 5.4.1.3. static final int PROC_RPC + + RPC type process + + 5.4.1.4. static final int PROC_FIFO + + FIFO attendant process. + Alias to PROC_RPC. + + 5.4.1.5. static final int PROC_TCP_MAIN + + TCP main process + + 5.4.1.6. static final int PROC_UNIXSOCK + + Unix socket server + + 5.4.1.7. static final int PROC_ATTENDANT + + Main "attendant process + + 5.4.1.8. static final int PROC_INIT + + Special rank, the context is the main ser process, but this is + guaranteed to be executed before any rocess is forked, so it + can be used to setup shared variables that depend on some + after mod_init available information (e.g. total number of processes). + @warning child_init(PROC_MAIN) is again called in the same process (main) + (before tcp), so make sure you don't init things twice, + both in PROC_MAIN and PROC_INT + + 5.4.1.9. static final int PROC_NOCHLDINIT + + no child init functions will be called if this rank is used in fork_process() + + 5.4.1.10. static final int PROC_SIPINIT + + First SIP worker - some modules do special processing in this child, + like loading db data + + 5.4.1.11. static final int PROC_SIPRPC + + Used to init RPC worker as SIP commands handler. + Don't do any special processing in the child init with this rank - + just bare child initialization + + 5.4.1.12. static final int PROC_MIN + + Minimum process rank. + Alias to PROC_NOCHLDINIT. + + 5.4.2. abstract class LogParams + 5.4.2.0. Loggigng params + 5.4.2.1. static final int L_ALERT + 5.4.2.2. static final int L_BUG + 5.4.2.3. static final int L_CRIT2 + 5.4.2.4. static final int L_CRIT + 5.4.2.5. static final int L_ERR + 5.4.2.6. static final int L_WARN + 5.4.2.7. static final int L_NOTICE + 5.4.2.8. static final int L_INFO + 5.4.2.9. static final int L_DBG + 5.4.2.10. static final int DEFAULT_FACILITY + + +5.5. Examples of usage Java API + +... + +import java.lang.*; +import java.io.*; + +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +public class Kamailio extends NativeMethods +{ + static + { + System.load("/opt/kamailio/lib/kamailio/modules/app_java.so"); + } + + /* Constructor. Do not remove !!! */ + public Kamailio() + { + } + + + public int child_init(int rank) + { + switch (rank) + { + case Ranks.PROC_MAIN: + LM_INFO("We're at PROC_MAIN\n"); + break; + case Ranks.PROC_TIMER: + LM_INFO("We're at PROC_TIMER\n"); + break; + case Ranks.PROC_RPC: + LM_INFO("We're at PROC_RPC/PROC_FIFO\n"); + break; + case Ranks.PROC_TCP_MAIN: + LM_INFO("We're at PROC_TCP_MAIN\n"); + break; + case Ranks.PROC_UNIXSOCK: + LM_INFO("We're at PROC_UNIXSOCK\n"); + break; + case Ranks.PROC_ATTENDANT: + LM_INFO("We're at PROC_ATTENDANT\n"); + break; + case Ranks.PROC_INIT: + LM_INFO("We're at PROC_INIT\n"); + break; + case Ranks.PROC_NOCHLDINIT: + LM_INFO("We're at PROC_NOCHLDINIT/PROC_MIN\n"); + break; + case Ranks.PROC_SIPINIT: + LM_INFO("We're at PROC_SIPINIT\n"); + break; + case Ranks.PROC_SIPRPC: + LM_INFO("We're at PROC_SIPRPC\n"); + break; + } + + return 1; + } + + public int TestMethod() + { + + LM_INFO(String.format("Msg Type: %s\n", SipMsg.getMsgType())); + + IPPair src = SipMsg.getSrcAddress(); + if (src != null) + { + LM_INFO(String.format("src address=%s, src port=%d\n", src.ip, src.port)); + } + else + { + LM_ERR("IPPair src is null!"); + } + + IPPair dst = SipMsg.getDstAddress(); + if (dst != null) + { + LM_INFO(String.format("dst address=%s, dst port=%d\n", dst.ip, dst.port)); + } + else + { + LM_ERR("IPPair dst is null!"); + } + + LM_INFO(String.format("buffer:\n%s\n", SipMsg.getBuffer().trim())); + + SipMsg msg = SipMsg.ParseSipMsg(); + if (msg != null) + { + LM_INFO("msg:\n"); + LM_INFO(String.format("\tid=%d\n", msg.id)); + LM_INFO(String.format("\tpid=%d\n", msg.pid)); + LM_INFO(String.format("\teoh='%s'\n", msg.eoh)); + LM_INFO(String.format("\tunparsed='%s'\n", msg.unparsed)); + LM_INFO(String.format("\tbuf='%s'\n", msg.buf)); + LM_INFO(String.format("\tlen=%d\n", msg.len)); + LM_INFO(String.format("\tnew_uri='%s'\n", msg.new_uri)); + LM_INFO(String.format("\tdst_uri='%s'\n", msg.dst_uri)); + LM_INFO(String.format("\tparsed_uri_ok=%d\n", msg.parsed_uri_ok)); + LM_INFO(String.format("\tparsed_orig_ruri_ok=%d\n", msg.parsed_orig_ruri_ok)); + LM_INFO(String.format("\tadd_to_branch_s='%s'\n", msg.add_to_branch_s)); + LM_INFO(String.format("\tadd_to_branch_len=%d\n", msg.add_to_branch_len)); + LM_INFO(String.format("\thash_index=%d\n", msg.hash_index)); + LM_INFO(String.format("\tmsg_flags=%d\n", msg.msg_flags)); + LM_INFO(String.format("\tset_global_address='%s'\n", msg.set_global_address)); + LM_INFO(String.format("\tset_global_port='%s'\n", msg.set_global_port)); + } + else + { + LM_ERR("SipMsg msg is null!\n"); + } + + return 1; + } +} + +... + + + + + + + + + + + + + + + diff --git a/modules/app_java/doc/Makefile b/modules/app_java/doc/Makefile new file mode 100644 index 000000000..d5a9f2ce5 --- /dev/null +++ b/modules/app_java/doc/Makefile @@ -0,0 +1,4 @@ +docs = app_java.xml + +docbook_dir = ../../../docbook +include $(docbook_dir)/Makefile.module diff --git a/modules/app_java/doc/app_java.xml b/modules/app_java/doc/app_java.xml new file mode 100644 index 000000000..036039202 --- /dev/null +++ b/modules/app_java/doc/app_java.xml @@ -0,0 +1,35 @@ + + + + +%docentities; + +]> + + + + app_java Module + &kamailioname; + + + Konstantin + Mosesov + + + Konstantin + Mosesov + + + + 2013 + Konstantin Mosesov + + + + + + + diff --git a/modules/app_java/doc/app_java_admin.xml b/modules/app_java/doc/app_java_admin.xml new file mode 100644 index 000000000..f69f8ee6e --- /dev/null +++ b/modules/app_java/doc/app_java_admin.xml @@ -0,0 +1,648 @@ + + + + +%docentities; + +]> + + + + + + &adminguide; + + +
+ Overview + + This module allows executing Java compiled classes from config file, exporting + functions to access the SIP message from Java using Java Native Interface (JNI). + +
+ + + +
+ Dependencies + +
+ &kamailio; Modules + + The following modules must be loaded before this module: + + + + none. + + + + +
+ + + +
+ External Libraries or Applications + + + + The following packages are runtime libraries, required to launch + java-common Base of all Java packages. + default-jre Standard Java or Java compatible Runtime. + gcj-jre Java runtime environment using GIJ/classpath. + libgcj12 (>=12) Java runtime library for use with gcj. + + + The following packages are optional, required for development + ant Java based build tool like make. + ant-contrib Collection of tasks, types and other tools for Apache Ant. + ant-gcj Java based build tool like make (GCJ). + default-jdk Standard Java or Java compatible Development Kit + gcj-jdk gcj and classpath development tools for Java(TM) + libgcj13-dev (>=12) Java development headers for use with gcj + jdk JDK Development Kit (either oracle jdk or openjdk) + + + + The following libraries or applications must be compiled before + running &kamailio; with this module loaded: + + The following packages are runtime libraries, required to launch + <class_name>.class + &kamailiobinary;.jar + + +
+ +
+ + + +
+ Java runtime +
+ + <para>Java runtime library (JRE or JDK) is required to use this module.</para> + </section> + </section> + <!-- end of section Java Runtime --> + + <!-- Section Parameters --> + <section> + <title>Parameters + + +
+ <varname>class_name</varname> (string) + + The class name should have the same compiled file name. + If the value is "&kamailio;", then the compiled file should be named as "&kamailio;.class". + + + + Default value is &kamailio;. + + + + Set <varname>class_name</varname> parameter + +... +modparam("app_java", "class_name", "&kamailio;") +... + + +
+ + +
+ <varname>child_init_method</varname> (string) + + TBD. + + + + Default value is child_init. + + + + Set <varname>child_init_method</varname> parameter + +... +modparam("app_java", "child_init_method", "my_mod_init") +... + + +
+ + +
+ <varname>java_options</varname> (string) + + Java options for Java Virtual Machine. + For more info read java docs + + + + Default value is -Djava.compiler=NONE. + + + + Set <varname>java_options</varname> parameter + +... +modparam("app_java", "java_options", "-Djava.compiler=NONE") +... + + + + Set <varname>java_options</varname> parameter (live configuration) + +... +# Assumes "application java folder" is located at /opt/kamailio/java +modparam("app_java", "java_options", "-Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar") +... + + + + Set <varname>java_options</varname> parameter (verbose configuration) + +... +# Assumes "application java folder" is located at /opt/kamailio/java +modparam("app_java", "java_options", "-verbose:gc,class,jni -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar") +... + + + + Set <varname>java_options</varname> parameter (debug configuration) + +... +# Assumes "application java folder" is located at /opt/kamailio/java +modparam("app_java", "java_options", "-Xdebug -verbose:gc,class,jni -Djava.compiler=NONE -Djava.class.path=/path/to/kamailio/modules:/opt/kamailio/java:/opt/kamailio/java/kamailio.jar") +... + + +
+ + +
+ <varname>force_cmd_exec</varname> (int) + + This parameter forces execution a &kamailiobinary; comnmand with java native method KamExec. + # Note: this is an untested yet feature, may cause (but may not) a memory leaks if used from embedded languages. + + + + Default value is 0 (off). + + + + Set <varname>force_cmd_exec</varname> parameter + +... +modparam("app_java", "force_cmd_exec", 1) +... + + +
+
+ + + +
+ Functions + + +
+ + Common requirements + + Each function has a required parameter method_signature. For more info + see Determine the signature of a method. + Signature represents the variable type. The mapping between the Java type and C type + is + + Type Chararacter + boolean Z + byte B + char C + double D + float F + int I + long J + object L + short S + void V + Note that to specify an object, the "L" is followed by the object's class name and ends with a semi-colon, ';' . + + + app_java supports the following signatures: + + Primitives: Z,B,C,D,F,I,J,L,S,V + Objects: + Ljava/lang/Boolean; + Ljava/lang/Byte; + Ljava/lang/Character; + Ljava/lang/Double; + Ljava/lang/Float; + Ljava/lang/Integer; + Ljava/lang/Long; + Ljava/lang/Short; + Ljava/lang/String; + NULL parameter: V + + Each parameter passed to function will be cast according to given signature. + + Parameters are optional, ommitting a parameter meant the passed value is NULL. + Parameters count should be exactly the same as signature count. + Note 1: Arrays representation (symbol '[') is not supported yet. + Note 2: You shall use a correct signature, e.g. the following examples of combinations are invalid: + java_method_exec("ExampleMethod", "ZI", "False"); + java_method_exec("ExampleMethod", "LI", "something", "5"); + + + + +
+ + + +
+ java_method_exec(method, method_signature, [param1[, param2[, ...]]]) + Executes a java class method method. Parameter method_signature is required. + + + + Signature: "V" + &kamailio; prototype + java_method_exec("ExampleMethod", "V"); + Java prototype + public int ExampleMethod(); + Example of usage: + +# &kamailio; +java_method_exec("ExampleMethod", "V"); + +# Java +public int ExampleMethod() +{ + ... do something; + return 1; +} + + + + + + + Signature: "Ljava/lang/String;I" + &kamailio; prototype + java_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); + Java prototype + public int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer representation. + Example of usage: + +# &kamailio; +java_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public int ExampleMethod(String SipMessageBuffer, int SipMessageLenght) +{ + ... do something with buffer; + return 1; +} + + + + + + + Signature: "ZB" + &kamailio; prototype + java_method_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype + public int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean representation. + Example of usage: + +# &kamailio; +java_method_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + + + + + +
+ + + +
+ java_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]]) + Executes a java static method method. Parameter method_signature is required. + + + + Signature: "V" + &kamailio; prototype + java_staticmethod_exec("ExampleMethod", "V"); + Java prototype + public static int ExampleMethod(); + Example of usage: + +# &kamailio; +java_staticmethod_exec("ExampleMethod", "V"); + +# Java +public static int ExampleMethod() +{ + ... do something; + return 1; +} + + + + + + + Signature: "Ljava/lang/String;I" + &kamailio; prototype + java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); + Java prototype + public static int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer representation. + Example of usage: + +# &kamailio; +java_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public static int ExampleMethod(String SipMessageBuffer, int SipMessageLenght) +{ + ... do something with buffer; + return 1; +} + + + + + + + Signature: "ZB" + &kamailio; prototype + java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype + public static int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean representation. + Example of usage: + +# &kamailio; +java_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public static int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + + + + + +
+ + + +
+ java_s_method_exec(method, method_signature, [param1[, param2[, ...]]]) + Executes a java class synchronized method method. Parameter method_signature is required. + For more info see Synchronized Methods + + + + Signature: "V" + &kamailio; prototype + java_s_method_exec("ExampleMethod", "V"); + Java prototype + public synchronized int ExampleMethod(); + Example of usage: + +# &kamailio; +java_s_method_exec("ExampleMethod", "V"); + +# Java +public synchronized int ExampleMethod() +{ + ... do something; + return 1; +} + + + + + + + Signature: "Ljava/lang/String;I" + &kamailio; prototype + java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); + Java prototype + public synchronized int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer representation. + Example of usage: + +# &kamailio; +java_s_method_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght) +{ + ... do something with buffer; + return 1; +} + + + + + + + Signature: "ZB" + &kamailio; prototype + java_s_method_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype + public synchronized int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean representation. + Example of usage: + +# &kamailio; +java_s_method_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public synchronized int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + + + + + +
+ + + +
+ java_s_staticmethod_exec(method, method_signature, [param1[, param2[, ...]]]) + Executes a java synchronized static method method. Parameter method_signature is required. + For more info see Synchronized Methods + + + + Signature: "V" + &kamailio; prototype + java_s_staticmethod_exec("ExampleMethod", "V"); + Java prototype + public static synchronized int ExampleMethod(); + Example of usage: + +# &kamailio; +java_s_staticmethod_exec("ExampleMethod", "V"); + +# Java +public static synchronized int ExampleMethod() +{ + ... do something; + return 1; +} + + + + + + + Signature: "Ljava/lang/String;I" + &kamailio; prototype + java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "Hello world", "5"); + Java prototype + public static synchronized int ExampleMethod(String param1, int param2); + In the above scenario parameter 2 ("5") will be cast to integer representation. + Example of usage: + +# &kamailio; +java_s_staticmethod_exec("ExampleMethod", "Ljava/lang/String;I", "$mb", "$ml"); + +# Java +public static synchronized int ExampleMethod(String SipMessageBuffer, int SipMessageLenght) +{ + ... do something with buffer; + return 1; +} + + + + + + + Signature: "ZB" + &kamailio; prototype + java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + Java prototype + public static synchronized int ExampleMethod(boolean param1, byte param2); + In the above scenario parameter 1 ("true") will be cast to boolean representation. + Example of usage: + +# &kamailio; +java_s_staticmethod_exec("ExampleMethod", "ZB", "true", "0x05"); + +# Java +public static synchronized int ExampleMethod(boolean flagSet, byte bFlag); +{ + if (flagSet) + { + ... do something with flags; + } + return 1; +} + + + + + +
+ + +
+ + + +
+ Java Module API + + + +
+ Minimal program skeleton + + + Minimal program skeleton + + +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +public class Kamailio extends NativeMethods +{ + /* Here you should specify a full path to app_java.so */ + static + { + System.load("/opt/kamailio/lib/kamailio/modules/app_java.so"); + } + + /* Constructor. Do not remove !!! */ + public Kamailio() + { + } + + /* + This method should be executed for each children process, immediately after forking. + Required. Do not remove !!! + */ + public int child_init(int rank) + { + return 1; + } +} + + +
+ + +
+ + + + diff --git a/modules/app_java/global.h b/modules/app_java/global.h new file mode 100644 index 000000000..0fd8f8bd4 --- /dev/null +++ b/modules/app_java/global.h @@ -0,0 +1,48 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __GLOBAL_H__ +#define __GLOBAL_H__ + +#include "../../str.h" +#include "../../sr_module.h" +#include "../../action.h" +#include "../../mem/mem.h" +#include "../../sr_module.h" +#include "../../dset.h" +#include "../../parser/msg_parser.h" + +#include + +JavaVM *jvm; +JNIEnv *env; +jclass KamailioClass; +jclass KamailioClassRef; +jclass KamailioClassInstanceRef; +jobject KamailioClassInstance; +jmethodID KamailioID; + +struct sip_msg *msg; + +#endif diff --git a/modules/app_java/java_iface.c b/modules/app_java/java_iface.c new file mode 100644 index 000000000..66cb5f565 --- /dev/null +++ b/modules/app_java/java_iface.c @@ -0,0 +1,284 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include "../../str.h" +#include "../../sr_module.h" + +#include +#include + +#include "global.h" +#include "java_iface.h" +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" +#include "java_native_methods.h" +#include "java_msgobj.h" +#include "java_sig_parser.h" + +/* + example of java prototype: public int method_name(); + example of kamailio invocation: java_method_exec("method_name", "V"); +*/ +int j_nst_exec_0(struct sip_msg *msgp, char *method_name, char *signature) +{ + return java_exec(msgp, 0, 0, method_name, signature, NULL); +} +/* + example of java prototype: public int method_name(int param); + example of kamailio invocation: java_method_exec("method_name", "I", "5"); +*/ +int j_nst_exec_1(struct sip_msg *msgp, char *method_name, char *signature, char *param) +{ + return java_exec(msgp, 0, 0, method_name, signature, param); +} +/* + example of java prototype: public synchronized int method_name(); + example of kamailio invocation: java_s_method_exec("method_name", "V"); +*/ +int j_s_nst_exec_0(struct sip_msg *msgp, char *method_name, char *signature) +{ + return java_exec(msgp, 0, 1, method_name, signature, NULL); +} +/* + example of java prototype: public synchronized int method_name(int param); + example of kamailio invocation: java_s_method_exec("method_name", "I", "5"); +*/ +int j_s_nst_exec_1(struct sip_msg *msgp, char *method_name, char *signature, char *param) +{ + return java_exec(msgp, 0, 1, method_name, signature, param); +} + + +/* + example of java prototype: public static int method_name(); + example of kamailio invocation: java_staticmethod_exec("method_name", "V"); +*/ +int j_st_exec_0(struct sip_msg *msgp, char *method_name, char *signature) +{ + return java_exec(msgp, 1, 0, method_name, signature, NULL); +} +/* + example of java prototype: public static int method_name(int param); + example of kamailio invocation: java_staticmethod_exec("method_name", "I", "5"); +*/ +int j_st_exec_1(struct sip_msg *msgp, char *method_name, char *signature, char *param) +{ + return java_exec(msgp, 1, 0, method_name, signature, param); +} +/* + example of java prototype: public static synchronized int method_name(); + example of kamailio invocation: java_s_staticmethod_exec("method_name", "V"); +*/ +int j_s_st_exec_0(struct sip_msg *msgp, char *method_name, char *signature) +{ + return java_exec(msgp, 1, 1, method_name, signature, NULL); +} +/* + example of java prototype: public static synchronized int method_name(int param); + example of kamailio invocation: java_s_staticmethod_exec("method_name", "I", "5"); +*/ +int j_s_st_exec_1(struct sip_msg *msgp, char *method_name, char *signature, char *param) +{ + return java_exec(msgp, 1, 1, method_name, signature, param); +} + + +int java_exec(struct sip_msg *msgp, int is_static, int is_synchronized, char *method_name, char *signature, char *param) +{ + char *retval_sig; + char *cs; + size_t cslen; + jint retval; + int locked; + jfieldID fid; + jclass cls; + jmethodID invk_method, invk_method_ref; + jvalue *jparam; + + if (signature == NULL || !strcmp(signature, "")) + { + LM_ERR("java_method_exec(): signature is empty or invalid.\n"); + return -1; + } + + if (param == NULL && strcmp(signature, "V")) + { + LM_ERR("java_method_exec(): no paramter (parameter is NULL) but signature '%s' is not equals to 'V'.\n", signature); + return -1; + } + + if (is_sig_allowed(signature) == 0) + { + LM_ERR("java_method_exec(): error: signature '%s' isn't supported yet.\n", signature); + return -1; + } + + if (!strcmp(signature, "V")) + { + signature = ""; + } + + retval_sig = "I"; + + cslen = strlen(signature) + 2 + 1 + 1; // '(' + 'signature' + ')' + 'return signature' + null terminator + cs = (char *)pkg_malloc(cslen * sizeof(char)); + if (!cs) + { + LM_ERR("pkg_malloc() has failed. Can't allocate %lu bytes. Not enough memory!\n", (unsigned long)cslen); + return -1; + } + snprintf(cs, cslen, "(%s)%s", signature, retval_sig); + cs[cslen] = '\0'; + + // attach to current thread + (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return -1; + } + + cls = (*env)->GetObjectClass(env, KamailioClassInstance); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + fid = (*env)->GetFieldID(env, cls, "mop", "I"); + if (!fid) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + msg = msgp; + + // find a method by signature + invk_method = is_static ? + (*env)->GetStaticMethodID(env, KamailioClassRef, method_name, cs) : + (*env)->GetMethodID(env, KamailioClassRef, method_name, cs); + if (!invk_method || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + pkg_free(cs); + + // keep local reference to method + invk_method_ref = (*env)->NewLocalRef(env, invk_method); + if (!invk_method_ref || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*env)->DeleteLocalRef(env, invk_method_ref); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + retval = -1; + + if (is_synchronized) + { + if ((*env)->MonitorEnter(env, invk_method_ref) != JNI_OK) + { + locked = 0; + LM_ERR("MonitorEnter() has failed!\n"); + } + else + { + locked = 1; + } + } + + if (param == NULL) + { + retval = is_static ? + (int)(*env)->CallStaticIntMethod(env, KamailioClassRef, invk_method_ref) : + (int)(*env)->CallIntMethod(env, KamailioClassInstanceRef, invk_method_ref); + } + else + { + jparam = get_value_by_sig_type(signature, param); + if (jparam == NULL) + { + (*env)->DeleteLocalRef(env, invk_method_ref); + (*env)->DeleteLocalRef(env, invk_method); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + retval = is_static ? + (int)(*env)->CallStaticIntMethod(env, KamailioClassRef, invk_method_ref, *jparam) : + (int)(*env)->CallIntMethod(env, KamailioClassInstanceRef, invk_method_ref, *jparam); + } + + if ((*env)->ExceptionCheck(env)) + { + LM_ERR("%s(): %s() has failed. See exception below.\n", + (is_static ? + (is_synchronized ? "java_s_staticmethod_exec" : "java_staticmethod_exec") : + (is_synchronized ? "java_s_method_exec" : "java_method_exec") + ), + is_static ? "CallStaticIntMethod" : "CallIntMethod" + ); + + handle_exception(); + + (*env)->DeleteLocalRef(env, invk_method_ref); + (*env)->DeleteLocalRef(env, invk_method); + (*jvm)->DetachCurrentThread(jvm); + + return -1; + } + + if (is_synchronized && locked) + { + if ((*env)->MonitorExit(env, invk_method_ref) != JNI_OK) + { + LM_ERR("MonitorExit) has failed!\n"); + } + } + + (*env)->DeleteLocalRef(env, invk_method_ref); + (*env)->DeleteLocalRef(env, invk_method); + (*jvm)->DetachCurrentThread(jvm); + + return retval; +} + + + + + + + + + + + diff --git a/modules/app_java/java_iface.h b/modules/app_java/java_iface.h new file mode 100644 index 000000000..12acee919 --- /dev/null +++ b/modules/app_java/java_iface.h @@ -0,0 +1,44 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __JAVA_IFACE_H__ +#define __JAVA_IFACE_H__ + +#include "../../parser/msg_parser.h" + +int j_nst_exec_0(struct sip_msg *, char *, char *); +int j_nst_exec_1(struct sip_msg *, char *, char *, char *); +int j_s_nst_exec_0(struct sip_msg *, char *, char *); +int j_s_nst_exec_1(struct sip_msg *, char *, char *, char *); + +int j_st_exec_0(struct sip_msg *, char *, char *); +int j_st_exec_1(struct sip_msg *, char *, char *, char *); +int j_s_st_exec_0(struct sip_msg *, char *, char *); +int j_s_st_exec_1(struct sip_msg *, char *, char *, char *); + +int java_exec(struct sip_msg *, int, int, char *, char *, char *); + + + +#endif diff --git a/modules/app_java/java_mod.c b/modules/app_java/java_mod.c new file mode 100644 index 000000000..3f992df76 --- /dev/null +++ b/modules/app_java/java_mod.c @@ -0,0 +1,260 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include + +#include "../../str.h" +#include "../../sr_module.h" + +#include + +#include "global.h" + +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" + +#include "java_native_methods.h" + +MODULE_VERSION + +static str class_name = {.s = "Kamailio", .len = 10}; +static str child_init_mname = { .s = "child_init", .len = 0}; +static str java_options_str = { .s = "-Djava.compiler=NONE", .len = 21}; + +static int mod_init(void); +static int child_init(int rank); +static void mod_destroy(void); + + +/** module parameters */ +static param_export_t params[] = { + {"class_name", STR_PARAM, &class_name }, + {"child_init_method", STR_PARAM, &child_init_mname }, + {"java_options", STR_PARAM, &java_options_str }, + {"force_cmd_exec", INT_PARAM, &force_cmd_exec }, + {0,0,0} +}; + + +/* + * Exported functions + */ +static cmd_export_t cmds[] = { + { "java_method_exec", (cmd_function)j_nst_exec_0, 2, NULL, 0, ANY_ROUTE }, + { "java_method_exec", (cmd_function)j_nst_exec_1, 3, NULL, 0, ANY_ROUTE }, + { "java_s_method_exec", (cmd_function)j_s_nst_exec_0, 2, NULL, 0, ANY_ROUTE }, + { "java_s_method_exec", (cmd_function)j_s_nst_exec_1, 3, NULL, 0, ANY_ROUTE }, + + { "java_staticmethod_exec", (cmd_function)j_st_exec_0, 2, NULL, 0, ANY_ROUTE }, + { "java_staticmethod_exec", (cmd_function)j_st_exec_1, 3, NULL, 0, ANY_ROUTE }, + { "java_s_staticmethod_exec", (cmd_function)j_s_st_exec_0, 2, NULL, 0, ANY_ROUTE }, + { "java_s_staticmethod_exec", (cmd_function)j_s_st_exec_1, 3, NULL, 0, ANY_ROUTE }, + + { 0, 0, 0, 0, 0, 0 } +}; + +/** module exports */ +struct module_exports exports = { + "app_java", /* module name */ +// RTLD_NOW | RTLD_GLOBAL, /* dlopen flags */ + DEFAULT_DLFLAGS, /* dlopen flags */ + cmds, /* exported functions */ + params, /* exported parameters */ + 0, /* exported statistics */ + 0, /* exported MI functions */ + 0, /* exported pseudo-variables */ + 0, /* extra processes */ + mod_init, /* module initialization function */ + (response_function) NULL, /* response handling function */ + (destroy_function) mod_destroy, /* destroy function */ + child_init /* per-child init function */ +}; + +static int mod_init(void) +{ + JavaVMInitArgs vm_args; + jint res; + JavaVMOption *options; + char **opts; + int nOptions; + + if (force_cmd_exec < 0 || force_cmd_exec > 1) + { + LM_ERR("Parameter force_cmd_exec should be either 0 or 1\n"); + return -1; + } + + if (force_cmd_exec) + { + LM_NOTICE("app_java: Parameter force_cmd_exec may cause a memory leaks if used from embedded languages\n"); + } + + options = (JavaVMOption *)pkg_malloc(sizeof(JavaVMOption)); + if (!options) + { + LM_ERR("pkg_malloc() failed: Couldn't initialize Java VM: Not enough memory\n"); + return -1; + } + memset(options, 0, sizeof(JavaVMOption)); + + LM_INFO("Initializing Java VM with options: %s\n", java_options_str.s); + + opts = split(java_options_str.s, " "); + for (nOptions=0; opts[nOptions] != NULL; nOptions++) + { + options[nOptions].optionString = opts[nOptions]; + } + + /* IMPORTANT: specify vm_args version # if you use JDK1.1.2 and beyond */ + vm_args.version = JNI_VERSION_1_2; + vm_args.nOptions = nOptions; + vm_args.ignoreUnrecognized = JNI_FALSE; + vm_args.options = options; + + res = JNI_CreateJavaVM(&jvm, (void **)&env, &vm_args); + if (res < 0) + { + handle_VM_init_failure(res); + return -1; + } + + LM_INFO("app_java: Java VM initialization OK\n"); + + // attach to current thread + (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return -1; + } + + KamailioClass = (*env)->FindClass(env, class_name.s); + if (!KamailioClass || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + KamailioClassRef = (*env)->NewGlobalRef(env, KamailioClass); + if (!KamailioClassRef || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + KamailioID = (*env)->GetMethodID(env, KamailioClass, "", "()V"); + if (!KamailioID || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + // calling constructor + KamailioClassInstance = (*env)->NewObject(env, KamailioClass, KamailioID); + if (!KamailioClassInstance || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + // keep a reference to kamailio class instance + KamailioClassInstanceRef = (*env)->NewGlobalRef(env, KamailioClassInstance); + if (!KamailioClassInstanceRef || (*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + LM_INFO("app_java: module initialization OK\n"); + + if (jvm != NULL) + (*jvm)->DetachCurrentThread(jvm); + + return 0; +} + +static int child_init(int rank) +{ + int retval; + jmethodID child_init_id; + + // attach to current thread + (*jvm)->AttachCurrentThread(jvm, (void **)&env, NULL); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return -1; + } + + child_init_id = (*env)->GetMethodID(env, KamailioClass, "child_init", "(I)I"); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + retval = (int)(*env)->CallIntMethod(env, KamailioClassInstanceRef, child_init_id, rank); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + (*jvm)->DetachCurrentThread(jvm); + return -1; + } + + (*env)->DeleteLocalRef(env, child_init_id); + (*jvm)->DetachCurrentThread(jvm); + + msg = NULL; + + return retval; +} + +static void mod_destroy(void) +{ + if (env != NULL) + { + (*env)->DeleteGlobalRef(env, KamailioClassInstanceRef); + (*env)->DeleteGlobalRef(env, KamailioClassRef); + } + + if (jvm != NULL) + { + (*jvm)->DetachCurrentThread(jvm); + (*jvm)->DestroyJavaVM(jvm); + } + + if (msg) + { + pkg_free(msg); + } + +} diff --git a/modules/app_java/java_mod.h b/modules/app_java/java_mod.h new file mode 100644 index 000000000..c0961b042 --- /dev/null +++ b/modules/app_java/java_mod.h @@ -0,0 +1,30 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __JAVA_MOD_H__ +#define __JAVA_MOD_H__ + +int force_cmd_exec; + +#endif diff --git a/modules/app_java/java_msgobj.c b/modules/app_java/java_msgobj.c new file mode 100644 index 000000000..8270fbefd --- /dev/null +++ b/modules/app_java/java_msgobj.c @@ -0,0 +1,324 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + + +#include "../../action.h" +#include "../../mem/mem.h" +#include "../../sr_module.h" +#include "../../dset.h" +#include "../../parser/msg_parser.h" + +#include + +#include "global.h" +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" +#include "java_native_methods.h" +#include "java_msgobj.h" + +jobject *fill_sipmsg_object(JNIEnv *env, struct sip_msg *msg) +{ + jobject *SipMsgInstance; + jclass SipMsgClass; + jmethodID SipMsgClassID; + jfieldID fid; + jstring jStrParam; + + SipMsgInstance = (jobject *)pkg_malloc(sizeof(jobject)); + if (!SipMsgInstance) + { + LM_ERR("pkg_malloc() has failed. Not enough memory!\n"); + return NULL; + } + memset(SipMsgInstance, 0, sizeof(jobject)); + + SipMsgClass = (*env)->FindClass(env, "org/siprouter/SipMsg"); + if (!SipMsgClass || (*env)->ExceptionCheck(env)) + { + handle_exception(); + pkg_free(SipMsgInstance); + return NULL; + } + + SipMsgClassID = (*env)->GetMethodID(env, SipMsgClass, "", "()V"); + if (!SipMsgClassID || (*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // calling constructor + (*SipMsgInstance) = (*env)->NewObject(env, SipMsgClass, SipMsgClassID); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->id => SipMsg.id + fid = (*env)->GetFieldID(env, SipMsgClass, "id", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.id\n"); + + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->id); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->pid => SipMsg.pid + fid = (*env)->GetFieldID(env, SipMsgClass, "pid", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.pid\n"); + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->pid); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->eoh => SipMsg.eoh + fid = (*env)->GetFieldID(env, SipMsgClass, "eoh", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.eoh\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, msg->eoh); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->unparsed => SipMsg.unparsed + fid = (*env)->GetFieldID(env, SipMsgClass, "unparsed", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.unparsed\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, msg->unparsed); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->buf => SipMsg.buf + fid = (*env)->GetFieldID(env, SipMsgClass, "buf", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.buf\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, msg->buf); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->len => SipMsg.len + fid = (*env)->GetFieldID(env, SipMsgClass, "len", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.len\n"); + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->len); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->new_uri => SipMsg.new_uri + fid = (*env)->GetFieldID(env, SipMsgClass, "new_uri", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.new_uri\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, msg->new_uri.len <= 0 ? "" : msg->new_uri.s); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->dst_uri => SipMsg.dst_uri + fid = (*env)->GetFieldID(env, SipMsgClass, "dst_uri", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.dst_uri\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, msg->dst_uri.len <= 0 ? "" : msg->dst_uri.s); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->parsed_orig_ruri_ok => SipMsg.parsed_orig_ruri_ok + fid = (*env)->GetFieldID(env, SipMsgClass, "parsed_orig_ruri_ok", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.parsed_orig_ruri_ok\n"); + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->parsed_orig_ruri_ok); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->add_to_branch_s => SipMsg.add_to_branch_s + fid = (*env)->GetFieldID(env, SipMsgClass, "add_to_branch_s", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.add_to_branch_s\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, (msg->add_to_branch_len <= 0 || msg->add_to_branch_s == NULL) ? "" : strdup(msg->add_to_branch_s)); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->add_to_branch_len => SipMsg.add_to_branch_len + fid = (*env)->GetFieldID(env, SipMsgClass, "add_to_branch_len", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.add_to_branch_len\n"); + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->add_to_branch_len); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->hash_index => SipMsg.hash_index + fid = (*env)->GetFieldID(env, SipMsgClass, "hash_index", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.hash_index\n"); + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->hash_index); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->msg_flags => SipMsg.msg_flags + fid = (*env)->GetFieldID(env, SipMsgClass, "msg_flags", "I"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.msg_flags\n"); + return NULL; + } + (*env)->SetIntField(env, SipMsgInstance, fid, msg->msg_flags); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + + // msg->set_global_address => SipMsg.set_global_address + fid = (*env)->GetFieldID(env, SipMsgClass, "set_global_address", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.set_global_address\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, (msg->set_global_address.len <= 0 || msg->set_global_address.s == NULL) ? "" : msg->set_global_address.s); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + // msg->set_global_port => SipMsg.set_global_port + fid = (*env)->GetFieldID(env, SipMsgClass, "set_global_port", "Ljava/lang/String;"); + if (!fid) + { + (*env)->ExceptionClear(env); + LM_ERR("Can't find symbol org.siprouter.SipMsg.set_global_port\n"); + return NULL; + } + jStrParam = (*env)->NewStringUTF(env, (msg->set_global_port.len <= 0 || msg->set_global_port.s == NULL) ? "" : msg->set_global_port.s); + (*env)->SetObjectField(env, SipMsgInstance, fid, jStrParam); + if ((*env)->ExceptionCheck(env)) + { + handle_exception(); + return NULL; + } + (*env)->DeleteLocalRef(env, jStrParam); + + return SipMsgInstance; +} diff --git a/modules/app_java/java_msgobj.h b/modules/app_java/java_msgobj.h new file mode 100644 index 000000000..22f362e86 --- /dev/null +++ b/modules/app_java/java_msgobj.h @@ -0,0 +1,34 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __JAVA_MSGOBJ_H__ +#define __JAVA_MSGOBJ_H__ + +#include "../../parser/msg_parser.h" + +#include + +jobject *fill_sipmsg_object(JNIEnv *, struct sip_msg *); + +#endif diff --git a/modules/app_java/java_native_methods.c b/modules/app_java/java_native_methods.c new file mode 100644 index 000000000..d53be22d8 --- /dev/null +++ b/modules/app_java/java_native_methods.c @@ -0,0 +1,1223 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include "../../str.h" +#include "../../sr_module.h" +#include "../../ip_addr.h" +#include "../../flags.h" + +#include + +#include "global.h" +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" +#include "java_msgobj.h" +#include "java_native_methods.h" +#include "java_sig_parser.h" + + +//// native methods //// + +/* + java: native void LM_XXXXXX(Params XXXX); + c: JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1XXXXXX(JNIEnv *jenv, jobject this, Params XXXX) + + Why (for example) Java_Kamailio_LM_1ERR but not Java_Kamailio_LM_ERR? + See explaination here: http://qscribble.blogspot.ca/2012/04/underscores-in-jni-method-names.html + + Also, from here: http://192.9.162.55/docs/books/jni/html/design.html + The JNI adopts a simple name-encoding scheme to ensure that all Unicode characters + translate into valid C function names. The underscore ("_") character separates the + components of fully qualified class names. Because a name or type descriptor never + begins with a number, we can use _0, ..., _9 for escape sequences, as illustrated below: + +-------------------+------------------------------------+ + | Escape Sequence | Denotes | + +-------------------+------------------------------------+ + | _0XXXX | a Unicode character XXXX | + | _1 | the character "_" | + | _2 | the character ";" in descriptors | + | _3 | the character "[" in descriptors | + +-------------------+------------------------------------+ + +*/ + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_ERR(Ljava/lang/String;)V + Prototype: public static native void LM_ERR(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1ERR(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_ERR("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_WARN(Ljava/lang/String;)V + Prototype: public static native void LM_WARN(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1WARN(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_WARN("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_NOTICE(Ljava/lang/String;)V + Prototype: public static native void LM_NOTICE(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1NOTICE(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_NOTICE("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_INFO(Ljava/lang/String;)V + Prototype: public static native void LM_INFO(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1INFO(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_INFO("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_DBG(Ljava/lang/String;)V + Prototype: public static native void LM_DBG(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1DBG(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_DBG("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_CRIT(Ljava/lang/String;)V + Prototype: public static native void LM_CRIT(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1CRIT(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_CRIT("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + + +#ifdef LM_ALERT +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_ALERT(Ljava/lang/String;)V + Prototype: public static native void LM_ALERT(String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1ALERT(JNIEnv *jenv, jobject this, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_ALERT("%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} +#endif + + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_GEN2(ILjava/lang/String;)V + Prototype: public static native void LM_GEN1(int logLevel, String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1GEN1(JNIEnv *jenv, jobject this, jint ll, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_GEN1((int)ll, "%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: LM_GEN2(IILjava/lang/String;)V + Prototype: public static native void LM_GEN2(int logLevel, int logFacility, String s); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1GEN2(JNIEnv *jenv, jobject this, jint ll, jint lf, jstring js) +{ + const char *s; + jboolean iscopy; + + s = (*jenv)->GetStringUTFChars(jenv, js, &iscopy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return; + } + + LM_GEN2((int)ll, (int)lf, "%s", s == NULL ? "null\n" : s); + + (*jenv)->ReleaseStringUTFChars(jenv, js, s); +} + +/* + *** Java API *** + Package: org.siprouter + Class: NativeMethods + Method: KamExec(Ljava/lang/String;[Ljava/lang/String;)I + Prototype: public static native int KamExec(String fname, String... params); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_NativeMethods_KamExec(JNIEnv *jenv, jobject this, jstring jfname, jobjectArray strArrParams) +{ + int retval; + char *fname; + int argc; + jsize pc; + int i; + char *argv[MAX_ACTIONS]; + jboolean is_copy; + jstring strp; + char *strc; + + if (jfname == NULL) + { + LM_ERR("app_java: KamExec() required at least 1 argument (function name)\n"); + return -1; + } + + fname = (char *)(*jenv)->GetStringUTFChars(jenv, jfname, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + memset(argv, 0, MAX_ACTIONS * sizeof(char *)); + argc = 0; + + pc = (*jenv)->GetArrayLength(jenv, strArrParams); + if (pc >= 6) + { + pc = 6; + } + + for (i=0; iGetObjectArrayElement(jenv, strArrParams, i); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + strc = (char *)(*jenv)->GetStringUTFChars(jenv, strp, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + if (strc) + { + argv[argc++] = strc; + } + } + + retval = KamExec(jenv, fname, argc, argv); + + (*jenv)->ReleaseStringUTFChars(jenv, jfname, fname); + + return (jint)retval; +} + +int KamExec(JNIEnv *jenv, char *fname, int argc, char **argv) +{ + sr31_cmd_export_t *fexport; + unsigned mod_ver; + int rval; + int mod_type; + struct action *act; + struct run_act_ctx ra_ctx; + int i; + + if (!msg) + return -1; + + fexport = find_export_record(fname, argc, 0, &mod_ver); + if (!fexport) + { + LM_ERR("app_java: KamExec(): '%s' - no such function\n", fname); + return -1; + } + + /* check fixups */ + if (force_cmd_exec == 0 && fexport->fixup != NULL && fexport->free_fixup == NULL) + { + LM_ERR("app_java: KamExec(): function '%s' has fixup - cannot be used\n", fname); + return -1; + } + + switch(fexport->param_no) + { + case 0: mod_type = MODULE0_T; break; + case 1: mod_type = MODULE1_T; break; + case 2: mod_type = MODULE2_T; break; + case 3: mod_type = MODULE3_T; break; + case 4: mod_type = MODULE4_T; break; + case 5: mod_type = MODULE5_T; break; + case 6: mod_type = MODULE6_T; break; + case VAR_PARAM_NO: mod_type = MODULEX_T; break; + default: + LM_ERR("app_java: KamExec(): unknown/bad definition for function '%s' (%d params)\n", fname, fexport->param_no); + return -1; + } + + + act = mk_action(mod_type, (argc+2), /* number of (type, value) pairs */ + MODEXP_ST, fexport, /* function */ + NUMBER_ST, argc, /* parameter number */ + STRING_ST, argv[0], /* param. 1 */ + STRING_ST, argv[1], /* param. 2 */ + STRING_ST, argv[2], /* param. 3 */ + STRING_ST, argv[3], /* param. 4 */ + STRING_ST, argv[4], /* param. 5 */ + STRING_ST, argv[5] /* param. 6 */ + ); + + if (!act) + { + LM_ERR("app_java: KamExec(): action structure couldn't be created\n"); + return -1; + } + + + /* handle fixups */ + if (fexport->fixup) + { + if (argc == 0) + { + rval = fexport->fixup(0, 0); + if (rval < 0) + { + LM_ERR("app_java: KamExec(): (no params) Error in fixup (0) for '%s'\n", fname); + return -1; + } + } + else + { + for (i=0; i<=argc; i++) + { + if (act->val[i+2].u.data != 0x0) + { + rval = fexport->fixup(&(act->val[i+2].u.data), i+1); + if (rval < 0) + { + LM_ERR("app_java: KamExec(): (params: %d) Error in fixup (%d) for '%s'\n", argc, i+1, fname); + return -1; + } + act->val[i+2].type = MODFIXUP_ST; + } + } + } + } + + init_run_actions_ctx(&ra_ctx); + rval = do_action(&ra_ctx, act, msg); + + /* free fixups */ + if (fexport->free_fixup) + { + for (i=0; i<=argc; i++) + { + if ((act->val[i+2].type == MODFIXUP_ST) && (act->val[i+2].u.data)) + { + fexport->free_fixup(&(act->val[i+2].u.data), i+1); + } + } + } + + pkg_free(act); + + return rval; +} + + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: ParseSipMsg()Lorg/siprouter/SipMsg; + Prototype: public static native org.siprouter.SipMsg ParseSipMsg(); +*/ +JNIEXPORT jobject JNICALL Java_org_siprouter_SipMsg_ParseSipMsg(JNIEnv *jenv, jobject this) +{ + if (!msg) + return NULL; + + return fill_sipmsg_object(jenv, msg); +} + + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: getMsgType()Ljava/org/String; + Prototype: public static native String getMsgType(); +*/ +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getMsgType(JNIEnv *jenv, jobject this) +{ + char *cs; + jstring js; + + if (!msg) + return NULL; + + switch ((msg->first_line).type) + { + case SIP_REQUEST: + cs = "SIP_REQUEST"; + break; + + case SIP_REPLY: + cs = "SIP_REPLY"; + break; + + default: + cs = "SIP_INVALID"; + break; + } + + js = (*jenv)->NewStringUTF(jenv, cs); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + return js; +} + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: getStatus()Ljava/org/String; + Prototype: public static native String getStatus(); +*/ +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getStatus(JNIEnv *jenv, jobject this) +{ + str *cs; + jstring js; + + if (!msg) + return NULL; + + if ((msg->first_line).type != SIP_REQUEST) + { + LM_ERR("app_java: getStatus(): Unable to fetch status. Error: Not a request message - no method available.\n"); + return NULL; + } + + cs = &((msg->first_line).u.request.method); + + js = (*jenv)->NewStringUTF(jenv, (cs && cs->s && cs->len > 0) ? cs->s : ""); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + return js; +} + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: getRURI()Ljava/org/String; + Prototype: public static native String getRURI(); +*/ +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getRURI(JNIEnv *jenv, jobject this) +{ + str *cs; + jstring js; + + if (!msg) + return NULL; + + if ((msg->first_line).type != SIP_REQUEST) + { + LM_ERR("app_java: getRURI(): Unable to fetch ruri. Error: Not a request message - no method available.\n"); + return NULL; + } + + cs = &((msg->first_line).u.request.uri); + + js = (*jenv)->NewStringUTF(jenv, (cs && cs->s && cs->len > 0) ? cs->s : ""); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + return js; +} + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: getSrcAddress()Lorg/siprouter/IPPair; + Prototype: public static native org.siprouter.IPPair getSrcAddress(); +*/ +JNIEXPORT jobject JNICALL Java_org_siprouter_SipMsg_getSrcAddress(JNIEnv *jenv, jobject this) +{ + jclass ippair_cls; + jmethodID ippair_cls_id; + jobject ippair_cls_instance; + + char *ip; + jstring jip; + int port; + + if (!msg) + return NULL; + + ippair_cls = (*jenv)->FindClass(jenv, "org/siprouter/IPPair"); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + ippair_cls_id = (*jenv)->GetMethodID(jenv, ippair_cls, "", "(Ljava/lang/String;I)V"); + if (!ippair_cls_id || (*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + ip = ip_addr2a(&msg->rcv.src_ip); + if (!ip) + { + LM_ERR("app_java: getSrcAddress(): Unable to fetch src ip address.\n"); + return NULL; + } + jip = (*jenv)->NewStringUTF(jenv, ip); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + port = msg->rcv.src_port; + if (port == 0x0) + { + LM_ERR("app_java: getSrcAddress(): Unable to fetch src port.\n"); + return NULL; + } + + // calling constructor + ippair_cls_instance = (*jenv)->NewObject(jenv, ippair_cls, ippair_cls_id, (jstring)jip, (jint)port); + if (!ippair_cls_instance || (*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + return ippair_cls_instance; +} + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: getDstAddress()Lorg/siprouter/IPPair; + Prototype: public static native org.siprouter.IPPair getDstAddress(); +*/ +JNIEXPORT jobject JNICALL Java_org_siprouter_SipMsg_getDstAddress(JNIEnv *jenv, jobject this) +{ + jclass ippair_cls; + jmethodID ippair_cls_id; + jobject ippair_cls_instance; + + char *ip; + jstring jip; + int port; + + if (!msg) + return NULL; + + ippair_cls = (*jenv)->FindClass(jenv, "org/siprouter/IPPair"); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + ippair_cls_id = (*jenv)->GetMethodID(jenv, ippair_cls, "", "(Ljava/lang/String;I)V"); + if (!ippair_cls_id || (*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + ip = ip_addr2a(&msg->rcv.dst_ip); + if (!ip) + { + LM_ERR("app_java: getDstAddress(): Unable to fetch src ip address.\n"); + return NULL; + } + jip = (*jenv)->NewStringUTF(jenv, ip); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + port = msg->rcv.dst_port; + if (port == 0x0) + { + LM_ERR("app_java: getDstAddress(): Unable to fetch src port.\n"); + return NULL; + } + + // calling constructor + ippair_cls_instance = (*jenv)->NewObject(jenv, ippair_cls, ippair_cls_id, (jstring)jip, (jint)port); + if (!ippair_cls_instance || (*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + return ippair_cls_instance; +} + +/* + *** Java API *** + Package: org.siprouter + Class: SipMsg + Method: getBuffer()Ljava/org/String; + Prototype: public static native String getBuffer(); +*/ +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getBuffer(JNIEnv *jenv, jobject this) +{ + jstring js; + + if (!msg) + return NULL; + + if ((msg->first_line).type != SIP_REQUEST) + { + LM_ERR("app_java: getRURI(): Unable to fetch ruri. Error: Not a request message - no method available.\n"); + return NULL; + } + + js = (*jenv)->NewStringUTF(jenv, msg->buf ? msg->buf : ""); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return NULL; + } + + return js; +} + + + + + + +///// Core Functions ///// + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: seturi(Ljava/org/String;)I + Prototype: public static native int seturi(String uri); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_seturi(JNIEnv *jenv, jobject this, jstring juri) +{ + return cf_seturi(jenv, this, juri, "seturi"); +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: rewriteuri(Ljava/org/String;)I + Prototype: public static native int rewriteuri(String uri); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_rewriteuri(JNIEnv *jenv, jobject this, jstring juri) +{ + return cf_seturi(jenv, this, juri, "rewriteuri"); +} + +/* wrapped function */ +jint cf_seturi(JNIEnv *jenv, jobject this, jstring juri, char *fname) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + jboolean is_copy; + char *curi; + + if (!msg) + { + LM_ERR("app_java: %s: Can't process, msg=NULL\n", fname); + return -1; + } + + curi = (char *)(*jenv)->GetStringUTFChars(jenv, juri, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = SET_URI_T; + act.val[0].type = STRING_ST; + act.val[0].u.str.s = curi; + act.val[0].u.str.len = strlen(curi); + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + (*jenv)->ReleaseStringUTFChars(jenv, juri, curi); + return (jint)retval; +} + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: add_local_rport()I + Prototype: public static native int add_local_rport(); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_add_1local_1rport(JNIEnv *jenv, jobject this) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + + if (!msg) + { + LM_ERR("app_java: add_local_rport: Can't process, msg=NULL\n"); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = ADD_LOCAL_RPORT_T; + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + return (jint)retval; +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: append_branch()I + Method(o): append_branch(Ljava/lang/String)I + Prototype: public static native int append_branch(); + Prototype(o): public static native int append_branch(String branch); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_append_1branch(JNIEnv *jenv, jobject this, jstring jbranch) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + jboolean is_copy; + char *cbranch; + + if (!msg) + { + LM_ERR("app_java: append_branch: Can't process, msg=NULL\n"); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = APPEND_BRANCH_T; + + cbranch = NULL; + + if (jbranch) + { + cbranch = (char *)(*jenv)->GetStringUTFChars(jenv, jbranch, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + act.val[0].type = STR_ST; + act.val[0].u.str.s = cbranch; + act.val[0].u.str.len = strlen(cbranch); + } + + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + + if (cbranch) + { + (*jenv)->ReleaseStringUTFChars(jenv, jbranch, cbranch); + } + + return (jint)retval; +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: drop()I + Prototype: public static native int drop(); + Returns: + 0 if action -> end of list(e.g DROP) + > 0 to continue processing next actions + < 0 on error +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_drop(JNIEnv *jenv, jobject this) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + + if (!msg) + { + LM_ERR("app_java: drop: Can't process, msg=NULL\n"); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = DROP_T; + act.val[0].type = NUMBER_ST; + act.val[0].u.number = 0; + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + return (jint)retval; +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: force_rport()I + Prototype: public static native int force_rport(); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_force_1rport(JNIEnv *jenv, jobject this) +{ + return cf_force_rport(jenv, this, "force_rport"); +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: add_rport()I + Prototype: public static native int add_rport(); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_add_1rport(JNIEnv *jenv, jobject this) +{ + return cf_force_rport(jenv, this, "add_rport"); +} + +/* wrapped function */ +jint cf_force_rport(JNIEnv *jenv, jobject this, char *fname) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + + if (!msg) + { + LM_ERR("app_java: %s: Can't process, msg=NULL\n", fname); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = FORCE_RPORT_T; + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + return (jint)retval; +} + + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: force_send_socket(Ljava/lang/String;I)I + Prototype: public static native int force_send_socket(String srchost, int srcport); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_force_1send_1socket(JNIEnv *jenv, jobject this, jstring jsrchost, jint jsrcport) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + jboolean is_copy; + struct socket_id *si; + struct name_lst *nl; + + if (!msg) + { + LM_ERR("app_java: force_send_socket: Can't process, msg=NULL\n"); + return -1; + } + + nl = (struct name_lst *)pkg_malloc(sizeof(struct name_lst)); + if (!nl) + { + LM_ERR("app_java: force_send_socket: pkg_malloc() has failed. Not enough memory!\n"); + return -1; + } + + si = (struct socket_id *)pkg_malloc(sizeof(struct socket_id)); + if (!si) + { + LM_ERR("app_java: force_send_socket: pkg_malloc() has failed. Not enough memory!\n"); + return -1; + } + + + memset(&act, 0, sizeof(act)); + act.type = FORCE_SEND_SOCKET_T; + + nl->name = (char *)(*jenv)->GetStringUTFChars(jenv, jsrchost, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + nl->next = NULL; + nl->flags = 0; + + si->addr_lst = nl; + si->flags = 0; + si->proto = PROTO_NONE; + si->port = (int)jsrcport; + + act.val[0].type = SOCKETINFO_ST; + act.val[0].u.data = si; + + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + + (*jenv)->ReleaseStringUTFChars(jenv, jsrchost, nl->name); + pkg_free(nl); + pkg_free(si); + return (jint)retval; +} + + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: forward()I + Method(o): forward(Ljava/lang/String;I)I + Prototype: public static native int forward(); + Prototype(o): public static native int forward(String ruri, int i); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_forward(JNIEnv *jenv, jobject this, jstring jrurihost, jint juriport) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + jboolean is_copy; + char *crurihost; + + if (!msg) + { + LM_ERR("app_java: forward: Can't process, msg=NULL\n"); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = FORWARD_T; + + crurihost = NULL; + + if (jrurihost) + { + crurihost = (char *)(*jenv)->GetStringUTFChars(jenv, jrurihost, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + act.val[0].type = URIHOST_ST; + act.val[0].u.str.s = crurihost; + act.val[0].u.str.len = strlen(crurihost); + + act.val[1].type = NUMBER_ST; + act.val[1].u.number = (int)juriport; + } + + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + + if (crurihost) + { + (*jenv)->ReleaseStringUTFChars(jenv, jrurihost, crurihost); + } + + return (jint)retval; +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: isflagset(I)Z + Prototype: public static native boolean isflagset(int flag); +*/ +JNIEXPORT jboolean JNICALL Java_org_siprouter_CoreMethods_isflagset(JNIEnv *jenv, jobject this, jint jflag) +{ + if (!msg) + { + LM_ERR("app_java: isflagset: Can't process, msg=NULL\n"); + return -1; + } + + return isflagset(msg, (int)jflag) == 1 ? JNI_TRUE : JNI_FALSE; +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: setflag(I)V + Prototype: public static native void setflag(int flag); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_CoreMethods_setflag(JNIEnv *jenv, jobject this, jint jflag) +{ + if (!msg) + { + LM_ERR("app_java: setflag: Can't process, msg=NULL\n"); + return; + } + + setflag(msg, (int)jflag); +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: resetflag(I)V + Prototype: public static native void resetflag(int flag); +*/ +JNIEXPORT void JNICALL Java_org_siprouter_CoreMethods_resetflag(JNIEnv *jenv, jobject this, jint jflag) +{ + if (!msg) + { + LM_ERR("app_java: resetflag: Can't process, msg=NULL\n"); + return; + } + + resetflag(msg, (int)jflag); +} + + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: revert_uri()I + Prototype: public static native int revert_uri(); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_revert_1uri(JNIEnv *jenv, jobject this) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + + if (!msg) + { + LM_ERR("app_java: revert_uri: Can't process, msg=NULL\n"); + return -1; + } + + memset(&act, 0, sizeof(act)); + act.type = REVERT_URI_T; + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + return (jint)retval; +} + +/* + *** Java API *** + Package: org.siprouter + Class: CoreMethods + Method: route(Ljava/lang/String)I + Prototype: public static native int route(String target); +*/ +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_route(JNIEnv *jenv, jobject this, jstring jtarget) +{ + struct action act; + struct run_act_ctx ra_ctx; + int retval; + jboolean is_copy; + char *ctarget; + + ctarget = (char *)(*jenv)->GetStringUTFChars(jenv, jtarget, &is_copy); + if ((*jenv)->ExceptionCheck(jenv)) + { + handle_exception(); + return -1; + } + + retval = route_lookup(&main_rt, ctarget); + + if (retval == -1) // route index lookup failed. + { + LM_ERR("app_java: route: failed to find route name '%s'\n", ctarget); + (*jenv)->ReleaseStringUTFChars(jenv, jtarget, ctarget); + return -1; + } + + act.type = ROUTE_T; + act.val[0].type = NUMBER_ST; + act.val[0].u.number = retval; + + init_run_actions_ctx(&ra_ctx); + retval = do_action(&ra_ctx, &act, msg); + + (*jenv)->ReleaseStringUTFChars(jenv, jtarget, ctarget); + + return retval; +} + diff --git a/modules/app_java/java_native_methods.h b/modules/app_java/java_native_methods.h new file mode 100644 index 000000000..d96718c66 --- /dev/null +++ b/modules/app_java/java_native_methods.h @@ -0,0 +1,86 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __JAVA_NATIVE_METHODS_H__ +#define __JAVA_NATIVE_METHODS_H__ + +#include "../../str.h" +#include "../../sr_module.h" + +#include + +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1ERR(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1WARN(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1NOTICE(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1INFO(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1DBG(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1CRIT(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1ALERT(JNIEnv *, jobject, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1GEN1(JNIEnv *, jobject, jint, jstring); +JNIEXPORT void JNICALL Java_org_siprouter_NativeMethods_LM_1GEN2(JNIEnv *, jobject, jint, jint, jstring); + +JNIEXPORT jint JNICALL Java_org_siprouter_NativeMethods_KamExec(JNIEnv *, jobject, jstring, jobjectArray); +int KamExec(JNIEnv *, char *, int, char **); + + +JNIEXPORT jobject JNICALL Java_org_siprouter_SipMsg_ParseSipMsg(JNIEnv *, jobject); + +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getMsgType(JNIEnv *, jobject); +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getStatus(JNIEnv *, jobject); +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getRURI(JNIEnv *, jobject); +JNIEXPORT jobject JNICALL Java_org_siprouter_SipMsg_getSrcAddress(JNIEnv *, jobject); +JNIEXPORT jobject JNICALL Java_org_siprouter_SipMsg_getDstAddress(JNIEnv *, jobject); +JNIEXPORT jstring JNICALL Java_org_siprouter_SipMsg_getBuffer(JNIEnv *, jobject); + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_seturi(JNIEnv *, jobject, jstring); +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_rewriteuri(JNIEnv *, jobject, jstring); +jint cf_seturi(JNIEnv *, jobject, jstring, char *); + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_add_1local_1rport(JNIEnv *, jobject); +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_append_1branch(JNIEnv *, jobject, jstring); +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_drop(JNIEnv *, jobject); + +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_force_1rport(JNIEnv *, jobject); +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_add_1rport(JNIEnv *, jobject); +jint cf_force_rport(JNIEnv *, jobject, char *); + +// not confirmed as working +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_force_1send_1socket(JNIEnv *, jobject, jstring, jint); + +// not confirmed as working +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_forward(JNIEnv *, jobject, jstring, jint); + +JNIEXPORT jboolean JNICALL Java_org_siprouter_CoreMethods_isflagset(JNIEnv *, jobject, jint); +JNIEXPORT void JNICALL Java_org_siprouter_CoreMethods_setflag(JNIEnv *, jobject, jint); +JNIEXPORT void JNICALL Java_org_siprouter_CoreMethods_resetflag(JNIEnv *, jobject, jint); +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_revert_1uri(JNIEnv *, jobject); +JNIEXPORT jint JNICALL Java_org_siprouter_CoreMethods_route(JNIEnv *, jobject, jobject); + +#endif diff --git a/modules/app_java/java_sig_parser.c b/modules/app_java/java_sig_parser.c new file mode 100644 index 000000000..90cd5d078 --- /dev/null +++ b/modules/app_java/java_sig_parser.c @@ -0,0 +1,439 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include + +#include "../../str.h" +#include "../../sr_module.h" + +#include + +#include "global.h" +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" +#include "java_native_methods.h" +#include "java_sig_parser.h" + +int is_sig_allowed(char *s) +{ + if (s == NULL || strlen(s) < 1) + return 0; + + if (!strcmp(s, " ") || !strcmp(s, "\n") || !strcmp(s, "\r") || !strcmp(s, "\t")) + { + LM_ERR("signature error: '%s' contains whitespaces or any unparsable chars.\n", s); + return 0; + } + +// LM_ERR("s='%s', strlen(s)=%d\n", s, strlen(s)); + + if (strlen(s) == 1) // signature is single modifier (primitive) + { + if (!strcmp(s, "[")) // invalid signature modifier definition + { + LM_ERR("signature error: '%s': no type of array specified.\n", s); + return 0; + } + + if (!strcmp(s, "L")) // invalid signature modifier definition + { + LM_ERR("signature error '%s': no object specified.\n", s); + return 0; + } + +#ifndef JAVA_INV_SUPP_TYPE_VOID + if (!strcmp(s, "V")) + { + LM_ERR("signature error '%s': no object specified.\n", s); + return 0; + } +#endif + + } + else // a complex signature (object) + { +#ifndef JAVA_INV_SUPP_TYPE_ARRAYS + if (strcmp(s, "[") > 0) + { + LM_ERR("signature error: '%s' denotes array which isn't supported yet.\n", s); + return 0; + } +#endif + + + if (strrchr(&s[0], 'L') > 0) + { +#ifndef JAVA_INV_SUPP_TYPE_OBJECTS + LM_ERR("signature error: '%s' denotes object which isn't supported yet.\n", s); + return 0; +#else + int f = 0; +#ifdef JAVA_INV_SUPP_TYPE_BOOLEAN + if (!strcmp(s, "Ljava/lang/Boolean;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_BYTE + if (!strcmp(s, "Ljava/lang/Byte;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_CHARACTER + if (!strcmp(s, "Ljava/lang/Character;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_DOUBLE + if (!strcmp(s, "Ljava/lang/Double;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_FLOAT + if (!strcmp(s, "Ljava/lang/Float;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_INTEGER + if (!strcmp(s, "Ljava/lang/Integer;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_LONG + if (!strcmp(s, "Ljava/lang/Long;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_SHORT + if (!strcmp(s, "Ljava/lang/Short;")) + f = 1; +#endif +#ifdef JAVA_INV_SUPP_TYPE_STRING + if (!strcmp(s, "Ljava/lang/String;")) + f = 1; +#endif + if (f == 0) + { + LM_ERR("signature '%s' isn't supported yet.\n", s); + return 0; + } +#endif + } + + } + + return 1; +} + + + +static char *get_conv_err_str(int en) +{ + switch(en) + { + case EINVAL: return "The value of base constant is not supported or no conversion could be performed"; + case ERANGE: return "The given string was out of range; the value converted has been clamped."; + default: return "General parse error"; + } +} + + +/* explaination of jvalue fields: +typedef union jvalue { + jboolean z; + jbyte b; + jchar c; + jshort s; + jint i; + jlong j; + jfloat f; + jdouble d; + jobject l; +} jvalue; +*/ + +jvalue *get_value_by_sig_type(char *sig, char *pval) +{ + char *endptr; + char scptr; + int siptr; + long slptr; + short ssptr; + double sdptr; + float sfptr; + jstring sjptr; + jvalue *ret; + + ret = (jvalue *)pkg_malloc(sizeof(jvalue)); + if (!ret) + { + LM_ERR("pkg_malloc() has failed. Not enouph memory!\n"); + return NULL; + } + + if (sig == NULL || strlen(sig) <= 0) + { + LM_ERR("app_java: Can't process empty or NULL signature.\n"); + pkg_free(ret); + return NULL; + } + if (pval == NULL || strlen(pval) <= 0) + { + LM_ERR("app_java: Can't process empty or NULL parameter value.\n"); + pkg_free(ret); + return NULL; + } + + // boolean + if (!strncmp(sig, "Z", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_BOOLEAN) + || !strcmp(sig, "Ljava/lang/Boolean;") +#endif + ) { + if (!strncasecmp(pval, "true", 4)) + (*ret).z = (jboolean)JNI_TRUE; +/* comment this block to avoid conversation '1' to 'true' */ + else if (!strncmp(pval, "1", 1)) + (*ret).z = (jboolean)JNI_TRUE; + else if (!strncasecmp(pval, "false", 5)) + (*ret).z = (jboolean)JNI_FALSE; +/* comment this block to avoid conversation '0' to 'false' */ + else if (!strncmp(pval, "0", 1)) + (*ret).z = (jboolean)JNI_FALSE; + else + { + LM_ERR("app_java: Can't cast '%s' to type '%s'.\n", pval, sig); + pkg_free(ret); + return NULL; + } + + return ret; + } + else + // byte + if (!strncmp(sig, "B", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_BYTE) + || !strcmp(sig, "Ljava/lang/Byte;") +#endif + ) { +// skptr = (signed char)char2jbyte(pval); + sscanf(pval, "%x", &siptr); + if (siptr == 0 && errno != 0) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (siptr < SCHAR_MAX || siptr > SCHAR_MAX) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).b = (jbyte)siptr; + return ret; + } + else + // char + if (!strncmp(sig, "C", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_CHARACTER) + || !strcmp(sig, "Ljava/lang/Character;") +#endif + ) { + sscanf(pval, "%c", &scptr); + if (scptr == 0 && errno != 0) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (scptr < CHAR_MIN || scptr > CHAR_MAX) // overflow + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).c = (jchar)scptr; + return ret; + } + else + // double + if (!strncmp(sig, "D", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_DOUBLE) + || !strcmp(sig, "Ljava/lang/Double;") +#endif + ) { + sdptr = (double)strtod(pval, &endptr); + if ((sdptr == 0 && errno != 0) || (pval == endptr)) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (sdptr < LLONG_MIN || sdptr > LLONG_MAX) // overflow + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).d = (jdouble)sdptr; + return ret; + } + else + // float + if (!strncmp(sig, "F", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_FLOAT) + || !strcmp(sig, "Ljava/lang/Float;") +#endif + ) { + sfptr = (float)strtof(pval, &endptr); + if ((sfptr == 0 && errno != 0) || (pval == endptr)) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (sfptr < FLT_MIN || sfptr > FLT_MAX) // overflow + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).f = (jfloat)sfptr; + return ret; + } + else + // integer + if (!strncmp(sig, "I", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_INTEGER) + || !strcmp(sig, "Ljava/lang/Integer;") +#endif + ) { + slptr = strtol(pval, &endptr, 10); + if ((slptr == 0 && errno != 0) || (pval == endptr)) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (slptr < INT_MIN || slptr > INT_MAX) // overflow + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).i = (jint)slptr; + return ret; + } + else + // long + if (!strncmp(sig, "J", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_LONG) + || !strcmp(sig, "Ljava/lang/Long;") +#endif + ) { + slptr = (long)strtol(pval, &endptr, 10); + if ((slptr == 0 && errno != 0) || (pval == endptr)) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (slptr < LONG_MIN || slptr > LONG_MAX) // overflow + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).j = (jlong)slptr; + return ret; + } + else + // short + if (!strncmp(sig, "S", 1) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_SHORT) + || !strcmp(sig, "Ljava/lang/Short;") +#endif + ) { + ssptr = (short)strtod(pval, &endptr); + if ((ssptr == 0 && errno != 0) || (pval == endptr)) + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Error: %s.\n", pval, sig, get_conv_err_str(errno)); + pkg_free(ret); + return NULL; + } + if (ssptr < SHRT_MIN || ssptr > SHRT_MAX) // overflow + { + LM_ERR("app_java: Can't cast '%s' to type '%s'. Reason: overflow.", pval, sig); + pkg_free(ret); + return NULL; + } + + (*ret).s = (jshort)ssptr; + return ret; + } + // String (object) +#if defined(JAVA_INV_SUPP_TYPE_OBJECTS) && defined(JAVA_INV_SUPP_TYPE_STRING) + else + if (!strcmp(sig, "Ljava/lang/String;")) + { + sjptr = (*env)->NewStringUTF(env, pval); + if ((*env)->ExceptionCheck(env)) + { + pkg_free(ret); + handle_exception(); + return NULL; + } +/* + if (pval != NULL && sjptr == NULL) + { + pkg_free(ret); + return NULL; + } +*/ + (*ret).l = (jstring)sjptr; + return ret; + } +#endif +#ifdef JAVA_INV_SUPP_TYPE_VOID + else + if (!strncmp(sig, "V", 1)) + { + pkg_free(ret); + return NULL; + } +#endif + else + { + // unknown sig + LM_ERR("app_java: Can't cast '%s' to signature '%s'\n", pval, sig); + pkg_free(ret); + return NULL; + } + + return NULL; +} + diff --git a/modules/app_java/java_sig_parser.h b/modules/app_java/java_sig_parser.h new file mode 100644 index 000000000..49038fdc2 --- /dev/null +++ b/modules/app_java/java_sig_parser.h @@ -0,0 +1,50 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __JAVA_SIG_PARSER_H__ +#define __JAVA_SIG_PARSER_H__ + +#include "../../str.h" +#include "../../sr_module.h" + +#include + +#define JAVA_INV_SUPP_TYPE_OBJECTS + +#define JAVA_INV_SUPP_TYPE_BOOLEAN +#define JAVA_INV_SUPP_TYPE_BYTE +#define JAVA_INV_SUPP_TYPE_CHARACTER +#define JAVA_INV_SUPP_TYPE_DOUBLE +#define JAVA_INV_SUPP_TYPE_FLOAT +#define JAVA_INV_SUPP_TYPE_INTEGER +#define JAVA_INV_SUPP_TYPE_LONG +#define JAVA_INV_SUPP_TYPE_SHORT +#define JAVA_INV_SUPP_TYPE_STRING +#define JAVA_INV_SUPP_TYPE_VOID + +int is_sig_allowed(char *); +jvalue *get_value_by_sig_type(char *, char *); + + +#endif diff --git a/modules/app_java/java_support.c b/modules/app_java/java_support.c new file mode 100644 index 000000000..452f36871 --- /dev/null +++ b/modules/app_java/java_support.c @@ -0,0 +1,220 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include + +#include "../../str.h" +#include "../../sr_module.h" + +#include + +#include "global.h" + +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" + + +static char *_append_exception_trace_messages(char *msg_str, jthrowable a_exception, jmethodID a_mid_throwable_getCause, jmethodID a_mid_throwable_getStackTrace, jmethodID a_mid_throwable_toString, jmethodID a_mid_frame_toString) +{ + jobjectArray frames; + jsize frames_length, i; + jstring msg_obj; + jobject frame; + jthrowable cause; + jclass exClass; + jmethodID mid; + jboolean isCopy; + + const char *tmpbuf; + + // Get the array of StackTraceElements. + frames = (jobjectArray) (*env)->CallObjectMethod(env, a_exception, a_mid_throwable_getStackTrace); + if (!frames) + { + exClass = (*env)->GetObjectClass(env, a_exception); + mid = (*env)->GetMethodID(env, exClass, "toString", "()Ljava/lang/String;"); + msg_obj = (jstring) (*env)->CallObjectMethod(env, a_exception, mid); + + isCopy = JNI_FALSE; + tmpbuf = (*env)->GetStringUTFChars(env, msg_obj, &isCopy); + + strcat(msg_str, tmpbuf); + strcat(msg_str, "\n <>"); + + (*env)->ReleaseStringUTFChars(env, msg_obj, tmpbuf); + (*env)->DeleteLocalRef(env, msg_obj); + + return msg_str; + } + else + { + frames_length = (*env)->GetArrayLength(env, frames); + } + + // Add Throwable.toString() before descending stack trace messages. + if (frames != 0) + { + msg_obj = (jstring) (*env)->CallObjectMethod(env, a_exception, a_mid_throwable_toString); + tmpbuf = (*env)->GetStringUTFChars(env, msg_obj, 0); + + strcat(msg_str, "Exception in thread \"main\" "); + strcat(msg_str, tmpbuf); + + (*env)->ReleaseStringUTFChars(env, msg_obj, tmpbuf); + (*env)->DeleteLocalRef(env, msg_obj); + } + + + // Append stack trace messages if there are any. + if (frames_length > 0) + { + for (i=0; iGetObjectArrayElement(env, frames, i); + msg_obj = (jstring) (*env)->CallObjectMethod(env, frame, a_mid_frame_toString); + + tmpbuf = (*env)->GetStringUTFChars(env, msg_obj, 0); + + strcat(msg_str, "\n at "); + strcat(msg_str, tmpbuf); + + (*env)->ReleaseStringUTFChars(env, msg_obj, tmpbuf); + (*env)->DeleteLocalRef(env, msg_obj); + (*env)->DeleteLocalRef(env, frame); + } + } + else + { + strcat(msg_str, "\n <>"); + } + + + // If 'a_exception' has a cause then append the + // stack trace messages from the cause. + if (frames != 0) + { + cause = (jthrowable) (*env)->CallObjectMethod(env, a_exception, a_mid_throwable_getCause); + if (cause != 0) + { + tmpbuf = _append_exception_trace_messages(msg_str, cause, a_mid_throwable_getCause, a_mid_throwable_getStackTrace, a_mid_throwable_toString, a_mid_frame_toString); + strcat(msg_str, tmpbuf); + } + } + + if (msg_str != NULL) + return strdup(msg_str); + else + return NULL; +} + +void handle_exception(void) +{ + char *error_msg = NULL; + char msg_str[8192]; + + jthrowable exception; + jclass throwable_class, frame_class; + jmethodID mid_throwable_getCause, mid_throwable_getStackTrace; + jmethodID mid_throwable_toString, mid_frame_toString; + + if (!(*env)->ExceptionCheck(env)) + return; + + memset(&msg_str, 0, sizeof(msg_str)); + + // Get the exception and clear as no + // JNI calls can be made while an exception exists. + exception = (*env)->ExceptionOccurred(env); + if (exception) + { +// (*env)->ExceptionDescribe(env); + (*env)->ExceptionClear(env); + + throwable_class = (*env)->FindClass(env, "java/lang/Throwable"); + + mid_throwable_getCause = (*env)->GetMethodID(env, throwable_class, "getCause", "()Ljava/lang/Throwable;"); + mid_throwable_getStackTrace = (*env)->GetMethodID(env, throwable_class, "getStackTrace", "()[Ljava/lang/StackTraceElement;"); + mid_throwable_toString = (*env)->GetMethodID(env, throwable_class, "toString", "()Ljava/lang/String;"); + + frame_class = (*env)->FindClass(env, "java/lang/StackTraceElement"); + mid_frame_toString = (*env)->GetMethodID(env, frame_class, "toString", "()Ljava/lang/String;"); + + error_msg = _append_exception_trace_messages(msg_str, exception, mid_throwable_getCause, mid_throwable_getStackTrace, mid_throwable_toString, mid_frame_toString); + + + (*env)->DeleteLocalRef(env, exception); + } + + LM_ERR("Exception:\n%s\n", error_msg == NULL ? "(no info)" : error_msg); + +} + +void ThrowNewException(JNIEnv *env, char *fmt, ...) +{ + va_list ap; + char buf[1024]; + + memset(buf, 0, sizeof(char)); + + va_start(ap, fmt); + vsnprintf(buf, 1024, fmt, ap); + va_end(ap); + + (*env)->ThrowNew(env, (*env)->FindClass(env, "java/lang/Exception"), buf); +} + +void handle_VM_init_failure(int res) +{ + switch(res) + { + case -1: + LM_ERR("Couldn't initialize Java VM: unknown error\n"); + break; + case -2: + LM_ERR("Couldn't initialize Java VM: thread detached from the VM\n"); + break; + case -3: + LM_ERR("Couldn't initialize Java VM: JNI version error\n"); + break; + case -4: + LM_ERR("Couldn't initialize Java VM: not enough memory\n"); + break; + case -5: + LM_ERR("Couldn't initialize Java VM: VM already created\n"); + break; + case -6: + LM_ERR("Couldn't initialize Java VM: invalid arguments\n"); + break; + default: + LM_ERR("Couldn't initialize Java VM. Error code: %d\n", res); + break; + } +} + + diff --git a/modules/app_java/java_support.h b/modules/app_java/java_support.h new file mode 100644 index 000000000..fec4a4a76 --- /dev/null +++ b/modules/app_java/java_support.h @@ -0,0 +1,38 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __JAVA_SUPPORT_H__ +#define __JAVA_SUPPORT_H__ + +#include "../../str.h" +#include "../../sr_module.h" + +#include + +void handle_exception(void); +void ThrowNewException(JNIEnv *, char *, ...); +void handle_VM_init_failure(int res); + + +#endif diff --git a/modules/app_java/kamailio_java_folder/java-untested/Kamailio.java b/modules/app_java/kamailio_java_folder/java-untested/Kamailio.java new file mode 100644 index 000000000..f70676b2b --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/Kamailio.java @@ -0,0 +1,388 @@ + +import java.lang.*; +import java.io.*; + +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +//import org.siprouter.CoreMethods.*; + +public class Kamailio extends NativeMethods +{ + static + { + System.load("/opt/kamailio/lib/kamailio/modules/app_java.so"); + } + + /* Constructor. Do not remove !!! */ + public Kamailio() + { + } + + + public int child_init(int rank) + { + return 1; + } + + public int TestMethod() + { + + int retval = 0; + boolean boolstate = false; + +/* + LM_INFO(String.format("Msg Type: %s\n", SipMsg.getMsgType())); + + IPPair src = SipMsg.getSrcAddress(); + if (src != null) + { + LM_INFO(String.format("src address=%s, src port=%d\n", src.ip, src.port)); + } + else + { + LM_ERR("IPPair src is null!"); + } + + IPPair dst = SipMsg.getDstAddress(); + if (dst != null) + { + LM_INFO(String.format("dst address=%s, dst port=%d\n", dst.ip, dst.port)); + } + else + { + LM_ERR("IPPair dst is null!"); + } + + LM_INFO(String.format("buffer:\n%s\n", SipMsg.getBuffer().trim())); + + SipMsg msg = SipMsg.ParseSipMsg(); + if (msg != null) + { + LM_INFO("msg:\n"); + LM_INFO(String.format("\tid=%d\n", msg.id)); + LM_INFO(String.format("\tpid=%d\n", msg.pid)); + LM_INFO(String.format("\teoh='%s'\n", msg.eoh)); + LM_INFO(String.format("\tunparsed='%s'\n", msg.unparsed)); + LM_INFO(String.format("\tbuf='%s'\n", msg.buf)); + LM_INFO(String.format("\tlen=%d\n", msg.len)); + LM_INFO(String.format("\tnew_uri='%s'\n", msg.new_uri)); + LM_INFO(String.format("\tdst_uri='%s'\n", msg.dst_uri)); + LM_INFO(String.format("\tparsed_uri_ok=%d\n", msg.parsed_uri_ok)); + LM_INFO(String.format("\tparsed_orig_ruri_ok=%d\n", msg.parsed_orig_ruri_ok)); + LM_INFO(String.format("\tadd_to_branch_s='%s'\n", msg.add_to_branch_s)); + LM_INFO(String.format("\tadd_to_branch_len=%d\n", msg.add_to_branch_len)); + LM_INFO(String.format("\thash_index=%d\n", msg.hash_index)); + LM_INFO(String.format("\tmsg_flags=%d\n", msg.msg_flags)); + LM_INFO(String.format("\tset_global_address='%s'\n", msg.set_global_address)); + LM_INFO(String.format("\tset_global_port='%s'\n", msg.set_global_port)); + } + else + { + LM_ERR("SipMsg msg is null!\n"); + } + +*/ +// retval = KamExec("append_hf", "P-hint: VOICEMAIL\r\n"); + +// KamExec("sl_send_reply", "404", "Not relaying"); + +// retval = KamExec("is_method", "INVITE|SUBSCRIBE"); + +// LM_INFO(String.format("return value: %d\n", retval)); + + + + +// retval = CoreMethods.rewriteuri("sip:0002@192.168.254.99:5060"); + + +// retval = KamExec("rewriteuri", "sip:0002@192.168.254.99:5060"); +// retval = KamExec("sl_send_reply", "404", "relaying failed"); + +// LM_INFO(String.format("return value: %d\n", retval)); + + +// retval = CoreMethods.add_local_rport(); +// retval = CoreMethods.drop(); +// retval = CoreMethods.force_rport(); +// retval = CoreMethods.force_send_socket("192.168.254.9", 50349); +// retval = CoreMethods.forward("198.61.206.9", 5060); +// retval = CoreMethods.forward(); + + +// CoreMethods.setflag(3); + +// boolstate = CoreMethods.isflagset(3); +// LM_INFO("return state: " + boolstate + "\n"); + +// retval = CoreMethods.revert_uri(); + +// retval = CoreMethods.route("NATDETECT"); +// retval = CoreMethods.route("5"); + + retval = KamExec("is_method", "INVITE"); + + LM_INFO(String.format("return value: %d\n", retval)); + + + + return 1; + } + + + public static final int FLT_ACC = 1; + public static final int FLT_ACCMISSED = 2; + public static final int FLT_ACCFAILED = 3; + public static final int FLT_NATS = 5; + public static final int FLB_NATB = 6; + public static final int FLB_NATSIPPING = 7; + + + /// route /// + public int route() + { + return 1; + } + + + + /// request_route /// + public int request_route() + { + + // per request initial checks + CoreMethods.route("REQINIT"); + + // NAT detection + CoreMethods.route("NATDETECT"); + + // CANCEL processing + if (WrappedMethods.is_method("CANCEL")) + { + if (WrappedMethods.t_check_trans()) + { + WrappedMethods.t_relay(); + } + + return 1; + } + +/* + + + // handle requests within SIP dialogs + CoreMethods.route("WITHINDLG"); + + //### only initial requests (no To tag) + WrappedMethods.t_check_trans(); + + // authentication + CoreMethods.route("AUTH"); + + // record routing for dialog forming requests (in case they are routed) + // - remove preloaded route headers + WrappedMethods.remove_hf("Route"); + if (WrappedMethods.is_method("INVITE|SUBSCRIBE")) + { + WrappedMethods.record_route(); + } + + // account only INVITEs + if (WrappedMethods.is_method("INVITE")) + { + CoreMethods.setflag(FLT_ACC); // do accounting + } + + // dispatch requests to foreign domains + CoreMethods.route("SIPOUT"); + + // ### requests for my local domains + + // handle presence related requests + CoreMethods.route("PRESENCE"); + + String ruri = SipMsg.getRURI(); + if (ruri == null || ruri.length() <= 0) + { + // request with no Username in RURI + WrappedMethods.sl_send_reply("484", "Address Incomplete"); + return 1; + } + + // dispatch destinations to PSTN + CoreMethods.route("PSTN"); + + // user location service + CoreMethods.route("LOCATION"); + + CoreMethods.route("RELAY"); + +*/ + + return 1; + } + + + + + + + + + public int Route_REQINIT() + { + return 1; + } + + public int Route_NATDETECT() + { + return 1; + } + + public int Route_WITHINDLG() + { + if (WrappedMethods.has_totag()) + { + // sequential request withing a dialog should + // take the path determined by record-routing + + if (WrappedMethods.loose_route()) + { + CoreMethods.route("DLGURI"); + + if (WrappedMethods.is_method("BYE")) + { + CoreMethods.setflag(FLT_ACC); // do accounting ... + CoreMethods.setflag(FLT_ACCFAILED); // ... even if the transaction fails + } + else if (WrappedMethods.is_method("ACK")) + { + // ACK is forwarded statelessy + CoreMethods.route("NATMANAGE"); + } + else if (WrappedMethods.is_method("NOTIFY")) + { + // Add Record-Route for in-dialog NOTIFY as per RFC 6665. + WrappedMethods.record_route(); + } + + CoreMethods.route("RELAY"); + } + else + { +/* // this block would not work -- 'uri' and 'myself' aren't implemented yet // + if (is_method("SUBSCRIBE") && uri == myself) { + # in-dialog subscribe requests + route(PRESENCE); + exit; + } +*/ + if (WrappedMethods.is_method("ACK")) + { + if (WrappedMethods.t_check_trans()) + { + // no loose-route, but stateful ACK; + // must be an ACK after a 487 + // or e.g. 404 from upstream server + WrappedMethods.t_relay(); + } + else + { + // ACK without matching transaction ... ignore and discard + return 1; + } + } + WrappedMethods.sl_send_reply("404", "Not here"); + } + + } + + + return 1; + } + + public int Route_AUTH() + { + return 1; + } + + public int Route_SIPOUT() + { + return 1; + } + + public int Route_PRESENCE() + { + return 1; + } + + public int Route_PSTN() + { + return 1; + } + + public int Route_LOCATION() + { + return 1; + } + + public int Route_RELAY() + { + // enable additional event routes for forwarded requests + // - serial forking, RTP relaying handling, a.s.o. + if (WrappedMethods.is_method("INVITE|SUBSCRIBE")) + { +//// WrappedMethods.t_on_branch("MANAGE_BRANCH"); +//// WrappedMethods.t_on_reply("MANAGE_REPLY"); + } + + if (WrappedMethods.is_method("INVITE")) + { +//// WrappedMethods.t_on_failure("MANAGE_FAILURE"); + } + + if (!WrappedMethods.t_relay()) + { + WrappedMethods.sl_reply_error(); + } + + return 1; + } + + public int Route_REGISTRAR() + { + if (WrappedMethods.is_method("REGISTER")) + { + if (CoreMethods.isflagset(FLT_NATS)) + { + CoreMethods.setflag(FLB_NATB); + // uncomment next line to do SIP NAT pinging + // CoreMethods.setflag(FLB_NATSIPPING); + } + + if (!WrappedMethods.save("location")) + { + WrappedMethods.sl_reply_error(); + } + } + + return 1; + } + +} + + + + + + + + + + + + + + + diff --git a/modules/app_java/kamailio_java_folder/java-untested/WrappedMethods.java b/modules/app_java/kamailio_java_folder/java-untested/WrappedMethods.java new file mode 100644 index 000000000..b88cbd514 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/WrappedMethods.java @@ -0,0 +1,87 @@ +import java.lang.*; +import java.io.*; + +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +public class WrappedMethods extends NativeMethods +{ + public static boolean is_method(String method) + { + if (KamExec("is_method", method) == -1) + return false; + else + return true; + } + + public static boolean t_check_trans() + { + if (KamExec("t_check_trans") == -1) + return false; + else + return true; + } + + public static boolean t_relay() + { + if (KamExec("t_relay") == -1) + return false; + else + return true; + } + + public static void record_route() + { + KamExec("record_route"); + } + + public static void append_hf(String txt) + { + KamExec("append_hf", txt); + } + + public static void append_hf(String txt, String hdr) + { + KamExec("append_hf", txt, hdr); + } + + public static void remove_hf(String hname) + { + KamExec("remove_hf", hname); + } + + public static void sl_send_reply(String replycode, String replymsg) + { + KamExec("sl_send_reply", replycode, replymsg); + } + + public static void sl_reply_error() + { + KamExec("sl_reply_error"); + } + + public static boolean has_totag() + { + if (KamExec("has_totag") == -1) + return false; + else + return true; + } + + public static boolean loose_route() + { + if (KamExec("loose_route") == -1) + return false; + else + return true; + } + + public static boolean save(String location) + { + if (KamExec("save", location) == -1) + return false; + else + return true; + } + +} diff --git a/modules/app_java/kamailio_java_folder/java-untested/build.xml b/modules/app_java/kamailio_java_folder/java-untested/build.xml new file mode 100644 index 000000000..02117ed23 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/build.xml @@ -0,0 +1,46 @@ + + + + Building Kamailio examples + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/CoreMethods.java b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/CoreMethods.java new file mode 100644 index 000000000..42800f2c0 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/CoreMethods.java @@ -0,0 +1,34 @@ + +package org.siprouter; +import java.lang.*; + +public class CoreMethods +{ + public static native int seturi(String ruri); + public static native int rewriteuri(String ruri); // alias to seturi + + public static native int add_local_rport(); + + public static native int append_branch(); + public static native int append_branch(String branch); + + public static native int drop(); + + public static native int force_rport(); + public static native int add_rport(); // alias to force_rport + + public static native int force_send_socket(String srchost, int srcport); + + public static native int forward(); + public static native int forward(String ruri, int port); + + public static native boolean isflagset(int flag); + public static native void setflag(int flag); + public static native void resetflag(int flag); + + public static native int revert_uri(); + + public static native int route(String target); + +} + diff --git a/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/IPPair.java b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/IPPair.java new file mode 100644 index 000000000..f7eae1be5 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/IPPair.java @@ -0,0 +1,15 @@ + +package org.siprouter; +import java.lang.*; + +public class IPPair +{ + public final String ip; + public final int port; + + public IPPair(String ip, int port) + { + this.ip = ip; + this.port = port; + } +} diff --git a/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeInterface.java b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeInterface.java new file mode 100644 index 000000000..e93343f94 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeInterface.java @@ -0,0 +1,46 @@ + +package org.siprouter; +import java.lang.*; + +public interface NativeInterface +{ + public abstract class Ranks + { + public static final int PROC_MAIN = 0; // Main ser process + public static final int PROC_TIMER = -1; // Timer attendant process + public static final int PROC_RPC = -2; // RPC type process + public static final int PROC_FIFO = PROC_RPC; // FIFO attendant process + public static final int PROC_TCP_MAIN = -4; // TCP main process + public static final int PROC_UNIXSOCK = -5; // Unix socket server + public static final int PROC_ATTENDANT = -10; // main "attendant process + public static final int PROC_INIT = -127; /* special rank, the context is the main ser process, but this is + guaranteed to be executed before any rocess is forked, so it + can be used to setup shared variables that depend on some + after mod_init available information (e.g. total number of processes). + @warning child_init(PROC_MAIN) is again called in the same process (main) + (before tcp), so make sure you don't init things twice, bot in PROC_MAIN and PROC_INT + */ + public static final int PROC_NOCHLDINIT = -128; // no child init functions will be called if this rank is used in fork_process() + public static final int PROC_SIPINIT = 1; // First SIP worker - some modules do special processing in this child, like loading db data + public static final int PROC_SIPRPC = 127; /* Used to init RPC worker as SIP commands handler. + Don't do any special processing in the child init with this rank - just bare child initialization + */ + public static final int PROC_MIN = PROC_NOCHLDINIT; // Minimum process rank + } + + public abstract class LogParams + { + public static final int L_ALERT = -5; + public static final int L_BUG = -4; + public static final int L_CRIT2 = -3; // like L_CRIT, but adds prefix + public static final int L_CRIT = -2; // no prefix added + public static final int L_ERR = -1; + public static final int L_WARN = 0; + public static final int L_NOTICE = 1; + public static final int L_INFO = 2; + public static final int L_DBG = 3; + + public static final int DEFAULT_FACILITY = 0; + } +} + diff --git a/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeMethods.java b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeMethods.java new file mode 100644 index 000000000..ba2ef1ae2 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/NativeMethods.java @@ -0,0 +1,22 @@ + +package org.siprouter; +import java.lang.*; + +public abstract class NativeMethods +{ + public static native void LM_GEN1(int logLevel, String s); + public static native void LM_GEN2(int logFacility, int logLevel, String s); + public static native void LM_ALERT(String s); + public static native void LM_CRIT(String s); + public static native void LM_WARN(String s); + public static native void LM_NOTICE(String s); + public static native void LM_ERR(String s); + public static native void LM_INFO(String s); + public static native void LM_DBG(String s); + + + protected final int mop = 0x0; // 'message object pointer' (pointer to an original c pointer of 'struct sip_msg') + + public static native int KamExec(String fname, String... params); +} + diff --git a/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/SipMsg.java b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/SipMsg.java new file mode 100644 index 000000000..e544905e8 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java-untested/siprouter_src/SipMsg.java @@ -0,0 +1,43 @@ + +package org.siprouter; +import java.lang.*; + +public abstract class SipMsg +{ + /* Constructor. Do not remove !!! */ + public SipMsg() + { + } + + public int id; // message id, unique/process + public int pid; // process id + public String eoh; // pointer to the end of header (if found) or null + public String unparsed; // here we stopped parsing + public String buf; // scratch pad, holds a modified message, via, etc. point into it + public int len; // message len (orig) + + + public String new_uri; // changed first line uri, when you change this + public String dst_uri; // Destination URI, must be forwarded to this URI if dst_url lenght != 0 + public int parsed_uri_ok; // 1 if parsed_orig_uri is valid, 0 if not, set if to 0 if you modify the uri (e.g change new_uri) + public int parsed_orig_ruri_ok; // 1 if parsed_orig_uri is valid, 0 if not, set if to 0 if you modify the uri (e.g change new_uri) + + public String add_to_branch_s; // whatever whoever want to append to branch comes here + public int add_to_branch_len; + public int hash_index; // index to TM hash table; stored in core to avoid unnecessary calculations + public int msg_flags; /* flags used by core. Allows to set various flags on the message; may be used for + simple inter-module communication or remembering processing state reached */ + public String set_global_address; + public String set_global_port; + + + public static native SipMsg ParseSipMsg(); + + public static native String getMsgType(); + public static native String getStatus(); + public static native String getRURI(); + public static native IPPair getSrcAddress(); + public static native IPPair getDstAddress(); + public static native String getBuffer(); +} + diff --git a/modules/app_java/kamailio_java_folder/java/Kamailio.java b/modules/app_java/kamailio_java_folder/java/Kamailio.java new file mode 100644 index 000000000..e02951759 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java/Kamailio.java @@ -0,0 +1,130 @@ + +import java.lang.*; +import java.io.*; + +import org.siprouter.*; +import org.siprouter.NativeInterface.*; + +public class Kamailio extends NativeMethods +{ + static + { + System.load("/opt/kamailio/lib/kamailio/modules/app_java.so"); + } + + /* Constructor. Do not remove !!! */ + public Kamailio() + { + } + + + public int child_init(int rank) + { + switch (rank) + { + case Ranks.PROC_MAIN: + LM_INFO("We're at PROC_MAIN\n"); + break; + case Ranks.PROC_TIMER: + LM_INFO("We're at PROC_TIMER\n"); + break; + case Ranks.PROC_RPC: + LM_INFO("We're at PROC_RPC/PROC_FIFO\n"); + break; + case Ranks.PROC_TCP_MAIN: + LM_INFO("We're at PROC_TCP_MAIN\n"); + break; + case Ranks.PROC_UNIXSOCK: + LM_INFO("We're at PROC_UNIXSOCK\n"); + break; + case Ranks.PROC_ATTENDANT: + LM_INFO("We're at PROC_ATTENDANT\n"); + break; + case Ranks.PROC_INIT: + LM_INFO("We're at PROC_INIT\n"); + break; + case Ranks.PROC_NOCHLDINIT: + LM_INFO("We're at PROC_NOCHLDINIT/PROC_MIN\n"); + break; + case Ranks.PROC_SIPINIT: + LM_INFO("We're at PROC_SIPINIT\n"); + break; + case Ranks.PROC_SIPRPC: + LM_INFO("We're at PROC_SIPRPC\n"); + break; + } + + return 1; + } + + public int TestMethod() + { + + LM_INFO(String.format("Msg Type: %s\n", SipMsg.getMsgType())); + + IPPair src = SipMsg.getSrcAddress(); + if (src != null) + { + LM_INFO(String.format("src address=%s, src port=%d\n", src.ip, src.port)); + } + else + { + LM_ERR("IPPair src is null!"); + } + + IPPair dst = SipMsg.getDstAddress(); + if (dst != null) + { + LM_INFO(String.format("dst address=%s, dst port=%d\n", dst.ip, dst.port)); + } + else + { + LM_ERR("IPPair dst is null!"); + } + + LM_INFO(String.format("buffer:\n%s\n", SipMsg.getBuffer().trim())); + + SipMsg msg = SipMsg.ParseSipMsg(); + if (msg != null) + { + LM_INFO("msg:\n"); + LM_INFO(String.format("\tid=%d\n", msg.id)); + LM_INFO(String.format("\tpid=%d\n", msg.pid)); + LM_INFO(String.format("\teoh='%s'\n", msg.eoh)); + LM_INFO(String.format("\tunparsed='%s'\n", msg.unparsed)); + LM_INFO(String.format("\tbuf='%s'\n", msg.buf)); + LM_INFO(String.format("\tlen=%d\n", msg.len)); + LM_INFO(String.format("\tnew_uri='%s'\n", msg.new_uri)); + LM_INFO(String.format("\tdst_uri='%s'\n", msg.dst_uri)); + LM_INFO(String.format("\tparsed_uri_ok=%d\n", msg.parsed_uri_ok)); + LM_INFO(String.format("\tparsed_orig_ruri_ok=%d\n", msg.parsed_orig_ruri_ok)); + LM_INFO(String.format("\tadd_to_branch_s='%s'\n", msg.add_to_branch_s)); + LM_INFO(String.format("\tadd_to_branch_len=%d\n", msg.add_to_branch_len)); + LM_INFO(String.format("\thash_index=%d\n", msg.hash_index)); + LM_INFO(String.format("\tmsg_flags=%d\n", msg.msg_flags)); + LM_INFO(String.format("\tset_global_address='%s'\n", msg.set_global_address)); + LM_INFO(String.format("\tset_global_port='%s'\n", msg.set_global_port)); + } + else + { + LM_ERR("SipMsg msg is null!\n"); + } + + return 1; + } +} + + + + + + + + + + + + + + + diff --git a/modules/app_java/kamailio_java_folder/java/build.xml b/modules/app_java/kamailio_java_folder/java/build.xml new file mode 100644 index 000000000..02117ed23 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java/build.xml @@ -0,0 +1,46 @@ + + + + Building Kamailio examples + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/app_java/kamailio_java_folder/java/siprouter_src/IPPair.java b/modules/app_java/kamailio_java_folder/java/siprouter_src/IPPair.java new file mode 100644 index 000000000..f7eae1be5 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java/siprouter_src/IPPair.java @@ -0,0 +1,15 @@ + +package org.siprouter; +import java.lang.*; + +public class IPPair +{ + public final String ip; + public final int port; + + public IPPair(String ip, int port) + { + this.ip = ip; + this.port = port; + } +} diff --git a/modules/app_java/kamailio_java_folder/java/siprouter_src/NativeInterface.java b/modules/app_java/kamailio_java_folder/java/siprouter_src/NativeInterface.java new file mode 100644 index 000000000..e93343f94 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java/siprouter_src/NativeInterface.java @@ -0,0 +1,46 @@ + +package org.siprouter; +import java.lang.*; + +public interface NativeInterface +{ + public abstract class Ranks + { + public static final int PROC_MAIN = 0; // Main ser process + public static final int PROC_TIMER = -1; // Timer attendant process + public static final int PROC_RPC = -2; // RPC type process + public static final int PROC_FIFO = PROC_RPC; // FIFO attendant process + public static final int PROC_TCP_MAIN = -4; // TCP main process + public static final int PROC_UNIXSOCK = -5; // Unix socket server + public static final int PROC_ATTENDANT = -10; // main "attendant process + public static final int PROC_INIT = -127; /* special rank, the context is the main ser process, but this is + guaranteed to be executed before any rocess is forked, so it + can be used to setup shared variables that depend on some + after mod_init available information (e.g. total number of processes). + @warning child_init(PROC_MAIN) is again called in the same process (main) + (before tcp), so make sure you don't init things twice, bot in PROC_MAIN and PROC_INT + */ + public static final int PROC_NOCHLDINIT = -128; // no child init functions will be called if this rank is used in fork_process() + public static final int PROC_SIPINIT = 1; // First SIP worker - some modules do special processing in this child, like loading db data + public static final int PROC_SIPRPC = 127; /* Used to init RPC worker as SIP commands handler. + Don't do any special processing in the child init with this rank - just bare child initialization + */ + public static final int PROC_MIN = PROC_NOCHLDINIT; // Minimum process rank + } + + public abstract class LogParams + { + public static final int L_ALERT = -5; + public static final int L_BUG = -4; + public static final int L_CRIT2 = -3; // like L_CRIT, but adds prefix + public static final int L_CRIT = -2; // no prefix added + public static final int L_ERR = -1; + public static final int L_WARN = 0; + public static final int L_NOTICE = 1; + public static final int L_INFO = 2; + public static final int L_DBG = 3; + + public static final int DEFAULT_FACILITY = 0; + } +} + diff --git a/modules/app_java/kamailio_java_folder/java/siprouter_src/NativeMethods.java b/modules/app_java/kamailio_java_folder/java/siprouter_src/NativeMethods.java new file mode 100644 index 000000000..f0d35ca8e --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java/siprouter_src/NativeMethods.java @@ -0,0 +1,23 @@ + +package org.siprouter; +import java.lang.*; + +public abstract class NativeMethods +{ + public static native void LM_GEN1(int logLevel, String s); + public static native void LM_GEN2(int logFacility, int logLevel, String s); + public static native void LM_ALERT(String s); + public static native void LM_CRIT(String s); + public static native void LM_WARN(String s); + public static native void LM_NOTICE(String s); + public static native void LM_ERR(String s); + public static native void LM_INFO(String s); + public static native void LM_DBG(String s); + + + protected final int mop = 0x0; // 'message object pointer' (pointer to an original c pointer of 'struct sip_msg') + + public static native int KamExec(String fname, String... params); + +} + diff --git a/modules/app_java/kamailio_java_folder/java/siprouter_src/SipMsg.java b/modules/app_java/kamailio_java_folder/java/siprouter_src/SipMsg.java new file mode 100644 index 000000000..e544905e8 --- /dev/null +++ b/modules/app_java/kamailio_java_folder/java/siprouter_src/SipMsg.java @@ -0,0 +1,43 @@ + +package org.siprouter; +import java.lang.*; + +public abstract class SipMsg +{ + /* Constructor. Do not remove !!! */ + public SipMsg() + { + } + + public int id; // message id, unique/process + public int pid; // process id + public String eoh; // pointer to the end of header (if found) or null + public String unparsed; // here we stopped parsing + public String buf; // scratch pad, holds a modified message, via, etc. point into it + public int len; // message len (orig) + + + public String new_uri; // changed first line uri, when you change this + public String dst_uri; // Destination URI, must be forwarded to this URI if dst_url lenght != 0 + public int parsed_uri_ok; // 1 if parsed_orig_uri is valid, 0 if not, set if to 0 if you modify the uri (e.g change new_uri) + public int parsed_orig_ruri_ok; // 1 if parsed_orig_uri is valid, 0 if not, set if to 0 if you modify the uri (e.g change new_uri) + + public String add_to_branch_s; // whatever whoever want to append to branch comes here + public int add_to_branch_len; + public int hash_index; // index to TM hash table; stored in core to avoid unnecessary calculations + public int msg_flags; /* flags used by core. Allows to set various flags on the message; may be used for + simple inter-module communication or remembering processing state reached */ + public String set_global_address; + public String set_global_port; + + + public static native SipMsg ParseSipMsg(); + + public static native String getMsgType(); + public static native String getStatus(); + public static native String getRURI(); + public static native IPPair getSrcAddress(); + public static native IPPair getDstAddress(); + public static native String getBuffer(); +} + diff --git a/modules/app_java/utils.c b/modules/app_java/utils.c new file mode 100644 index 000000000..72ee59a97 --- /dev/null +++ b/modules/app_java/utils.c @@ -0,0 +1,89 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#include +#include +#include + +#include "../../sr_module.h" + +#include + +#include "global.h" +#include "utils.h" +#include "java_mod.h" +#include "java_iface.h" +#include "java_support.h" +#include "java_native_methods.h" +#include "java_sig_parser.h" + + +char **split(char *str, char *sep) +{ + char **buf = NULL; + char *token = NULL; + char *saveptr = NULL; + int i; + + buf = (char **)pkg_malloc(sizeof(char *)); + if (!buf) + { + LM_ERR("pkg_malloc() has failed. Not enough memory!\n"); + return NULL; + } + memset(&buf, 0, sizeof(char *)); + + if (str == NULL) + return buf; + + if (strncmp(str, sep, strlen(sep)) <= 0) + { + // string doesn't contains a separator + buf[0] = strdup(str); + return buf; + } + + token = strdup(str); + for (i=0; token != NULL; token = saveptr, i++) + { + token = strtok_r(token, (const char *)sep, &saveptr); + + if (token == NULL || !strcmp(token, "")) + break; + + buf = (char **)pkg_realloc(buf, (i+1) * sizeof(char *)); + if (!buf) + { + LM_ERR("pkg_realloc() has failed. Not enough memory!\n"); + return NULL; + } + buf[i] = strdup(token); + } + buf[i] = NULL; + + free(token); + + return buf; +} + diff --git a/modules/app_java/utils.h b/modules/app_java/utils.h new file mode 100644 index 000000000..3f87391aa --- /dev/null +++ b/modules/app_java/utils.h @@ -0,0 +1,34 @@ +/** + * $Id$ + * + * Copyright (C) 2013 Konstantin Mosesov + * + * This file is part of Kamailio, a free SIP server. + * + * This file is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * + * This file is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ + +#ifndef __UTILS_H__ +#define __UTILS_H__ + +#include "../../sr_module.h" + +#include + +char **split(char *, char *); + +#endif diff --git a/modules/app_lua/README b/modules/app_lua/README index d12b84686..576877839 100644 --- a/modules/app_lua/README +++ b/modules/app_lua/README @@ -27,6 +27,7 @@ Daniel-Constantin Mierla 3.1. load (string) 3.2. register (string) + 3.3. reload (boolean) 4. Functions @@ -35,16 +36,22 @@ Daniel-Constantin Mierla 4.3. lua_run(function, params) 4.4. lua_runstring(script) - 5. Example of usage + 5. Exported RPC Commands + + 5.1. app_lua.list + 5.2. app_lua.reload + + 6. Example of usage List of Examples 1.1. Set load parameter 1.2. Set register parameter - 1.3. lua_dofile usage - 1.4. lua_dostring usage - 1.5. lua_run usage - 1.6. lua_runstring usage + 1.3. Set reload parameter + 1.4. lua_dofile usage + 1.5. lua_dostring usage + 1.6. lua_run usage + 1.7. lua_runstring usage Chapter 1. Admin Guide @@ -60,6 +67,7 @@ Chapter 1. Admin Guide 3.1. load (string) 3.2. register (string) + 3.3. reload (boolean) 4. Functions @@ -68,7 +76,12 @@ Chapter 1. Admin Guide 4.3. lua_run(function, params) 4.4. lua_runstring(script) - 5. Example of usage + 5. Exported RPC Commands + + 5.1. app_lua.list + 5.2. app_lua.reload + + 6. Example of usage 1. Overview @@ -109,6 +122,7 @@ Chapter 1. Admin Guide 3.1. load (string) 3.2. register (string) + 3.3. reload (boolean) 3.1. load (string) @@ -167,6 +181,18 @@ modparam("app_lua", "load", "/usr/local/etc/kamailio/lua/myscript.lua") modparam("app_lua", "register", "sl") ... +3.3. reload (boolean) + + If reload is 1 enables the ability to reload the scripts using the RPC + app_lua.reload command. + + Default value is "0 (off)". + + Example 1.3. Set reload parameter +... +modparam("app_lua", "reload", 1) +... + 4. Functions 4.1. lua_dofile(path) @@ -179,7 +205,7 @@ modparam("app_lua", "register", "sl") Execute the Lua script stored in 'path'. The parameter can be a string with pseudo-variables evaluated at runtime. - Example 1.3. lua_dofile usage + Example 1.4. lua_dofile usage ... lua_dofile("/usr/local/etc/kamailio/lua/myscript.lua"); ... @@ -189,7 +215,7 @@ lua_dofile("/usr/local/etc/kamailio/lua/myscript.lua"); Execute the Lua script stored in parameter. The parameter can be a string with pseudo-variables. - Example 1.4. lua_dostring usage + Example 1.5. lua_dostring usage ... if(!lua_dostring("sr.log([[err]], [[----------- Hello World from $fU\n]])")) { @@ -204,7 +230,7 @@ if(!lua_dostring("sr.log([[err]], [[----------- Hello World from $fU\n]])")) loaded at startup via parameter 'load'. Parameters can be strings with pseudo-variables that are evaluated at runtime. - Example 1.5. lua_run usage + Example 1.6. lua_run usage ... if(!lua_run("sr_append_fu_to_reply")) { @@ -220,7 +246,7 @@ lua_run("lua_funcx", "$rU", "2"); string with pseudo-variables. The script is executed in Lua context specific to loaded Lua files at startup. - Example 1.6. lua_runstring usage + Example 1.7. lua_runstring usage ... if(!lua_runstring("sr.log([[err]], [[----------- Hello World from $fU\n]])")) { @@ -228,7 +254,37 @@ if(!lua_runstring("sr.log([[err]], [[----------- Hello World from $fU\n]])")) } ... -5. Example of usage +5. Exported RPC Commands + + 5.1. app_lua.list + 5.2. app_lua.reload + +5.1. app_lua.list + + Lists the id and path for every script loaded by the load parameter. + + Name: app_lua.list + + Parameters: none + + Example: + kamcmd app_lua.lists + +5.2. app_lua.reload + + Marks the need to reload the selected script. The actual reload is done + by every working process when the next call to lua_run function is + executed. If no parameter is added all the scripts are selected to be + reloaded. + + Name: app_lua.reload + + Parameters: id + + Example: + kamcmd app_lua.reload 0 + +6. Example of usage Create your Lua script and stored on file system, say: '/usr/local/etc/kamailio/lua/myscript.lua'. diff --git a/modules/app_lua/app_lua_api.c b/modules/app_lua/app_lua_api.c index 9d5e6620d..78a98e4a9 100644 --- a/modules/app_lua/app_lua_api.c +++ b/modules/app_lua/app_lua_api.c @@ -30,6 +30,7 @@ #include "../../dprint.h" #include "../../ut.h" #include "../../mem/mem.h" +#include "../../locking.h" #include "../../data_lump.h" #include "../../data_lump_rpl.h" #include "../../lib/kcore/cmpapi.h" @@ -41,12 +42,21 @@ #define SRVERSION "1.0" - +/** + * reload enabled param + * default: 0 (off) + */ +static unsigned int _app_lua_sr_reload = 0; /** * */ static sr_lua_env_t _sr_L_env; +/** + * + */ +static int *_app_lua_sv = NULL; + /** * @return the static Lua env */ @@ -58,16 +68,65 @@ sr_lua_env_t *sr_lua_env_get(void) /** * */ -typedef struct _sr_lua_load -{ - char *script; - struct _sr_lua_load *next; -} sr_lua_load_t; - +static sr_lua_load_t *_sr_lua_load_list = NULL; /** - * + * set of locks to manage the shared variable. */ -static sr_lua_load_t *_sr_lua_load_list = NULL; +static gen_lock_set_t *sr_lua_locks = NULL; +static sr_lua_script_ver_t *sr_lua_script_ver = NULL; + + +int lua_sr_alloc_script_ver(void) +{ + int size = _sr_L_env.nload; + + sr_lua_script_ver = (sr_lua_script_ver_t *) shm_malloc(sizeof(sr_lua_script_ver_t)); + if(sr_lua_script_ver==NULL) + { + LM_ERR("cannot allocate shm memory\n"); + return -1; + } + + sr_lua_script_ver->version = (unsigned int *) shm_malloc(sizeof(unsigned int)*size); + if(sr_lua_script_ver->version==NULL) + { + LM_ERR("cannot allocate shm memory\n"); + goto error; + } + memset(sr_lua_script_ver->version, 0, sizeof(unsigned int)*size); + sr_lua_script_ver->len = size; + + if((sr_lua_locks=lock_set_alloc(size))==0) + { + LM_CRIT("failed to alloc lock set\n"); + goto error; + } + if(lock_set_init(sr_lua_locks)==0 ) + { + LM_CRIT("failed to init lock set\n"); + goto error; + } + + return 0; +error: + if(sr_lua_script_ver!=NULL) + { + if(sr_lua_script_ver->version!=NULL) + { + shm_free(sr_lua_script_ver->version); + sr_lua_script_ver->version = NULL; + } + shm_free(sr_lua_script_ver); + sr_lua_script_ver = NULL; + } + if(sr_lua_locks!=NULL) + { + lock_set_destroy( sr_lua_locks ); + lock_set_dealloc( sr_lua_locks ); + sr_lua_locks = NULL; + } + return -1; +} /** * @@ -84,8 +143,13 @@ int sr_lua_load_script(char *script) } memset(li, 0, sizeof(sr_lua_load_t)); li->script = script; + li->version = 0; li->next = _sr_lua_load_list; _sr_lua_load_list = li; + _sr_L_env.nload += 1; + LM_DBG("loaded script:[%s].\n", script); + LM_DBG("Now there are %d scripts loaded\n", _sr_L_env.nload); + return 0; } @@ -100,6 +164,19 @@ int sr_lua_register_module(char *mname) return -1; } +/** + * + */ +int sr_lua_reload_module(unsigned int reload) +{ + LM_DBG("reload:%d\n", reload); + if(reload!=0) { + _app_lua_sr_reload = 1; + LM_DBG("reload param activated!\n"); + } + return 0; +} + /** * */ @@ -114,10 +191,19 @@ void lua_sr_openlibs(lua_State *L) */ int lua_sr_init_mod(void) { + /* allocate shm */ + if(lua_sr_alloc_script_ver()<0) + { + LM_CRIT("failed to alloc shm for version\n"); + return -1; + } + memset(&_sr_L_env, 0, sizeof(sr_lua_env_t)); if(lua_sr_exp_init_mod()<0) return -1; + return 0; + } /** @@ -258,6 +344,139 @@ void lua_sr_destroy(void) _sr_L_env.LL = NULL; } memset(&_sr_L_env, 0, sizeof(sr_lua_env_t)); + + if(sr_lua_script_ver!=NULL) + { + shm_free(sr_lua_script_ver->version); + shm_free(sr_lua_script_ver); + } + + if (sr_lua_locks!=NULL) + { + lock_set_destroy( sr_lua_locks ); + lock_set_dealloc( sr_lua_locks ); + sr_lua_locks = 0; + } + + if(_app_lua_sv!=NULL) { + pkg_free(_app_lua_sv); + _app_lua_sv = 0; + } +} + +/** + * + */ +int lua_sr_list_script(sr_lua_load_t **list) +{ + *list = _sr_lua_load_list; + return 0; +} + +/** + * Mark script in pos to be reloaded + * pos -1: reload all scritps + */ +int lua_sr_reload_script(int pos) +{ + int i, len = sr_lua_script_ver->len; + if(_sr_lua_load_list!= NULL) + { + if (!sr_lua_script_ver) + { + LM_CRIT("shm for version not allocated\n"); + return -1; + } + if (_app_lua_sr_reload==0) + { + LM_ERR("reload is not activated\n"); + return -3; + } + if (pos<0) + { + // let's mark all the scripts to be reloaded + for (i=0;iversion[i] += 1; + lock_set_release(sr_lua_locks, i); + } + } + else + { + if (pos>=0 && posversion[pos] += 1; + lock_set_release(sr_lua_locks, pos); + LM_DBG("pos: %d set to reloaded\n", pos); + } + else + { + LM_ERR("pos out of range\n"); + return -2; + } + } + return 0; + } + LM_ERR("No script loaded\n"); + return -1; +} + +/** + * Checks if loaded version matches the shared + * counter. If not equal reloads the script. + */ +int sr_lua_reload_script(void) +{ + sr_lua_load_t *li = _sr_lua_load_list; + int ret, i; + char *txt; + int sv_len = sr_lua_script_ver->len; + + if(li==NULL) + { + LM_DBG("No script loaded\n"); + return 0; + } + + if(_app_lua_sv==NULL) { + _app_lua_sv = (int *) pkg_malloc(sizeof(int)*sv_len); + if(_app_lua_sv==NULL) + { + LM_ERR("no more pkg memory\n"); + return -1; + } + } + + for(i=0;iversion[i]; + lock_set_release(sr_lua_locks, i); + + if(li->version!=_app_lua_sv[i]) + { + LM_DBG("loaded version:%d needed: %d Let's reload <%s>\n", + li->version, _app_lua_sv[i], li->script); + ret = luaL_dofile(_sr_L_env.LL, (const char*)li->script); + if(ret!=0) + { + LM_ERR("failed to load Lua script: %s (err: %d)\n", + li->script, ret); + txt = (char*)lua_tostring(_sr_L_env.LL, -1); + LM_ERR("error from Lua: %s\n", (txt)?txt:"unknown"); + lua_pop(_sr_L_env.LL, 1); + return -1; + } + li->version = _app_lua_sv[i]; + LM_DBG("<%s> set to version %d\n", li->script, li->version); + } + else LM_DBG("No need to reload [%s] is version %d\n", + li->script, li->version); + li = li->next; + } + return 1; } /** @@ -406,7 +625,16 @@ int app_lua_run(struct sip_msg *msg, char *func, char *p1, char *p2, LM_ERR("lua loading state not initialized (call: %s)\n", func); return -1; } - + if(_app_lua_sr_reload!=0) + { + /* check the script version loaded */ + if(!sr_lua_reload_script()) + { + LM_ERR("lua reload failed\n"); + return -1; + } + } + else LM_DBG("reload deactivated\n"); LM_DBG("executing Lua function: [[%s]]\n", func); LM_DBG("lua top index is: %d\n", lua_gettop(_sr_L_env.LL)); lua_getglobal(_sr_L_env.LL, func); diff --git a/modules/app_lua/app_lua_api.h b/modules/app_lua/app_lua_api.h index 3d1bff7ed..9ba87940e 100644 --- a/modules/app_lua/app_lua_api.h +++ b/modules/app_lua/app_lua_api.h @@ -30,14 +30,32 @@ #include "../../parser/msg_parser.h" +/** + * version variable stores a version counter for each script loaded. + * This counter will be updated via RPC. + */ +typedef struct _sr_lua_script_ver +{ + unsigned int *version; + unsigned int len; /* length of version array */ +} sr_lua_script_ver_t; + typedef struct _sr_lua_env { lua_State *L; lua_State *LL; struct sip_msg *msg; unsigned int flags; + unsigned int nload; /* number of scripts loaded */ } sr_lua_env_t; +typedef struct _sr_lua_load +{ + char *script; + int version; /* child loaded version */ + struct _sr_lua_load *next; +} sr_lua_load_t; + sr_lua_env_t *sr_lua_env_get(void); int lua_sr_initialized(void); @@ -45,9 +63,13 @@ int lua_sr_init_mod(void); int lua_sr_init_child(void); void lua_sr_destroy(void); int lua_sr_init_probe(void); +int lua_sr_reload_script(int pos); +int lua_sr_list_script(sr_lua_load_t **list); int sr_lua_load_script(char *script); +int sr_lua_reload_script(void); int sr_lua_register_module(char *mname); +int sr_lua_reload_module(unsigned int reload); int app_lua_dostring(struct sip_msg *msg, char *script); int app_lua_dofile(struct sip_msg *msg, char *script); diff --git a/modules/app_lua/app_lua_mod.c b/modules/app_lua/app_lua_mod.c index 19a0c528f..da39bce99 100644 --- a/modules/app_lua/app_lua_mod.c +++ b/modules/app_lua/app_lua_mod.c @@ -29,6 +29,8 @@ #include "../../dprint.h" #include "../../ut.h" #include "../../mod_fix.h" +#include "../../rpc.h" +#include "../../rpc_lookup.h" #include "app_lua_api.h" @@ -41,6 +43,8 @@ static int mod_init(void); static void mod_destroy(void); static int child_init(int rank); +static int app_lua_init_rpc(void); + static int w_app_lua_dostring(struct sip_msg *msg, char *script, char *extra); static int w_app_lua_dofile(struct sip_msg *msg, char *script, char *extra); static int w_app_lua_runstring(struct sip_msg *msg, char *script, char *extra); @@ -59,10 +63,12 @@ static int fixup_lua_run(void** param, int param_no); int app_lua_load_param(modparam_t type, void *val); int app_lua_register_param(modparam_t type, void *val); +int app_lua_reload_param(modparam_t type, void *val); static param_export_t params[]={ {"load", STR_PARAM|USE_FUNC_PARAM, (void*)app_lua_load_param}, {"register", STR_PARAM|USE_FUNC_PARAM, (void*)app_lua_register_param}, + {"reload", INT_PARAM|USE_FUNC_PARAM, (void*)app_lua_reload_param}, {0, 0, 0} }; @@ -86,7 +92,7 @@ static cmd_export_t cmds[]={ struct module_exports exports = { "app_lua", - RTLD_NOW | RTLD_GLOBAL, /* dlopen flags */ + DEFAULT_DLFLAGS, /* dlopen flags */ cmds, params, 0, @@ -99,7 +105,11 @@ struct module_exports exports = { child_init /* per child init function */ }; - +int mod_register(char *path, int *dlflags, void *p1, void *p2) +{ + *dlflags = RTLD_NOW | RTLD_GLOBAL; + return 0; +} /** * init module function @@ -108,6 +118,12 @@ static int mod_init(void) { if(lua_sr_init_mod()<0) return -1; + + if(app_lua_init_rpc()<0) + { + LM_ERR("failed to register RPC commands\n"); + return -1; + } return 0; } @@ -324,8 +340,82 @@ int app_lua_register_param(modparam_t type, void *val) return sr_lua_register_module((char*)val); } +int app_lua_reload_param(modparam_t type, void *val) +{ + return sr_lua_reload_module((unsigned int)(long) (int *)val); +} + static int fixup_lua_run(void** param, int param_no) { return fixup_spve_null(param, 1); } +/*** RPC implementation ***/ + +static const char* app_lua_rpc_reload_doc[2] = { + "Reload lua script", + 0 +}; + +static const char* app_lua_rpc_list_doc[2] = { + "list lua scripts", + 0 +}; + +static void app_lua_rpc_reload(rpc_t* rpc, void* ctx) +{ + int pos = -1; + + rpc->scan(ctx, "*d", &pos); + LM_DBG("selected index: %d\n", pos); + if(lua_sr_reload_script(pos)<0) + rpc->fault(ctx, 500, "Reload Failed"); + return; +} + +static void app_lua_rpc_list(rpc_t* rpc, void* ctx) +{ + int i; + sr_lua_load_t *list = NULL, *li; + if(lua_sr_list_script(&list)<0) + { + LM_ERR("Can't get loaded scripts\n"); + return; + } + if(list) + { + li = list; + i = 0; + while(li) + { + rpc->printf(ctx, "%d: [%s]", i, li->script); + li = li->next; + i += 1; + } + } + else { + rpc->printf(ctx,"No scripts loaded"); + } + return; +} + +rpc_export_t app_lua_rpc_cmds[] = { + {"app_lua.reload", app_lua_rpc_reload, + app_lua_rpc_reload_doc, 0}, + {"app_lua.list", app_lua_rpc_list, + app_lua_rpc_list_doc, 0}, + {0, 0, 0, 0} +}; + +/** + * register RPC commands + */ +static int app_lua_init_rpc(void) +{ + if (rpc_register_array(app_lua_rpc_cmds)!=0) + { + LM_ERR("failed to register RPC commands\n"); + return -1; + } + return 0; +} diff --git a/modules/app_lua/app_lua_sr.c b/modules/app_lua/app_lua_sr.c index c01db8613..14ea838b7 100644 --- a/modules/app_lua/app_lua_sr.c +++ b/modules/app_lua/app_lua_sr.c @@ -39,6 +39,7 @@ #include "../../dset.h" #include "../../parser/parse_uri.h" #include "../../lib/kcore/cmpapi.h" +#include "../../xavp.h" #include "app_lua_api.h" #include "app_lua_sr.h" @@ -1130,6 +1131,283 @@ static const luaL_reg _sr_pv_Map [] = { {NULL, NULL} }; + +/** + * creates and push a table to the lua stack with + * the elements of the list + */ +static int lua_sr_push_str_list_table(lua_State *L, struct str_list *list) { + lua_Number i = 1; + struct str_list *k = list; + + lua_newtable(L); + while(k!=NULL){ + lua_pushnumber(L, i); + lua_pushlstring(L, k->s.s, k->s.len); + lua_settable(L, -3); + i++; + k = k->next; + } + return 1; +} + +static int lua_sr_push_xavp_table(lua_State *L, sr_xavp_t *xavp); + +/** + * creates and push a table for the key name in xavp + */ +static void lua_sr_push_xavp_name_table(lua_State *L, sr_xavp_t *xavp, str name) { + lua_Number i = 1; + lua_Number elem = 1; + sr_xavp_t *avp = xavp; + + while(avp!=NULL&&!STR_EQ(avp->name,name)) + { + avp = avp->next; + } + lua_newtable(L); + + while(avp!=NULL){ + lua_pushnumber(L, elem); + switch(avp->val.type) { + case SR_XTYPE_NULL: + lua_pushnil(L); + break; + case SR_XTYPE_INT: + i = avp->val.v.i; + lua_pushnumber(L, i); + break; + case SR_XTYPE_STR: + lua_pushlstring(L, avp->val.v.s.s, avp->val.v.s.len); + break; + case SR_XTYPE_TIME: + case SR_XTYPE_LONG: + case SR_XTYPE_LLONG: + case SR_XTYPE_DATA: + lua_pushnil(L); + LM_WARN("XAVP type:%d value not supported\n", avp->val.type); + break; + case SR_XTYPE_XAVP: + if(!lua_sr_push_xavp_table(L,avp->val.v.xavp)){ + LM_ERR("xavp:%.*s subtable error. Nil value added\n", avp->name.len, avp->name.s); + lua_pushnil(L); + } + break; + default: + LM_ERR("xavp:%.*s unknown type: %d. Nil value added\n", + avp->name.len, avp->name.s, avp->val.type); + lua_pushnil(L); + break; + } + lua_rawset(L, -3); + elem = elem + 1; + avp = xavp_get_next(avp); + } + lua_setfield(L, -2, name.s); +} + +/** + * creates and push a table to the lua stack with + * the elements of the xavp + */ +static int lua_sr_push_xavp_table(lua_State *L, sr_xavp_t *xavp) { + sr_xavp_t *avp = NULL; + struct str_list *keys; + struct str_list *k; + + if(xavp->val.type!=SR_XTYPE_XAVP){ + LM_ERR("%s not xavp?\n", xavp->name.s); + return 0; + } + avp = xavp->val.v.xavp; + keys = xavp_get_list_key_names(xavp); + + lua_newtable(L); + if(keys!=NULL) + { + do + { + lua_sr_push_xavp_name_table(L, avp, keys->s); + k = keys; + keys = keys->next; + pkg_free(k); + }while(keys!=NULL); + } + + return 1; +} + + /** + * creates and push a table to the lua stack with + * only the firsts elements of the xavp + */ +static int lua_sr_push_xavp_table_simple(lua_State *L, sr_xavp_t *xavp) { + lua_Number i = 1; + sr_xavp_t *avp = NULL; + + if(xavp->val.type!=SR_XTYPE_XAVP){ + LM_ERR("%s not xavp?\n", xavp->name.s); + return 0; + } + avp = xavp->val.v.xavp; + + lua_newtable(L); + while(avp!=NULL){ + switch(avp->val.type) { + case SR_XTYPE_NULL: + lua_pushnil(L); + lua_setfield(L, -2, avp->name.s); + break; + case SR_XTYPE_INT: + i = avp->val.v.i; + lua_pushnumber(L, i); + lua_setfield(L, -2, avp->name.s); + break; + case SR_XTYPE_STR: + lua_pushlstring(L, avp->val.v.s.s, avp->val.v.s.len); + lua_setfield(L, -2, avp->name.s); + break; + case SR_XTYPE_TIME: + case SR_XTYPE_LONG: + case SR_XTYPE_LLONG: + case SR_XTYPE_DATA: + lua_pushnil(L); + lua_setfield(L, -2, avp->name.s); + LM_WARN("XAVP type:%d value not supported\n", avp->val.type); + break; + case SR_XTYPE_XAVP: + if(!lua_sr_push_xavp_table(L,avp->val.v.xavp)){ + LM_ERR("xavp:%.*s subtable error. Nil value added\n", avp->name.len, avp->name.s); + lua_pushnil(L); + } + lua_setfield(L, -2, avp->name.s); + break; + } + avp = avp->next; + } + return 1; +} + +/** + * puts a table with content of a xavp + */ +static int lua_sr_xavp_get(lua_State *L) +{ + str xavp_name; + int indx = 0; + sr_lua_env_t *env_L; + sr_xavp_t *avp; + int num_param = 0; + int param = -1; + int simple_flag = 0; + + env_L = sr_lua_env_get(); + num_param = lua_gettop(L); + if(num_param<2 && num_param>3) + { + LM_ERR("wrong number of parameters [%d]\n", num_param); + return 0; + } + + if(num_param==3) + { + if(!lua_isnumber(L, param)) + { + LM_ERR("invalid int parameter\n"); + return 0; + } + simple_flag = lua_tointeger(L, param); + param = param - 1; + } + + if(!lua_isnumber(L, param)) + { + LM_ERR("invalid int parameter\n"); + return 0; + } + indx = lua_tointeger(L, param); + param = param - 1; + + xavp_name.s = (char*)lua_tostring(L, param); + if(xavp_name.s==NULL || env_L->msg==NULL) + return 0; + xavp_name.len = strlen(xavp_name.s); + + avp = xavp_get_by_index(&xavp_name, indx, NULL); + if(avp==NULL){ + LM_ERR("can't get xavp:%.*s index:%d\n", xavp_name.len, xavp_name.s, indx); + lua_pushnil(L); + return 1; + } + + if (simple_flag != 0) + { + lua_sr_push_xavp_table_simple(L, avp); + } + else + { + lua_sr_push_xavp_table(L, avp); + } + return 1; +} + +/** + * puts a table with the list of keys of the xavp + */ +static int lua_sr_xavp_get_keys (lua_State *L) +{ + str xavp_name; + int indx = 0; + sr_lua_env_t *env_L; + sr_xavp_t *avp; + struct str_list *keys, *k; + + env_L = sr_lua_env_get(); + + if(lua_gettop(L)<2) + { + LM_ERR("to few parameters [%d]\n",lua_gettop(L)); + return 0; + } + + if(!lua_isnumber(L, -1)) + { + LM_ERR("invalid int parameter\n"); + return 0; + } + indx = lua_tointeger(L, -1); + + xavp_name.s = (char*)lua_tostring(L, -2); + if(xavp_name.s==NULL || env_L->msg==NULL) + return 0; + xavp_name.len = strlen(xavp_name.s); + + avp = xavp_get_by_index(&xavp_name, indx, NULL); + if(avp==NULL){ + LM_ERR("can't get xavp:%.*s index:%d\n", xavp_name.len, xavp_name.s, indx); + lua_pushnil(L); + return 1; + } + keys = xavp_get_list_key_names(avp); + lua_sr_push_str_list_table(L, keys); + // free list + while(keys!=NULL){ + k = keys; + keys = k->next; + pkg_free(k); + } + return 1; +} + +/** + * + */ +static const luaL_reg _sr_xavp_Map [] = { + {"get", lua_sr_xavp_get}, + {"get_keys", lua_sr_xavp_get_keys}, + {NULL, NULL} +}; + /** * */ @@ -1138,6 +1416,5 @@ void lua_sr_core_openlibs(lua_State *L) luaL_openlib(L, "sr", _sr_core_Map, 0); luaL_openlib(L, "sr.hdr", _sr_hdr_Map, 0); luaL_openlib(L, "sr.pv", _sr_pv_Map, 0); + luaL_openlib(L, "sr.xavp", _sr_xavp_Map, 0); } - - diff --git a/modules/app_lua/doc/app_lua_admin.xml b/modules/app_lua/doc/app_lua_admin.xml index 96e577165..02adb36b5 100644 --- a/modules/app_lua/doc/app_lua_admin.xml +++ b/modules/app_lua/doc/app_lua_admin.xml @@ -11,9 +11,9 @@ - + &adminguide; - +
Overview @@ -80,7 +80,7 @@
Parameters -
+
<varname>load</varname> (string) Set the path to the Lua script to be loaded at startup. Then you @@ -102,7 +102,7 @@ modparam("app_lua", "load", "/usr/local/etc/kamailio/lua/myscript.lua")
-
+
<varname>register</varname> (string) Use this function to register optional SIP Router submodules @@ -249,11 +249,32 @@ modparam("app_lua", "register", "sl")
+
+ <varname>reload</varname> (boolean) + + If reload is 1 enables the ability to reload the + scripts using the RPC app_lua.reload command. + + + + Default value is 0 (off). + + + + Set <varname>reload</varname> parameter + +... +modparam("app_lua", "reload", 1) +... + + +
+
- +
Functions -
+
<function moreinfo="none">lua_dofile(path)</function> @@ -270,8 +291,8 @@ lua_dofile("/usr/local/etc/kamailio/lua/myscript.lua");
- -
+ +
<function moreinfo="none">lua_dostring(script)</function> @@ -292,7 +313,7 @@ if(!lua_dostring("sr.log([[err]], [[----------- Hello World from $fU\n]])"))
-
+
<function moreinfo="none">lua_run(function, params)</function> @@ -317,7 +338,7 @@ lua_run("lua_funcx", "$rU", "2");
-
+
<function moreinfo="none">lua_runstring(script)</function> @@ -338,9 +359,53 @@ if(!lua_runstring("sr.log([[err]], [[----------- Hello World from $fU\n]])"))
- + +
+ +
+ Exported RPC Commands +
+ + <function moreinfo="none">app_lua.list</function> + + + Lists the id and path for every script loaded by + the load parameter. + + + Name: app_lua.list + + Parameters: none + + Example: + + + &sercmd; app_lua.lists + +
+
+ + <function moreinfo="none">app_lua.reload</function> + + + Marks the need to reload the selected script. + The actual reload is done by every working process when the next + call to lua_run function is executed. + If no parameter is added all the scripts are selected to be reloaded. + + + Name: app_lua.reload + + Parameters: id + + Example: + + + &sercmd; app_lua.reload 0 + +
- +
Example of usage diff --git a/modules/app_perl/README b/modules/app_perl/README index 186056bc2..ce1a5304b 100644 --- a/modules/app_perl/README +++ b/modules/app_perl/README @@ -8,7 +8,7 @@ Edited by Bastian Friedrich - Copyright © 2007 Collax GmbH + Copyright © 2007 Collax GmbH __________________________________________________________________ Table of Contents @@ -27,12 +27,18 @@ Bastian Friedrich 5.1. filename (string) 5.2. modpath (string) + 5.3. reset_cycles (int) 6. Functions 6.1. perl_exec_simple(func, [param]) 6.2. perl_exec(func, [param]) + 7. RPC Commands + + 7.1. app_perl.set_reset_cycles + 7.2. app_perl.get_reset_cycles + 2. Kamailio Perl API 1. Kamailio @@ -187,8 +193,11 @@ Bastian Friedrich 1.1. Set filename parameter 1.2. Set modpath parameter - 1.3. perl_exec_simple() usage - 1.4. perl_exec() usage + 1.3. Set reset_cycles parameter + 1.4. perl_exec_simple() usage + 1.5. perl_exec() usage + 1.6. app_perl.set_reset_cycles usage + 1.7. app_perl.get_reset_cycles usage Chapter 1. Admin Guide @@ -206,12 +215,18 @@ Chapter 1. Admin Guide 5.1. filename (string) 5.2. modpath (string) + 5.3. reset_cycles (int) 6. Functions 6.1. perl_exec_simple(func, [param]) 6.2. perl_exec(func, [param]) + 7. RPC Commands + + 7.1. app_perl.set_reset_cycles + 7.2. app_perl.get_reset_cycles + 1. Overview The time needed when writing a new Kamailio module unfortunately is @@ -312,39 +327,60 @@ if (perl_exec("ldap_alias")) { * IPC::Shareable perl module from CPAN Although SuSE delivers a lot of perl modules, others may have to be - fetched from CPAN. Consider using the program “cpan2rpm†- which, in + fetched from CPAN. Consider using the program "cpan2rpm" - which, in turn, is available on CPAN. It creates RPM files from CPAN. 5. Parameters 5.1. filename (string) 5.2. modpath (string) + 5.3. reset_cycles (int) 5.1. filename (string) This is the file name of your script. This may be set once only, but it - may include an arbitary number of functions and “use†as many Perl + may include an arbitary number of functions and "use" as many Perl module as necessary. - May not be empty! + Must not be empty! Example 1.1. Set filename parameter ... -modparam("perl", "filename", "/home/test/kamailio/myperl.pl") +modparam("app_perl", "filename", "/home/test/kamailio/myperl.pl") ... 5.2. modpath (string) The path to the Perl modules included (Kamailio.pm et.al). It is not absolutely crucial to set this path, as you may install the Modules in - Perl's standard path, or update the “%INC†variable from within your + Perl's standard path, or update the "%INC" variable from within your script. Using this module parameter is the standard behavior, though. - Multiple paths may be specified by separating them with a “:†+ Multiple paths may be specified by separating them with a ":" character. The maximum is 10 paths. Example 1.2. Set modpath parameter ... -modparam("perl", "modpath", "/usr/local/lib/kamailio/perl/") +modparam("app_perl", "modpath", "/usr/local/lib/kamailio/perl/") +... + +5.3. reset_cycles (int) + + The number of execution cycles after which the embedded perl + interpreter is reset. Sometimes is hard to track the scope of variables + in all used perl modules and that can result in leaks of system memory. + Resetting the interpreter cleans the memory space. + + When the interpreter is reset, the perl script is loaded again. Note + that not all Kamailio processes will reset the interpreter at the same + time. Each will do it when it has executed the script for the number of + reset_cycles. Also, be aware that the reset of the interpreter is + taking a bit of time (in the order of tens of mili-seconds). + + Default value is 0 - never reset the interpreter. + + Example 1.3. Set reset_cycles parameter +... +modparam("app_perl", "reset_cycles", 100000) ... 6. Functions @@ -352,7 +388,7 @@ modparam("perl", "modpath", "/usr/local/lib/kamailio/perl/") 6.1. perl_exec_simple(func, [param]) 6.2. perl_exec(func, [param]) -6.1. perl_exec_simple(func, [param]) +6.1. perl_exec_simple(func, [param]) Calls a perl function without passing it the current SIP message. May be used for very simple simple requests that do not have to fiddle with @@ -365,14 +401,14 @@ modparam("perl", "modpath", "/usr/local/lib/kamailio/perl/") This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, ONREPLY_ROUTE and BRANCH_ROUTE. - Example 1.3. perl_exec_simple() usage + Example 1.4. perl_exec_simple() usage ... if (method=="INVITE") { perl_exec_simple("dosomething", "on invite messages"); }; ... -6.2. perl_exec(func, [param]) +6.2. perl_exec(func, [param]) Calls a perl function with passing it the current SIP message. The SIP message is reflected by a Perl module that gives you access to the @@ -384,13 +420,37 @@ if (method=="INVITE") { This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, ONREPLY_ROUTE and BRANCH_ROUTE. - Example 1.4. perl_exec() usage + Example 1.5. perl_exec() usage ... if (perl_exec("ldapalias")) { ... }; ... +7. RPC Commands + + 7.1. app_perl.set_reset_cycles + 7.2. app_perl.get_reset_cycles + +7.1. app_perl.set_reset_cycles + + Set the value of the reset_cycle. The command has one integer + parameter. + + Example 1.6. app_perl.set_reset_cycles usage +... +kamcmd app_perl.set_reset_cycles 20000 +... + +7.2. app_perl.get_reset_cycles + + Return the value of the reset_cycle. + + Example 1.7. app_perl.get_reset_cycles usage +... +kamcmd app_perl.get_reset_cycles +... + Chapter 2. Kamailio Perl API Table of Contents @@ -602,7 +662,7 @@ Kamailio::log(L_INFO, "foobar"); my $ruri = $m->getRURI(); - getRURI returns a string. See “getParsedRURI()†below how to receive a + getRURI returns a string. See "getParsedRURI()" below how to receive a parsed structure. This function is valid in request messages only. @@ -1445,11 +1505,11 @@ Chapter 3. Perl samples 1.1.9. phonenumbers.pl 1.1.10. pseudovars.pl - There are a number of example scripts in the “samples/â€. They are + There are a number of example scripts in the "samples/". They are documented well. Read them, it will explain a lot to you :) If you want to use any of these scripts directly in your - implementation, you can use Perl's “require†mechanism to import them + implementation, you can use Perl's "require" mechanism to import them (just remember that you need to use quotes when require'ing .pl files). 1.1. Script descriptions @@ -1486,7 +1546,7 @@ Chapter 3. Perl samples functions from within perl, and the different types of functions you can offer for Kamailio access. - “exportedfuncs†simply demonstrates that you can use the moduleFunction + "exportedfuncs" simply demonstrates that you can use the moduleFunction method to call functions offered by other modules. The results are equivalent to calling these functions from your config file. In the demonstrated case, telephone calls with a destination number beginning @@ -1496,13 +1556,13 @@ Chapter 3. Perl samples Please note that the moduleFunction method is not fully available in Kamailio 1.2. See the method's documentation for details. - “paramfunc†shows that you can pass arbitrary strings to perl + "paramfunc" shows that you can pass arbitrary strings to perl functions. Do with them whatever you want :) - “autotest†demonstrates that unknown functions in Kamailio::Message + "autotest" demonstrates that unknown functions in Kamailio::Message objects are automatically transformed into calls to module functions. - The “diefuncâ€s show that dying perl scripts - by "manual" dying, or + The "diefunc"s show that dying perl scripts - by "manual" dying, or because of script errors - are handled by the Kamailio package. The error message is logged through Kamailio's logging mechanism. Please note that this only works correctly if you do NOT overwrite the default @@ -1514,22 +1574,22 @@ Chapter 3. Perl samples processing SIP messages. This sample script demonstrates access to header names and values within two sample functions. - “headernames†extracts all header names and logs their names. + "headernames" extracts all header names and logs their names. - “someheaders†logs the contents of the two headers, “To†and - “WWW-Contactâ€. As you can see, headers that occur more than once are + "someheaders" logs the contents of the two headers, "To" and + "WWW-Contact". As you can see, headers that occur more than once are retrieved as an array, which may be accessed by Perl's array accessing methods. 1.1.6. logging.pl For debugging purposes, you probably want to write messages to the - syslog. The “logdemo†shows three ways to access the Kamailio log + syslog. The "logdemo" shows three ways to access the Kamailio log function: it is available through the Kamailio class as well as through the Kamailio::Message class. Remember that you can use exported functions from other modules. You - may thus as well use the “xlog†module and it's xlog function. + may thus as well use the "xlog" module and it's xlog function. The L_INFO, L_DBG, L_ERR, L_CRIT... constants are available through the Kamailio::Constants package. @@ -1558,7 +1618,7 @@ Chapter 3. Perl samples 1.1.10. pseudovars.pl - This script demonstrates the Perl module's “pseudoVar†method. It may + This script demonstrates the Perl module's "pseudoVar" method. It may be used to retrieve the values of current pseudo variables. You might notice that there is no particular function for setting @@ -1574,48 +1634,48 @@ Chapter 4. Frequently Asked Questions 4.1. - Are there known bugs in the Perl module? - - The Perl module does have a few shortcomings that may be regarded as - bugs. - * Missing module functions. Not all functions of other modules are - available for Perl access. The reason for this is a design property - of Kamailio. Making available more functions is work in progress. - * Perl and threads. Perl itself is, when compiled with the correct - parameters, thread safe; unfortunately, not all Perl modules are. - The DBI modules, especially (but not restricted to) DBI::ODBC are - known NOT to be thread safe. - Using DBI::ODBC -- and possibly other non-thread-safe Perl - extensions -- may result in erroneous behavior of Kamailio, - including (but not restricted to) server crashes and wrong routing. + Are there known bugs in the Perl module? + + The Perl module does have a few shortcomings that may be regarded as + bugs. + * Missing module functions. Not all functions of other modules are + available for Perl access. The reason for this is a design property + of Kamailio. Making available more functions is work in progress. + * Perl and threads. Perl itself is, when compiled with the correct + parameters, thread safe; unfortunately, not all Perl modules are. + The DBI modules, especially (but not restricted to) DBI::ODBC are + known NOT to be thread safe. + Using DBI::ODBC -- and possibly other non-thread-safe Perl + extensions -- may result in erroneous behavior of Kamailio, + including (but not restricted to) server crashes and wrong routing. 4.2. - Where can I find more about Kamailio? + Where can I find more about Kamailio? - Take a look at http://www.kamailio.org/. + Take a look at http://www.kamailio.org/. 4.3. - Where can I post a question about this module? + Where can I post a question about this module? - First at all check if your question was already answered on one of our - mailing lists: - * User Mailing List - - http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users - * Developer Mailing List - - http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev + First at all check if your question was already answered on one of our + mailing lists: + * User Mailing List - + http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-users + * Developer Mailing List - + http://lists.sip-router.org/cgi-bin/mailman/listinfo/sr-dev - E-mails regarding any stable Kamailio release should be sent to - and e-mails regarding development - versions should be sent to . + E-mails regarding any stable Kamailio release should be sent to + and e-mails regarding development + versions should be sent to . - If you want to keep the mail private, send it to - . + If you want to keep the mail private, send it to + . 4.4. - How can I report a bug? + How can I report a bug? - Please follow the guidelines provided at: - http://sip-router.org/tracker. + Please follow the guidelines provided at: + http://sip-router.org/tracker. diff --git a/modules/app_perl/app_perl_mod.c b/modules/app_perl/app_perl_mod.c index eb303ca63..3948bbed4 100644 --- a/modules/app_perl/app_perl_mod.c +++ b/modules/app_perl/app_perl_mod.c @@ -31,13 +31,18 @@ #include #include #include +#include #include "../../sr_module.h" #include "../../mem/mem.h" +#include "../../mem/shm_mem.h" #include "../../lib/kmi/mi.h" #include "../../modules/rr/api.h" #include "../../modules/sl/sl.h" +#include "../../rpc.h" +#include "../../rpc_lookup.h" + /* lock_ops.h defines union semun, perl does not need to redefine it */ #ifdef USE_SYSV_SEM # define HAS_UNION_SEMUN @@ -61,17 +66,26 @@ char *modpath = NULL; * memory leaks, the variable thus is not documented! */ int unsafemodfnc = 0; +/* number of execution cycles after which perl interpreter is reset */ +int _ap_reset_cycles_init = 0; +int _ap_exec_cycles = 0; +int *_ap_reset_cycles = 0; + /* Reference to the running Perl interpreter instance */ PerlInterpreter *my_perl = NULL; /** SL API structure */ sl_api_t slb; +static int ap_init_rpc(void); + /* * Module destroy function prototype */ static void destroy(void); +/* environment pointer needed to init perl interpreter */ +extern char **environ; /* * Module initialization function prototype @@ -113,6 +127,7 @@ static param_export_t params[] = { {"filename", STR_PARAM, &filename}, {"modpath", STR_PARAM, &modpath}, {"unsafemodfnc", INT_PARAM, &unsafemodfnc}, + {"reset_cycles", INT_PARAM, &_ap_reset_cycles_init}, { 0, 0, 0 } }; @@ -273,7 +288,8 @@ int unload_perl(PerlInterpreter *p) { * Reinitializes the interpreter. Works, but execution for _all_ * children is difficult. */ -int perl_reload(struct sip_msg *m, char *a, char *b) { +int perl_reload(void) +{ PerlInterpreter *new_perl; @@ -289,9 +305,9 @@ int perl_reload(struct sip_msg *m, char *a, char *b) { #warning This binary will be unsupported. PL_exit_flags |= PERL_EXIT_EXPECTED; #endif - return 1; - } else { return 0; + } else { + return -1; } } @@ -303,10 +319,10 @@ int perl_reload(struct sip_msg *m, char *a, char *b) { */ struct mi_root* perl_mi_reload(struct mi_root *cmd_tree, void *param) { - if (perl_reload(NULL, NULL, NULL)) { - return init_mi_tree( 200, MI_OK_S, MI_OK_LEN); - } else { + if (perl_reload()<0) { return init_mi_tree( 500, "Perl reload failed", 18); + } else { + return init_mi_tree( 200, MI_OK_S, MI_OK_LEN); } } @@ -318,7 +334,11 @@ struct mi_root* perl_mi_reload(struct mi_root *cmd_tree, void *param) */ static int mod_init(void) { - int ret = 0; + int argc = 1; + char *argt[] = { MOD_NAME, NULL }; + char **argv; + struct timeval t1; + struct timeval t2; if(register_mi_mod(exports.name, mi_cmds)!=0) { @@ -326,6 +346,12 @@ static int mod_init(void) { return -1; } + if(ap_init_rpc()<0) + { + LM_ERR("failed to register RPC commands\n"); + return -1; + } + if (!filename) { LM_ERR("insufficient module parameters. Module not loaded.\n"); return -1; @@ -337,21 +363,39 @@ static int mod_init(void) { return -1; } - PERL_SYS_INIT3(NULL, NULL, &environ); + _ap_reset_cycles = shm_malloc(sizeof(int)); + if(_ap_reset_cycles == NULL) { + LM_ERR("no more shared memory\n"); + return -1; + } + *_ap_reset_cycles = _ap_reset_cycles_init; + + argv = argt; + PERL_SYS_INIT3(&argc, &argv, &environ); + + gettimeofday(&t1, NULL); + my_perl = parser_init(); + gettimeofday(&t2, NULL); + + if (my_perl==NULL) + goto error; + + LM_INFO("perl interpreter has been initialized (%d.%06d => %d.%06d)\n", + (int)t1.tv_sec, (int)t1.tv_usec, + (int)t2.tv_sec, (int)t2.tv_usec); - if ((my_perl = parser_init())) { - ret = 0; #ifdef PERL_EXIT_DESTRUCT_END - PL_exit_flags |= PERL_EXIT_DESTRUCT_END; + PL_exit_flags |= PERL_EXIT_DESTRUCT_END; #else - PL_exit_flags |= PERL_EXIT_EXPECTED; + PL_exit_flags |= PERL_EXIT_EXPECTED; #endif + return 0; - } else { - ret = -1; - } - - return ret; +error: + if(_ap_reset_cycles!=NULL) + shm_free(_ap_reset_cycles); + _ap_reset_cycles = NULL; + return -1; } /* @@ -360,9 +404,136 @@ static int mod_init(void) { */ static void destroy(void) { + if(_ap_reset_cycles!=NULL) + shm_free(_ap_reset_cycles); + _ap_reset_cycles = NULL; + if(my_perl==NULL) return; unload_perl(my_perl); PERL_SYS_TERM(); my_perl = NULL; } + + +/** + * count executions and rest interpreter + * + */ +int app_perl_reset_interpreter(void) +{ + struct timeval t1; + struct timeval t2; + + if(*_ap_reset_cycles==0) + return 0; + + _ap_exec_cycles++; + LM_DBG("perl interpreter exec cycle [%d/%d]\n", + _ap_exec_cycles, *_ap_reset_cycles); + + if(_ap_exec_cycles<=*_ap_reset_cycles) + return 0; + + gettimeofday(&t1, NULL); + if (perl_reload()<0) { + LM_ERR("perl interpreter cannot be reset [%d/%d]\n", + _ap_exec_cycles, *_ap_reset_cycles); + return -1; + } + gettimeofday(&t2, NULL); + + LM_INFO("perl interpreter has been reset [%d/%d] (%d.%06d => %d.%06d)\n", + _ap_exec_cycles, *_ap_reset_cycles, + (int)t1.tv_sec, (int)t1.tv_usec, + (int)t2.tv_sec, (int)t2.tv_usec); + _ap_exec_cycles = 0; + + return 0; +} + +/*** RPC implementation ***/ + +static const char* app_perl_rpc_set_reset_cycles_doc[3] = { + "Set the value for reset_cycles", + "Has one parmeter with int value", + 0 +}; + + +/* + * RPC command to set the value for reset_cycles + */ +static void app_perl_rpc_set_reset_cycles(rpc_t* rpc, void* ctx) +{ + int rsv; + + if(rpc->scan(ctx, "d", &rsv)<1) + { + rpc->fault(ctx, 500, "Invalid Parameters"); + return; + } + if(rsv<=0) + rsv = 0; + + LM_DBG("new reset cycle value is %d\n", rsv); + + *_ap_reset_cycles = rsv; + + return; +} + +static const char* app_perl_rpc_get_reset_cycles_doc[2] = { + "Get the value for reset_cycles", + 0 +}; + + +/* + * RPC command to set the value for reset_cycles + */ +static void app_perl_rpc_get_reset_cycles(rpc_t* rpc, void* ctx) +{ + int rsv; + void* th; + + rsv = *_ap_reset_cycles; + + /* add entry node */ + if (rpc->add(ctx, "{", &th) < 0) + { + rpc->fault(ctx, 500, "Internal error root reply"); + return; + } + + if(rpc->struct_add(th, "d", "reset_cycles", rsv)<0) + { + rpc->fault(ctx, 500, "Internal error adding reset cycles"); + return; + } + LM_DBG("reset cycle value is %d\n", rsv); + + return; +} + + +rpc_export_t app_perl_rpc_cmds[] = { + {"app_perl.set_reset_cycles", app_perl_rpc_set_reset_cycles, + app_perl_rpc_set_reset_cycles_doc, 0}, + {"app_perl.get_reset_cycles", app_perl_rpc_get_reset_cycles, + app_perl_rpc_get_reset_cycles_doc, 0}, + {0, 0, 0, 0} +}; + +/** + * register RPC commands + */ +static int ap_init_rpc(void) +{ + if (rpc_register_array(app_perl_rpc_cmds)!=0) + { + LM_ERR("failed to register RPC commands\n"); + return -1; + } + return 0; +} diff --git a/modules/app_perl/doc/app_perl_admin.xml b/modules/app_perl/doc/app_perl_admin.xml index 14371b587..1b377b589 100644 --- a/modules/app_perl/doc/app_perl_admin.xml +++ b/modules/app_perl/doc/app_perl_admin.xml @@ -152,7 +152,7 @@ if (perl_exec("ldap_alias")) {
Parameters -
+
<varname>filename</varname> (string) This is the file name of your script. This may be set once only, but it may include an arbitary @@ -160,20 +160,20 @@ if (perl_exec("ldap_alias")) { - May not be empty! + Must not be empty! Set <varname>filename</varname> parameter ... -modparam("perl", "filename", "/home/test/kamailio/myperl.pl") +modparam("app_perl", "filename", "/home/test/kamailio/myperl.pl") ...
-
+
<varname>modpath</varname> (string) The path to the Perl modules included (Kamailio.pm et.al). It is not absolutely @@ -187,7 +187,35 @@ modparam("perl", "filename", "/home/test/kamailio/myperl.pl") Set <varname>modpath</varname> parameter ... -modparam("perl", "modpath", "/usr/local/lib/kamailio/perl/") +modparam("app_perl", "modpath", "/usr/local/lib/kamailio/perl/") +... + + +
+ +
+ <varname>reset_cycles</varname> (int) + + The number of execution cycles after which the embedded perl interpreter + is reset. Sometimes is hard to track the scope of variables in all used + perl modules and that can result in leaks of system memory. Resetting the + interpreter cleans the memory space. + + + When the interpreter is reset, the perl script is loaded again. Note that + not all &kamailio; processes will reset the interpreter at the same time. + Each will do it when it has executed the script for the number of + reset_cycles. Also, be aware that the reset of the interpreter is taking + a bit of time (in the order of tens of mili-seconds). + + + Default value is 0 - never reset the interpreter. + + + Set <varname>reset_cycles</varname> parameter + +... +modparam("app_perl", "reset_cycles", 100000) ... @@ -196,7 +224,7 @@ modparam("perl", "modpath", "/usr/local/lib/kamailio/perl/")
Functions -
+
<function moreinfo="none">perl_exec_simple(func, [param])</function> @@ -224,7 +252,7 @@ if (method=="INVITE") {
-
+
<function moreinfo="none">perl_exec(func, [param])</function> @@ -248,6 +276,43 @@ if (perl_exec("ldapalias")) { ... }; ... + + +
+
+ +
+ RPC Commands +
+ + <function moreinfo="none">app_perl.set_reset_cycles</function> + + + Set the value of the reset_cycle. The command has one integer + parameter. + + + <function>app_perl.set_reset_cycles</function> usage + +... +kamcmd app_perl.set_reset_cycles 20000 +... + + +
+
+ + <function moreinfo="none">app_perl.get_reset_cycles</function> + + + Return the value of the reset_cycle. + + + <function>app_perl.get_reset_cycles</function> usage + +... +kamcmd app_perl.get_reset_cycles +...
diff --git a/modules/app_perl/perlfunc.c b/modules/app_perl/perlfunc.c index 06d331498..e67c81fca 100644 --- a/modules/app_perl/perlfunc.c +++ b/modules/app_perl/perlfunc.c @@ -58,6 +58,7 @@ int perl_checkfnc(char *fnc) { int perl_exec_simple(char* fnc, char* args[], int flags) { + app_perl_reset_interpreter(); if (perl_checkfnc(fnc)) { LM_DBG("running perl function \"%s\"", fnc); @@ -94,6 +95,8 @@ int perl_exec2(struct sip_msg* _msg, char* fnc, char* mystr) { SV *m; str reason; + app_perl_reset_interpreter(); + dSP; if (!perl_checkfnc(fnc)) { diff --git a/modules/app_perl/perlfunc.h b/modules/app_perl/perlfunc.h index 2d380b932..9f40ce848 100644 --- a/modules/app_perl/perlfunc.h +++ b/modules/app_perl/perlfunc.h @@ -42,4 +42,6 @@ int perl_exec_simple2(struct sip_msg* _msg, char* fnc, char* str2); int perl_exec1(struct sip_msg* _msg, char* fnc, char *foobar); int perl_exec2(struct sip_msg* _msg, char* fnc, char* mystr); +int app_perl_reset_interpreter(void); + #endif /* PERL_FUNC_H */ diff --git a/modules/auth/README b/modules/auth/README index 3727c5a77..76d299202 100644 --- a/modules/auth/README +++ b/modules/auth/README @@ -1,4 +1,3 @@ - The Auth Module Jan Janak @@ -17,7 +16,7 @@ Daniel-Constantin Mierla Copyright © 2002, 2003 FhG FOKUS - _________________________________________________________________ + __________________________________________________________________ Table of Contents @@ -27,35 +26,35 @@ Daniel-Constantin Mierla 2. Dependencies 3. Parameters - 3.1. auth_checks_register, auth_checks_no_dlg, and - auth_checks_in_dlg (flags) - - 3.2. qop (string) - 3.3. nonce_count (boolean) - 3.4. one_time_nonce (boolean) - 3.5. nid_pool_no (integer) - 3.6. nc_array_size (integer) - 3.7. nc_array_order (integer) - 3.8. otn_in_flight_no (integer) - 3.9. otn_in_flight_order (integer) - 3.10. secret (string) - 3.11. nonce_expire (integer) - 3.12. nonce_auth_max_drift (integer) - 3.13. force_stateless_reply (boolean) - 3.14. realm_prefix (string) - 3.15. use_domain (boolean) + 3.1. auth_checks_register (flags) + 3.2. auth_checks_no_dlg (flags) + 3.3. auth_checks_in_dlg (flags) + 3.4. qop (string) + 3.5. nonce_count (boolean) + 3.6. one_time_nonce (boolean) + 3.7. nid_pool_no (integer) + 3.8. nc_array_size (integer) + 3.9. nc_array_order (integer) + 3.10. otn_in_flight_no (integer) + 3.11. otn_in_flight_order (integer) + 3.12. secret (string) + 3.13. nonce_expire (integer) + 3.14. nonce_auth_max_drift (integer) + 3.15. force_stateless_reply (boolean) + 3.16. realm_prefix (string) + 3.17. use_domain (boolean) 4. Functions 4.1. consume_credentials() 4.2. has_credentials(realm) - 4.3. www_challenge(realm, flags) - 4.4. proxy_challenge(realm, flags) - 4.5. auth_challenge(realm, flags) - 4.6. pv_www_authenticate(realm, passwd, flags [, method]) - 4.7. pv_proxy_authenticate(realm, passwd, flags) - 4.8. pv_auth_check(realm, passwd, flags, checks) - 4.9. auth_get_www_authenticate(realm, flags, pvdest) + 4.3. www_challenge(realm, flags) + 4.4. proxy_challenge(realm, flags) + 4.5. auth_challenge(realm, flags) + 4.6. pv_www_authenticate(realm, passwd, flags [, method]) + 4.7. pv_proxy_authenticate(realm, passwd, flags) + 4.8. pv_auth_check(realm, passwd, flags, checks) + 4.9. auth_get_www_authenticate(realm, flags, pvdest) List of Examples @@ -92,49 +91,49 @@ Chapter 1. Admin Guide 2. Dependencies 3. Parameters - 3.1. auth_checks_register, auth_checks_no_dlg, and - auth_checks_in_dlg (flags) - - 3.2. qop (string) - 3.3. nonce_count (boolean) - 3.4. one_time_nonce (boolean) - 3.5. nid_pool_no (integer) - 3.6. nc_array_size (integer) - 3.7. nc_array_order (integer) - 3.8. otn_in_flight_no (integer) - 3.9. otn_in_flight_order (integer) - 3.10. secret (string) - 3.11. nonce_expire (integer) - 3.12. nonce_auth_max_drift (integer) - 3.13. force_stateless_reply (boolean) - 3.14. realm_prefix (string) - 3.15. use_domain (boolean) + 3.1. auth_checks_register (flags) + 3.2. auth_checks_no_dlg (flags) + 3.3. auth_checks_in_dlg (flags) + 3.4. qop (string) + 3.5. nonce_count (boolean) + 3.6. one_time_nonce (boolean) + 3.7. nid_pool_no (integer) + 3.8. nc_array_size (integer) + 3.9. nc_array_order (integer) + 3.10. otn_in_flight_no (integer) + 3.11. otn_in_flight_order (integer) + 3.12. secret (string) + 3.13. nonce_expire (integer) + 3.14. nonce_auth_max_drift (integer) + 3.15. force_stateless_reply (boolean) + 3.16. realm_prefix (string) + 3.17. use_domain (boolean) 4. Functions 4.1. consume_credentials() 4.2. has_credentials(realm) - 4.3. www_challenge(realm, flags) - 4.4. proxy_challenge(realm, flags) - 4.5. auth_challenge(realm, flags) - 4.6. pv_www_authenticate(realm, passwd, flags [, method]) - 4.7. pv_proxy_authenticate(realm, passwd, flags) - 4.8. pv_auth_check(realm, passwd, flags, checks) - 4.9. auth_get_www_authenticate(realm, flags, pvdest) + 4.3. www_challenge(realm, flags) + 4.4. proxy_challenge(realm, flags) + 4.5. auth_challenge(realm, flags) + 4.6. pv_www_authenticate(realm, passwd, flags [, method]) + 4.7. pv_proxy_authenticate(realm, passwd, flags) + 4.8. pv_auth_check(realm, passwd, flags, checks) + 4.9. auth_get_www_authenticate(realm, flags, pvdest) 1. Overview - This is a generic module that itself doesn't provide all functions + This is a generic module that itself doesn't provide all functions necessary for authentication but provides functions that are needed by - all other authentication related modules (so called authentication + all other authentication related modules (so called authentication backends). - We decided to divide the authentication code into several modules - because there are now more than one backends (currently database - authentication and radius are supported). This allows us to create - separate packages so users can install and load only the required - functionality. This also allows us to avoid unnecessary dependencies - in the binary packages. + We decided to divide the authentication code into several modules + because there are now more than one backends (currently database + authentication and radius are supported). This allows us to create + separate packages so users can install and load only the required + functionality. This also allows us to avoid unnecessary dependencies in + the binary packages. 2. Dependencies @@ -142,57 +141,64 @@ Chapter 1. Admin Guide 3. Parameters - 3.1. auth_checks_register, auth_checks_no_dlg, and auth_checks_in_dlg - (flags) - - 3.2. qop (string) - 3.3. nonce_count (boolean) - 3.4. one_time_nonce (boolean) - 3.5. nid_pool_no (integer) - 3.6. nc_array_size (integer) - 3.7. nc_array_order (integer) - 3.8. otn_in_flight_no (integer) - 3.9. otn_in_flight_order (integer) - 3.10. secret (string) - 3.11. nonce_expire (integer) - 3.12. nonce_auth_max_drift (integer) - 3.13. force_stateless_reply (boolean) - 3.14. realm_prefix (string) - 3.15. use_domain (boolean) - -3.1. auth_checks_register, auth_checks_no_dlg, and auth_checks_in_dlg -(flags) - - These three module parameters control which optional integrity checks - will be performed on the SIP message carrying digest response during - digest authentication. auth_check_register controls integrity checks - to be performed on REGISTER messages, auth_checks_no_dlg controls - which optional integrity checks will be performed on SIP requests that - have no To header field or no To tag (in other words the requests - either establishing or outside dialogs). auth_checks_in_dlg controls - which integrity checks will be performed on SIP requests within - dialogs, such as BYE or re-INVITE. The default value for all three - parameters is 0 (old behaviour, no extra checks). The set of integrity - checks that can be performed on REGISTERs is typically different from - sets of integrity checks that can be performed for other SIP request - types, hence we have three independent module parameters. - - Without the extra checks the nonce will protect only against expired - values. Some reply attacks are still possible in the expire "window". - A possible workaround is to always force qop authentication and always - check the uri from the authorization header, but this would not work - if an upstream proxy rewrites the uri and it will also not work with a - lot of UA implementations. + 3.1. auth_checks_register (flags) + 3.2. auth_checks_no_dlg (flags) + 3.3. auth_checks_in_dlg (flags) + 3.4. qop (string) + 3.5. nonce_count (boolean) + 3.6. one_time_nonce (boolean) + 3.7. nid_pool_no (integer) + 3.8. nc_array_size (integer) + 3.9. nc_array_order (integer) + 3.10. otn_in_flight_no (integer) + 3.11. otn_in_flight_order (integer) + 3.12. secret (string) + 3.13. nonce_expire (integer) + 3.14. nonce_auth_max_drift (integer) + 3.15. force_stateless_reply (boolean) + 3.16. realm_prefix (string) + 3.17. use_domain (boolean) + +3.1. auth_checks_register (flags) + + See description of parameter auth_checks_in_dlg. + +3.2. auth_checks_no_dlg (flags) + + See description of parameter auth_checks_in_dlg. + +3.3. auth_checks_in_dlg (flags) + + These three module parameters control which optional integrity checks + will be performed on the SIP message carrying digest response during + digest authentication. auth_check_register controls integrity checks to + be performed on REGISTER messages, auth_checks_no_dlg controls which + optional integrity checks will be performed on SIP requests that have + no To header field or no To tag (in other words the requests either + establishing or outside dialogs). auth_checks_in_dlg controls which + integrity checks will be performed on SIP requests within dialogs, such + as BYE or re-INVITE. The default value for all three parameters is 0 + (old behaviour, no extra checks). The set of integrity checks that can + be performed on REGISTERs is typically different from sets of integrity + checks that can be performed for other SIP request types, hence we have + three independent module parameters. + + Without the extra checks the nonce will protect only against expired + values. Some reply attacks are still possible in the expire "window". A + possible workaround is to always force qop authentication and always + check the uri from the authorization header, but this would not work if + an upstream proxy rewrites the uri and it will also not work with a lot + of UA implementations. In this case the nonce value will be used only to hold the expire time (see nonce_expire) and an MD5 over it and some secret (the MD5 is used to make sure that nobody tampers with the nonce expire time). - When the extra checks are enabled, the nonce will include and extra - MD5 over the selected part/parts of the message (see below) and some - other secret. This will be used to check if the selected part of the - message is the same when an UA tries to reuse the nonce, thus - protecting or severely limiting reply attacks. + When the extra checks are enabled, the nonce will include and extra MD5 + over the selected part/parts of the message (see below) and some other + secret. This will be used to check if the selected part of the message + is the same when an UA tries to reuse the nonce, thus protecting or + severely limiting reply attacks. The possible flag values for all three parameters are: * 1 for checking if the message uri changed (uses the whole uri) @@ -200,27 +206,27 @@ Chapter 1. Admin Guide * 4 for checking the from tag * 8 for checking the source ip (see nonce.h). - For example setting auth_checks_register to 3 would check if the - callid or the request uri changed from the REGISTER message for which - the original nonce was generated (this would allow nonce reuse only - within the same UA and for the expire time). Note that enabling the - extra checks will limit nonce caching by UAs, requiring extra - challenges and roundtrips, but will provide much better protection. + For example setting auth_checks_register to 3 would check if the callid + or the request uri changed from the REGISTER message for which the + original nonce was generated (this would allow nonce reuse only within + the same UA and for the expire time). Note that enabling the extra + checks will limit nonce caching by UAs, requiring extra challenges and + roundtrips, but will provide much better protection. Warning - Do not enable the from tag check (4) for REGISTERs + Do not enable the from tag check (4) for REGISTERs (auth_checks_register) and out-of-dialog messages (auth_checks_no_dlg) - unless you are sure that all your user agents do not change the from + unless you are sure that all your user agents do not change the from tag when challenged. Some user agents will also change the callid when - the challenged request is not in-dialog, so avoid enabling the callid - check (2) for messages that are not part of a dialog + the challenged request is not in-dialog, so avoid enabling the callid + check (2) for messages that are not part of a dialog (auth_checks_no_dlg). In some rare case this will also have to be done for REGISTERs. When the secret parameter is set and the extra checks are enabled, the - first half of the secret will be used for the expire time MD5 and the - other half for the extra checks MD5, so make sure you have a long + first half of the secret will be used for the expire time MD5 and the + other half for the extra checks MD5, so make sure you have a long secret (32 chars or longer are recommended). Example 1.1. Setting the auth_checks_register module parameter @@ -246,15 +252,15 @@ modparam("auth", "auth_checks_in_dlg", 15) ... -3.2. qop (string) +3.4. qop (string) - If set, enable qop for challenges: each challenge will include a qop - parameter. This is the recommended way, but some older non rfc3261 - compliant UAs might get confused and might not authenticate properly - if qop is enabled. + If set, enable qop for challenges: each challenge will include a qop + parameter. This is the recommended way, but some older non rfc3261 + compliant UAs might get confused and might not authenticate properly if + qop is enabled. - Enabling qop together with nonce_count will provide extra-security - (protection against replay attacks) while still allowing credentials + Enabling qop together with nonce_count will provide extra-security + (protection against replay attacks) while still allowing credentials caching at the UA side and thus not compromising performance. The possible values are: "auth", "auth-int" and "" (unset). @@ -268,48 +274,48 @@ modparam("auth", "auth_checks_in_dlg", 15) modparam("auth", "qop", "auth") # set qop=auth ... -3.3. nonce_count (boolean) +3.5. nonce_count (boolean) If enabled the received nc value is remembered and checked against the - older value (for a successful authentication the received nc must be - greater then the previously received one, see rfc2617 for more - details). This will provide protection against replay attacks while + older value (for a successful authentication the received nc must be + greater then the previously received one, see rfc2617 for more + details). This will provide protection against replay attacks while still allowing credentials caching at the UA side. It depends on qop being enabled (if qop is not enabled, the challenges - won't include qop and so the UA will probably not include the qop or - nc parameters in its response). + won't include qop and so the UA will probably not include the qop or nc + parameters in its response). If a response doesn't include qop or nc (for example obsolete UAs that - don't support them) the response will be checked according to the - other enabled nonce checks, in this order: one_time_nonce and - auth_check_*. If a response includes nc only the normal nonce_expire - checks and the nonce_count checks will be performed, all the other - checks will be ignored. - - The nonce_count checks work by tracking a limited number of nonces. - The maximum number of tracked nonces is set using the nc_array_size or - nc_array_order parameters. If this number is exceeded, older entries - will be overwritten. As long as the maximum rate of challengeable - messages per average response time is lower then nc_array_size, the - nonce_count checks should work flawlessly. For optimum performance - (maximum reuse of cache credentials) nc_array_size divided by - nid_pool_no should be lower then the message rate multiplied by the + don't support them) the response will be checked according to the other + enabled nonce checks, in this order: one_time_nonce and auth_check_*. + If a response includes nc only the normal nonce_expire checks and the + nonce_count checks will be performed, all the other checks will be + ignored. + + The nonce_count checks work by tracking a limited number of nonces. The + maximum number of tracked nonces is set using the nc_array_size or + nc_array_order parameters. If this number is exceeded, older entries + will be overwritten. As long as the maximum rate of challengeable + messages per average response time is lower then nc_array_size, the + nonce_count checks should work flawlessly. For optimum performance + (maximum reuse of cache credentials) nc_array_size divided by + nid_pool_no should be lower then the message rate multiplied by the desired nonce_expire. The maximum accepted nc value is 255. If nc becomes greater then this, the nonce will be considered stale and the UA will be re-challenged. - Note: nonce_count should be enabled only in stateful mode (a - transaction should be created prior to the authentication check to - absorb possible retransmissions and all the replies should be sent - statefuly, using t_reply()). If nonce_count and the authentication + Note: nonce_count should be enabled only in stateful mode (a + transaction should be created prior to the authentication check to + absorb possible retransmissions and all the replies should be sent + statefuly, using t_reply()). If nonce_count and the authentication checks are used in the stateless mode then all retransmissions will be challenged. The default value is 0 (off). - See also: qop, nc_array_size, nc_array_order, nid_pool_no, + See also: qop, nc_array_size, nc_array_order, nid_pool_no, nonce_expire. one_time_nonce. Example 1.3. nonce_count example @@ -364,42 +370,42 @@ route{ } ... -3.4. one_time_nonce (boolean) +3.6. one_time_nonce (boolean) - If set to 1 nonce reuse is disabled: each nonce is allowed only once, - in the first reponse to a challenge. All the messages will be - challenged, even retransmissions. Stateful mode should be used, to - catch retransmissions before the authentication checks (using - t_newtran() before the authentication checks and sending all the + If set to 1 nonce reuse is disabled: each nonce is allowed only once, + in the first reponse to a challenge. All the messages will be + challenged, even retransmissions. Stateful mode should be used, to + catch retransmissions before the authentication checks (using + t_newtran() before the authentication checks and sending all the replies with t_reply()). - one_time_nonce provides enhanced replay protections at the cost of - invalidating UA side credentials caching, challenging every message - (and thus generating extra messages and extra round-trips) and - requiring stateful mode. In general qop and nonce_count should be - prefered (if possible) with fallback to auth_checks_*. Due to the - disadvantages listed above, one_time_nonce should be used only if the - extra checks provided by auth_checks_register, auth_checks_no_dlg and + one_time_nonce provides enhanced replay protections at the cost of + invalidating UA side credentials caching, challenging every message + (and thus generating extra messages and extra round-trips) and + requiring stateful mode. In general qop and nonce_count should be + prefered (if possible) with fallback to auth_checks_*. Due to the + disadvantages listed above, one_time_nonce should be used only if the + extra checks provided by auth_checks_register, auth_checks_no_dlg and auth_checks_in_dlg are deemed insufficient for a specific setup. - Compared to nonce_count, one_time_nonce provides the same protection, - but at a higher message cost. The only advantages are that it works - with user agents that do not support qop and nc and that it uses less + Compared to nonce_count, one_time_nonce provides the same protection, + but at a higher message cost. The only advantages are that it works + with user agents that do not support qop and nc and that it uses less memory for the same supported number of maximum in-flight nonces (by a factor of 8). one_time_nonce can be used as fallback from nonce_count, - when the UA doesn't support nc (it happens automatically when both of + when the UA doesn't support nc (it happens automatically when both of them are enabled). Like nonce_count, one_time_nonce works by tracking a limited number of - nonces. The maximum number of tracked nonces is set using the - otn_in_flight_no or otn_in_flight_order parameters. If this number is - exceeded, older entries will be overwritten. As long as the maximum + nonces. The maximum number of tracked nonces is set using the + otn_in_flight_no or otn_in_flight_order parameters. If this number is + exceeded, older entries will be overwritten. As long as the maximum rate of challengeable messages per average response time is lower then otn_in_flight_no, the one_time_nonce checks should work flawlessly. The default value is 0 (off). - See also: otn_in_flight_no, otn_in_flight_order, nid_pool_no and + See also: otn_in_flight_no, otn_in_flight_order, nid_pool_no and nonce_count. Example 1.4. one_time_nonce example @@ -408,35 +414,35 @@ modparam("auth", "one_time_nonce", 1) # Note: stateful mode should be used, see the nonce_count example ... -3.5. nid_pool_no (integer) +3.7. nid_pool_no (integer) - Controls the number of partitions for the nonce_count and + Controls the number of partitions for the nonce_count and one_time_nonce arrays (it's common to both of them to reduce the nonce size). - Instead of using single arrays for keeping nonce state, these arrays - can be divided into more partitions. Each ser process is assigned to - one of these partitions, allowing for higher concurrency on multi-CPU - machines. Besides increasing performance, increasing nid_pool_no has - also a negative effect: it could decrease the maximum supported - in-flight nonces in certain conditions. In the worst case, when only - one ser process receives most of the traffic (e.g. very busy tcp + Instead of using single arrays for keeping nonce state, these arrays + can be divided into more partitions. Each ser process is assigned to + one of these partitions, allowing for higher concurrency on multi-CPU + machines. Besides increasing performance, increasing nid_pool_no has + also a negative effect: it could decrease the maximum supported + in-flight nonces in certain conditions. In the worst case, when only + one ser process receives most of the traffic (e.g. very busy tcp connection between two proxies), the in-flight nonces could be limited - to the array size (nc_array_size for nonce_count or otn_in_flight_no - for one_time_nonce) divided by the partitions number (nid_pool_no). - However for normal traffic, when the process receiving a message is + to the array size (nc_array_size for nonce_count or otn_in_flight_no + for one_time_nonce) divided by the partitions number (nid_pool_no). + However for normal traffic, when the process receiving a message is either random or chosen in a round-robin fashion the maximum in-flight - nonces number will be very little influenced by nid_pool_no (the - messages will be close to equally distributed to processes using + nonces number will be very little influenced by nid_pool_no (the + messages will be close to equally distributed to processes using different partitions). - nid_pool_no value should be one of: 1, 2, 4, 8, 16, 32 or 64 (the - maximum value is 64 and all values should be of the form 2^k or else + nid_pool_no value should be one of: 1, 2, 4, 8, 16, 32 or 64 (the + maximum value is 64 and all values should be of the form 2^k or else they will be rounded down to 2^k). The default value is 1. - See also: nonce_count, one_time_nonce, nc_array_size and + See also: nonce_count, one_time_nonce, nc_array_size and otn_in_flight_no. Example 1.5. nid_pool_no example @@ -444,21 +450,20 @@ modparam("auth", "one_time_nonce", 1) modparam("auth", "nid_pool_no", 4) ... -3.6. nc_array_size (integer) +3.8. nc_array_size (integer) - Maximum number of in-flight nonces for nonce_count. It represents the - maximum nonces for which state will be kept. When this number is - exceeded, state for the older nonces will be discarded to make space + Maximum number of in-flight nonces for nonce_count. It represents the + maximum nonces for which state will be kept. When this number is + exceeded, state for the older nonces will be discarded to make space for new ones (see nonce_count for more details). - The value should be of the form 2^k. If it's not it will be rounded - down to 2^k (for example a value of 1000000 will be rounded down to + The value should be of the form 2^k. If it's not it will be rounded + down to 2^k (for example a value of 1000000 will be rounded down to 2^19=524288). nc_array_order can be used to directly specify the power of 2 (e.g. nc_array_order set to 20 is equivalent to nc_array_size set to 1048576). - The memory used to keep the nonce state will be nc_array_size in - bytes. + The memory used to keep the nonce state will be nc_array_size in bytes. The default value is 1048576 (1M in-flight nonces, using 1Mb memory). @@ -469,10 +474,10 @@ modparam("auth", "nid_pool_no", 4) modparam("auth", "nc_array_size", 4194304) # 4Mb ... -3.7. nc_array_order (integer) +3.9. nc_array_order (integer) - Equivalent to nc_array_size, but instead of directly specifying the - size, its value is the power at which 2 should be raised + Equivalent to nc_array_size, but instead of directly specifying the + size, its value is the power at which 2 should be raised (log2(nc_array_size)). nc_array_size = 2^nc_array_order. For more details see nc_array_size. @@ -486,25 +491,24 @@ modparam("auth", "nc_array_size", 4194304) # 4Mb modparam("auth", "nc_array_order", 22) # 4Mb ... -3.8. otn_in_flight_no (integer) +3.10. otn_in_flight_no (integer) - Maximum number of in-flight nonces for one_time_nonce. It represents - the maximum number of nonces remembered for the one-time-nonce check. - When this number is exceeded, information about older nonces will be - discarded and overwritten with information about the new generated - ones (see one_time_nonce for more details). + Maximum number of in-flight nonces for one_time_nonce. It represents + the maximum number of nonces remembered for the one-time-nonce check. + When this number is exceeded, information about older nonces will be + discarded and overwritten with information about the new generated ones + (see one_time_nonce for more details). - The value should be of the form 2^k. If it's not it will be rounded - down to 2^k (for example a value of 1000000 will be rounded down to - 2^19=524288). otn_in_flight_no can be used to directly specify the - power of 2 (e.g. otn_in_flight_order set to 19 is equivalent to + The value should be of the form 2^k. If it's not it will be rounded + down to 2^k (for example a value of 1000000 will be rounded down to + 2^19=524288). otn_in_flight_no can be used to directly specify the + power of 2 (e.g. otn_in_flight_order set to 19 is equivalent to otn_in_fligh_number set to 524288). - The memory used to keep the nonce information will be the + The memory used to keep the nonce information will be the otn_in_flight_no divided by 8 (only 1 bit of state is kept per nonce). - The default value is 1048576 (1M in-flight nonces, using 128Kb - memory). + The default value is 1048576 (1M in-flight nonces, using 128Kb memory). See also: one_time_nonce and nid_pool_no. @@ -513,13 +517,13 @@ modparam("auth", "nc_array_order", 22) # 4Mb modparam("auth", "otn_in_flight_no", 8388608) # 8 Mb (1Mb memory) ... -3.9. otn_in_flight_order (integer) +3.11. otn_in_flight_order (integer) Equivalent to otn_in_flight_no, but instead of directly specifying the - size, its value is the power at which 2 should be raised + size, its value is the power at which 2 should be raised (log2(otn_in_flight_no)). - otn_in_flight_no = 2^otn_in_flight_order. For more details see + otn_in_flight_no = 2^otn_in_flight_order. For more details see otn_in_flight_order. The default value is 20 (1M in-flight nonces, using 128Kb memory). @@ -531,18 +535,18 @@ modparam("auth", "otn_in_flight_no", 8388608) # 8 Mb (1Mb memory) modparam("auth", "otn_in_flight_order", 23) # 8 Mb (1Mb memory) ... -3.10. secret (string) +3.12. secret (string) - Secret phrase used to calculate the nonce value used to challenge the + Secret phrase used to calculate the nonce value used to challenge the client for authentication. - If you use multiple servers in your installation, and would like to - authenticate on the second server against the nonce generated at the + If you use multiple servers in your installation, and would like to + authenticate on the second server against the nonce generated at the first one its necessary to explicitly set the secret to the same value - on all servers. However, as the use of a shared (and fixed) secret as - nonce is insecure, it is much better is to stay with the default. Any - clients should send the authenticated request to the server that - issued the challenge. + on all servers. However, as the use of a shared (and fixed) secret as + nonce is insecure, it is much better is to stay with the default. Any + clients should send the authenticated request to the server that issued + the challenge. Default value is randomly generated string. @@ -551,14 +555,14 @@ modparam("auth", "otn_in_flight_order", 23) # 8 Mb (1Mb memory) modparam("auth", "secret", "johndoessecretphrase") ... -3.11. nonce_expire (integer) +3.13. nonce_expire (integer) Nonces have limited lifetime. After a given period of time nonces will - be considered invalid. This is to protect replay attacks. Credentials - containing a stale nonce will be not authorized, but the user agent - will be challenged again. This time the challenge will contain stale - parameter which will indicate to the client that it doesn't have to - disturb user by asking for username and password, it can recalculate + be considered invalid. This is to protect replay attacks. Credentials + containing a stale nonce will be not authorized, but the user agent + will be challenged again. This time the challenge will contain stale + parameter which will indicate to the client that it doesn't have to + disturb user by asking for username and password, it can recalculate credentials using existing username and password. The value is in seconds and default value is 300 seconds. @@ -568,19 +572,18 @@ modparam("auth", "secret", "johndoessecretphrase") modparam("auth", "nonce_expire", 600) # Set nonce_expire to 600s ... -3.12. nonce_auth_max_drift (integer) +3.14. nonce_auth_max_drift (integer) - Maximum difference in seconds between a nonce creation time and the + Maximum difference in seconds between a nonce creation time and the current time, if the nonce creation time appears to be in the future. In some cases, like shortly after a system time backward adjustment or - when the current proxy is part of a cluster which is not + when the current proxy is part of a cluster which is not time-synchronized, it's possible to receive a nonce with creation time - in the future. In this case if the difference is greater then - nonce_auth_max_drift seconds, consider the nonce stale and - re-challenge (otherwise after a dramatic time change backwards, it - might happen that some previously generated nonces will be valid for - too much time). + in the future. In this case if the difference is greater then + nonce_auth_max_drift seconds, consider the nonce stale and re-challenge + (otherwise after a dramatic time change backwards, it might happen that + some previously generated nonces will be valid for too much time). The default value is 3 seconds @@ -591,11 +594,11 @@ modparam("auth", "nonce_expire", 600) # Set nonce_expire to 600s modparam("auth", "nonce_auth_max_drift", 1) # set max drift to 1 s ... -3.13. force_stateless_reply (boolean) +3.15. force_stateless_reply (boolean) - If set to 1, www_challenge() and proxy_challenge() functions send - reply statelessly no matter if transaction exists or not. If set to 0 - (default), reply is sent statefully if transaction exists and + If set to 1, www_challenge() and proxy_challenge() functions send reply + statelessly no matter if transaction exists or not. If set to 0 + (default), reply is sent statefully if transaction exists and stelelessly otherwise. Example 1.13. force_stateless_reply example @@ -603,13 +606,13 @@ modparam("auth", "nonce_auth_max_drift", 1) # set max drift to 1 s modparam("auth", "force_stateless_reply", 1) ... -3.14. realm_prefix (string) +3.16. realm_prefix (string) - Prefix to be automatically strip from realm. As an alternative to SRV - records (not all SIP clients support SRV lookup), a subdomain of the - master domain can be defined for SIP purposes (like sip.mydomain.net - pointing to same IP address as the SRV record for mydomain.net). By - ignoring the realm_prefix "sip.", at authentication, sip.mydomain.net + Prefix to be automatically strip from realm. As an alternative to SRV + records (not all SIP clients support SRV lookup), a subdomain of the + master domain can be defined for SIP purposes (like sip.mydomain.net + pointing to same IP address as the SRV record for mydomain.net). By + ignoring the realm_prefix "sip.", at authentication, sip.mydomain.net will be equivalent to mydomain.net . Default value is empty string. @@ -617,9 +620,9 @@ modparam("auth", "force_stateless_reply", 1) Example 1.14. realm_prefix parameter example modparam("auth", "realm_prefix", "sip.") -3.15. use_domain (boolean) +3.17. use_domain (boolean) - If set to 1, pv_auth_check() uses domain parts of the URIs to check + If set to 1, pv_auth_check() uses domain parts of the URIs to check user identity. Example 1.15. force_stateless_reply example @@ -631,24 +634,23 @@ modparam("auth", "use_domain", 1) 4.1. consume_credentials() 4.2. has_credentials(realm) - 4.3. www_challenge(realm, flags) - 4.4. proxy_challenge(realm, flags) - 4.5. auth_challenge(realm, flags) - 4.6. pv_www_authenticate(realm, passwd, flags [, method]) - 4.7. pv_proxy_authenticate(realm, passwd, flags) - 4.8. pv_auth_check(realm, passwd, flags, checks) - 4.9. auth_get_www_authenticate(realm, flags, pvdest) + 4.3. www_challenge(realm, flags) + 4.4. proxy_challenge(realm, flags) + 4.5. auth_challenge(realm, flags) + 4.6. pv_www_authenticate(realm, passwd, flags [, method]) + 4.7. pv_proxy_authenticate(realm, passwd, flags) + 4.8. pv_auth_check(realm, passwd, flags, checks) + 4.9. auth_get_www_authenticate(realm, flags, pvdest) 4.1. consume_credentials() - This function removes previously authorized credential headers from - the message being processed by the server. That means that the - downstream message will not contain credentials there were used by - this server. This ensures that the proxy will not reveal information - about credentials used to downstream elements and also the message - will be a little bit shorter. The function must be called after - www_authorize, proxy_authorize, www_authenticate or - proxy_authenticate. + This function removes previously authorized credential headers from the + message being processed by the server. That means that the downstream + message will not contain credentials there were used by this server. + This ensures that the proxy will not reveal information about + credentials used to downstream elements and also the message will be a + little bit shorter. The function must be called after www_authorize, + proxy_authorize, www_authenticate or proxy_authenticate. Example 1.16. consume_credentials example ... @@ -659,8 +661,8 @@ if (www_authenticate("realm", "subscriber")) { 4.2. has_credentials(realm) - This function returns true of the request has Autorization or - Proxy-Authorization header with provided realm. The parameter can be + This function returns true of the request has Autorization or + Proxy-Authorization header with provided realm. The parameter can be string with pseudo-variables. Example 1.17. consume_credentials example @@ -670,31 +672,31 @@ if (has_credentials("myrealm")) { } ... -4.3. www_challenge(realm, flags) +4.3. www_challenge(realm, flags) The function challenges a user agent. It will generate a WWW-Authorize - header field containing a digest challenge, it will put the header - field into a response generated from the request the server is + header field containing a digest challenge, it will put the header + field into a response generated from the request the server is processing and send the reply. Upon reception of such a reply the user - agent should compute credentials and retry the request. For more - information regarding digest authentication see RFC2617. See module + agent should compute credentials and retry the request. For more + information regarding digest authentication see RFC2617. See module parameter force_stateless_reply regarding sending of the reply. Meaning of the parameters is as follows: - * realm - Realm is a opaque string that the user agent should - present to the user so he can decide what username and password to - use. Usually this is domain of the host the server is running on. - It must not be empty string "". In case of REGISTER requests, the - To header field domain (e.g., variable $td) can be used (because - this header field represents the user being registered), for all - other messages From header field domain can be used (e.g., - variable $fd). + * realm - Realm is a opaque string that the user agent should present + to the user so he can decide what username and password to use. + Usually this is domain of the host the server is running on. + It must not be empty string "". In case of REGISTER requests, the + To header field domain (e.g., variable $td) can be used (because + this header field represents the user being registered), for all + other messages From header field domain can be used (e.g., variable + $fd). The string may contain pseudo variables. * flags - Value of this parameter can be a bitmask of following: + 1 - build challenge header with qop=auth + 2 - build challenge header with qop=auth-int - + 4 - do not send '500 Internal Server Error' reply - automatically in failure cases (error code is returned to + + 4 - do not send '500 Internal Server Error' reply + automatically in failure cases (error code is returned to config) + 16 - build challenge header with stale=true @@ -707,17 +709,17 @@ if (!www_authenticate("$td", "subscriber")) { } ... -4.4. proxy_challenge(realm, flags) +4.4. proxy_challenge(realm, flags) - The function challenges a user agent. It will generate a - Proxy-Authorize header field containing a digest challenge, it will - put the header field into a response generated from the request the - server is processing and send the reply. Upon reception of such a - reply the user agent should compute credentials and retry the request. - For more information regarding digest authentication see RFC2617. See - module parameter force_stateless_reply regarding sending of the reply. + The function challenges a user agent. It will generate a + Proxy-Authorize header field containing a digest challenge, it will put + the header field into a response generated from the request the server + is processing and send the reply. Upon reception of such a reply the + user agent should compute credentials and retry the request. For more + information regarding digest authentication see RFC2617. See module + parameter force_stateless_reply regarding sending of the reply. - Meaning of the parameters is the same as for function + Meaning of the parameters is the same as for function www_challenge(realm, flags) This function can be used from REQUEST_ROUTE. @@ -729,15 +731,15 @@ if (!proxy_authenticate("$fd", "subscriber")) { }; ... -4.5. auth_challenge(realm, flags) +4.5. auth_challenge(realm, flags) - The function challenges a user agent for authentication. It combines - the functions www_challenge() and proxy_challenge(), by calling - internally the first one for REGISTER requests and the second one for + The function challenges a user agent for authentication. It combines + the functions www_challenge() and proxy_challenge(), by calling + internally the first one for REGISTER requests and the second one for the rest of other request types. - Meaning of the parameters the same as for function - www_challenge(realm, flags) + Meaning of the parameters the same as for function www_challenge(realm, + flags) This function can be used from REQUEST_ROUTE. @@ -748,52 +750,49 @@ if (!auth_check("$fd", "subscriber", "1")) { }; ... -4.6. pv_www_authenticate(realm, passwd, flags [, method]) +4.6. pv_www_authenticate(realm, passwd, flags [, method]) - The function verifies credentials according to RFC2617. If the - credentials are verified successfully then the function will succeed - and mark the credentials as authorized (marked credentials can be - later used by some other functions). If the function was unable to - verify the credentials for some reason then it will fail and the - script should call www_challenge which will challenge the user again. + The function verifies credentials according to RFC2617. If the + credentials are verified successfully then the function will succeed + and mark the credentials as authorized (marked credentials can be later + used by some other functions). If the function was unable to verify the + credentials for some reason then it will fail and the script should + call www_challenge which will challenge the user again. Negative codes may be interpreted as follows: - * -1 (generic error) - some generic error occurred and no reply was + * -1 (generic error) - some generic error occurred and no reply was sent out; * -2 (invalid password) - wrong password; * -3 (invalid user) - authentication user does not exist. * -4 (nonce expired) - the nonce has expired - * -5 (no credentials) - request does not contain an Authorization + * -5 (no credentials) - request does not contain an Authorization header with the correct realm. - * -6 (nonce reused) - the nonce has already been used to - authenticate a previous request + * -6 (nonce reused) - the nonce has already been used to authenticate + a previous request Meaning of the parameters is as follows: - * realm - Realm is a opaque string that the user agent should - present to the user so he can decide what username and password to - use. Usually this is domain of the host the server is running on. - It must not be empty string "". In case of REGISTER requests To + * realm - Realm is a opaque string that the user agent should present + to the user so he can decide what username and password to use. + Usually this is domain of the host the server is running on. + It must not be empty string "". In case of REGISTER requests To header field domain (e.g., varibale $td) can be used (because this - header field represents a user being registered), for all other - messages From header field domain can be used (e.g., varibale - $fd). + header field represents a user being registered), for all other + messages From header field domain can be used (e.g., varibale $fd). The string may contain pseudo variables. - * passwd - the password to be used for authentication. Can contain + * passwd - the password to be used for authentication. Can contain config variables. The Username is taken from Auth header. * flags - the value of this parameter can be a bitmask of following: + 1 - the value of password parameter is HA1 format + 2 - build challenge header with no qop and add it to avp + 4 - build challenge header with qop=auth and add it to avp - + 8 - build challenge header with qop=auth-int and add it to - avp + + 8 - build challenge header with qop=auth-int and add it to avp + 16 - build challenge header with stale=true - * method - the method to be used for authentication. This parameter - is optional and if not set is the first "word" on the - request-line. + * method - the method to be used for authentication. This parameter + is optional and if not set is the first "word" on the request-line. - When challenge header is built and stored in avp, append_to_reply() - and the sl reply functions can be used to send appropriate SIP reply - to challenge for authentication. + When challenge header is built and stored in avp, append_to_reply() and + the sl reply functions can be used to send appropriate SIP reply to + challenge for authentication. This function can be used from REQUEST_ROUTE. @@ -804,19 +803,18 @@ if (!pv_www_authenticate("$td", "123abc", "0")) { }; ... -4.7. pv_proxy_authenticate(realm, passwd, flags) +4.7. pv_proxy_authenticate(realm, passwd, flags) - The function verifies credentials according to RFC2617. If the - credentials are verified successfully then the function will succeed - and mark the credentials as authorized (marked credentials can be - later used by some other functions). If the function was unable to - verify the credentials for some reason then it will fail and the - script should call proxy_challenge which will challenge the user - again. For more about the negative return codes, see the above - function. + The function verifies credentials according to RFC2617. If the + credentials are verified successfully then the function will succeed + and mark the credentials as authorized (marked credentials can be later + used by some other functions). If the function was unable to verify the + credentials for some reason then it will fail and the script should + call proxy_challenge which will challenge the user again. For more + about the negative return codes, see the above function. - Meaning of the parameters is the same as for - pv_www_authenticate(realm, passwd, flags) + Meaning of the parameters is the same as for pv_www_authenticate(realm, + passwd, flags) This function can be used from REQUEST_ROUTE. @@ -828,20 +826,20 @@ if (!pv_proxy_authenticate("$fd", "$avp(password)", "0")) { }; ... -4.8. pv_auth_check(realm, passwd, flags, checks) +4.8. pv_auth_check(realm, passwd, flags, checks) - The function combines the functionalities of pv_www_authenticate and - pv_proxy_authenticate, first being exectuted if the SIP request is a + The function combines the functionalities of pv_www_authenticate and + pv_proxy_authenticate, first being exectuted if the SIP request is a REGISTER, the second for the rest. - Meaning of the first three parameters is the same as for + Meaning of the first three parameters is the same as for pv_www_authenticate(realm, passwd, flags). Parameter checks can be used to control the behaviour of the function. - If it is 1, then the function will check to see if the authentication - username matches either To or From header username, a matter of - whether it is for a REGISTER request or not. The parameter may be a - pseudo variable. + If it is 1, then the function will check to see if the authentication + username matches either To or From header username, a matter of whether + it is for a REGISTER request or not. The parameter may be a pseudo + variable. This function can be used from REQUEST_ROUTE. @@ -853,12 +851,12 @@ if (!pv_auth_check("$fd", "$avp(password)", "0", "1")) { }; ... -4.9. auth_get_www_authenticate(realm, flags, pvdest) +4.9. auth_get_www_authenticate(realm, flags, pvdest) - Build WWW-Authentication header and set the resulting value in - 'pvdest' pseudo-variable parameter. + Build WWW-Authentication header and set the resulting value in 'pvdest' + pseudo-variable parameter. - Meaning of the realm and flags parameters is the same as for + Meaning of the realm and flags parameters is the same as for pv_www_authenticate(realm, passwd, flags) This function can be used from ANY_ROUTE. diff --git a/modules/auth/doc/auth_functions.xml b/modules/auth/doc/auth_functions.xml index 4140f8c35..0ab616a34 100644 --- a/modules/auth/doc/auth_functions.xml +++ b/modules/auth/doc/auth_functions.xml @@ -6,7 +6,7 @@ Functions -
+
<function>consume_credentials()</function> This function removes previously authorized credential headers from the @@ -31,7 +31,7 @@ if (www_authenticate("realm", "subscriber")) {
-
+
<function>has_credentials(realm)</function> This function returns true of the request has Autorization or @@ -49,7 +49,7 @@ if (has_credentials("myrealm")) {
-
+
<function moreinfo="none">www_challenge(realm, flags)</function> @@ -122,7 +122,7 @@ if (!www_authenticate("$td", "subscriber")) {
-
+
<function moreinfo="none">proxy_challenge(realm, flags)</function> @@ -152,7 +152,7 @@ if (!proxy_authenticate("$fd", "subscriber")) {
-
+
<function moreinfo="none">auth_challenge(realm, flags)</function> @@ -179,7 +179,7 @@ if (!auth_check("$fd", "subscriber", "1")) {
-
+
<function moreinfo="none">pv_www_authenticate(realm, passwd, flags [, method])</function> @@ -297,7 +297,7 @@ if (!pv_www_authenticate("$td", "123abc", "0")) {
-
+
<function moreinfo="none">pv_proxy_authenticate(realm, passwd, flags)</function> @@ -331,7 +331,7 @@ if (!pv_proxy_authenticate("$fd", "$avp(password)", "0")) {
-
+
<function moreinfo="none">pv_auth_check(realm, passwd, flags, checks)</function> @@ -368,7 +368,7 @@ if (!pv_auth_check("$fd", "$avp(password)", "0", "1")) {
-
+
<function moreinfo="none">auth_get_www_authenticate(realm, flags, pvdest)</function> diff --git a/modules/auth/doc/auth_params.xml b/modules/auth/doc/auth_params.xml index 973f14ea0..3450ec177 100644 --- a/modules/auth/doc/auth_params.xml +++ b/modules/auth/doc/auth_params.xml @@ -6,14 +6,24 @@ Parameters -
- - <varname>auth_checks_register</varname>, - <varname>auth_checks_no_dlg</varname>, and - <varname>auth_checks_in_dlg</varname> (flags) - - - These three module parameters control which optional integrity +
+ <varname>auth_checks_register</varname> (flags) + + See description of parameter auth_checks_in_dlg. + +
+ +
+ <varname>auth_checks_no_dlg</varname> (flags) + + See description of parameter auth_checks_in_dlg. + +
+ +
+ <varname>auth_checks_in_dlg</varname> (flags) + + These three module parameters control which optional integrity checks will be performed on the SIP message carrying digest response during digest authentication. auth_check_register controls integrity checks to be performed on REGISTER messages, @@ -125,7 +135,7 @@ modparam("auth", "auth_checks_in_dlg", 15)
-
+
<varname>qop</varname> (string) If set, enable qop for challenges: each challenge @@ -161,7 +171,7 @@ modparam("auth", "qop", "auth") # set qop=auth
-
+
<varname>nonce_count</varname> (boolean) If enabled the received nc value is remembered @@ -285,7 +295,7 @@ route{
-
+
<varname>one_time_nonce</varname> (boolean) If set to 1 nonce reuse is disabled: each nonce is allowed only once, @@ -352,7 +362,7 @@ modparam("auth", "one_time_nonce", 1)
-
+
<varname>nid_pool_no</varname> (integer) Controls the number of partitions for the @@ -404,7 +414,7 @@ modparam("auth", "nid_pool_no", 4)
-
+
<varname>nc_array_size</varname> (integer) Maximum number of in-flight nonces for nonce_count. @@ -443,7 +453,7 @@ modparam("auth", "nc_array_size", 4194304) # 4Mb
-
+
<varname>nc_array_order</varname> (integer) Equivalent to nc_array_size, but instead of @@ -473,7 +483,7 @@ modparam("auth", "nc_array_order", 22) # 4Mb
-
+
<varname>otn_in_flight_no</varname> (integer) Maximum number of in-flight nonces for @@ -515,7 +525,7 @@ modparam("auth", "otn_in_flight_no", 8388608) # 8 Mb (1Mb memory)
-
+
<varname>otn_in_flight_order</varname> (integer) Equivalent to otn_in_flight_no, but instead of @@ -546,7 +556,7 @@ modparam("auth", "otn_in_flight_order", 23) # 8 Mb (1Mb memory)
-
+
<varname>secret</varname> (string) Secret phrase used to calculate the nonce value used to challenge the client for authentication. @@ -571,7 +581,7 @@ modparam("auth", "secret", "johndoessecretphrase")
-
+
<varname>nonce_expire</varname> (integer) Nonces have limited lifetime. After a given period of time nonces @@ -596,7 +606,7 @@ modparam("auth", "nonce_expire", 600) # Set nonce_expire to 600s
-
+
<varname>nonce_auth_max_drift</varname> (integer) Maximum difference in seconds between a nonce creation time and the @@ -628,7 +638,7 @@ modparam("auth", "nonce_auth_max_drift", 1) # set max drift to 1 s
-
+
<varname>force_stateless_reply</varname> (boolean) If set to 1, www_challenge() and @@ -647,7 +657,7 @@ modparam("auth", "force_stateless_reply", 1)
-
+
<varname>realm_prefix</varname> (string) Prefix to be automatically strip from realm. As an alternative to @@ -669,7 +679,7 @@ modparam("auth", "realm_prefix", "sip.")
-
+
<varname>use_domain</varname> (boolean) If set to 1, pv_auth_check() uses diff --git a/modules/auth_db/README b/modules/auth_db/README index 7bcc6f429..4076d1998 100644 --- a/modules/auth_db/README +++ b/modules/auth_db/README @@ -320,8 +320,16 @@ modparam("auth_db", "version_table", 0) Negative codes may be interpreted as follows: * -1 (generic error) - some generic error occurred and no reply was sent out; - * -2 (invalid password) - valid user, but wrong password; + * -2 (invalid password) - wrong password; * -3 (invalid user) - authentication user does not exist. + * -4 (nonce expired) - the nonce has expired + * -5 (no credentials) - request does not contain an Authorization + header with the correct realm. + * -6 (nonce reused) - the nonce has already been used to authenticate + a previous request + * -8 (authuser mismatch) - depending on the method, th From/To/RURI + user does not match the authentication user (see auth_check() + function). Meaning of the parameters is as follows: * realm - Realm is a opaque string that the user agent should present @@ -402,6 +410,8 @@ if (!proxy_authorize("$fd", "subscriber)) { authentication username matches From/To header username, and Request-URI in case of PUBLISH. + Negative return codes have the same meaning as for www_authenticate(). + Meaning of the parameters is as follows: * realm - Realm is a opaque string that the user agent should present to the user so he can decide what username and password to use. diff --git a/modules/auth_db/doc/auth_db_admin.xml b/modules/auth_db/doc/auth_db_admin.xml index 999c3cff7..246d532c1 100644 --- a/modules/auth_db/doc/auth_db_admin.xml +++ b/modules/auth_db/doc/auth_db_admin.xml @@ -327,13 +327,27 @@ modparam("auth_db", "version_table", 0) occurred and no reply was sent out; - -2 (invalid password) - valid user, but - wrong password; + -2 (invalid password) - wrong password; -3 (invalid user) - authentication user does not exist. + + -4 (nonce expired) - the nonce has expired + + + -5 (no credentials) - request does not contain + an Authorization header with the correct realm. + + + -6 (nonce reused) - the nonce has already been + used to authenticate a previous request + + + -8 (authuser mismatch) - depending on the method, th + From/To/RURI user does not match the authentication user (see auth_check() function). + Meaning of the parameters is as follows: @@ -479,6 +493,8 @@ if (!proxy_authorize("$fd", "subscriber)) { the function checks if authentication username matches From/To header username, and Request-URI in case of PUBLISH. + Negative return codes have the same meaning as for + www_authenticate(). Meaning of the parameters is as follows: diff --git a/modules/auth_ephemeral/Makefile b/modules/auth_ephemeral/Makefile new file mode 100644 index 000000000..eedbe860b --- /dev/null +++ b/modules/auth_ephemeral/Makefile @@ -0,0 +1,41 @@ +# $Id$ +# +# +# WARNING: do not run this directly, it should be run by the master Makefile + +include ../../Makefile.defs +auto_gen= +NAME=auth_ephemeral.so + +ifeq ($(CROSS_COMPILE),) +SSL_BUILDER=$(shell \ + if pkg-config --exists libssl; then \ + echo 'pkg-config libssl'; \ + fi) +endif + +ifneq ($(SSL_BUILDER),) + DEFS += $(shell $(SSL_BUILDER) --cflags) + LIBS += $(shell $(SSL_BUILDER) --libs) +else + DEFS += -I$(LOCALBASE)/ssl/include + LIBS += -L$(LOCALBASE)/lib -L$(LOCALBASE)/ssl/lib \ + -L$(LOCALBASE)/lib64 -L$(LOCALBASE)/ssl/lib64 \ + -lssl -lcrypto + # NOTE: depending on the way in which libssl was compiled you might + # have to add -lz -lkrb5 (zlib and kerberos5). + # E.g.: make TLS_HOOKS=1 TLS_EXTRA_LIBS="-lz -lkrb5" +endif + +LIBS+= $(TLS_EXTRA_LIBS) + +# Static linking, if you'd like to use TLS and AUTH_EPHEMERAL at the same time +# +#LIBS+= /usr/lib/libcurl.a /usr/lib/libssl.a /usr/lib/libcrypto.a -lkrb5 -lidn -lz -lgssapi_krb5 -lrt +DEFS+=-DKAMAILIO_MOD_INTERFACE + +SERLIBPATH=../../lib +SER_LIBS+=$(SERLIBPATH)/kcore/kcore +SER_LIBS+=$(SERLIBPATH)/kmi/kmi + +include ../../Makefile.modules diff --git a/modules/auth_ephemeral/README b/modules/auth_ephemeral/README new file mode 100644 index 000000000..139d1123a --- /dev/null +++ b/modules/auth_ephemeral/README @@ -0,0 +1,497 @@ +Auth_ephemeral Module + +Peter Dunkley + + Crocodile RCS Ltd + + + Copyright © 2013 Crocodile RCS Ltd + __________________________________________________________________ + + Table of Contents + + 1. Admin Guide + + 1. Overview + + 1.1. How ephemeral credentials work + + 1.1.1. Request + 1.1.2. Response + + 2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + + 3. Parameters + + 3.1. secret (string) + 3.2. username_format (integer) + + 4. Functions + + 4.1. autheph_proxy(realm) + 4.2. autheph_www(realm[, method]) + 4.3. autheph_check(realm) + 4.4. autheph_authenticate(username, password) + 4.5. autheph_check_from([username]) + 4.6. autheph_check_to([username]) + 4.7. autheph_check_timestamp(username) + + 5. MI Commands + + 5.1. autheph.add_secret + 5.2. autheph.dump_secrets + 5.3. autheph.rm_secret + + List of Examples + + 1.1. Request example + 1.2. Response example + 1.3. secret parameter usage + 1.4. username_format parameter usage + 1.5. autheph_proxy usage + 1.6. autheph_www usage + 1.7. autheph_check usage + 1.8. autheph_authenticate usage + 1.9. autheph_check_from usage + 1.10. autheph_check_to usage + 1.11. autheph_check_timestamp usage + +Chapter 1. Admin Guide + + Table of Contents + + 1. Overview + + 1.1. How ephemeral credentials work + + 1.1.1. Request + 1.1.2. Response + + 2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + + 3. Parameters + + 3.1. secret (string) + 3.2. username_format (integer) + + 4. Functions + + 4.1. autheph_proxy(realm) + 4.2. autheph_www(realm[, method]) + 4.3. autheph_check(realm) + 4.4. autheph_authenticate(username, password) + 4.5. autheph_check_from([username]) + 4.6. autheph_check_to([username]) + 4.7. autheph_check_timestamp(username) + + 5. MI Commands + + 5.1. autheph.add_secret + 5.2. autheph.dump_secrets + 5.3. autheph.rm_secret + +1. Overview + + 1.1. How ephemeral credentials work + + 1.1.1. Request + 1.1.2. Response + + This module contains all authentication related functions that can work + with ephemeral credentials. This module can be used together with the + auth module for digest authentication. Use this module if you want to + use ephemeral credentials instead of ordinary usernames and passwords. + +1.1. How ephemeral credentials work + + Ephemeral credentials are generated by a web-service and enforced on + Kamailio. This use of ephemeral credentials ensures that access to + Kamailio is controlled even if the credentials cannot be kept secret, + as can be the case in WebRTC where the credentials may be specified in + Javascript. + + The only interaction needed between the web-service and Kamailio is to + share a secret key. + + Credentials will typically be requested from the web-service using an + HTTP POST and provided in a HTTP response with a content-type of + "application/json". To prevent unauthorised use the HTTP requests can + be ACLd by various means. + + This mechanism is based on draft-uberti-rtcweb-turn-rest. + +1.1.1. Request + + The request to the web-service should contain the following parameters: + * service - specifies the desired service (msrp, sip, etc) + * username - an optional user identifier for the service (as would + normally be found in the username parameter of an Authorization: or + Proxy-Authorization: header) + * key - an optional API key used for authentication + + Example 1.1. Request example +POST /?service=sip&username=foo@bar.com + +1.1.2. Response + + The response should include the following parameters: + * username - the username to use, which is a colon-delimited + combination of the expiration timestamp and the username parameter + from the request (if specified). When used with this module the + timestamp must be a UNIX timestamp. + * password - the password to use; this value is computed from the + secret key and the returned username value, by performing + base64(hmac-sha1(secret key, returned username)). + * ttl - the duration for which the username and password are valid, + in seconds. + * uris - an array of URIs indicating servers that the username and + password are valid for. + + Example 1.2. Response example +{ + "username" : "1234567890:foo@bar.com", + "password" : "asdfghjklauio=", + "ttl" : 86400, + "uris" : [ + "sip:1.2.3.4;transport=ws", + "sip:5.6.7.8;transport=ws" + ] +} + +2. Dependencies + + 2.1. Kamailio Modules + 2.2. External Libraries or Applications + +2.1. Kamailio Modules + + The module must be loaded before this module: + * auth (optional). + +2.2. External Libraries or Applications + + The following libraries must be installed before running Kamailio with + this module loaded: + * OpenSSL. + +3. Parameters + + 3.1. secret (string) + 3.2. username_format (integer) + +3.1. secret (string) + + The shared secret to use for generating credentials. This parameter can + be set multiple times - this enables the secret used for new + credentials to be changed without causing existing credentials to stop + working. The last secret set is the first that will be tried. + + Example 1.3. secret parameter usage +... +modparam("auth_ephemeral", "secret", "kamailio_rules") +... + +3.2. username_format (integer) + + The format of the username in the web-service response. + + * 0 (deprecated - pre IETF draft format) - : + * 1 (default - IETF draft format) - : + + Example 1.4. username_format parameter usage +... +modparam("auth_ephemeral", "username_format", 0) +... + +4. Functions + + 4.1. autheph_proxy(realm) + 4.2. autheph_www(realm[, method]) + 4.3. autheph_check(realm) + 4.4. autheph_authenticate(username, password) + 4.5. autheph_check_from([username]) + 4.6. autheph_check_to([username]) + 4.7. autheph_check_timestamp(username) + +4.1. autheph_proxy(realm) + + This function performs proxy authentication. + +Note + + This function can only be used when the auth module is loaded before + this module. + + The meaning of the parameters are as follows: + * realm - realm is an opaque string that the user agent should + present to the user so that he can decide what username and + password to use. Usually this is domain of the host the server is + running on. + It must not be an empty string “â€. Apart from a static string, a + typical value is the From-URI domain (i.e., $fd). + The string may contain pseudo variables. + + This function can be used from REQUEST_ROUTE. + + Example 1.5. autheph_proxy usage +... +if (!autheph_proxy("$fd")) { + auth_challenge("$fd", "1"); + exit; +} +... + +4.2. autheph_www(realm[, method]) + + This function performs WWW digest authentication. + +Note + + This function can only be used when the auth module is loaded before + this module. + + The meaning of the parameters are as follows: + * realm - realm is an opaque string that the user agent should + present to the user so that he can decide what username and + password to use. Usually this is domain of the host the server is + running on. + It must not be an empty string “â€. Apart from a static string, a + typical value is the From-URI domain (i.e., $fd). + The string may contain pseudo variables. + * method - the method to be used for authentication. This parameter + is optional and if not set the first "word" on the request-line is + used. + + This function can be used from REQUEST_ROUTE. + + Example 1.6. autheph_www usage +... +if (!autheph_www("$fd")) { + auth_challenge("$fd", "1"); + exit; +} +... + +4.3. autheph_check(realm) + + This function combines the functionalities of autheph_www and + autheph_proxy, the first being exectuted if the SIP request is a + REGISTER, the second for the rest. + +Note + + This function can only be used when the auth module is loaded before + this module. + + The meaning of the parameters are as follows: + * realm - realm is an opaque string that the user agent should + present to the user so that he can decide what username and + password to use. Usually this is domain of the host the server is + running on. + It must not be an empty string “â€. Apart from a static string, a + typical value is the From-URI domain (i.e., $fd). + The string may contain pseudo variables. + + This function can be used from REQUEST_ROUTE. + + Example 1.7. autheph_check usage +... +if (!autheph_check("$fd")) { + auth_challenge("$fd", "1"); + exit; +} +... + +4.4. autheph_authenticate(username, password) + + This function performs non-digest ephemeral authentication. This may be + used when digest authentication cannot. For example, during WebSocket + handshake the username may be part of the requested URI and the + password presented in a Cookie: header. + +Note + + This function may be used without loading the auth module. + + The meaning of the parameters are as follows: + * username - the username returned in the response from the + web-service. + * password - the password returned in the response from the + web-service. + + This function can be used from REQUEST_ROUTE. + + Example 1.8. autheph_authenticate usage +... +if (!autheph_authenticate("$var(username)", "$var(password)")) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + +4.5. autheph_check_from([username]) + + This function checks that the username (or username and domain) in the + From: URI matches the credentials. + + When used without the username parameter it compares the From: URI with + the credentials used to authenticate the request (in the Authorization: + or Proxy-Authorization: headers). + + The username parameter can be used to check the From: when individual + SIP requests are not authenticated (for example, when they are over + WebSockets and the connection was authenticated during the handshake). + In this scenario the username should be cached (perhaps in a + hash-table) at the point the authentication occurs. + +Note + + This function must have the optional username parameter specified to + use it without loading the auth module before this module. + + The meaning of the parameters are as follows: + * username (optional) - the username returned in the response from + the web-service. + + This function can be used from REQUEST_ROUTE. + + Example 1.9. autheph_check_from usage +... +if (!autheph_check_from()) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + +4.6. autheph_check_to([username]) + + This function checks that the username (or username and domain) in the + To: URI matches the credentials. + + When used without the username parameter it compares the To: URI with + the credentials used to authenticate the request (in the Authorization: + or Proxy-Authorization: headers). + + The username parameter can be used to check the From: when individual + SIP requests are not authenticated (for example, when they are over + WebSockets and the connection was authenticated during the handshake). + In this scenario the username should be cached (perhaps in a + hash-table) at the point the authentication occurs. + +Note + + This function must have the optional username parameter specified to + use it without loading the auth module before this module. + + The meaning of the parameters are as follows: + * username (optional) - the username returned in the response from + the web-service. + + This function can be used from REQUEST_ROUTE. + + Example 1.10. autheph_check_to usage +... +if (!autheph_check_to()) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + +4.7. autheph_check_timestamp(username) + + This function checks that the timestamp in the username parameter has + not expired. The autheph_(check|proxy|www) functions all do this + automatically, but in a scenario when individual SIP requests are not + authenticated (for example, when they are over WebSockets and the + connection was authenticated during the handshake) you may want to + re-check for each new out-of-dialog request. In this scenario the + username should be cached (perhaps in a hash-table) at the point + authentication occurs. + +Note + + This function may be used without loading the auth module. + + The meaning of the parameters are as follows: + * username - the username returned in the response from the + web-service. + + This function can be used from REQUEST_ROUTE. + + Example 1.11. autheph_check_timestamp usage +... +if (!autheph_check_timestamp("$var(username)")) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + +5. MI Commands + + 5.1. autheph.add_secret + 5.2. autheph.dump_secrets + 5.3. autheph.rm_secret + +5.1. autheph.add_secret + + Add a secret to the head of the shared secret list. The secret will be + the first one tried during future authentication attempts. This MI + command allows you to update the shared secret list without having to + restart Kamailio. + +Note + + If you want your new shared secret list to persist across restarts you + must add it to your Kamailio configuration file. + + Name: autheph.add_secret + + Parameters: + * secret + + MI FIFO Command Format: + :autheph.add_secret:fifo_reply + kamailio_rules + _empty_line_ + +5.2. autheph.dump_secrets + + Dump the set of shared secrets. + + Name: autheph.dump_secrets + + Parameters: + * none + + MI FIFO Command Format: + :autheph.dump_secrets:fifo_reply + _empty_line_ + +5.3. autheph.rm_secret + + Remove the secret with the specified integer ID. This MI command allows + you to update the shared secret list without having to restart + Kamailio. + +Note + + If you want your new shared secret list to persist across restarts you + must add it to your Kamailio configuration file. + + Name: autheph.rm_secret + + Parameters: + * ID - the ID of the secret to remove + + MI FIFO Command Format: + :autheph.rm_secret:fifo_reply + 0 + _empty_line_ diff --git a/modules/auth_ephemeral/autheph_mod.c b/modules/auth_ephemeral/autheph_mod.c new file mode 100644 index 000000000..8e72fba57 --- /dev/null +++ b/modules/auth_ephemeral/autheph_mod.c @@ -0,0 +1,449 @@ +/* + * $Id$ + * + * Copyright (C) 2013 Crocodile RCS Ltd + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include "../../dprint.h" +#include "../../locking.h" +#include "../../mod_fix.h" +#include "../../sr_module.h" +#include "../../str.h" +#include "../../lib/kmi/mi.h" +#include "../../modules/auth/api.h" + +#include "autheph_mod.h" +#include "authorize.h" +#include "checks.h" + +MODULE_VERSION + +static int mod_init(void); +static void destroy(void); + +static int secret_param(modparam_t _type, void *_val); +struct secret *secret_list = NULL; +static struct mi_root *mi_dump_secrets(struct mi_root *cmd, void *param); +static struct mi_root *mi_add_secret(struct mi_root *cmd, void *param); +static struct mi_root *mi_rm_secret(struct mi_root *cmd, void *param); +gen_lock_t *autheph_secret_lock = NULL; + +autheph_username_format_t autheph_username_format = AUTHEPH_USERNAME_IETF; + +auth_api_s_t eph_auth_api; + +static cmd_export_t cmds[]= +{ + { "autheph_check", (cmd_function) autheph_check, + 1, fixup_var_str_1, 0, + REQUEST_ROUTE }, + { "autheph_www", (cmd_function) autheph_www, + 1, fixup_var_str_1, 0, + REQUEST_ROUTE }, + { "autheph_www", (cmd_function) autheph_www2, + 2, fixup_var_str_12, 0, + REQUEST_ROUTE }, + { "autheph_proxy", (cmd_function) autheph_proxy, + 1, fixup_var_str_1, 0, + REQUEST_ROUTE }, + { "autheph_authenticate", (cmd_function) autheph_authenticate, + 2, fixup_var_str_12, 0, + REQUEST_ROUTE }, + { "autheph_check_from", (cmd_function) autheph_check_from0, + 0, 0, 0, + REQUEST_ROUTE }, + { "autheph_check_from", (cmd_function) autheph_check_from1, + 1, fixup_var_str_1, 0, + REQUEST_ROUTE }, + { "autheph_check_to", (cmd_function) autheph_check_to0, + 0, 0, 0, + REQUEST_ROUTE }, + { "autheph_check_to", (cmd_function) autheph_check_to1, + 1, fixup_var_str_1, 0, + REQUEST_ROUTE }, + { "autheph_check_timestamp", (cmd_function) autheph_check_timestamp, + 1, fixup_var_str_1, 0, + REQUEST_ROUTE }, + {0, 0, 0, 0, 0, 0} +}; + +static param_export_t params[]= +{ + { "secret", STR_PARAM|USE_FUNC_PARAM, + (void *) secret_param }, + { "username_format", INT_PARAM, + &autheph_username_format }, + {0, 0, 0} +}; + +static mi_export_t mi_cmds[] = +{ + { "autheph.add_secret", mi_add_secret, 0, 0, 0 }, + { "autheph.dump_secrets", mi_dump_secrets,0, 0, 0 }, + { "autheph.rm_secret", mi_rm_secret, 0, 0, 0 }, + + { 0, 0, 0, 0, 0 } +}; + +struct module_exports exports= +{ + "auth_ephemeral", + DEFAULT_DLFLAGS, /* dlopen flags */ + cmds, /* Exported functions */ + params, /* Exported parameters */ + 0, /* exported statistics */ + mi_cmds, /* exported MI functions */ + 0, /* exported pseudo-variables */ + 0, /* extra processes */ + mod_init, /* module initialization function */ + 0, /* response function */ + destroy, /* destroy function */ + 0 /* child initialization function */ +}; + +static int mod_init(void) +{ + bind_auth_s_t bind_auth; + + if (register_mi_mod(exports.name, mi_cmds) != 0) + { + LM_ERR("registering MI commands\n"); + return -1; + } + + if (secret_list == NULL) + { + LM_ERR("secret modparam not set\n"); + return -1; + } + + switch(autheph_username_format) + { + case AUTHEPH_USERNAME_NON_IETF: + LM_WARN("the %d value for the username_format modparam is " + "deprecated. You should update the web-service that " + "generates credentials to use the format specified in " + "draft-uberti-rtcweb-turn-rest.\n", + autheph_username_format); + /* Fall-thru */ + case AUTHEPH_USERNAME_IETF: + break; + + default: + LM_ERR("bad value for username_format modparam: %d\n", + autheph_username_format); + return -1; + } + + bind_auth = (bind_auth_s_t) find_export("bind_auth_s", 0, 0); + if (bind_auth) + { + if (bind_auth(&eph_auth_api) < 0) + { + LM_ERR("unable to bind to auth module\n"); + return -1; + } + } + else + { + memset(&eph_auth_api, 0, sizeof(auth_api_s_t)); + LM_INFO("auth module not loaded - digest authentication and " + "check functions will not be available\n"); + } + + return 0; +} + +static void destroy(void) +{ + struct secret *secret_struct; + + if (secret_list != NULL) + { + SECRET_UNLOCK; + SECRET_LOCK; + while (secret_list != NULL) + { + secret_struct = secret_list; + secret_list = secret_struct->next; + + if (secret_struct->secret_key.s != NULL) + { + shm_free(secret_struct->secret_key.s); + } + shm_free(secret_struct); + } + SECRET_UNLOCK; + } + + if (autheph_secret_lock != NULL) + { + lock_destroy(autheph_secret_lock); + lock_dealloc((void *) autheph_secret_lock); + } +} + +static inline int add_secret(str _secret_key) +{ + struct secret *secret_struct; + + if (autheph_secret_lock == NULL) + { + autheph_secret_lock = lock_alloc(); + if (autheph_secret_lock == NULL) + { + LM_ERR("allocating lock\n"); + return -1; + } + if (lock_init(autheph_secret_lock) == 0) + { + LM_ERR("initialising lock\n"); + return -1; + } + } + + secret_struct = (struct secret *) shm_malloc(sizeof(struct secret)); + if (secret_struct == NULL) + { + LM_ERR("unable to allocate shared memory\n"); + return -1; + } + + memset(secret_struct, 0, sizeof (struct secret)); + secret_struct->secret_key = _secret_key; + SECRET_LOCK; + if (secret_list != NULL) + { + secret_list->prev = secret_struct; + } + secret_struct->next = secret_list; + secret_list = secret_struct; + SECRET_UNLOCK; + + return 0; +} + +static inline int rm_secret(int _id) +{ + int pos = 0; + struct secret *secret_struct; + + if (secret_list == NULL) + { + LM_ERR("secret list empty\n"); + return -1; + } + + SECRET_LOCK; + secret_struct = secret_list; + while (pos <= _id && secret_struct != NULL) + { + if (pos == _id) + { + if (secret_struct->prev != NULL) + { + secret_struct->prev->next = secret_struct->next; + } + if (secret_struct->next != NULL) + { + secret_struct->next->prev = secret_struct->prev; + } + if (pos == 0) + { + secret_list = secret_struct->next; + } + SECRET_UNLOCK; + shm_free(secret_struct->secret_key.s); + shm_free(secret_struct); + return 0; + } + + pos++; + secret_struct = secret_struct->next; + + } + SECRET_UNLOCK; + + LM_ERR("ID %d not found\n", _id); + return -1; +} + +static int secret_param(modparam_t _type, void *_val) +{ + str sval; + + if (_val == NULL) + { + LM_ERR("bad parameter\n"); + return -1; + } + + LM_INFO("adding %s to secret list\n", (char *) _val); + + sval.len = strlen((char *) _val); + sval.s = (char *) shm_malloc(sizeof(char) * sval.len); + if (sval.s == NULL) + { + LM_ERR("unable to allocate shared memory\n"); + return -1; + } + memcpy(sval.s, (char *) _val, sval.len); + + return add_secret(sval); +} + +static str str_status_too_many_params = str_init("Too many parameters"); +static str str_status_empty_param = str_init("Not enough parameters"); +static str str_status_no_memory = str_init("Unable to allocate shared memory"); +static str str_status_string_error = str_init("Error converting string to int"); +static str str_status_adding_secret = str_init("Error adding secret"); +static str str_status_removing_secret = str_init("Error removing secret"); + +static struct mi_root *mi_dump_secrets(struct mi_root *cmd, void *param) +{ + int pos = 0; + struct secret *secret_struct = secret_list; + struct mi_root *rpl_tree; + + if (cmd->node.kids != NULL) + { + LM_WARN("too many parameters\n"); + return init_mi_tree(400, str_status_too_many_params.s, + str_status_too_many_params.len); + } + + rpl_tree = init_mi_tree(200, MI_OK_S, MI_OK_LEN); + if (rpl_tree == NULL) + return 0; + + SECRET_LOCK; + while (secret_struct != NULL) + { + if (addf_mi_node_child(&rpl_tree->node, 0, 0, 0, + "ID %d: %.*s", pos++, + secret_struct->secret_key.len, + secret_struct->secret_key.s) == 0) + { + free_mi_tree(rpl_tree); + SECRET_UNLOCK; + return 0; + } + secret_struct = secret_struct->next; + } + SECRET_UNLOCK; + + return rpl_tree; +} + +static struct mi_root *mi_add_secret(struct mi_root *cmd, void *param) +{ + str sval; + struct mi_node *node = NULL; + + node = cmd->node.kids; + if (node == NULL) + { + LM_WARN("no secret parameter\n"); + return init_mi_tree(400, str_status_empty_param.s, + str_status_empty_param.len); + } + + if (node->value.s == NULL || node->value.len == 0) + { + LM_WARN("empty secret parameter\n"); + return init_mi_tree(400, str_status_empty_param.s, + str_status_empty_param.len); + } + + if (node->next != NULL) + { + LM_WARN("too many parameters\n"); + return init_mi_tree(400, str_status_too_many_params.s, + str_status_too_many_params.len); + } + + sval.len = node->value.len; + sval.s = shm_malloc(sizeof(char) * sval.len); + if (sval.s == NULL) + { + LM_ERR("Unable to allocate shared memory\n"); + return init_mi_tree(400, str_status_no_memory.s, + str_status_no_memory.len); + } + memcpy(sval.s, node->value.s, sval.len); + + if (add_secret(sval) == 0) + { + return init_mi_tree(200, MI_OK_S, MI_OK_LEN); + } + else + { + LM_ERR("Adding secret\n"); + return init_mi_tree(400, str_status_adding_secret.s, + str_status_adding_secret.len); + } +} + +static struct mi_root *mi_rm_secret(struct mi_root *cmd, void *param) +{ + unsigned int id; + struct mi_node *node = NULL; + + node = cmd->node.kids; + if (node == NULL) + { + LM_WARN("no id parameter\n"); + return init_mi_tree(400, str_status_empty_param.s, + str_status_empty_param.len); + } + + if (node->value.s == NULL || node->value.len == 0) + { + LM_WARN("empty id parameter\n"); + return init_mi_tree(400, str_status_empty_param.s, + str_status_empty_param.len); + } + + if (str2int(&node->value, &id) < 0) + { + LM_ERR("converting string to int\n"); + return init_mi_tree(400, str_status_string_error.s, + str_status_string_error.len); + } + + if (node->next != NULL) + { + LM_WARN("too many parameters\n"); + return init_mi_tree(400, str_status_too_many_params.s, + str_status_too_many_params.len); + } + + if (rm_secret(id) == 0) + { + return init_mi_tree(200, MI_OK_S, MI_OK_LEN); + } + else + { + LM_ERR("Removing secret\n"); + return init_mi_tree(400, str_status_removing_secret.s, + str_status_removing_secret.len); + } + + return init_mi_tree(200, MI_OK_S, MI_OK_LEN); +} diff --git a/modules/auth_ephemeral/autheph_mod.h b/modules/auth_ephemeral/autheph_mod.h new file mode 100644 index 000000000..62bc808bd --- /dev/null +++ b/modules/auth_ephemeral/autheph_mod.h @@ -0,0 +1,50 @@ +/* + * $Id$ + * + * Copyright (C) 2013 Crocodile RCS Ltd + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef AUTHEPH_MOD_H +#define AUTHEPH_MOD_H + +#include "../../locking.h" +#include "../../str.h" +#include "../../modules/auth/api.h" + +struct secret +{ + str secret_key; + struct secret *prev; + struct secret *next; +}; +extern struct secret *secret_list; + +typedef enum { + AUTHEPH_USERNAME_NON_IETF = 0, + AUTHEPH_USERNAME_IETF = 1, +} autheph_username_format_t; +extern autheph_username_format_t autheph_username_format; + +extern auth_api_s_t eph_auth_api; + +extern gen_lock_t *autheph_secret_lock; +#define SECRET_LOCK lock_get(autheph_secret_lock) +#define SECRET_UNLOCK lock_release(autheph_secret_lock) + +#endif /* AUTHEPH_MOD_H */ diff --git a/modules/auth_ephemeral/authorize.c b/modules/auth_ephemeral/authorize.c new file mode 100644 index 000000000..a09a9f8e5 --- /dev/null +++ b/modules/auth_ephemeral/authorize.c @@ -0,0 +1,479 @@ +/* + * $Id$ + * + * Copyright (C) 2013 Crocodile RCS Ltd + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include +#include + +#include "../../basex.h" +#include "../../dprint.h" +#include "../../mod_fix.h" +#include "../../str.h" +#include "../../ut.h" +#include "../../parser/digest/digest.h" +#include "../../parser/hf.h" +#include "../../mod_fix.h" + +#include "autheph_mod.h" +#include "authorize.h" + +static inline int get_pass(str *_username, str *_secret, str *_password) +{ + unsigned int hmac_len = SHA_DIGEST_LENGTH; + unsigned char hmac_sha1[hmac_len]; + + if (HMAC(EVP_sha1(), _secret->s, _secret->len, + (unsigned char *) _username->s, + _username->len, hmac_sha1, &hmac_len) == NULL) + { + LM_ERR("HMAC-SHA1 failed\n"); + return -1; + } + + _password->len = base64_enc(hmac_sha1, hmac_len, + (unsigned char *) _password->s, + base64_enc_len(hmac_len)); + LM_DBG("calculated password: %.*s\n", _password->len, _password->s); + + return 0; +} + +static inline int get_ha1(struct username *_username, str *_domain, + str *_secret, char *_ha1) +{ + char password[base64_enc_len(SHA_DIGEST_LENGTH)]; + str spassword; + + spassword.s = (char *) password; + spassword.len = 0; + + if (get_pass(&_username->whole, _secret, &spassword) < 0) + { + LM_ERR("calculating password\n"); + return -1; + } + + eph_auth_api.calc_HA1(HA_MD5, &_username->whole, _domain, &spassword, + 0, 0, _ha1); + LM_DBG("calculated HA1: %s\n", _ha1); + + return 0; +} + +static inline int do_auth(struct sip_msg *_m, struct hdr_field *_h, str *_realm, + str *_method, str *_secret) +{ + int ret; + char ha1[256]; + auth_body_t *cred = (auth_body_t*) _h->parsed; + + LM_DBG("secret: %.*s\n", _secret->len, _secret->s); + + if (get_ha1(&cred->digest.username, _realm, _secret, ha1) < 0) + { + LM_ERR("calculating HA1\n"); + return AUTH_ERROR; + } + + ret = eph_auth_api.check_response(&cred->digest, _method, ha1); + if (ret == AUTHENTICATED) + { + if (eph_auth_api.post_auth(_m, _h) != AUTHENTICATED) + { + return AUTH_ERROR; + } + } + else if (ret == NOT_AUTHENTICATED) + { + return AUTH_INVALID_PASSWORD; + } + else + { + ret = AUTH_ERROR; + } + + return AUTH_OK; +} + +int autheph_verify_timestamp(str *_username) +{ + int pos = 0, cur_time = (int) time(NULL); + unsigned int expires; + str time_str = {0, 0}; + + while (pos < _username->len && _username->s[pos] != ':') + pos++; + + if (autheph_username_format == AUTHEPH_USERNAME_NON_IETF) + { + if (pos < _username->len - 1) + { + time_str.s = _username->s + pos + 1; + time_str.len = _username->len - pos - 1; + } + else + { + time_str.s = _username->s; + time_str.len = _username->len; + } + } + else + { + time_str.s = _username->s; + if (pos < _username->len - 1) + { + time_str.len = pos; + } + else + { + time_str.len = _username->len; + } + } + + LM_DBG("username timestamp: %.*s\n", time_str.len, time_str.s); + if (str2int(&time_str, &expires) < 0) + { + LM_ERR("unable to convert timestamp to int\n"); + return -1; + } + + LM_DBG("current time: %d\n", cur_time); + if (cur_time > expires) + { + LM_WARN("username has expired\n"); + return -1; + } + + return 0; +} + +static inline int digest_authenticate(struct sip_msg *_m, str *_realm, + hdr_types_t _hftype, str *_method) +{ + struct hdr_field* h; + int ret; + struct secret *secret_struct; + str username; + + LM_DBG("realm: %.*s\n", _realm->len, _realm->s); + LM_DBG("method: %.*s\n", _method->len, _method->s); + + ret = eph_auth_api.pre_auth(_m, _realm, _hftype, &h, NULL); + switch(ret) + { + case NONCE_REUSED: + LM_DBG("nonce reused\n"); + return AUTH_NONCE_REUSED; + case STALE_NONCE: + LM_DBG("stale nonce\n"); + return AUTH_STALE_NONCE; + case NO_CREDENTIALS: + LM_DBG("no credentials\n"); + return AUTH_NO_CREDENTIALS; + case ERROR: + case BAD_CREDENTIALS: + LM_DBG("error or bad credentials\n"); + return AUTH_ERROR; + case CREATE_CHALLENGE: + LM_ERR("CREATE_CHALLENGE is not a valid state\n"); + return AUTH_ERROR; + case DO_RESYNCHRONIZATION: + LM_ERR("DO_RESYNCHRONIZATION is not a valid state\n"); + return AUTH_ERROR; + case NOT_AUTHENTICATED: + LM_DBG("not authenticated\n"); + return AUTH_ERROR; + case DO_AUTHENTICATION: + break; + case AUTHENTICATED: + return AUTH_OK; + } + + username = ((auth_body_t *) h->parsed)->digest.username.whole; + LM_DBG("username: %.*s\n", username.len, username.s); + + if (autheph_verify_timestamp(&username) < 0) + { + LM_ERR("invalid timestamp in username\n"); + return AUTH_ERROR; + } + + SECRET_LOCK; + secret_struct = secret_list; + while (secret_struct != NULL) + { + ret = do_auth(_m, h, _realm, _method, + &secret_struct->secret_key); + if (ret == AUTH_OK) + { + break; + } + secret_struct = secret_struct->next; + } + SECRET_UNLOCK; + + return ret; +} + +int autheph_check(struct sip_msg *_m, char *_realm) +{ + str srealm; + + if (eph_auth_api.pre_auth == NULL) + { + LM_ERR("autheph_check() cannot be used without the auth " + "module\n"); + return AUTH_ERROR; + } + + if (_m->REQ_METHOD == METHOD_ACK || _m->REQ_METHOD == METHOD_CANCEL) + { + return AUTH_OK; + } + + if(_m == NULL || _realm == NULL) + { + LM_ERR("invalid parameters\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&srealm, _m, (fparam_t*)_realm) < 0) + { + LM_ERR("failed to get realm value\n"); + return AUTH_ERROR; + } + + if (srealm.len == 0) + { + LM_ERR("invalid realm parameter - empty value\n"); + return AUTH_ERROR; + } + + if (_m->REQ_METHOD == METHOD_REGISTER) + { + return digest_authenticate(_m, &srealm, HDR_AUTHORIZATION_T, + &_m->first_line.u.request.method); + } + else + { + return digest_authenticate(_m, &srealm, HDR_PROXYAUTH_T, + &_m->first_line.u.request.method); + } +} + +int autheph_www(struct sip_msg *_m, char *_realm) +{ + str srealm; + + if (eph_auth_api.pre_auth == NULL) + { + LM_ERR("autheph_www() cannot be used without the auth " + "module\n"); + return AUTH_ERROR; + } + + if (_m->REQ_METHOD == METHOD_ACK || _m->REQ_METHOD == METHOD_CANCEL) + { + return AUTH_OK; + } + + if(_m == NULL || _realm == NULL) + { + LM_ERR("invalid parameters\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&srealm, _m, (fparam_t*)_realm) < 0) + { + LM_ERR("failed to get realm value\n"); + return AUTH_ERROR; + } + + if (srealm.len == 0) + { + LM_ERR("invalid realm parameter - empty value\n"); + return AUTH_ERROR; + } + + return digest_authenticate(_m, &srealm, HDR_AUTHORIZATION_T, + &_m->first_line.u.request.method); +} + +int autheph_www2(struct sip_msg *_m, char *_realm, char *_method) +{ + str srealm; + str smethod; + + if (eph_auth_api.pre_auth == NULL) + { + LM_ERR("autheph_www() cannot be used without the auth " + "module\n"); + return AUTH_ERROR; + } + + if (_m->REQ_METHOD == METHOD_ACK || _m->REQ_METHOD == METHOD_CANCEL) + { + return AUTH_OK; + } + + if(_m == NULL || _realm == NULL) + { + LM_ERR("invalid parameters\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&srealm, _m, (fparam_t*)_realm) < 0) + { + LM_ERR("failed to get realm value\n"); + return AUTH_ERROR; + } + + if (srealm.len == 0) + { + LM_ERR("invalid realm parameter - empty value\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&smethod, _m, (fparam_t*)_method) < 0) + { + LM_ERR("failed to get method value\n"); + return AUTH_ERROR; + } + + if (smethod.len == 0) + { + LM_ERR("invalid method value - empty value\n"); + return AUTH_ERROR; + } + + return digest_authenticate(_m, &srealm, HDR_AUTHORIZATION_T, &smethod); +} + +int autheph_proxy(struct sip_msg *_m, char *_realm) +{ + str srealm; + + if (eph_auth_api.pre_auth == NULL) + { + LM_ERR("autheph_proxy() cannot be used without the auth " + "module\n"); + return AUTH_ERROR; + } + + if (_m->REQ_METHOD == METHOD_ACK || _m->REQ_METHOD == METHOD_CANCEL) + { + return AUTH_OK; + } + + if(_m == NULL || _realm == NULL) + { + LM_ERR("invalid parameters\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&srealm, _m, (fparam_t*)_realm) < 0) + { + LM_ERR("failed to get realm value\n"); + return AUTH_ERROR; + } + + if (srealm.len == 0) + { + LM_ERR("invalid realm parameter - empty value\n"); + return AUTH_ERROR; + } + + return digest_authenticate(_m, &srealm, HDR_PROXYAUTH_T, + &_m->first_line.u.request.method); +} + +int autheph_authenticate(struct sip_msg *_m, char *_username, char *_password) +{ + str susername, spassword; + char generated_password[base64_enc_len(SHA_DIGEST_LENGTH)]; + str sgenerated_password; + struct secret *secret_struct; + + if (_m == NULL || _username == NULL || _password == NULL) + { + LM_ERR("invalid parameters\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&susername, _m, (fparam_t*)_username) < 0) + { + LM_ERR("failed to get username value\n"); + return AUTH_ERROR; + } + + if (susername.len == 0) + { + LM_ERR("invalid username parameter - empty value\n"); + return AUTH_ERROR; + } + + if (get_str_fparam(&spassword, _m, (fparam_t*)_password) < 0) + { + LM_ERR("failed to get password value\n"); + return AUTH_ERROR; + } + + if (spassword.len == 0) + { + LM_ERR("invalid password parameter - empty value\n"); + return AUTH_ERROR; + } + + if (autheph_verify_timestamp(&susername) < 0) + { + LM_ERR("invalid timestamp in username\n"); + return AUTH_ERROR; + } + + LM_DBG("username: %.*s\n", susername.len, susername.s); + LM_DBG("password: %.*s\n", spassword.len, spassword.s); + + sgenerated_password.s = generated_password; + SECRET_LOCK; + secret_struct = secret_list; + while (secret_struct != NULL) + { + LM_DBG("trying secret: %.*s\n", + secret_struct->secret_key.len, + secret_struct->secret_key.s); + if (get_pass(&susername, &secret_struct->secret_key, + &sgenerated_password) == 0) + { + LM_DBG("generated password: %.*s\n", + sgenerated_password.len, sgenerated_password.s); + if (strncmp(spassword.s, sgenerated_password.s, + spassword.len) == 0) + { + SECRET_UNLOCK; + return AUTH_OK; + } + } + secret_struct = secret_struct->next; + } + SECRET_UNLOCK; + + return AUTH_ERROR; +} diff --git a/modules/auth_ephemeral/authorize.h b/modules/auth_ephemeral/authorize.h new file mode 100644 index 000000000..8ce93314e --- /dev/null +++ b/modules/auth_ephemeral/authorize.h @@ -0,0 +1,37 @@ +/* + * $Id$ + * + * Copyright (C) 2013 Crocodile RCS Ltd + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef AUTHORIZE_H +#define AUTHORIZE_H + +#include "../../str.h" +#include "../../parser/msg_parser.h" + +int autheph_verify_timestamp(str *_username); + +int autheph_check(struct sip_msg *_m, char *_realm); +int autheph_www(struct sip_msg *_m, char *_realm); +int autheph_www2(struct sip_msg *_m, char *_realm, char *_method); +int autheph_proxy(struct sip_msg *_m, char *_realm); +int autheph_authenticate(struct sip_msg *_m, char *_username, char *_password); + +#endif /* AUTHORIZE_H */ diff --git a/modules/auth_ephemeral/checks.c b/modules/auth_ephemeral/checks.c new file mode 100644 index 000000000..447e99791 --- /dev/null +++ b/modules/auth_ephemeral/checks.c @@ -0,0 +1,282 @@ +/* + * $Id$ + * + * Copyright (C) 2013 Crocodile RCS Ltd + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#include "../../dprint.h" +#include "../../mod_fix.h" +#include "../../str.h" +#include "../../ut.h" +#include "../../parser/digest/digest.h" +#include "../../parser/parse_from.h" +#include "../../parser/parse_uri.h" +#include "../../mod_fix.h" + +#include "autheph_mod.h" +#include "authorize.h" +#include "checks.h" + +static inline int check_username(str *_username, struct sip_uri *_uri) +{ + str uname, domain = {0, 0}; + int pos = 0; + + if (_username == NULL || _username->len == 0) + { + LM_ERR("invalid username\n"); + return CHECK_ERROR; + } + + while (pos < _username->len && _username->s[pos] != ':') + pos++; + + if (pos < _username->len - 1) + { + if (autheph_username_format == AUTHEPH_USERNAME_NON_IETF) + { + uname.s = _username->s; + uname.len = pos; + } + else + { + uname.s = _username->s + pos + 1; + uname.len = _username->len - pos - 1; + } + } + else + { + return CHECK_NO_USER; + } + + pos = 0; + while (pos < uname.len && uname.s[pos] != '@') + pos++; + + if (pos < uname.len - 1) + { + domain.s = uname.s + pos + 1; + domain.len = uname.len - pos - 1; + uname.len = pos; + } + + if (uname.len == _uri->user.len + && strncmp(uname.s, _uri->user.s, uname.len) == 0) + { + if (domain.len == 0) + { + return CHECK_OK; + } + else if (domain.len == _uri->host.len + && strncmp(domain.s, _uri->host.s, domain.len) == 0) + { + return CHECK_OK; + } + } + + return CHECK_ERROR; +} + +static inline int check_from(struct sip_msg *_m, str *_username) +{ + if (parse_from_header(_m) < 0) + { + LM_ERR("parsing From: header\n"); + return CHECK_ERROR; + } + + if (parse_from_uri(_m) == NULL) + { + LM_ERR("parsing From: URI\n"); + return CHECK_ERROR; + } + + return check_username(_username, &get_from(_m)->parsed_uri); +} + +static inline int get_cred(struct sip_msg *_m, str *_username) +{ + struct hdr_field *h; + + get_authorized_cred(_m->authorization, &h); + if (!h) + { + get_authorized_cred(_m->proxy_auth, &h); + if (!h) + { + LM_ERR("No authorized credentials found\n"); + return -1; + } + } + + *_username = ((auth_body_t *) h->parsed)->digest.username.whole; + return 0; +} + +int autheph_check_from0(struct sip_msg *_m) +{ + str username = {0, 0}; + + if (eph_auth_api.pre_auth == NULL) + { + LM_ERR("autheph_check_from() with no username parameter " + "cannot be used without the auth module\n"); + return CHECK_ERROR; + } + + if (_m == NULL) + { + LM_ERR("invalid parameters\n"); + return CHECK_ERROR; + } + + if (get_cred(_m, &username) < 0) + { + LM_ERR("call autheph_(check|proxy|www) before calling " + " check_from() with no username parameter\n"); + return CHECK_ERROR; + } + + return check_from(_m, &username); +} + +int autheph_check_from1(struct sip_msg *_m, char *_username) +{ + str susername; + + if (_m == NULL || _username == NULL) + { + LM_ERR("invalid parameters\n"); + return CHECK_ERROR; + } + + if (get_str_fparam(&susername, _m, (fparam_t*)_username) < 0) + { + LM_ERR("failed to get username value\n"); + return CHECK_ERROR; + } + + if (susername.len == 0) + { + LM_ERR("invalid username parameter - empty value\n"); + return CHECK_ERROR; + } + + + return check_from(_m, &susername); +} + +static inline int check_to(struct sip_msg *_m, str *_username) +{ + if (!_m->to && ((parse_headers(_m, HDR_TO_F, 0) == -1) || (!_m->to))) + { + LM_ERR("parsing To: header\n"); + return CHECK_ERROR; + } + + if (parse_to_uri(_m) == NULL) + { + LM_ERR("parsing To: URI\n"); + return CHECK_ERROR; + } + + return check_username(_username, &get_to(_m)->parsed_uri); +} + +int autheph_check_to0(struct sip_msg *_m) +{ + str username = {0, 0}; + + if (eph_auth_api.pre_auth == NULL) + { + LM_ERR("autheph_check_to() with no username parameter " + "cannot be used without the auth module\n"); + return CHECK_ERROR; + } + + if (_m == NULL) + { + LM_ERR("invalid parameters\n"); + return CHECK_ERROR; + } + + if (get_cred(_m, &username) < 0) + { + LM_ERR("call autheph_(check|proxy|www) before calling " + " check_to() with no username parameter\n"); + return CHECK_ERROR; + } + + return check_to(_m, &username); +} + +int autheph_check_to1(struct sip_msg *_m, char *_username) +{ + str susername; + + if (_m == NULL || _username == NULL) + { + LM_ERR("invalid parameters\n"); + return CHECK_ERROR; + } + + if (get_str_fparam(&susername, _m, (fparam_t*)_username) < 0) + { + LM_ERR("failed to get username value\n"); + return CHECK_ERROR; + } + + if (susername.len == 0) + { + LM_ERR("invalid username parameter - empty value\n"); + return CHECK_ERROR; + } + + return check_to(_m, &susername); +} + +int autheph_check_timestamp(struct sip_msg *_m, char *_username) +{ + str susername; + + if (_m == NULL || _username == NULL) + { + LM_ERR("invalid parameters\n"); + return CHECK_ERROR; + } + + if (get_str_fparam(&susername, _m, (fparam_t*)_username) < 0) + { + LM_ERR("failed to get username value\n"); + return CHECK_ERROR; + } + + if (susername.len == 0) + { + LM_ERR("invalid username parameter - empty value\n"); + return CHECK_ERROR; + } + + if (autheph_verify_timestamp(&susername) < 0) + { + return CHECK_ERROR; + } + + return CHECK_OK; +} diff --git a/modules/auth_ephemeral/checks.h b/modules/auth_ephemeral/checks.h new file mode 100644 index 000000000..27cb7fe7a --- /dev/null +++ b/modules/auth_ephemeral/checks.h @@ -0,0 +1,40 @@ +/* + * $Id$ + * + * Copyright (C) 2013 Crocodile RCS Ltd + * + * This file is part of Kamailio, a free SIP server. + * + * Kamailio is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version + * + * Kamailio is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + * + */ +#ifndef CHECKS_H +#define CHECKS_H + +#include "../../parser/msg_parser.h" + +int autheph_check_from0(struct sip_msg *_m); +int autheph_check_from1(struct sip_msg *_m, char *_username); +int autheph_check_to0(struct sip_msg *_m); +int autheph_check_to1(struct sip_msg *_m, char *_username); +int autheph_check_timestamp(struct sip_msg *_m, char *_username); + +typedef enum { + CHECK_NO_USER = -2, + CHECK_ERROR = -1, + CHECK_OK = 1 +} autheph_check_result_t; + +#endif /* CHECKS_H */ diff --git a/modules/auth_ephemeral/doc/Makefile b/modules/auth_ephemeral/doc/Makefile new file mode 100644 index 000000000..cfd51c214 --- /dev/null +++ b/modules/auth_ephemeral/doc/Makefile @@ -0,0 +1,4 @@ +docs = auth_ephemeral.xml + +docbook_dir = ../../../docbook +include $(docbook_dir)/Makefile.module diff --git a/modules/auth_ephemeral/doc/auth_ephemeral.xml b/modules/auth_ephemeral/doc/auth_ephemeral.xml new file mode 100644 index 000000000..097228a3b --- /dev/null +++ b/modules/auth_ephemeral/doc/auth_ephemeral.xml @@ -0,0 +1,30 @@ + + + +%docentities; + +]> + + + + Auth_ephemeral Module + + + Peter + Dunkley + Crocodile RCS Ltd + peter.dunkley@crocodile-rcs.com + + + + 2013 + Crocodile RCS Ltd + + + + + + diff --git a/modules/auth_ephemeral/doc/auth_ephemeral_admin.xml b/modules/auth_ephemeral/doc/auth_ephemeral_admin.xml new file mode 100644 index 000000000..315781b50 --- /dev/null +++ b/modules/auth_ephemeral/doc/auth_ephemeral_admin.xml @@ -0,0 +1,574 @@ + + + +%docentities; + +]> + + + + + + &adminguide; + +
+ Overview + + This module contains all authentication related functions that can work + with ephemeral credentials. This module can be used together with the + auth module for digest authentication. Use this + module if you want to use ephemeral credentials instead of ordinary + usernames and passwords. + + +
+ How ephemeral credentials work + + Ephemeral credentials are generated by a web-service and enforced on + Kamailio. This use of ephemeral credentials ensures that access to + Kamailio is controlled even if the credentials cannot be kept secret, + as can be the case in WebRTC where the credentials may be specified in + Javascript. + + + The only interaction needed between the web-service and Kamailio is to + share a secret key. + + + Credentials will typically be requested from the web-service using an + HTTP POST and provided in a HTTP response with a content-type of + "application/json". To prevent unauthorised use the HTTP + requests can be ACLd by various means. + + + This mechanism is based on draft-uberti-rtcweb-turn-rest. + +
+ Request + + The request to the web-service should contain the following parameters: + + + service - specifies the desired service + (msrp, sip, etc) + + + username - an optional user identifier for + the service (as would normally be found in the username parameter of an + Authorization: or Proxy-Authorization: header) + + + key - an optional API key used for + authentication + + + + + Request example + +POST /?service=sip&username=foo@bar.com + + +
+
+ Response + + The response should include the following parameters: + + + username - the username to use, which is a + colon-delimited combination of the expiration timestamp and the username + parameter from the request (if specified). When used with this module + the timestamp must be a UNIX timestamp. + + + password - the password to use; this value is + computed from the secret key and the returned username value, by + performing base64(hmac-sha1(secret key, returned username)). + + + ttl - the duration for which the username and + password are valid, in seconds. + + + uris - an array of URIs indicating servers + that the username and password are valid for. + + + + + Response example + +{ + "username" : "1234567890:foo@bar.com", + "password" : "asdfghjklauio=", + "ttl" : 86400, + "uris" : [ + "sip:1.2.3.4;transport=ws", + "sip:5.6.7.8;transport=ws" + ] +} + + +
+
+
+ +
+ Dependencies +
+ &kamailio; Modules + + The module must be loaded before this module: + + + auth (optional). + + + +
+ +
+ External Libraries or Applications + + The following libraries must be installed before running + &kamailio; with this module loaded: + + + OpenSSL. + + + +
+
+ +
+ Parameters +
+ <varname>secret</varname> (string) + + The shared secret to use for generating credentials. This + parameter can be set multiple times - this enables the secret + used for new credentials to be changed without causing existing + credentials to stop working. The last secret set is the first + that will be tried. + + + <varname>secret</varname> parameter usage + +... +modparam("auth_ephemeral", "secret", "kamailio_rules") +... + + +
+ +
+ <varname>username_format</varname> (integer) + + The format of the username in the web-service response. + + + + + 0 (deprecated - pre IETF draft format) - + <username parameter from the request>:<timestamp> + + + + 1 (default - IETF draft format) - + <timestamp>:<username parameter from the request> + + + + + + <varname>username_format</varname> parameter + usage + +... +modparam("auth_ephemeral", "username_format", 0) +... + + +
+
+ +
+ Functions +
+ + <function moreinfo="none">autheph_proxy(realm)</function> + + This function performs proxy authentication. + This function can only be used when the + auth module is loaded before this module. + + The meaning of the parameters are as follows: + + + realm - realm is an opaque + string that the user agent should present to the user so + that he can decide what username and password to use. + Usually this is domain of the host the server is running + on. + + + It must not be an empty string . Apart + from a static string, a typical value is the From-URI + domain (i.e., $fd). + + + The string may contain pseudo variables. + + + + + This function can be used from REQUEST_ROUTE. + + + autheph_proxy usage + +... +if (!autheph_proxy("$fd")) { + auth_challenge("$fd", "1"); + exit; +} +... + + +
+ +
+ + <function moreinfo="none">autheph_www(realm[, method])</function> + + This function performs WWW digest authentication. + This function can only be used when the + auth module is loaded before this module. + + The meaning of the parameters are as follows: + + + realm - realm is an opaque + string that the user agent should present to the user so + that he can decide what username and password to use. + Usually this is domain of the host the server is running + on. + + + It must not be an empty string . Apart + from a static string, a typical value is the From-URI + domain (i.e., $fd). + + + The string may contain pseudo variables. + + + + method - the method to be + used for authentication. This parameter is optional and + if not set the first "word" on the request-line is used. + + + + + This function can be used from REQUEST_ROUTE. + + + autheph_www usage + +... +if (!autheph_www("$fd")) { + auth_challenge("$fd", "1"); + exit; +} +... + + +
+ +
+ + <function moreinfo="none">autheph_check(realm)</function> + + This function combines the functionalities of + autheph_www and + autheph_proxy, the first + being exectuted if the SIP request is a REGISTER, the second for + the rest. + This function can only be used when the + auth module is loaded before this module. + + The meaning of the parameters are as follows: + + + realm - realm is an opaque + string that the user agent should present to the user so + that he can decide what username and password to use. + Usually this is domain of the host the server is running + on. + + + It must not be an empty string . Apart + from a static string, a typical value is the From-URI + domain (i.e., $fd). + + + The string may contain pseudo variables. + + + + + This function can be used from REQUEST_ROUTE. + + + autheph_check usage + +... +if (!autheph_check("$fd")) { + auth_challenge("$fd", "1"); + exit; +} +... + + +
+ +
+ + <function moreinfo="none">autheph_authenticate(username, password)</function> + + This function performs non-digest ephemeral + authentication. This may be used when digest authentication + cannot. For example, during WebSocket handshake the username + may be part of the requested URI and the password presented in + a Cookie: header. + This function may be used without loading the + auth module. + The meaning of the parameters are as follows: + + + username - the username + returned in the response from the web-service. + + + password - the password + returned in the response from the web-service. + + + + This function can be used from REQUEST_ROUTE. + + + autheph_authenticate usage + +... +if (!autheph_authenticate("$var(username)", "$var(password)")) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + + +
+ +
+ + <function moreinfo="none">autheph_check_from([username])</function> + + This function checks that the username (or username and + domain) in the From: URI matches the credentials. + When used without the username + parameter it compares the From: URI with the credentials used + to authenticate the request (in the Authorization: or + Proxy-Authorization: headers). + The username parameter can be used + to check the From: when individual SIP requests are not + authenticated (for example, when they are over WebSockets and + the connection was authenticated during the handshake). In this + scenario the username should be cached (perhaps in a hash-table) + at the point the authentication occurs. + This function must have the optional + username parameter specified to use it + without loading the auth module before this + module. + The meaning of the parameters are as follows: + + + username (optional) - the + username returned in the response from the + web-service. + + + + This function can be used from REQUEST_ROUTE. + + + autheph_check_from usage + +... +if (!autheph_check_from()) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + + +
+ +
+ + <function moreinfo="none">autheph_check_to([username])</function> + + This function checks that the username (or username and + domain) in the To: URI matches the credentials. + When used without the username + parameter it compares the To: URI with the credentials used + to authenticate the request (in the Authorization: or + Proxy-Authorization: headers). + The username parameter can be used + to check the From: when individual SIP requests are not + authenticated (for example, when they are over WebSockets and + the connection was authenticated during the handshake). In this + scenario the username should be cached (perhaps in a hash-table) + at the point the authentication occurs. + This function must have the optional + username parameter specified to use it + without loading the auth module before this + module. + The meaning of the parameters are as follows: + + + username (optional) - the + username returned in the response from the + web-service. + + + + This function can be used from REQUEST_ROUTE. + + + autheph_check_to usage + +... +if (!autheph_check_to()) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + + +
+ +
+ + <function moreinfo="none">autheph_check_timestamp(username)</function> + + This function checks that the timestamp in the + username parameter has not expired. The + autheph_(check|proxy|www) functions all do + this automatically, but in a scenario when individual SIP + requests are not authenticated (for example, when they are over + WebSockets and the connection was authenticated during the + handshake) you may want to re-check for each new out-of-dialog + request. In this scenario the username should be cached (perhaps + in a hash-table) at the point authentication occurs. + This function may be used without loading the + auth module. + The meaning of the parameters are as follows: + + + username - the username + returned in the response from the web-service. + + + + This function can be used from REQUEST_ROUTE. + + + autheph_check_timestamp usage + +... +if (!autheph_check_timestamp("$var(username)")) { + sl_send_reply("403", "Forbidden"); + exit; +} +... + + +
+
+ +
+ MI Commands +
+ <function moreinfo="none">autheph.add_secret</function> + Add a secret to the head of the shared secret list. The + secret will be the first one tried during future authentication + attempts. This MI command allows you to update the shared secret + list without having to restart Kamailio. + If you want your new shared secret list to persist + across restarts you must add it to your Kamailio configuration + file. + Name: autheph.add_secret + Parameters: + + + secret + + + MI FIFO Command Format: + + :autheph.add_secret:fifo_reply + kamailio_rules + _empty_line_ + +
+ +
+ <function moreinfo="none">autheph.dump_secrets</function> + Dump the set of shared secrets. + Name: autheph.dump_secrets + Parameters: + + + none + + + MI FIFO Command Format: + + :autheph.dump_secrets:fifo_reply + _empty_line_ + +
+ +
+ <function moreinfo="none">autheph.rm_secret</function> + Remove the secret with the specified integer ID. This MI + command allows you to update the shared secret list without + having to restart Kamailio. + If you want your new shared secret list to persist + across restarts you must add it to your Kamailio configuration + file. + Name: autheph.rm_secret + Parameters: + + + ID - the ID of the secret to remove + + + MI FIFO Command Format: + + :autheph.rm_secret:fifo_reply + 0 + _empty_line_ + +
+ +
+
+ diff --git a/modules/avp/doc/avp_functions.xml b/modules/avp/doc/avp_functions.xml index 01bdd7fc3..18e5459a2 100644 --- a/modules/avp/doc/avp_functions.xml +++ b/modules/avp/doc/avp_functions.xml @@ -14,7 +14,7 @@ Functions -
+
<function>set_iattr(attribute,value)</function> Create an AVP of type integer. @@ -44,7 +44,7 @@ set_iattr("fr_inv_timer", "60")
-
+
<function>flags2attr("$avp")</function> Store the current state of &kamailio; flags into the specified AVP. @@ -59,7 +59,7 @@ flags2attr("$msg_flags")
-
+
<function>set_sattr(attribute,value)</function> Create an AVP of type string. @@ -87,7 +87,7 @@ set_sattr("called_number", "1234")
-