From 2612addc3159a66dc12da2ffe03bba9b322e3e29 Mon Sep 17 00:00:00 2001 From: rodgger Date: Tue, 20 Aug 2024 11:35:38 -0400 Subject: [PATCH] Version do webrtc no version_1.8.2 --- version_1.8.2/README.md | 102 + version_1.8.2/docker-compose.yml | 66 + version_1.8.2/env_example | 26 + version_1.8.2/pabx/Dockerfile | 83 + .../asterisk/var_lib_asterisk/astdb.sqlite3 | Bin 0 -> 12288 bytes version_1.8.2/pabx/build-asterisk_php.sh | 238 +++ version_1.8.2/pabx/certificados/RootCA.crt | 20 + version_1.8.2/pabx/certificados/RootCA.key | 28 + version_1.8.2/pabx/certificados/RootCA.pem | 20 + version_1.8.2/pabx/certificados/RootCA.srl | 1 + version_1.8.2/pabx/certificados/domains.ext | 7 + version_1.8.2/pabx/certificados/localhost.crt | 21 + version_1.8.2/pabx/certificados/localhost.csr | 17 + version_1.8.2/pabx/certificados/localhost.key | 28 + version_1.8.2/pabx/config-docker.php | 18 + version_1.8.2/pabx/config_network | 40 + version_1.8.2/pabx/crontab.sh | 40 + version_1.8.2/pabx/docker-entrypoint.sh | 31 + .../apache2/sites-available/pabx_simples.conf | 100 + version_1.8.2/pabx/etc/asterisk/-R | Bin 0 -> 183157 bytes version_1.8.2/pabx/etc/asterisk/acl.conf | 80 + version_1.8.2/pabx/etc/asterisk/adsi.conf | 8 + .../pabx/etc/asterisk/adtranvofr.conf | 39 + version_1.8.2/pabx/etc/asterisk/agents.conf | 6 + .../pabx/etc/asterisk/agents_adicional.conf | 16 + .../pabx/etc/asterisk/agents_general.conf | 2 + .../asterisk/agents_general_customizado.conf | 1 + .../pabx/etc/asterisk/agents_usuarios.conf | 4 + .../asterisk/agents_usuarios_customizado.conf | 1 + .../pabx/etc/asterisk/alarmreceiver.conf | 91 + version_1.8.2/pabx/etc/asterisk/alsa.conf | 77 + version_1.8.2/pabx/etc/asterisk/amd.conf | 31 + .../pabx/etc/asterisk/app_mysql.conf | 24 + version_1.8.2/pabx/etc/asterisk/app_skel.conf | 27 + version_1.8.2/pabx/etc/asterisk/applyzap.conf | 0 version_1.8.2/pabx/etc/asterisk/ari.conf | 30 + .../pabx/etc/asterisk/ast_debug_tools.conf | 57 + version_1.8.2/pabx/etc/asterisk/asterisk.adsi | 158 ++ version_1.8.2/pabx/etc/asterisk/asterisk.conf | 114 + version_1.8.2/pabx/etc/asterisk/calendar.conf | 109 + version_1.8.2/pabx/etc/asterisk/ccss.conf | 205 ++ version_1.8.2/pabx/etc/asterisk/cdr.conf | 167 ++ .../pabx/etc/asterisk/cdr_adaptive_odbc.conf | 59 + .../pabx/etc/asterisk/cdr_custom.conf | 16 + .../pabx/etc/asterisk/cdr_manager.conf | 6 + .../pabx/etc/asterisk/cdr_mysql.conf | 62 + version_1.8.2/pabx/etc/asterisk/cdr_odbc.conf | 12 + .../pabx/etc/asterisk/cdr_pgsql.conf | 8 + .../pabx/etc/asterisk/cdr_sqlite3_custom.conf | 10 + .../pabx/etc/asterisk/cdr_syslog.conf | 83 + version_1.8.2/pabx/etc/asterisk/cdr_tds.conf | 77 + version_1.8.2/pabx/etc/asterisk/cel.conf | 116 ++ .../pabx/etc/asterisk/cel_custom.conf | 39 + version_1.8.2/pabx/etc/asterisk/cel_odbc.conf | 108 + .../pabx/etc/asterisk/cel_pgsql.conf | 93 + .../pabx/etc/asterisk/cel_sqlite3_custom.conf | 24 + version_1.8.2/pabx/etc/asterisk/cel_tds.conf | 69 + .../pabx/etc/asterisk/chan_dahdi.conf | 7 + .../pabx/etc/asterisk/chan_dahdi_ramais.conf | 0 .../asterisk/chan_dahdi_ramais_general.conf | 21 + .../pabx/etc/asterisk/chan_dahdi_troncos.conf | 0 .../asterisk/chan_dahdi_troncos_general.conf | 15 + .../pabx/etc/asterisk/chan_mobile.conf | 69 + version_1.8.2/pabx/etc/asterisk/cli.conf | 12 + .../pabx/etc/asterisk/cli_aliases.conf | 203 ++ .../pabx/etc/asterisk/cli_permissions.conf | 82 + version_1.8.2/pabx/etc/asterisk/codecs.conf | 206 ++ .../pabx/etc/asterisk/confbridge.conf | 12 + .../pabx/etc/asterisk/config_test.conf | 46 + version_1.8.2/pabx/etc/asterisk/console.conf | 97 + .../pabx/etc/asterisk/dahdi_guiread.conf | 5 + .../pabx/etc/asterisk/dahdi_scan.conf | 11 + version_1.8.2/pabx/etc/asterisk/dbsep.conf | 34 + .../pabx/etc/asterisk/digivoice.conf | 27 + version_1.8.2/pabx/etc/asterisk/dnsmgr.conf | 5 + version_1.8.2/pabx/etc/asterisk/dsp.conf | 42 + version_1.8.2/pabx/etc/asterisk/dundi.conf | 268 +++ version_1.8.2/pabx/etc/asterisk/enum.conf | 22 + .../pabx/etc/asterisk/extconfig.conf | 111 + .../pabx/etc/asterisk/extensions.ael | 456 ++++ .../pabx/etc/asterisk/extensions.conf | 27 + .../pabx/etc/asterisk/extensions.lua | 240 +++ .../etc/asterisk/extensions_anuncios.conf | 3 + .../etc/asterisk/extensions_callback.conf | 2 + .../etc/asterisk/extensions_campanha.conf | 1 + .../etc/asterisk/extensions_conferencia.conf | 2 + .../etc/asterisk/extensions_contextos.conf | 0 .../asterisk/extensions_contextos_custom.conf | 0 .../extensions_contextos_personalizados.conf | 33 + .../pabx/etc/asterisk/extensions_disa.conf | 2 + .../etc/asterisk/extensions_discador.conf | 0 .../etc/asterisk/extensions_facilidades.conf | 369 ++++ .../pabx/etc/asterisk/extensions_fila.conf | 1 + .../etc/asterisk/extensions_fila_login.conf | 1 + .../pabx/etc/asterisk/extensions_general.conf | 23 + .../pabx/etc/asterisk/extensions_grupos.conf | 2 + .../pabx/etc/asterisk/extensions_grv.conf | 0 .../etc/asterisk/extensions_horarios.conf | 3 + .../pabx/etc/asterisk/extensions_minivm.conf | 158 ++ .../pabx/etc/asterisk/extensions_padrao.conf | 1830 +++++++++++++++++ .../extensions_padrao_customizado.conf | 136 ++ .../etc/asterisk/extensions_pesquisa.conf | 0 .../pabx/etc/asterisk/extensions_ramais.conf | 2 + .../pabx/etc/asterisk/extensions_rotas.conf | 0 .../asterisk/extensions_rotas_entrada.conf | 0 .../asterisk/extensions_rotas_interno.conf | 2 + .../etc/asterisk/extensions_rotas_saida.conf | 2 + .../extensions_rotas_saida_campanha.conf | 1 + .../pabx/etc/asterisk/extensions_teste.conf | 2 + .../extensions_transfere_campanha.conf | 1 + .../pabx/etc/asterisk/extensions_ura.conf | 0 version_1.8.2/pabx/etc/asterisk/features.conf | 7 + .../etc/asterisk/features_applicationmap.conf | 21 + .../features_applicationmap_customizado.conf | 1 + .../etc/asterisk/features_featuremap.conf | 6 + .../features_featuremap_customizado.conf | 1 + .../pabx/etc/asterisk/features_general.conf | 7 + .../features_general_customizado.conf | 1 + version_1.8.2/pabx/etc/asterisk/festival.conf | 34 + version_1.8.2/pabx/etc/asterisk/followme.conf | 89 + .../pabx/etc/asterisk/func_odbc.conf | 109 + version_1.8.2/pabx/etc/asterisk/gtalk.conf | 19 + .../pabx/etc/asterisk/guipreferences.conf | 21 + version_1.8.2/pabx/etc/asterisk/h323.conf | 193 ++ version_1.8.2/pabx/etc/asterisk/hep.conf | 32 + version_1.8.2/pabx/etc/asterisk/hints.conf | 1 + version_1.8.2/pabx/etc/asterisk/http.conf | 71 + version_1.8.2/pabx/etc/asterisk/iax.conf | 7 + .../pabx/etc/asterisk/iax_general.conf | 9 + .../etc/asterisk/iax_general_customizado.conf | 1 + .../pabx/etc/asterisk/iax_ramais.conf | 2 + .../etc/asterisk/iax_ramais_customizado.conf | 1 + .../pabx/etc/asterisk/iax_register.conf | 0 .../asterisk/iax_register_customizado.conf | 1 + version_1.8.2/pabx/etc/asterisk/iaxprov.conf | 80 + .../pabx/etc/asterisk/indications.conf | 736 +++++++ version_1.8.2/pabx/etc/asterisk/jabber.conf | 18 + .../pabx/etc/asterisk/keys/asterisk.crt | 23 + .../pabx/etc/asterisk/keys/asterisk.csr | 16 + .../pabx/etc/asterisk/keys/asterisk.key | 28 + .../pabx/etc/asterisk/keys/asterisk.pem | 51 + version_1.8.2/pabx/etc/asterisk/keys/ca.cfg | 10 + version_1.8.2/pabx/etc/asterisk/keys/ca.crt | 29 + version_1.8.2/pabx/etc/asterisk/keys/ca.key | 54 + version_1.8.2/pabx/etc/asterisk/keys/tmp.cfg | 8 + version_1.8.2/pabx/etc/asterisk/khomp.conf | 21 + version_1.8.2/pabx/etc/asterisk/khomp.tpl | 906 ++++++++ version_1.8.2/pabx/etc/asterisk/logger.conf | 142 ++ version_1.8.2/pabx/etc/asterisk/manager.conf | 37 + version_1.8.2/pabx/etc/asterisk/meetme.conf | 5 + .../pabx/etc/asterisk/meetme_dinamica.conf | 0 .../pabx/etc/asterisk/meetme_salas.conf | 1 + version_1.8.2/pabx/etc/asterisk/mgcp.conf | 142 ++ version_1.8.2/pabx/etc/asterisk/minivm.conf | 218 ++ version_1.8.2/pabx/etc/asterisk/misdn.conf | 537 +++++ .../pabx/etc/asterisk/modprobe_default | 0 version_1.8.2/pabx/etc/asterisk/modules.conf | 55 + version_1.8.2/pabx/etc/asterisk/motif.conf | 99 + .../pabx/etc/asterisk/musiconhold.conf | 11 + version_1.8.2/pabx/etc/asterisk/muted.conf | 39 + version_1.8.2/pabx/etc/asterisk/ooh323.conf | 203 ++ version_1.8.2/pabx/etc/asterisk/osp.conf | 117 ++ version_1.8.2/pabx/etc/asterisk/oss.conf | 152 ++ version_1.8.2/pabx/etc/asterisk/phone.conf | 51 + .../pabx/etc/asterisk/phoneprov.conf | 142 ++ .../pabx/etc/asterisk/pjproject.conf | 49 + version_1.8.2/pabx/etc/asterisk/pjsip.conf | 1266 ++++++++++++ .../pabx/etc/asterisk/pjsip_notify.conf | 57 + .../pabx/etc/asterisk/pjsip_wizard.conf | 159 ++ version_1.8.2/pabx/etc/asterisk/privacy.conf | 3 + .../pabx/etc/asterisk/proxy-ssl.conf | 154 ++ .../pabx/etc/asterisk/queuerules.conf | 30 + version_1.8.2/pabx/etc/asterisk/queues.conf | 6 + .../pabx/etc/asterisk/queues_campanha.conf | 1 + .../pabx/etc/asterisk/queues_filas.conf | 0 .../asterisk/queues_filas_customizado.conf | 0 .../pabx/etc/asterisk/queues_general.conf | 1 + .../asterisk/queues_general_customizado.conf | 2 + .../pabx/etc/asterisk/res_config_mysql.conf | 43 + .../pabx/etc/asterisk/res_config_sqlite.conf | 11 + .../pabx/etc/asterisk/res_config_sqlite3.conf | 30 + .../pabx/etc/asterisk/res_corosync.conf | 31 + version_1.8.2/pabx/etc/asterisk/res_curl.conf | 8 + version_1.8.2/pabx/etc/asterisk/res_fax.conf | 32 + version_1.8.2/pabx/etc/asterisk/res_ldap.conf | 198 ++ .../pabx/etc/asterisk/res_mysql.conf | 15 + version_1.8.2/pabx/etc/asterisk/res_odbc.conf | 111 + .../pabx/etc/asterisk/res_parking.conf | 12 + .../pabx/etc/asterisk/res_pgsql.conf | 30 + .../pabx/etc/asterisk/res_pktccops.conf | 32 + version_1.8.2/pabx/etc/asterisk/res_snmp.conf | 22 + .../pabx/etc/asterisk/res_stun_monitor.conf | 27 + version_1.8.2/pabx/etc/asterisk/rpt.conf | 193 ++ version_1.8.2/pabx/etc/asterisk/rtp.conf | 26 + version_1.8.2/pabx/etc/asterisk/say.conf | 383 ++++ version_1.8.2/pabx/etc/asterisk/sip.conf | 8 + .../pabx/etc/asterisk/sip_general.conf | 15 + .../etc/asterisk/sip_general_customizado.conf | 17 + .../pabx/etc/asterisk/sip_notify.conf | 57 + .../pabx/etc/asterisk/sip_ramais.conf | 0 .../etc/asterisk/sip_ramais_customizado.conf | 0 .../pabx/etc/asterisk/sip_register.conf | 0 .../asterisk/sip_register_customizado.conf | 1 + .../pabx/etc/asterisk/sip_webrtc.conf | 18 + version_1.8.2/pabx/etc/asterisk/skinny.conf | 207 ++ version_1.8.2/pabx/etc/asterisk/sla.conf | 150 ++ version_1.8.2/pabx/etc/asterisk/smdi.conf | 75 + version_1.8.2/pabx/etc/asterisk/sorcery.conf | 78 + version_1.8.2/pabx/etc/asterisk/ss7.timers | 65 + version_1.8.2/pabx/etc/asterisk/stasis.conf | 132 ++ version_1.8.2/pabx/etc/asterisk/statsd.conf | 8 + .../pabx/etc/asterisk/telcordia-1.adsi | 83 + .../pabx/etc/asterisk/test_sorcery.conf | 14 + version_1.8.2/pabx/etc/asterisk/udptl.conf | 30 + version_1.8.2/pabx/etc/asterisk/unistim.conf | 88 + version_1.8.2/pabx/etc/asterisk/users.conf | 113 + .../pabx/etc/asterisk/voicemail.conf | 27 + version_1.8.2/pabx/etc/asterisk/vpb.conf | 248 +++ version_1.8.2/pabx/etc/asterisk/xmpp.conf | 64 + version_1.8.2/pabx/etc/asterisk/zapata.conf | 10 + version_1.8.2/pabx/etc/init.d/cnvrtd | 88 + version_1.8.2/pabx/etc/init.d/functions | 593 ++++++ version_1.8.2/pabx/etc/init.d/rtabd | 87 + version_1.8.2/pabx/etc/init.d/supervisor | 87 + version_1.8.2/pabx/supervisord.conf | 46 + version_1.8.2/postgres-13/Dockerfile | 30 + version_1.8.2/postgres-13/include_sql.sh | 21 + .../postgres-13/permission_pg_hba.sh | 5 + 228 files changed, 17471 insertions(+) create mode 100644 version_1.8.2/README.md create mode 100644 version_1.8.2/docker-compose.yml create mode 100644 version_1.8.2/env_example create mode 100755 version_1.8.2/pabx/Dockerfile create mode 100644 version_1.8.2/pabx/asterisk/var_lib_asterisk/astdb.sqlite3 create mode 100644 version_1.8.2/pabx/build-asterisk_php.sh create mode 100644 version_1.8.2/pabx/certificados/RootCA.crt create mode 100644 version_1.8.2/pabx/certificados/RootCA.key create mode 100644 version_1.8.2/pabx/certificados/RootCA.pem create mode 100644 version_1.8.2/pabx/certificados/RootCA.srl create mode 100644 version_1.8.2/pabx/certificados/domains.ext create mode 100644 version_1.8.2/pabx/certificados/localhost.crt create mode 100644 version_1.8.2/pabx/certificados/localhost.csr create mode 100644 version_1.8.2/pabx/certificados/localhost.key create mode 100644 version_1.8.2/pabx/config-docker.php create mode 100755 version_1.8.2/pabx/config_network create mode 100644 version_1.8.2/pabx/crontab.sh create mode 100755 version_1.8.2/pabx/docker-entrypoint.sh create mode 100644 version_1.8.2/pabx/etc/apache2/sites-available/pabx_simples.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/-R create mode 100644 version_1.8.2/pabx/etc/asterisk/acl.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/adsi.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/adtranvofr.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/agents.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/agents_adicional.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/agents_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/agents_general_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/agents_usuarios.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/agents_usuarios_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/alarmreceiver.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/alsa.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/amd.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/app_mysql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/app_skel.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/applyzap.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/ari.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/ast_debug_tools.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/asterisk.adsi create mode 100644 version_1.8.2/pabx/etc/asterisk/asterisk.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/calendar.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/ccss.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_adaptive_odbc.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_custom.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_manager.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_mysql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_odbc.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_pgsql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_sqlite3_custom.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_syslog.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cdr_tds.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cel.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cel_custom.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cel_odbc.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cel_pgsql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cel_sqlite3_custom.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cel_tds.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/chan_dahdi.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/chan_mobile.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cli.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cli_aliases.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/cli_permissions.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/codecs.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/confbridge.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/config_test.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/console.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/dahdi_guiread.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/dahdi_scan.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/dbsep.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/digivoice.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/dnsmgr.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/dsp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/dundi.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/enum.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extconfig.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions.ael create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions.lua create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_anuncios.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_callback.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_campanha.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_conferencia.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_contextos.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_contextos_custom.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_contextos_personalizados.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_disa.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_discador.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_facilidades.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_fila.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_fila_login.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_grupos.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_grv.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_horarios.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_minivm.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_padrao.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_padrao_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_pesquisa.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_ramais.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_rotas.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_rotas_entrada.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_rotas_interno.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_rotas_saida.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_rotas_saida_campanha.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_teste.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_transfere_campanha.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/extensions_ura.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features_applicationmap.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features_applicationmap_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features_featuremap.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features_featuremap_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/features_general_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/festival.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/followme.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/func_odbc.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/gtalk.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/guipreferences.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/h323.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/hep.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/hints.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/http.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax_general_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax_ramais.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax_ramais_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax_register.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iax_register_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/iaxprov.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/indications.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/jabber.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/asterisk.crt create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/asterisk.csr create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/asterisk.key create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/asterisk.pem create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/ca.cfg create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/ca.crt create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/ca.key create mode 100644 version_1.8.2/pabx/etc/asterisk/keys/tmp.cfg create mode 100644 version_1.8.2/pabx/etc/asterisk/khomp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/khomp.tpl create mode 100644 version_1.8.2/pabx/etc/asterisk/logger.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/manager.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/meetme.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/meetme_dinamica.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/meetme_salas.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/mgcp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/minivm.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/misdn.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/modprobe_default create mode 100644 version_1.8.2/pabx/etc/asterisk/modules.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/motif.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/musiconhold.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/muted.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/ooh323.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/osp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/oss.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/phone.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/phoneprov.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/pjproject.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/pjsip.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/pjsip_notify.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/pjsip_wizard.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/privacy.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/proxy-ssl.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queuerules.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queues.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queues_campanha.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queues_filas.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queues_filas_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queues_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/queues_general_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_config_mysql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_config_sqlite.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_config_sqlite3.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_corosync.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_curl.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_fax.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_ldap.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_mysql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_odbc.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_parking.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_pgsql.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_pktccops.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_snmp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/res_stun_monitor.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/rpt.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/rtp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/say.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_general.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_general_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_notify.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_ramais.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_ramais_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_register.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_register_customizado.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sip_webrtc.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/skinny.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sla.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/smdi.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/sorcery.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/ss7.timers create mode 100644 version_1.8.2/pabx/etc/asterisk/stasis.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/statsd.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/telcordia-1.adsi create mode 100644 version_1.8.2/pabx/etc/asterisk/test_sorcery.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/udptl.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/unistim.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/users.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/voicemail.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/vpb.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/xmpp.conf create mode 100644 version_1.8.2/pabx/etc/asterisk/zapata.conf create mode 100755 version_1.8.2/pabx/etc/init.d/cnvrtd create mode 100755 version_1.8.2/pabx/etc/init.d/functions create mode 100755 version_1.8.2/pabx/etc/init.d/rtabd create mode 100755 version_1.8.2/pabx/etc/init.d/supervisor create mode 100755 version_1.8.2/pabx/supervisord.conf create mode 100644 version_1.8.2/postgres-13/Dockerfile create mode 100644 version_1.8.2/postgres-13/include_sql.sh create mode 100644 version_1.8.2/postgres-13/permission_pg_hba.sh diff --git a/version_1.8.2/README.md b/version_1.8.2/README.md new file mode 100644 index 0000000..99eab76 --- /dev/null +++ b/version_1.8.2/README.md @@ -0,0 +1,102 @@ + + +# Configuração do PABX versão 1.8 no docker + +Inicie a aplicação PABX de maneira fácil e sincronizada. + +## Preparando o ambiente no Windows + +### Configurando o WSL + +- Certifique-se de que o WSL2 está instalado no Windows. Caso não esteja, siga a documentação para realizar a instalação: [Instalação do WSL2](https://learn.microsoft.com/pt-br/windows/wsl/install). + +Após a instalação do WSL2, instale uma distribuição Linux. + +* Recomendamos a utilização do Debian. Para isso, execute o seguinte comando no PowerShell: +```bash +wsl --install -d Debian +``` + +* Em seguida, digite o seguinte comando no PowerShell para entrar em uma instância do Debian: +```bash +wsl -d Debian +``` +### Desabilite o Firewall e o Defender do Windows +Para conseguir realizar o download de alguns repositórios. + + + +## Clonando o repositório + +* Clone o projeto: docker-pabx-app. +```bash +git clone http://192.168.115.233:3000/SimplesIP/docker-pabx-app.git +``` + +## Deploy + +* Entre no diretório que contém os arquivos de inicialização do container. +```bash +cd docker-pabx-app/debian +``` + +Crie uma cópia do arquivo 'env-example' com o nome de '.env'. +```bash +cp env-example .env +``` + +Defina as variáveis dentro do arquivo .env: +- pasta_do_projeto - a pasta onde se encontra o projeto PABX. +- pasta_do_postgresql11 - onde deverá sincronizar o banco de dados. +- postgresql_version - por agora, não deve mudar o valor. + +### Execute o container com o docker-compose: +```bash +sudo docker-compose up -d +``` +Esse comando tentará compilar e levantar container. + +## FAQ + +* ### Configurar rota do endereço SIP? + Acesse a página `:8080/config-docker.php`. Essa página vai configurar o IP no arquivo `/etc/sip_generera.conf` e carregá-lo no Asterisk. Não deve usar "localhost", pois o endereço será do container. É necessário usar o endereço do host para acessar esta página config-docker.php. + +* ### Para que serve o arquivo `.env` ? + +Serve para definir variáveis a serem usadas no compose. Leia o arquivo '.env-example' para mais informações. + +* ### Quais arquivos estão sicronizados ? + + Grande parte dos arquivos do projeto estão sincronizados, porém existe os arquivos que não estão sincronizados. Os arquivos não sincronizados serão apagados quando seu container for encerrado e reescritos pelos arquivos da imagem quando o container for iniciado. + + Não sincronizados: + - `/etc/asterisk` - Sem sincronização na pasta + - `/etc/init.d/cnvrtd` - sem sincronização no arquivo + - `/etc/init.d/rtabd` - sem sincronização no arquivo + - `/etc/init.d/supervisor` - sem sincronização no arquivo + + Sincronizados: + - `/var/lib/postgresql/data` - Sincronizado os arquivo do banco de dados + - `/var/www/html/aplicativo` - Sincronizado + - `/var/www/html/include` - sincronizado + - `/var/lib/asterisk/` - sincronizado + - `/hdaux/utilitarios/scripts` - sincronizado + + Obs: + - `/projeto/base` será replicado no container postgres `/base` para poder puxar o banco de dados. + + +### É necessário executar algo depois da build? + + Não, todo o processo é automático. Porém, é preciso acessar `:8080/config-docker.php`, que fará o reconhecimento do IP e irá defini-lo para o protocolo SIP. + +* ### Qual as portas ? + + - `8080` - apache (web) + - `5432` - postgresql + - `5038` - asterisk (ami) + - `5060` - asterisk (sip) + - `10000-10030` - asterisk (RTP) + +* ### Se o pabx criar arquivos que não estão no projeto gitea? + Coloque em `.gitignore` e mande a correção. \ No newline at end of file diff --git a/version_1.8.2/docker-compose.yml b/version_1.8.2/docker-compose.yml new file mode 100644 index 0000000..57b3f28 --- /dev/null +++ b/version_1.8.2/docker-compose.yml @@ -0,0 +1,66 @@ +version: '3.7' +networks: + working: + driver: bridge +services: + postgres: + build: + context: postgres-13 + args: + # definir o id do usuário para ter acesso ao volume + - ID_USER_VOLUME=${id_user} + container_name: v1.8.1-webrtc-pg + restart: always + environment: + - POSTGRES_USER=contacte + - POSTGRES_PASSWORD=ctepgSQL + - POSTGRES_DB=pbx + ports: + - 5432:5432 + networks: + - working + volumes: + # copiar a pasta /projeto/base do pabx + - ${pasta_do_projeto}/projeto/base:/base + # copiar a pasta /var/lib/pgsql/data + - ${pasta_do_postgresql}:/var/lib/postgresql/data + aplicativo: + build: + context: pabx + args: + # usar para compilar dockerfile + # DB_HOST DB_PORT DB_BASE - necessário para colocar no crontab + # environment compose é para depois do dockerfile + - DB_HOST=postgres + - DB_PORT=5432 + - DB_BASE=pbx + - ID_USER_VOLUME=${id_user} + restart: always + container_name: v1.8.1-webrtc + working_dir: /var/www/html/ + ports: + - 8080:80 + - 5038:5038 + - "5060:5060/tcp" + - "5060:5060/udp" + - "5061:5061/tcp" + - "5061:5061/udp" + - "8088:8088/tcp" + - "10000-10030:10000-10030/udp" + - 4443:443 + - 8089:8089 + privileged: true + depends_on: + - postgres + networks: + - working + links: + - postgres + volumes: + - ./pabx/etc/asterisk/:/etc/asterisk + - ./pabx/certificados/:/usr/src/certificates + - ${pasta_do_projeto}:/var/www/html/aplicativo + - ${pasta_do_projeto}/include:/var/www/html/include + - ${pasta_do_projeto}/asterisk/var_lib_asterisk/:/var/lib/asterisk/ + - ${pasta_do_projeto}/asterisk/hdaux_utilitarios_scripts/:/hdaux/utilitarios/scripts + diff --git a/version_1.8.2/env_example b/version_1.8.2/env_example new file mode 100644 index 0000000..89faa8d --- /dev/null +++ b/version_1.8.2/env_example @@ -0,0 +1,26 @@ + + +# Pasta aonde está o projeto pabx para ser sincronizado no container +# +# Exemplo: +#pasta_do_projeto=/home/user/source_pabx +#pasta_do_projeto=c://Usuario/User/source_pabx +pasta_do_projeto="" + + +# Pasta do host para sincronizar a pasta /var/lib/pgsql/data (versão 13) +# Isso será usada para manter o banco de dados caso queira levantar +# outra instância. +# +# Essa pasta pode ser enviado ao repositório caso queira compartilhar +# o banco +pasta_do_postgresql="" + + +# ID do usuário para ter acesso ao volume +# Esse id_user é para poder ter acesso ao volume sem a necessidade de se tornar root +# Será modificado o id dos usuários postgres e pbx +# Para saber seu id é o comando 'id -u'. +id_user="1000" + + diff --git a/version_1.8.2/pabx/Dockerfile b/version_1.8.2/pabx/Dockerfile new file mode 100755 index 0000000..40ced00 --- /dev/null +++ b/version_1.8.2/pabx/Dockerfile @@ -0,0 +1,83 @@ +FROM debian:bullseye-slim + +# Compose manda os valores para conectar ao banco de dados +# Esses valores são usado para crontab +# crontab não limpa variáveis de ambiente para chamar script +# Logo printenv | sed 's/^\(.*\)$/export \1/g' > /env_to_crontab.sh +# defini as variáveis que vão ser chamado em cada script crontab +ARG DB_HOST +ARG DB_PORT +ARG DB_BASE +ARG ID_USER_VOLUME + +ENV ASTERISK_VERSION 13.38-cert3 +ENV ASTERISK_ADDONS_VERSION 13.18-cert3 +ENV ASTERISK_USER pbx +ENV ASTERISK_GID pbx +ENV VERSION_SIMPLESIP v1.8 +ENV APACHE_RUN_USER pbx +ENV APACHE_RUN_GROUP pbx +ENV DB_HOST $DB_HOST +ENV DB_PORT $DB_PORT +ENV DB_BASE $DB_BASE +ENV ID_USER_VOLUME $ID_USER_VOLUME + +RUN mkdir -p /var/lock/subsys/ + +# Instalação do asterisk e do PHP 8.2 e asterisk 13.38 +COPY build-asterisk_php.sh / +RUN chmod 755 /build-asterisk_php.sh +RUN /build-asterisk_php.sh $ID_USER_VOLUME + +COPY etc/asterisk/* /etc/asterisk + +# definir as variáveis de ambiente para o cron +RUN printenv | sed 's/^\(.*\)$/\1/g' > /etc/environment +COPY crontab.sh / +RUN bash /crontab.sh +RUN crontab /etc/crontab + +# Script chamado quando acessar a página web ip:8080/config-docker.php +COPY /config_network / +RUN chmod 755 /config_network +RUN chown pbx:pbx /config_network + +# apache +COPY etc/apache2/sites-available/pabx_simples.conf /etc/apache2/sites-available/pabx_simples.conf +RUN rm -rf /etc/apache2/sites-enabled/* +RUN ln -s /etc/apache2/sites-available/pabx_simples.conf /etc/apache2/sites-enabled/pabx_simples.conf + + +# colocar os arquivos include_pat do php +RUN sed -i '745 s/^[;]\? *include_path = .*/include_path = \".:\/var\/www\/html\/include\"/g' /etc/php/8.2/cli/php.ini +RUN sed -i '745 s/^[;]\? *include_path = .*/include_path = \".:\/var\/www\/html\/include\"/g' /etc/php/8.2/apache2/php.ini + +# Executar o apache no usuário pbx +RUN sed -i 's/APACHE_RUN_USER=.*/APACHE_RUN_USER=pbx/g' /etc/apache2/envvars +RUN sed -i 's/APACHE_RUN_GROUP=.*/APACHE_RUN_GROUP=pbx/g' /etc/apache2/envvars + +COPY docker-entrypoint.sh / +COPY supervisord.conf /etc/supervisor/supervisord.conf + +#RUN sed -i "s/rtpend=.*/rtpend=10030/g" /etc/asterisk/rtp.conf +#RUN sed -i "s/hostname=.*/hostname=postgres/g" /etc/asterisk/cdr_pgsql.conf +#RUN sed -i "s/;nocolor = .*/nocolor = yes/g" /etc/asterisk/asterisk.conf + +COPY etc/init.d/cnvrtd /etc/init.d/ +COPY etc/init.d/rtabd /etc/init.d/ +COPY etc/init.d/supervisor /etc/init.d/ +COPY etc/init.d/functions /etc/init.d/ + +COPY config-docker.php /var/www/html/ + +RUN chmod 755 /etc/init.d/rtabd +RUN chmod 755 /etc/init.d/cnvrtd +RUN chmod 755 /etc/init.d/supervisor + +ENTRYPOINT ["/docker-entrypoint.sh"] + + +CMD ["supervisord","-n","-c","/etc/supervisor/supervisord.conf"] + +#docker run -it -d --name v1712 -p 8080:80/tcp -p 5038:5038/tcp -p 5060:5060/udp -p 10000-10050:10000-10050/udp aplicativo + diff --git a/version_1.8.2/pabx/asterisk/var_lib_asterisk/astdb.sqlite3 b/version_1.8.2/pabx/asterisk/var_lib_asterisk/astdb.sqlite3 new file mode 100644 index 0000000000000000000000000000000000000000..8cb2e9855ba7cb92bef66ab2359910d5d4979f59 GIT binary patch literal 12288 zcmeI$O-sWt7zgktt@wtc-g;cTtzez)-t-_?XTh-vT32DGk**nRR;R9$dGsUr!Su^` z@n~9@2QNEM{ttPYJShp}cS~-rJEK(c;pF*Vq`X4A#2B4&PDGkYUF9N}8muh})o1mx z(CDE3UNF8%Gsa|$jgMsu@E-yYfB*y_009U<00Izz00bbg+5&=Yn5N0z_EHfgQcTl0 z%0F5&@V&0jyWUyH=lN9WPQLP6FKAwPLCLMvt$qF?l9~K7cNMfQy`ab2elJ^LS(dhL zo|ueA53!t2pAvPm?~7SF$?JZ;b>GRm>|Vc_c@|VM&2 + exit 1 +fi + +set -ex + + +/usr/sbin/groupadd "pbx" +/usr/sbin/useradd -u $1 -s "/bin/bash" -d '/var/lib/asterisk/' 'pbx' -g 'pbx' + +/usr/sbin/groupadd "aplicacao" +/usr/sbin/useradd -s "/bin/bash" -d '/tmp' 'aplicacao' -g 'aplicacao' + +/usr/sbin/groupadd "simples" +/usr/sbin/useradd -s "/bin/bash" -m 'simples' -g 'simples' + + +#Remover o source.list e colocar o padrão +[ -f /etc/apt/sources.list ] && /bin/rm -f /etc/apt/sources.list +#[ -d /etc/apt/sources.list.d ] && /bin/rm -rf /etc/apt/souces.list.d/* +echo "#Principal repositório de Debian" > /etc/apt/sources.list +echo "deb http://deb.debian.org/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list +echo "deb-src http://deb.debian.org/debian/ bullseye main contrib non-free" >> /etc/apt/sources.list +echo "" >> /etc/apt/sources.list +echo "deb http://deb.debian.org/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list +echo "deb-src http://deb.debian.org/debian/ bullseye-updates main contrib non-free" >> /etc/apt/sources.list +echo "" >> /etc/apt/sources.list +echo "# bullseye-updates, to get updates before a point release is made" >> /etc/apt/sources.list +echo "# see https://www.debian.org/doc/manuals/debian-reference/ch02.en.html#_updates_and_backports" >> /etc/apt/sources.list +echo "deb http://deb.debian.org/debian-security bullseye-security main" >> /etc/apt/sources.list +echo "deb-src http://deb.debian.org/debian-security bullseye-security main" >> /etc/apt/sources.list + +apt-get -y update + +apt-get install lsb-release apt-transport-https ca-certificates software-properties-common -y +apt-get install wget + +wget -O /etc/apt/trusted.gpg.d/php.gpg https://packages.sury.org/php/apt.gpg +sh -c 'echo "deb https://packages.sury.org/php/ $(lsb_release -sc) main" > /etc/apt/sources.list.d/php.list' + +apt-get -y update + + +apt-get install -y \ + supervisor \ + cron \ + curl \ + daemon \ + libcurl4-openssl-dev \ + libncurses-dev \ + libssl-dev \ + tar \ + curl \ + bison \ + git \ + vim \ + apache2 \ + libjansson-dev \ + ffmpeg \ + build-essential \ + libedit-dev \ + libsqlite3-dev \ + uuid-dev \ + libxml2-dev \ + libspeex-dev \ + libspeexdsp-dev \ + libogg-dev \ + libvorbis-dev \ + libasound2-dev \ + portaudio19-dev \ + libcurl4-openssl-dev \ + xmlstarlet \ + bison \ + flex \ + libpq-dev \ + unixodbc-dev \ + libneon27-dev \ + libgmime-3.0-dev \ + liblua5.2-dev \ + liburiparser-dev \ + libxslt1-dev \ + libssl-dev \ + libmariadb-dev-compat \ + libmariadb-dev \ + libbluetooth-dev \ + libradcli-dev \ + freetds-dev \ + libosptk-dev \ + libjack-jackd2-dev \ + libcap-dev \ + libsnmp-dev \ + libiksemel-dev \ + libcorosync-common-dev \ + libcpg-dev \ + libcfg-dev \ + libnewt-dev \ + libpopt-dev \ + libical-dev \ + libspandsp-dev \ + libresample1-dev \ + libc-client2007e-dev \ + binutils-dev \ + libsrtp2-dev \ + libgsm1-dev \ + graphviz \ + sudo \ + zlib1g-dev \ + libldap2-dev \ + bzip2 \ + libsrtp2-dev \ + libopus-dev \ + libvpx-dev \ + patch \ + php8.2 \ + php8.2-cli \ + php8.2-common \ + php8.2-dev \ + php8.2-gd \ + php8.2-mbstring \ + php8.2-mysql \ + php8.2-common \ + php8.2-snmp \ + php8.2-soap \ + php8.2-xml \ + php8.2-xmlrpc \ + php8.2-pgsql \ + php8.2-curl + +a2enmod proxy +a2enmod proxy_wstunnel +a2enmod ssl +a2enmod rewrite + +### INSTALL CENTRAL SIMPLES IP ### +mkdir -p /usr/src/asterisk + +cd /usr/src/asterisk +curl -vsL https://downloads.asterisk.org/pub/telephony/asterisk/old-releases/asterisk-13.38.3.tar.gz | tar --strip-components 1 -xz + +# 1.5 jobs per core works out okay +: ${JOBS:=$(( $(nproc) + $(nproc) / 2 ))} + +mkdir -p /etc/asterisk/ \ + /var/spool/asterisk/fax + +./configure --libdir=/usr/lib64 --with-pjproject-bundled --with-srtp=/usr/include/srtp2 +make menuselect/menuselect menuselect-tree menuselect.makeopts + +menuselect/menuselect --disable chan_pjsip menuselect.makeopts +menuselect/menuselect --enable chan_sip menuselect.makeopts +menuselect/menuselect --enable cdr_csv menuselect.makeopts +menuselect/menuselect --enable func_cdr menuselect.makeopts +menuselect/menuselect --enable cdr_pgsql menuselect.makeopts +menuselect/menuselect --enable codec_opus menuselect.makeopts +menuselect/menuselect --enable res_format_attr_opus menuselect.makeopts +menuselect/menuselect --enable res_crypto menuselect.makeopts +menuselect/menuselect --enable res_http_websocket menuselect.makeopts +menuselect/menuselect --enable res_ari menuselect.makeopts +menuselect/menuselect --enable res_stasis menuselect.makeopts +menuselect/menuselect --enable res_stun_monitor menuselect.makeopts +menuselect/menuselect --enable res_phoneprov menuselect.makeopts +menuselect/menuselect --enable res_odbc menuselect.makeopts +menuselect/menuselect --enable res_srtp menuselect.makeopts + +# we don't need any sounds in docker, they will be mounted as volume +menuselect/menuselect --disable-category MENUSELECT_CORE_SOUNDS menuselect.makeopts +menuselect/menuselect --disable-category MENUSELECT_MOH menuselect.makeopts +menuselect/menuselect --disable-category MENUSELECT_EXTRA_SOUNDS menuselect.makeopts + +make -j ${JOBS} all +make install + +# copy default configs +# cp /usr/src/asterisk/configs/basic-pbx/*.conf /etc/asterisk/ +make dist-clean +chown -R pbx:pbx /var/*/asterisk \ + /usr/*/asterisk \ + /usr/lib64/asterisk +chmod -R 750 /var/spool/asterisk + +cd / + + +#sed -i 's/;nocolor = yes/nocolor = yes/g' /etc/asterisk/asterisk.conf + +echo "/usr/lib64/" > /etc/ld.so.conf.d/local.conf +ldconfig + +apt-get clean +apt-get autoremove -y + + +### CONFIGURANDO O PHP ### +sed -i 's/^error_reporting = .*/error_reporting = E_ALL | E_STRICT/g' /etc/php/8.2/cli/php.ini +sed -i 's/^error_reporting = .*/error_reporting = E_ALL | E_STRICT/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/display_errors = .*/display_errors = Off/g' /etc/php/8.2/cli/php.ini +sed -i 's/display_errors = .*/display_errors = Off/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/^display_startup_errors = .*/display_startup_errors = Off/g' /etc/php/8.2/cli/php.ini +sed -i 's/^display_startup_errors = .*/display_startup_errors = Off/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/^upload_max_filesize = .*/upload_max_filesize = 100M/g' /etc/php/8.2/cli/php.ini +sed -i 's/^upload_max_filesize = .*/upload_max_filesize = 100M/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/memory_limit = .*/memory_limit = -1/g' /etc/php/8.2/cli/php.ini +sed -i 's/memory_limit = .*/memory_limit = 256M/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/;error_log = php_errors.*/error_log = \/var\/log\/aplsimples.log/g' /etc/php/8.2/cli/php.ini +sed -i 's/;error_log = php_errors.*/error_log = \/var\/log\/aplsimples.log/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/^default_charset = .*/default_charset = "iso-8859-1"/g' /etc/php/8.2/cli/php.ini +sed -i 's/^default_charset = .*/default_charset = "iso-8859-1"/g' /etc/php/8.2/apache2/php.ini + +sed -i '745s/^;include_path = .*/include_path = \".:\/var\/www\/html\/include::\/usr\/share\/pear:\/var\/www\/html\/include\/core\"/g' /etc/php/8.2/cli/php.ini +sed -i '745 s/^;include_path = .*/include_path = \".:\/var\/www\/html\/include::\/usr\/share\/pear:\/var\/www\/html\/include\/core\"/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/^;date.timezone =.*/date.timezone = "America\/Cuiaba"/g' /etc/php/8.2/cli/php.ini +sed -i 's/^;date.timezone =.*/date.timezone = "America\/Cuiaba"/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/^;openssl.cafile=.*/openssl.cafile = \/usr\/src\/certificates\/RootCA.pem/g' /etc/php/8.2/cli/php.ini +sed -i 's/^;openssl.capath=.*/openssl.capath = \/usr\/src\/certificates/g' /etc/php/8.2/cli/php.ini + +sed -i 's/^;openssl.cafile=.*/openssl.cafile = \/usr\/src\/certificates\/RootCA.pem/g' /etc/php/8.2/apache2/php.ini +sed -i 's/^;openssl.capath=.*/openssl.capath = \/usr\/src\/certificates/g' /etc/php/8.2/apache2/php.ini + +sed -i 's/^export APACHE_RUN_USER=.*/export APACHE_RUN_USER=pbx/g' /etc/apache2/envvars +sed -i 's/^export APACHE_RUN_GROUP=.*/export APACHE_RUN_GROUP=pbx/g' /etc/apache2/envvars + +echo "export DB_HOST=${DB_HOST}" >> /etc/apache2/envvars + +cd /var/www/html/ + +exec rm -f /build-asterisk.sh diff --git a/version_1.8.2/pabx/certificados/RootCA.crt b/version_1.8.2/pabx/certificados/RootCA.crt new file mode 100644 index 0000000..2cfc265 --- /dev/null +++ b/version_1.8.2/pabx/certificados/RootCA.crt @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDMTCCAhmgAwIBAgIUfwDYeruX8TSBfeO3MBY7/p6MuKEwDQYJKoZIhvcNAQEL +BQAwKDELMAkGA1UEBhMCQlIxGTAXBgNVBAMMEFNpbXBsZXNpcC1XZWJydGMwHhcN +MjQwNTI0MTU1NjUzWhcNMjcwMzE0MTU1NjUzWjAoMQswCQYDVQQGEwJCUjEZMBcG +A1UEAwwQU2ltcGxlc2lwLVdlYnJ0YzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAO7PBUAHkpEz14HuK5WqtPVi+7YALsUQbalU1RGJ4MtSBC/OZCl+VuuG +rs4mTxil4XNcdSUjlCDxEoP078lwodMRmdyRA7mcyqjSt51AORnoMca7LYVCNSjw +hu7S8iBIGXRtaIFRnMmBz7IerdSpnxIDTnN0/VxBrTAH1V6U/8TT7Eb+rIQoQizP +CrOR4HnnTYgKpLKw97dsPA55tk3zLrDNU4lzXTK8E8ZVnx5B1meBa039R1kdhEWO +yYAJmyMOqh6Vw8BmjY8b6g25TRbbWTeAEWXkXqR/MZ6m4h1Xx/ff65dJm+POWQjr +YBXNfXfH5vUaM6QX7dlJngKMTCecya8CAwEAAaNTMFEwHQYDVR0OBBYEFG0L3bmP +JQd9PjReRfsSkpBWrqbTMB8GA1UdIwQYMBaAFG0L3bmPJQd9PjReRfsSkpBWrqbT +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHqhBMDZHeb8lRDR +7+XNNLopBfCxQMTwNYjjz3w+kySrAkNOZdctgnhPvTXWnjuoe8fWQZKtp7Y627U1 +bn0zYNJTF0Er53XD+20gyLecD1SSZyyGSUUZBe9dOCI7QVDKNsAIr2ldMZXIl8Fk +iWJ2wfa0CHvrnlcEDIySXpPMzj+QCr/hPFFovDTSEFVgeWoEyUZTCPex0xpnDbde +Zg4I462fg9drKLDSGkNS/dLlGXI2TRPpjBTnI03KlSZBSR4oT/N1On/NDf9P9NNb +yaKD/l5z2DOa0wfN9MXKaFY1mMWG2a35SYTZRvo5lsgpOe1oo+2PPlQPXdZsFHBG +QmN8i9g= +-----END CERTIFICATE----- diff --git a/version_1.8.2/pabx/certificados/RootCA.key b/version_1.8.2/pabx/certificados/RootCA.key new file mode 100644 index 0000000..49bcdc7 --- /dev/null +++ b/version_1.8.2/pabx/certificados/RootCA.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDuzwVAB5KRM9eB +7iuVqrT1Yvu2AC7FEG2pVNURieDLUgQvzmQpflbrhq7OJk8YpeFzXHUlI5Qg8RKD +9O/JcKHTEZnckQO5nMqo0redQDkZ6DHGuy2FQjUo8Ibu0vIgSBl0bWiBUZzJgc+y +Hq3UqZ8SA05zdP1cQa0wB9VelP/E0+xG/qyEKEIszwqzkeB5502ICqSysPe3bDwO +ebZN8y6wzVOJc10yvBPGVZ8eQdZngWtN/UdZHYRFjsmACZsjDqoelcPAZo2PG+oN +uU0W21k3gBFl5F6kfzGepuIdV8f33+uXSZvjzlkI62AVzX13x+b1GjOkF+3ZSZ4C +jEwnnMmvAgMBAAECggEBAI7FS+E85b5TnRr71ijTdv5hoBTuRQfhy335zqx+nttP +fFtMbAt2keabjbSHqLAWtBOxCgQbIjsThTtI23a2FLlIg5EfTXfRqkOGPuoPdFPt +wpyKWSubKocATdtIWCM+l6FIq7rsnOzH4/EccFZ81jIBsgxKvBJE3ZKijEjQkZ0M +4kDmLXOHxmYaLcwViQREs/JMABkzFAtwZPVu3ipjeICKx1hLf4/BDGeVRwVDb6W+ +AnKhs7CDkm8MBfrhFt1/vvahL6mVkysZ0qY0Moy9h2SE2K0u28Z0iD0OcrOG2CKI +ez3eVlxTFJ/nzRWKRPN3UR+zfoF2QdSnTrEAhwFp1kECgYEA+oUk+DWwAUwO6AcR +HAhU0RdwTr7o9Zn4mBtj+NNeJuuO0Ppy1/L5Qdp9tYmNTOyrkdXLlRyOwqsalyw+ +JzvcZqhQQSeasOZIcEvb7qN67ZEgPx5TO4+zKrbYxYOKoF3Su/neS1XC1I6gd+Nm +13XwiKEVU3TcywcfpHWJ+R2Ajw8CgYEA9AhLd9ufwCZ0pRLC0RF0o21KZHMNNmNw +TjvpW9sgrXKLV2i3EZYiMvaeo9DxlSyTc7VPY+HO6xa62/bnTtOcURohleSCGo5b +mHCSi7Q8qQclAMe/6aJbF7TerSrXV9M7KmloEonXRGapj9ui+L1YjpmCHtFNjYZR +pvY6RegwG2ECgYEAo6MEmvy2kqJTukujaWQnwsxEl6ssEAEa2IBLtOSbw2BqUSbG +jTgwiEtngYTvvyd4ijHUYPneZlnNbKGBl68KMCQRB/4OlS5WcsOaTS6LxVHedlwg +ke8zYNs+jQV3L3kZhZ+ZDCxgruba+nSXYHWxQA24GGNlNVjZ2lrMXORgbRECgYEA +nboqxSp/45s3c2Zf4u+MWwENv0UZuhilgvt4RjWotlK9u15kTQqjyhrayHkJXGi2 +WWhMCvvtWMeVOQ0pzio587WXFaHfcbinfSztmzyApKOIiCuTYDfe9sCh2H1DOHG/ +4RbF/I15RK2yVNgaSvlfHrQbhT21CY9SgT7OxVZgmaECgYBD7N5Qan7sHa5erbbG +BRhoyTUieKHpPZik3EXWwhhJPkc5+hsJLLJvhH2By2FwOn0kCN21SkLgcvruFS4K +EGa6CuNA5oCEGqoiIVnbz1oqByaYRv3YDxxNDZMH+DNpmvbmKNOvaUBX1HEbMJtG +PSbAALwrxsh7o6bLnyfK4fcgIQ== +-----END PRIVATE KEY----- diff --git a/version_1.8.2/pabx/certificados/RootCA.pem b/version_1.8.2/pabx/certificados/RootCA.pem new file mode 100644 index 0000000..2cfc265 --- /dev/null +++ b/version_1.8.2/pabx/certificados/RootCA.pem @@ -0,0 +1,20 @@ +-----BEGIN CERTIFICATE----- +MIIDMTCCAhmgAwIBAgIUfwDYeruX8TSBfeO3MBY7/p6MuKEwDQYJKoZIhvcNAQEL +BQAwKDELMAkGA1UEBhMCQlIxGTAXBgNVBAMMEFNpbXBsZXNpcC1XZWJydGMwHhcN +MjQwNTI0MTU1NjUzWhcNMjcwMzE0MTU1NjUzWjAoMQswCQYDVQQGEwJCUjEZMBcG +A1UEAwwQU2ltcGxlc2lwLVdlYnJ0YzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC +AQoCggEBAO7PBUAHkpEz14HuK5WqtPVi+7YALsUQbalU1RGJ4MtSBC/OZCl+VuuG +rs4mTxil4XNcdSUjlCDxEoP078lwodMRmdyRA7mcyqjSt51AORnoMca7LYVCNSjw +hu7S8iBIGXRtaIFRnMmBz7IerdSpnxIDTnN0/VxBrTAH1V6U/8TT7Eb+rIQoQizP +CrOR4HnnTYgKpLKw97dsPA55tk3zLrDNU4lzXTK8E8ZVnx5B1meBa039R1kdhEWO +yYAJmyMOqh6Vw8BmjY8b6g25TRbbWTeAEWXkXqR/MZ6m4h1Xx/ff65dJm+POWQjr +YBXNfXfH5vUaM6QX7dlJngKMTCecya8CAwEAAaNTMFEwHQYDVR0OBBYEFG0L3bmP +JQd9PjReRfsSkpBWrqbTMB8GA1UdIwQYMBaAFG0L3bmPJQd9PjReRfsSkpBWrqbT +MA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQELBQADggEBAHqhBMDZHeb8lRDR +7+XNNLopBfCxQMTwNYjjz3w+kySrAkNOZdctgnhPvTXWnjuoe8fWQZKtp7Y627U1 +bn0zYNJTF0Er53XD+20gyLecD1SSZyyGSUUZBe9dOCI7QVDKNsAIr2ldMZXIl8Fk +iWJ2wfa0CHvrnlcEDIySXpPMzj+QCr/hPFFovDTSEFVgeWoEyUZTCPex0xpnDbde +Zg4I462fg9drKLDSGkNS/dLlGXI2TRPpjBTnI03KlSZBSR4oT/N1On/NDf9P9NNb +yaKD/l5z2DOa0wfN9MXKaFY1mMWG2a35SYTZRvo5lsgpOe1oo+2PPlQPXdZsFHBG +QmN8i9g= +-----END CERTIFICATE----- diff --git a/version_1.8.2/pabx/certificados/RootCA.srl b/version_1.8.2/pabx/certificados/RootCA.srl new file mode 100644 index 0000000..8052178 --- /dev/null +++ b/version_1.8.2/pabx/certificados/RootCA.srl @@ -0,0 +1 @@ +346E4E2447EF354E42823606159D8A94EEC09982 diff --git a/version_1.8.2/pabx/certificados/domains.ext b/version_1.8.2/pabx/certificados/domains.ext new file mode 100644 index 0000000..051a49a --- /dev/null +++ b/version_1.8.2/pabx/certificados/domains.ext @@ -0,0 +1,7 @@ +authorityKeyIdentifier=keyid,issuer +basicConstraints=CA:FALSE +keyUsage = digitalSignature, nonRepudiation, keyEncipherment, dataEncipherment +subjectAltName = @alt_names +[alt_names] +DNS.1 = localhost +DNS.2 = 192.168.115.179 diff --git a/version_1.8.2/pabx/certificados/localhost.crt b/version_1.8.2/pabx/certificados/localhost.crt new file mode 100644 index 0000000..7c6f016 --- /dev/null +++ b/version_1.8.2/pabx/certificados/localhost.crt @@ -0,0 +1,21 @@ +-----BEGIN CERTIFICATE----- +MIIDjDCCAnSgAwIBAgIUNG5OJEfvNU5CgjYGFZ2KlO7AmYIwDQYJKoZIhvcNAQEL +BQAwKDELMAkGA1UEBhMCQlIxGTAXBgNVBAMMEFNpbXBsZXNpcC1XZWJydGMwHhcN +MjQwNTI0MTU1OTI3WhcNMjcwMzE0MTU1OTI3WjB0MQswCQYDVQQGEwJCUjETMBEG +A1UECAwKTWF0b0dyb3NzbzEPMA0GA1UEBwwGQ3VpYWJhMSUwIwYDVQQKDBxTaW1w +bGVzaXAtd2VicnRjLWNlcnRpZmljYXRlMRgwFgYDVQQDDA9sb2NhbGhvc3QubG9j +YWwwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCdzuMBCNHuBNR9jcT1 +ZFzXUKc/q1kGe/yJ25SBBgpfgRtgLoM1GV8LONIF2gVeS7amzp7Lxzhcm+G2EJBY +e9G+NotQhpE3t07nTp4tSp/sbwp159tkhqJwD4nouic4vwiNXpSsbIkVhVQRdSdw +sS0nG2hPUw9aM5PWSe29hCuGRMmaspmoXRInLZ1QgyRmI42oFxJ8bc6mNp7uBMF6 +NbNfLLItiq9Zj65777zXjjtDL3wpmN/x8eaN0jqaGPHQyjMjrbEyrfOeZ71VCa2I +vI+qehrgAAXM583Krc5c/0SurEXWG5xIV+ysjUKBsw5AKeWg/T8rTvI0Hc1pFARt +28n7AgMBAAGjYjBgMB8GA1UdIwQYMBaAFG0L3bmPJQd9PjReRfsSkpBWrqbTMAkG +A1UdEwQCMAAwCwYDVR0PBAQDAgTwMCUGA1UdEQQeMByCCWxvY2FsaG9zdIIPMTky +LjE2OC4xMTUuMTc5MA0GCSqGSIb3DQEBCwUAA4IBAQCDiGyLu4e+gFVdSx2+pcdU +EgjCqoulBfeLhEi0s/N7ewWQGsTf7h5Ay6jhQGWcbJaMW2MV3UhfmrREWGLhWBD9 +gJ9zqU2hTlD0ImXnsz4WEdltzWdP8VNhnWiXOH6lHIQaSHnMw+18JShuCIajBico +71ZWxnu0g3yTuTGEYnI4Ataqgn7JQzt+xSFXjjOfFdgYLRIn9gRjoA3W1tPYgfU0 +hLF/ZCqY3DxmROvy1pUKS23CkwAcdg+EP5Vmpk1piCn0e/n+kRuGV4uqpqyoODtw +lN2Fw5aFEgCC79LnSbaGYFCvWY+OLzwtj8BD5UhE/LNDT765mPQFUETPgRYWLSzn +-----END CERTIFICATE----- diff --git a/version_1.8.2/pabx/certificados/localhost.csr b/version_1.8.2/pabx/certificados/localhost.csr new file mode 100644 index 0000000..0c5d931 --- /dev/null +++ b/version_1.8.2/pabx/certificados/localhost.csr @@ -0,0 +1,17 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICuTCCAaECAQAwdDELMAkGA1UEBhMCQlIxEzARBgNVBAgMCk1hdG9Hcm9zc28x +DzANBgNVBAcMBkN1aWFiYTElMCMGA1UECgwcU2ltcGxlc2lwLXdlYnJ0Yy1jZXJ0 +aWZpY2F0ZTEYMBYGA1UEAwwPbG9jYWxob3N0LmxvY2FsMIIBIjANBgkqhkiG9w0B +AQEFAAOCAQ8AMIIBCgKCAQEAnc7jAQjR7gTUfY3E9WRc11CnP6tZBnv8iduUgQYK +X4EbYC6DNRlfCzjSBdoFXku2ps6ey8c4XJvhthCQWHvRvjaLUIaRN7dO506eLUqf +7G8KdefbZIaicA+J6LonOL8IjV6UrGyJFYVUEXUncLEtJxtoT1MPWjOT1kntvYQr +hkTJmrKZqF0SJy2dUIMkZiONqBcSfG3Opjae7gTBejWzXyyyLYqvWY+ue++81447 +Qy98KZjf8fHmjdI6mhjx0MozI62xMq3znme9VQmtiLyPqnoa4AAFzOfNyq3OXP9E +rqxF1hucSFfsrI1CgbMOQCnloP0/K07yNB3NaRQEbdvJ+wIDAQABoAAwDQYJKoZI +hvcNAQELBQADggEBAEc7RJzFLFr/S/k7XV2CRaH4vRyrD3eo41EhkJtOkvle82bB +A4zrGnmg5ss2jgyv4RPTPxc/6+FXD1sFD8PH0H9aBqrOD2HWEHV+AhBhD3/nY9P/ +PRcqcO0TS+6Xdft8GC9KHHGnwKROkrrgOAHj1JFdnmUVSi7kU0qkrqoNivXeqMry +kvgJf6+arSxNJBTDzuAdjA/BmJs6ocIpnLXMo4T7zN02mt92cFDkqQZbS89EBSiD +heyREeZZgauh04TbCgVf2nf98mBAupgBXFMAvT3i4+pa5S+brBZQNKQ1oDPC77at +hhwyV8AksnlBk8rBX83TCxNGTqE1Q1ljfFgSpvQ= +-----END CERTIFICATE REQUEST----- diff --git a/version_1.8.2/pabx/certificados/localhost.key b/version_1.8.2/pabx/certificados/localhost.key new file mode 100644 index 0000000..755805d --- /dev/null +++ b/version_1.8.2/pabx/certificados/localhost.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdzuMBCNHuBNR9 +jcT1ZFzXUKc/q1kGe/yJ25SBBgpfgRtgLoM1GV8LONIF2gVeS7amzp7Lxzhcm+G2 +EJBYe9G+NotQhpE3t07nTp4tSp/sbwp159tkhqJwD4nouic4vwiNXpSsbIkVhVQR +dSdwsS0nG2hPUw9aM5PWSe29hCuGRMmaspmoXRInLZ1QgyRmI42oFxJ8bc6mNp7u +BMF6NbNfLLItiq9Zj65777zXjjtDL3wpmN/x8eaN0jqaGPHQyjMjrbEyrfOeZ71V +Ca2IvI+qehrgAAXM583Krc5c/0SurEXWG5xIV+ysjUKBsw5AKeWg/T8rTvI0Hc1p +FARt28n7AgMBAAECggEABGCq12qBOFMV+e2m2w/Pq4FnQlLkg1OJK+HVesbKHuAb +/E0OArkTc+I9oT/tCjKbfIEa0phSLe99EWngNzQoG1i0AKXa/WquW6hIpwT87rgd +2Ct4YI+DjgxATR5s3BwghptrEGVqYBh0vo87atrfX8hY2mp5cI0hur4OREWYV38h +18rILsATZHRSB4+h9oLHOPIcGpUV2Vr0mCUXU/OUdDLcCXBakB1U+npeacy1MKzL +5sb+hK5W2Xu2qWwYMSmFzbpmxNuUPDES7LSD8mL7jiBcKWO4pnh7EMwqO8Sf1BfO +B1smTSDymAd6QduvzhJPCzUOy3px/ZuSL/rNFLExAQKBgQDQtuM96Yh0OQX0lMbY +i2TJVaR08DkmpDMKsxOFgyTh4mR+LWhpaBmOLD/0prwcFZl/ZMkwCdeMEUoAo5x2 +PFTaKXWSYgq632XQiojtQESICW/nKWhx0X0+MYsTmjjN0ZtBqPDPcr2id6wE+0T9 +hbr9UbnxxynrFBZ8umtC+ImROwKBgQDBj4PithBNT1tpGiDnkxt1yWOKlMTKBdfv +CovsHhWMhQvCvnWiiG3OGkTrXtmWHLCpL2wXBz4vtDcY2jeJxBf+HfUF2ropSfKP +UlOZSpdMeMdqYmbZzIG4QRgqA23O6YJ+zYeBCYctn+Nz+Q98WCEFYq5SGncOcKLN +gb26fSseQQKBgQCe3IXMyyNkqz6gMlnD2x3ErV42793gTpzXKQTT28VH9YTeEXvm +tyi0cXPgqMSHb91c/P6xhNw+ra4xHFdsG3HOeD4YRG28XWvmtnuQchl3ng9B2N+5 +umVk4Frmeb2A02kkKg3ZKJG0xvf09rhFa/Ou+vTYVerPFoQjPdWErR4wnwKBgQCA +WSrp7TIYIZQKuHGzPP/LdfQUk5t+HqvV7VdlBXniiOKIiwSz9uVg8lha/rUnbfTS +6wgwqPPabBTQ3PpQ1v/V2IV+EVC6SjeWQ8/9aNG0uq345DExIQOvazKbwVRSDNMk +RCMjNG83mLsZTsCvAj07NflDphrmL1g1D2AAxjkOQQKBgCDXz/EXXMDpEU02kYpV +ovVGQ0qUH2oZ+ATax34hNvsLEuzENkcUFzIqQjXxoxwylddFvaIhK0KWACy3WJDe +rhp89NJjvycKrzlYbs8sd5BdGfeqAKhXQxF8H4w+BBShRKzMA1iBr07hsn2gA1H7 +tU9hcLllm+PQpHOHb5T9gR8P +-----END PRIVATE KEY----- diff --git a/version_1.8.2/pabx/config-docker.php b/version_1.8.2/pabx/config-docker.php new file mode 100644 index 0000000..fd17405 --- /dev/null +++ b/version_1.8.2/pabx/config-docker.php @@ -0,0 +1,18 @@ +:8080/config-docker.php + +$ip = explode(":", $_SERVER['HTTP_HOST'])[0]; +$result_system=system("/config_network $ip", $qwe); +//echo "$result_system"; + + +?> \ No newline at end of file diff --git a/version_1.8.2/pabx/config_network b/version_1.8.2/pabx/config_network new file mode 100755 index 0000000..379080d --- /dev/null +++ b/version_1.8.2/pabx/config_network @@ -0,0 +1,40 @@ +#!/bin/bash + +IP_HOST="$1" +if [[ -z $IP_HOST ]];then + echo "Sem argumento IP. ERROR" + exit; +fi + + +if [[ -n "$(grep "externaddr=" /etc/asterisk/sip_general_customizado.conf )" ]] +then + sed -i "s/;\?externaddr=.*/externaddr=${IP_HOST}/g" /etc/asterisk/sip_general_customizado.conf +else + echo -e "\nexternaddr=${IP_HOST}" >> /etc/asterisk/sip_general_customizado.conf +fi +[[ $? -eq 0 ]] && echo "

[ok] - definido externaddr=${IP_HOST}

" || echo "

[false] - externaddr nao definido

" + + +if [[ -n "$(grep "localnet=" /etc/asterisk/sip_general_customizado.conf )" ]] +then + sed -i "s/;\?localnet=.*/localnet=0.0.0.0\/32/g" /etc/asterisk/sip_general_customizado.conf +else + echo "localnet=0.0.0.0/32" >> /etc/asterisk/sip_general_customizado.conf +fi +[[ $? -eq 0 ]] && echo "

[ok] - definido localnet=0.0.0.0/32

" || echo "

[false] - localnet nao definido

" + + +if [[ -n "$(grep "media_address=" /etc/asterisk/sip_general_customizado.conf)" ]] +then + sed -i "s/;\?media_address=.*/media_address=${IP_HOST}/g" /etc/asterisk/sip_general_customizado.conf +else + echo "media_address=${IP_HOST}" >> /etc/asterisk/sip_general_customizado.conf +fi +[[ $? -eq 0 ]] && echo "

[ok] - definido media_address=${IP_HOST}

" || echo "

[false] - media_address nao definido

" + +asterisk -rx "sip reload" +[[ $? -eq 0 ]] && echo "

[ok] - asterisk atualizado

" || echo "

[false] - nao carregado no asterisk

" + +echo "

Concluido

" + diff --git a/version_1.8.2/pabx/crontab.sh b/version_1.8.2/pabx/crontab.sh new file mode 100644 index 0000000..48bfb46 --- /dev/null +++ b/version_1.8.2/pabx/crontab.sh @@ -0,0 +1,40 @@ +#!/bin/bash + +echo "#Servicos Auxiliares" >> /etc/crontab +echo "0 0 * * * root /var/lib/asterisk/scripts/callcenter/reload.sh" >> /etc/crontab +echo "0 1 * * * root /hdaux/utilitarios/scripts/hd.sh " >> /etc/crontab +echo "*/1 * * * * root /var/lib/asterisk/scripts/callcenter/queue_log.php" >> /etc/crontab +echo "*/1 * * * * root /var/lib/asterisk/scripts/callcenter/monitora_agentes.php" >> /etc/crontab +echo "*/1 * * * * root /var/lib/asterisk/scripts/manutencaoDB/importaBilhetes.php" >> /etc/crontab +echo "*/30 * * * * root /var/lib/asterisk/scripts/portabilidade/atualiza_cliente.php" >> /etc/crontab +echo "*/1 * * * * root /var/lib/asterisk/scripts/workflow/workflowSender.php" >> /etc/crontab +echo "0 2 * * * root /var/lib/asterisk/scripts/manutencaoDB/manutencaodb.php" >> /etc/crontab +echo "#*/1 * * * * root /var/lib/asterisk/scripts/integracao/encerraChamada.php" >> /etc/crontab +echo "*/1 * * * * root /var/lib/asterisk/scripts/callcenter/atualizar-dacs.php" >> /etc/crontab +echo "*/1 * * * * root sleep 15 && /var/lib/asterisk/scripts/callcenter/atualizar-dacs.php" >> /etc/crontab +echo "*/1 * * * * root sleep 30 && /var/lib/asterisk/scripts/callcenter/atualizar-dacs.php" >> /etc/crontab +echo "*/1 * * * * root sleep 45 && /var/lib/asterisk/scripts/callcenter/atualizar-dacs.php" >> /etc/crontab +echo "#Transbordo Assistido" >> /etc/crontab +echo "*/1 * * * * root /var/lib/asterisk/scripts/callcenter/transbordo.php" >> /etc/crontab +echo "*/1 * * * * root sleep 15 && /var/lib/asterisk/scripts/callcenter/transbordo.php" >> /etc/crontab +echo "*/1 * * * * root sleep 30 && /var/lib/asterisk/scripts/callcenter/transbordo.php" >> /etc/crontab +echo "*/1 * * * * root sleep 45 && /var/lib/asterisk/scripts/callcenter/transbordo.php" >> /etc/crontab +echo "#Backup" >> /etc/crontab +echo "*/10 * * * * root /var/lib/asterisk/scripts/backup/backup.php" >> /etc/crontab +echo "#Backup - Shell" >> /etc/crontab +echo "0 1 * * * root /hdaux/utilitarios/scripts/backup.sh config,bd" >> /etc/crontab +echo "#VPN" >> /etc/crontab +echo "*/1 * * * * root /bin/sip_teste_vpn.sh" >> /etc/crontab +echo "#Remove Caixa Postal" >> /etc/crontab +echo "0 1 * * * root find /var/spool/asterisk/voicemail/default/ -iname *.WAV -mtime +10 -exec rm -rf {} \\;" >> /etc/crontab +echo "0 1 * * * root find /var/spool/asterisk/voicemail/default/ -iname *.txt -mtime +10 -exec rm -rf {} \\;" >> /etc/crontab +echo "#Limpa Maildrop" >> /etc/crontab +echo "0 6 * * * root for i in \$(ls -1 /var/spool/postfix/maildrop/) ; do /bin/rm -rf /var/spool/postfix/maildrop/\$i ; done" >> /etc/crontab +echo "#Bloqueio - SIP" >> /etc/crontab +echo "*/1 * * * * root /hdaux/utilitarios/scripts/bloqueia_autenticacao.sh" >> /etc/crontab +echo "#NTP" >> /etc/crontab +echo "*/15 * * * * root /hdaux/utilitarios/scripts/ntp.sh" >> /etc/crontab +echo "#Logrotate" >> /etc/crontab +echo "59 23 * * * root /hdaux/utilitarios/scripts/logrotate.sh --force" >> /etc/crontab +echo "57 23 * * * root /hdaux/utilitarios/scripts/temporizador_de_dados.sh" >> /etc/crontab + diff --git a/version_1.8.2/pabx/docker-entrypoint.sh b/version_1.8.2/pabx/docker-entrypoint.sh new file mode 100755 index 0000000..06d500c --- /dev/null +++ b/version_1.8.2/pabx/docker-entrypoint.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +# run as user asterisk by default +ASTERISK_USER=${ASTERISK_USER:-asterisk} + +if [ "$1" = "" ]; then + COMMAND="/usr/sbin/asterisk -T -W -U ${ASTERISK_USER} -p -vvvdddf" +else + COMMAND="$@" +fi + +if [ "${ASTERISK_UID}" != "" ] && [ "${ASTERISK_GID}" != "" ]; then + # recreate user and group for asterisk + # if they've sent as env variables (i.e. to macth with host user to fix permissions for mounted folders + + deluser asterisk && \ + adduser --gecos "" --no-create-home --uid ${ASTERISK_UID} --disabled-password ${ASTERISK_USER} \ + || exit +fi + +mkdir -p /var/run/asterisk + +chown -R ${ASTERISK_USER}: /var/log/asterisk \ + /var/lib/asterisk \ + /var/run/asterisk \ + /var/spool/asterisk; \ + +cp /var/www/html/config-docker.php /var/www/html/aplicativo/ +/hdaux/utilitarios/scripts/permissoes_atualizacao.sh + +exec ${COMMAND} \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/apache2/sites-available/pabx_simples.conf b/version_1.8.2/pabx/etc/apache2/sites-available/pabx_simples.conf new file mode 100644 index 0000000..aab2dbd --- /dev/null +++ b/version_1.8.2/pabx/etc/apache2/sites-available/pabx_simples.conf @@ -0,0 +1,100 @@ + + # The ServerName directive sets the request scheme, hostname and port that + # the server uses to identify itself. This is used when creating + # redirection URLs. In the context of virtual hosts, the ServerName + # specifies what hostname must appear in the request's Host: header to + # match this virtual host. For the default virtual host (this file) this + # value is not decisive as it is used as a last resort host regardless. + # However, you must set it for any further virtual host explicitly. + #ServerName www.example.com + + ServerAdmin webmaster@localhost + DocumentRoot /var/www/html/aplicativo + + SSLEngine on + SSLCertificateFile /usr/src/certificates/localhost.crt + SSLCertificateKeyFile /usr/src/certificates/localhost.key + #SSLCertificateFile /etc/asterisk/keys/asterisk.crt + #SSLCertificateKeyFile /etc/asterisk/keys/asterisk.key + + + Alias /gravacoes "/var/spool/asterisk/monitor" + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Require all granted + Allow from 127.0.0.1 + + + Alias /agenda "/var/www/html/agenda" + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Require all granted + Allow from all + + + Alias /downloads "/hdaux/downloads" + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Require all granted + Allow from all + + + Alias /ferramentas "/hdaux/utilitarios/ferramentas" + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Require all granted + Allow from all + + + Alias /manuais "/hdaux/utilitarios/manuais" + + Options Indexes MultiViews + AllowOverride None + Order allow,deny + Require all granted + Allow from all + + + + + # Available loglevels: trace8, ..., trace1, debug, info, notice, warn, + # error, crit, alert, emerg. + # It is also possible to configure the loglevel for particular + # modules, e.g. + #LogLevel info ssl:warn + + ErrorLog ${APACHE_LOG_DIR}/error.log + CustomLog ${APACHE_LOG_DIR}/access.log combined + + # For most configuration files from conf-available/, which are + # enabled or disabled at a global level, it is possible to + # include a line for only one particular virtual host. For example the + # following line enables the CGI configuration for this host only + # after it has been globally disabled with "a2disconf". + #Include conf-available/serve-cgi-bin.conf + + + + +ServerAdmin webmaster@localhost +ServerName localhost +DocumentRoot /var/www/html + +SSLEngine on +SSLCertificateFile /usr/src/certificates/localhost.crt +SSLCertificateKeyFile /usr/src/certificates/localhost.key +#SSLCertificateFile /etc/asterisk/keys/asterisk.crt +#SSLCertificateKeyFile /etc/asterisk/keys/asterisk.key +ErrorLog ${APACHE_LOG_DIR}/error.log +CustomLog ${APACHE_LOG_DIR}/access.log combined + + +# vim: syntax=apache ts=4 sw=4 sts=4 sr noet diff --git a/version_1.8.2/pabx/etc/asterisk/-R b/version_1.8.2/pabx/etc/asterisk/-R new file mode 100644 index 0000000000000000000000000000000000000000..5f42f76a96ea108d2f33f64d4a84c98beace264c GIT binary patch literal 183157 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�hIDx*QBGsULqz))MHP@h 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

ZU}L_g?M5vaw;R~* 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

V#X^y4O4WuTNo$=I(-5p3~ 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 z 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 N{{xDeDt-W13; Show contents of a particular named ACL +; reload acl Reload configuration file +; +; Any configuration that uses ACLs which has been made to be able to use named +; ACLs will specify a named ACL with the 'acl' option in its configuration in +; a similar fashion to the usual 'permit' and 'deny' options. Example: +; acl=my_named_acl +; +; Multiple named ACLs can be applied by either comma separating the arguments or +; just by adding additional ACL lines. Example: +; acl=my_named_acl +; acl=my_named_acl2 +; +; or +; +; acl=my_named_acl,my_named_acl2 +; +; ACLs specified by name are evaluated independently from the ACL specified via +; permit/deny. In order for an address to pass a given ACL, it must pass both +; the ACL specified by permit/deny for a given item as well as any named ACLs +; that were specified. +; +;[example_named_acl1] +;deny=0.0.0.0/0.0.0.0 +;permit=209.16.236.0 +;permit=209.16.236.1 +; +;[example_named_acl2] +;permit=0.0.0.0/0.0.0.0 +;deny=10.24.20.171 +;deny=10.24.20.103 +;deny=209.16.236.1 +; +; example_named_acl1 above shows an example of whitelisting. When whitelisting, the +; named ACLs should follow a deny that blocks everything (like deny=0.0.0.0/0.0.0.0) +; The following example explains how combining the ACLs works: +; +; [example_item_with_acl] +; acl=example_named_acl1 +; acl=example_named_acl2 +; +; Suppose 209.16.236.0 tries to communicate and the ACL for that example is applied to it... +; First, example_named_acl1 is evaluated. The address is allowed by that ACL. +; Next, example_named_acl2 is evaluated. The address isn't blocked by example_named_acl2 +; either, so it passes. +; +; Suppose instead 209.16.236.1 tries to communicate and the same ACL is applied. +; First, example_named_acl1 is evaluated and the address is allowed. +; However, it is blocked by example_named_acl2, so the address is blocked from the combined +; ACL. +; +; Similarly, the permits/denies in specific configurations that make up an ACL definition +; are also treated as a separate ACL for evaluation. So if we change the example above to: +; +; [example_item_with_acl] +; acl=example_named_acl1 +; acl=example_named_acl2 +; deny=209.16.236.0 +; +; Then 209.16.236.0 will be rejected by the non-named component of the combined ACL even +; though it passes the two named components. +; +; +; Named ACLs can use ipv6 addresses just like normal ACLs. +;[ipv6_example_1] +;deny = :: +;permit = ::1/128 +; +;[ipv6_example_2] +;permit = fe80::21d:bad:fad:2323 diff --git a/version_1.8.2/pabx/etc/asterisk/adsi.conf b/version_1.8.2/pabx/etc/asterisk/adsi.conf new file mode 100644 index 0000000..0f36f80 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/adsi.conf @@ -0,0 +1,8 @@ +; +; Sample ADSI Configuration file +; +[intro] +alignment = center +greeting => Welcome to the +greeting => Asterisk +greeting => Open Source PBX diff --git a/version_1.8.2/pabx/etc/asterisk/adtranvofr.conf b/version_1.8.2/pabx/etc/asterisk/adtranvofr.conf new file mode 100644 index 0000000..dc7bcfc --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/adtranvofr.conf @@ -0,0 +1,39 @@ +; +; Voice over Frame Relay (Adtran style) +; +; Configuration file + +[interfaces] +; +; Default language +; +;language=en +; +; Lines for which we are the user termination. They accept incoming +; and outgoing calls. We use the default context on the first 8 lines +; used by internal phones. +; +context=default +;user => voice00 +;user => voice01 +;user => voice02 +;user => voice03 +;user => voice04 +;user => voice05 +;user => voice06 +;user => voice07 +; Calls on 16 and 17 come from the outside world, so they get +; a little bit special treatment +context=remote +;user => voice16 +;user => voice17 +; +; Next we have lines which we only accept calls on, and typically +; do not send outgoing calls on (i.e. these are where we are the +; network termination) +; +;network => voice08 +;network => voice09 +;network => voice10 +;network => voice11 +;network => voice12 diff --git a/version_1.8.2/pabx/etc/asterisk/agents.conf b/version_1.8.2/pabx/etc/asterisk/agents.conf new file mode 100644 index 0000000..7a045d3 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/agents.conf @@ -0,0 +1,6 @@ +[general] +#include agents_general.conf +#include agents_general_customizado.conf +#include agents_adicional.conf +#include agents_usuarios.conf +#include agents_usuarios_customizado.conf diff --git a/version_1.8.2/pabx/etc/asterisk/agents_adicional.conf b/version_1.8.2/pabx/etc/asterisk/agents_adicional.conf new file mode 100644 index 0000000..5567d84 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/agents_adicional.conf @@ -0,0 +1,16 @@ +[agents](!) +;maxlogintries=5 +autologoff=0 +;autologoffunavail=no +ackcall=no +;endcall=no +wrapuptime=0 +musiconhold=agentes +;goodbye= +;updatecdr=no +;group=1 +recordagentcalls=no +;recordformat= +;urlprefix= +;savecallsin= +custom_beep=beep diff --git a/version_1.8.2/pabx/etc/asterisk/agents_general.conf b/version_1.8.2/pabx/etc/asterisk/agents_general.conf new file mode 100644 index 0000000..9f668a3 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/agents_general.conf @@ -0,0 +1,2 @@ +;persistentagents=no +;multiplelogin=no diff --git a/version_1.8.2/pabx/etc/asterisk/agents_general_customizado.conf b/version_1.8.2/pabx/etc/asterisk/agents_general_customizado.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/agents_general_customizado.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/agents_usuarios.conf b/version_1.8.2/pabx/etc/asterisk/agents_usuarios.conf new file mode 100644 index 0000000..61b3a56 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/agents_usuarios.conf @@ -0,0 +1,4 @@ +[1000](agents) +fullname=admin +[1001](agents) +fullname=administrador diff --git a/version_1.8.2/pabx/etc/asterisk/agents_usuarios_customizado.conf b/version_1.8.2/pabx/etc/asterisk/agents_usuarios_customizado.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/agents_usuarios_customizado.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/alarmreceiver.conf b/version_1.8.2/pabx/etc/asterisk/alarmreceiver.conf new file mode 100644 index 0000000..e4815a9 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/alarmreceiver.conf @@ -0,0 +1,91 @@ +; +; alarmreceiver.conf +; +; Sample configuration file for the Asterisk alarm receiver application. +; + + +[general] + +; +; Specify a timestamp format for the metadata section of the event files +; Default is %a %b %d, %Y @ %H:%M:%S %Z + +timestampformat = %a %b %d, %Y @ %H:%M:%S %Z + +; +; Specify a command to execute when the caller hangs up +; +; Default is none +; + +;eventcmd = yourprogram -yourargs ... + +; +; Specify a spool directory for the event files. This setting is required +; if you want the app to be useful. Event files written to the spool +; directory will be of the template event-XXXXXX, where XXXXXX is a random +; and unique alphanumeric string. +; +; Default is none, and the events will be dropped on the floor. +; + +eventspooldir = /tmp + +; +; The alarmreceiver app can either log the events one-at-a-time to individual +; files in the spool directory, or it can store them until the caller +; disconnects and write them all to one file. +; +; The default setting for logindividualevents is no. +; + +logindividualevents = no + +; +; The timeout for receiving the first DTMF digit is adjustable from 1000 msec. +; to 10000 msec. The default is 2000 msec. Note: if you wish to test the +; receiver by entering digits manually, set this to a reasonable time out +; like 10000 milliseconds. + +fdtimeout = 2000 + +; +; The timeout for receiving subsequent DTMF digits is adjustable from +; 110 msec. to 4000 msec. The default is 200 msec. Note: if you wish to test +; the receiver by entering digits manually, set this to a reasonable time out +; like 4000 milliseconds. +; + +sdtimeout = 200 + +; +; Wait for the connection to settle post-answer. Adjustable from 500 msec. to 10000 msec. +; The default is 1250 msec. +; + +answait = 1250 + +; When logging individual events it may be desirable to skip grouping of metadata + +;no_group_meta = yes + +; +; The loudness of the ACK and Kissoff tones is adjustable from 100 to 8192. +; The default is 8192. This shouldn't need to be messed with, but is included +; just in case there are problems with signal levels. +; + +loudness = 8192 + +; +; The db-family setting allows the user to capture statistics on the number of +; calls, and the errors the alarm receiver sees. The default is for no +; db-family name to be defined and the database logging to be turned off. +; + +;db-family = yourfamily: + +; +; End of alarmreceiver.conf +; diff --git a/version_1.8.2/pabx/etc/asterisk/alsa.conf b/version_1.8.2/pabx/etc/asterisk/alsa.conf new file mode 100644 index 0000000..3e61710 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/alsa.conf @@ -0,0 +1,77 @@ +; +; Open Sound System Console Driver Configuration File +; +[general] +; +; Automatically answer incoming calls on the console? Choose yes if +; for example you want to use this as an intercom. +; +autoanswer=yes +; +; Default context (is overridden with @context syntax) +; +context=local +; +; Default extension to call +; +extension=s +; +; Default language +; +;language=en +; +; Default Music on Hold class to use when this channel is placed on hold in +; the case that the music class is not set on the channel with +; Set(CHANNEL(musicclass)=whatever) in the dialplan and the peer channel +; putting this one on hold did not suggest a class to use. +; +;mohinterpret=default +; +; Silence suppression can be enabled when sound is over a certain threshold. +; The value for the threshold should probably be between 500 and 2000 or so, +; but your mileage may vary. Use the echo test to evaluate the best setting. +;silencesuppression = yes +;silencethreshold = 1000 +; +; To set which ALSA device to use, change this parameter +;input_device=hw:0,0 +;output_device=hw:0,0 + +; +; Default mute state (can also be toggled via CLI) +;mute=true + +; +; If enabled, no audio capture device will be opened. This is useful on +; systems where there will be no return audio path, such as overhead pagers. +;noaudiocapture=true + +; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- +; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of an + ; ALSA channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The ALSA channel can't accept jitter, + ; thus an enabled jitterbuffer on the receive ALSA side will always + ; be used if the sending side can create jitter. + +; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + +; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + +; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a SIP + ; channel. Two implementations are currently available - "fixed" + ; (with size always equals to jbmax-size) and "adaptive" (with + ; variable size, actually the new jb of IAX2). Defaults to fixed. + +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + +; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". +; ---------------------------------------------------------------------------------- diff --git a/version_1.8.2/pabx/etc/asterisk/amd.conf b/version_1.8.2/pabx/etc/asterisk/amd.conf new file mode 100644 index 0000000..84b391c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/amd.conf @@ -0,0 +1,31 @@ +; +; Answering Machine Detection Configuration +; + +[general] +total_analysis_time = 5000 ; Maximum time allowed for the algorithm to decide + ; on whether the audio represents a HUMAN, or a MACHINE +silence_threshold = 256 ; If the average level of noise in a sample does not reach + ; this value, from a scale of 0 to 32767, then we will consider + ; it to be silence. + +; Greeting ; +initial_silence = 2500 ; Maximum silence duration before the greeting. + ; If exceeded, then the result is detection as a MACHINE. +after_greeting_silence = 800 ; Silence after detecting a greeting. + ; If exceeded, then the result is detection as a HUMAN +greeting = 1500 ; Maximum length of a greeting. If exceeded, then the + ; result is detection as a MACHINE. + +; Word detection ; +min_word_length = 100 ; Minimum duration of Voice to considered as a word +maximum_word_length = 5000 ; Maximum duration of a single Voice utterance allowed. +between_words_silence = 50 ; Minimum duration of silence after a word to consider + ; the audio what follows as a new word + +maximum_number_of_words = 3 ; Maximum number of words in the greeting + ; If REACHED, then the result is detection as a MACHINE + ; WARNING: Releases prior to January 1 2016 documented + ; maximum_number_of_words as 'if exceeded, then MACHINE', + ; which did not reflect the true functionality. In Asterisk 14, + ; this functionality will change to reflect the variables' name. diff --git a/version_1.8.2/pabx/etc/asterisk/app_mysql.conf b/version_1.8.2/pabx/etc/asterisk/app_mysql.conf new file mode 100644 index 0000000..fafd4f7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/app_mysql.conf @@ -0,0 +1,24 @@ +; Configuration file for the MYSQL app addon + +[general] +; +; Nullvalue governs how NULL values are returned from the database. In +; previous versions, the special NULL value was returned as the "NULL" +; string. We now provide an option for the behavior, configured globally. +; nullstring - the string "NULL" +; emptystring - the string "" +; null - unset the variable +; +; WARNING: setting nullvalue=null may have undesireable consequences, in +; particular if you use subroutines in AEL or the LOCAL() variable construct. +; You have been warned. Don't complain if you use that setting in combination +; with Gosub or AEL and get buggy behavior. +; +nullvalue = nullstring + +; If set, autoclear will destroy allocated statement and connection resources +; when the channel ends. For most usage of the MYSQL app, this is what you +; want, but it's conceivable that somebody is sharing MYSQL connections across +; multiple channels, in which case, this should be set to 'no'. Defaults to +; 'no', as this was the original behavior. +autoclear=yes diff --git a/version_1.8.2/pabx/etc/asterisk/app_skel.conf b/version_1.8.2/pabx/etc/asterisk/app_skel.conf new file mode 100644 index 0000000..ada8461 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/app_skel.conf @@ -0,0 +1,27 @@ +[general] +games=3 +cheat=no + +[sounds] +prompt=please-enter-your,number,queue-less-than +wrong_guess=vm-pls-try-again +right_guess=auth-thankyou +too_high=high +too_low=low +lose=vm-goodbye + +[easy] +max_number=10 +max_guesses=4 + +[medium] +max_number=100 +max_guesses=6 + +[hard] +max_number=1000 +max_guesses=7 + +[nightmare] +max_number=1000 +max_guesses=1 diff --git a/version_1.8.2/pabx/etc/asterisk/applyzap.conf b/version_1.8.2/pabx/etc/asterisk/applyzap.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/ari.conf b/version_1.8.2/pabx/etc/asterisk/ari.conf new file mode 100644 index 0000000..4cd74a5 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/ari.conf @@ -0,0 +1,30 @@ +[general] +enabled = yes ; When set to no, ARI support is disabled. +;pretty = no ; When set to yes, responses from ARI are +; ; formatted to be human readable. +;allowed_origins = ; Comma separated list of allowed origins, for +; ; Cross-Origin Resource Sharing. May be set to * to +; ; allow all origins. +;auth_realm = ; Realm to use for authentication. Defaults to Asterisk +; ; REST Interface. +; +; Default write timeout to set on websockets. This value may need to be adjusted +; for connections where Asterisk must write a substantial amount of data and the +; receiving clients are slow to process the received information. Value is in +; milliseconds; default is 100 ms. +;websocket_write_timeout = 100 + +;[username] +;type = user ; Specifies user configuration +;read_only = no ; When set to yes, user is only authorized for +; ; read-only requests. +; +;password = ; Crypted or plaintext password (see password_format). +; +; password_format may be set to plain (the default) or crypt. When set to crypt, +; crypt(3) is used to validate the password. A crypted password can be generated +; using mkpasswd -m sha-512. +; +; When set to plain, the password is in plaintext. +; +;password_format = plain diff --git a/version_1.8.2/pabx/etc/asterisk/ast_debug_tools.conf b/version_1.8.2/pabx/etc/asterisk/ast_debug_tools.conf new file mode 100644 index 0000000..f26626b --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/ast_debug_tools.conf @@ -0,0 +1,57 @@ +# +# This file is used by the Asterisk debug tools. +# Unlike other Asterisk config files, this one is +# "sourced" by bash and must adhere to bash semantics. +# + +# A list of coredumps and/or coredump search patterns. +# Bash extended globs are enabled and any resulting files +# that aren't actually coredumps are silently ignored +# so you can be liberal with the globs. +# +# If your patterns contains spaces be sure to only quote +# the portion of the pattern that DOESN'T contain wildcard +# expressions. If you quote the whole pattern, it won't +# be expanded and the glob characters will be treated as +# literals. +# +# The exclusion of files ending ".txt" is just for +# demonstration purposes as non-coredumps will be ignored +# anyway. +COREDUMPS=(/tmp/core[-._]asterisk!(*.txt) /tmp/core[-._]$(hostname)!(*.txt)) + +# Date command for the "running" coredump and tarballs. +# DATEFORMAT will be executed to get the timestamp. +# Don't put quotes around the format string or they'll be +# treated as literal characters. Also be aware of colons +# in the output as you can't upload files with colons in +# the name to Jira. +# +# Unix timestamp +#DATEFORMAT='date +%s.%N' +# +# Unix timestamp on *BSD/MacOS after installing coreutils +#DATEFORMAT='gdate +%s.%N' +# +# Readable GMT +#DATEFORMAT='date -u +%FT%H-%M-%S%z' +# +# Readable Local time +DATEFORMAT='date +%FT%H-%M-%S%z' + +# A list of log files and/or log file search patterns using the +# same syntax as COREDUMPS. +# +LOGFILES=(/var/log/asterisk/messages* /var/log/asterisk/queue* \ + /var/log/asterisk/debug* /var/log/asterisk/security*) + +# ast_loggrabber converts POSIX timestamps to readable format +# using this Python strftime format string. If not specified +# or an empty string, no format covnersion is done. +LOG_DATEFORMAT="%m/%d-%H:%M:%S.%f" + +# The timezone to use when converting POSIX timestamps to +# readable format. It can be specified in "/" +# format or in abbreviation format such as "CST6CDT". If not +# specified, the "local" timezone is used. +# LOG_TIMEZONE= diff --git a/version_1.8.2/pabx/etc/asterisk/asterisk.adsi b/version_1.8.2/pabx/etc/asterisk/asterisk.adsi new file mode 100644 index 0000000..904b33a --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/asterisk.adsi @@ -0,0 +1,158 @@ +; +; Asterisk default ADSI script +; +; +; Begin with the preamble requirements +; +DESCRIPTION "Asterisk PBX" ; Name of vendor +VERSION 0x00 ; Version of stuff +;SECURITY "_AST" ; Security code +SECURITY 0X9BDBF7AC ; Security code +FDN 0x0000000F ; Descriptor number + +; +; Flags +; +FLAG "nocallwaiting" + +; +; Predefined strings +; +DISPLAY "titles" IS "** Asterisk PBX **" +DISPLAY "talkingto" IS "Call active." JUSTIFY LEFT +DISPLAY "callname" IS "$Call1p" JUSTIFY LEFT +DISPLAY "callnum" IS "$Call1s" JUSTIFY LEFT +DISPLAY "incoming" IS "Incoming call!" JUSTIFY LEFT +DISPLAY "ringing" IS "Calling... " JUSTIFY LEFT +DISPLAY "callended" IS "Call ended." JUSTIFY LEFT +DISPLAY "missedcall" IS "Missed call." JUSTIFY LEFT +DISPLAY "busy" IS "Busy." JUSTIFY LEFT +DISPLAY "reorder" IS "Reorder." JUSTIFY LEFT +DISPLAY "cwdisabled" IS "Callwait disabled" +DISPLAY "empty" IS "asdf" + +; +; Begin soft key definitions +; +KEY "callfwd" IS "CallFwd" OR "Call Forward" + OFFHOOK + VOICEMODE + WAITDIALTONE + SENDDTMF "*60" + GOTO "offHook" +ENDKEY + +KEY "vmail_OH" IS "VMail" OR "Voicemail" + OFFHOOK + VOICEMODE + WAITDIALTONE + SENDDTMF "8500" +ENDKEY + +KEY "vmail" IS "VMail" OR "Voicemail" + SENDDTMF "8500" +ENDKEY + +KEY "backspace" IS "BackSpc" OR "Backspace" + BACKSPACE +ENDKEY + +KEY "cwdisable" IS "CWDsble" OR "Disable Call Wait" + SENDDTMF "*70" + SETFLAG "nocallwaiting" + SHOWDISPLAY "cwdisabled" AT 4 + TIMERCLEAR + TIMERSTART 1 +ENDKEY + +KEY "cidblock" IS "CIDBlk" OR "Block Callerid" + SENDDTMF "*67" + SETFLAG "nocallwaiting" +ENDKEY + +; +; Begin main subroutine +; + +SUB "main" IS + IFEVENT NEARANSWER THEN + CLEAR + SHOWDISPLAY "titles" AT 1 NOUPDATE + SHOWDISPLAY "talkingto" AT 2 NOUPDATE + SHOWDISPLAY "callname" AT 3 + SHOWDISPLAY "callnum" AT 4 + GOTO "stableCall" + ENDIF + IFEVENT OFFHOOK THEN + CLEAR + CLEARFLAG "nocallwaiting" + CLEARDISPLAY + SHOWDISPLAY "titles" AT 1 + SHOWKEYS "vmail" + SHOWKEYS "cidblock" + SHOWKEYS "cwdisable" UNLESS "nocallwaiting" + GOTO "offHook" + ENDIF + IFEVENT IDLE THEN + CLEAR + SHOWDISPLAY "titles" AT 1 + SHOWKEYS "vmail_OH" + ENDIF + IFEVENT CALLERID THEN + CLEAR +; SHOWDISPLAY "titles" AT 1 NOUPDATE +; SHOWDISPLAY "incoming" AT 2 NOUPDATE + SHOWDISPLAY "callname" AT 3 NOUPDATE + SHOWDISPLAY "callnum" AT 4 + ENDIF + IFEVENT RING THEN + CLEAR + SHOWDISPLAY "titles" AT 1 NOUPDATE + SHOWDISPLAY "incoming" AT 2 + ENDIF + IFEVENT ENDOFRING THEN + SHOWDISPLAY "missedcall" AT 2 + CLEAR + SHOWDISPLAY "titles" AT 1 + SHOWKEYS "vmail_OH" + ENDIF + IFEVENT TIMER THEN + CLEAR + SHOWDISPLAY "empty" AT 4 + ENDIF +ENDSUB + +SUB "offHook" IS + IFEVENT FARRING THEN + CLEAR + SHOWDISPLAY "titles" AT 1 NOUPDATE + SHOWDISPLAY "ringing" AT 2 NOUPDATE + SHOWDISPLAY "callname" at 3 NOUPDATE + SHOWDISPLAY "callnum" at 4 + ENDIF + IFEVENT FARANSWER THEN + CLEAR + SHOWDISPLAY "talkingto" AT 2 + GOTO "stableCall" + ENDIF + IFEVENT BUSY THEN + CLEAR + SHOWDISPLAY "titles" AT 1 NOUPDATE + SHOWDISPLAY "busy" AT 2 NOUPDATE + SHOWDISPLAY "callname" at 3 NOUPDATE + SHOWDISPLAY "callnum" at 4 + ENDIF + IFEVENT REORDER THEN + CLEAR + SHOWDISPLAY "titles" AT 1 NOUPDATE + SHOWDISPLAY "reorder" AT 2 NOUPDATE + SHOWDISPLAY "callname" at 3 NOUPDATE + SHOWDISPLAY "callnum" at 4 + ENDIF +ENDSUB + +SUB "stableCall" IS + IFEVENT REORDER THEN + SHOWDISPLAY "callended" AT 2 + ENDIF +ENDSUB diff --git a/version_1.8.2/pabx/etc/asterisk/asterisk.conf b/version_1.8.2/pabx/etc/asterisk/asterisk.conf new file mode 100644 index 0000000..cc94ac0 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/asterisk.conf @@ -0,0 +1,114 @@ +[directories](!) +astetcdir => /etc/asterisk +astmoddir => /usr/lib/asterisk/modules +astvarlibdir => /var/lib/asterisk +astdbdir => /var/lib/asterisk +astkeydir => /var/lib/asterisk +astdatadir => /var/lib/asterisk +astagidir => /var/lib/asterisk/agi-bin +astspooldir => /var/spool/asterisk +astrundir => /var/run/asterisk +astlogdir => /var/log/asterisk +astsbindir => /usr/sbin + +[options] +verbose = 45 +;debug = 3 +;alwaysfork = yes ; Same as -F at startup. +;nofork = yes ; Same as -f at startup. +;quiet = yes ; Same as -q at startup. +;timestamp = yes ; Same as -T at startup. +;execincludes = yes ; Support #exec in config files. +;console = yes ; Run as console (same as -c at startup). +;highpriority = yes ; Run realtime priority (same as -p at + ; startup). +;initcrypto = yes ; Initialize crypto keys (same as -i at + ; startup). +nocolor = yes ; Disable console colors. +;dontwarn = yes ; Disable some warnings. +;dumpcore = yes ; Dump core on crash (same as -g at startup). +;languageprefix = yes ; Use the new sound prefix path syntax. +;systemname = my_system_name ; Prefix uniqueid with a system name for + ; Global uniqueness issues. +;autosystemname = yes ; Automatically set systemname to hostname, + ; uses 'localhost' on failure, or systemname if + ; set. +;mindtmfduration = 80 ; Set minimum DTMF duration in ms (default 80 ms) + ; If we get shorter DTMF messages, these will be + ; changed to the minimum duration +;maxcalls = 10 ; Maximum amount of calls allowed. +;maxload = 0.9 ; Asterisk stops accepting new calls if the + ; load average exceed this limit. +;maxfiles = 1000 ; Maximum amount of openfiles. +;minmemfree = 1 ; In MBs, Asterisk stops accepting new calls if + ; the amount of free memory falls below this + ; watermark. +;cache_record_files = yes ; Cache recorded sound files to another + ; directory during recording. +;record_cache_dir = /tmp ; Specify cache directory (used in conjunction + ; with cache_record_files). +;transmit_silence = yes ; Transmit silence while a channel is in a + ; waiting state, a recording only state, or + ; when DTMF is being generated. Note that the + ; silence internally is generated in raw signed + ; linear format. This means that it must be + ; transcoded into the native format of the + ; channel before it can be sent to the device. + ; It is for this reason that this is optional, + ; as it may result in requiring a temporary + ; codec translation path for a channel that may + ; not otherwise require one. +;transcode_via_sln = yes ; Build transcode paths via SLINEAR, instead of + ; directly. +runuser = pbx ; The user to run as. +rungroup = pbx ; The group to run as. +;lightbackground = yes ; If your terminal is set for a light-colored + ; background. +;forceblackbackground = yes ; Force the background of the terminal to be + ; black, in order for terminal colors to show + ; up properly. +;defaultlanguage = en ; Default language +documentation_language = en_US ; Set the language you want documentation + ; displayed in. Value is in the same format as + ; locale names. +;hideconnect = yes ; Hide messages displayed when a remote console + ; connects and disconnects. +;lockconfdir = no ; Protect the directory containing the + ; configuration files (/etc/asterisk) with a + ; lock. +;stdexten = gosub ; How to invoke the extensions.conf stdexten. + ; macro - Invoke the stdexten using a macro as + ; done by legacy Asterisk versions. + ; gosub - Invoke the stdexten using a gosub as + ; documented in extensions.conf.sample. + ; Default gosub. +;live_dangerously = no ; Enable the execution of 'dangerous' dialplan + ; functions from external sources (AMI, + ; etc.) These functions (such as SHELL) are + ; considered dangerous because they can allow + ; privilege escalation. + ; Default no +;entityid=00:11:22:33:44:55 ; Entity ID. + ; This is in the form of a MAC address. + ; It should be universally unique. + ; It must be unique between servers communicating + ; with a protocol that uses this value. + ; This is currently is used by DUNDi and + ; Exchanging Device and Mailbox State + ; using protocols: XMPP, Corosync and PJSIP. +;rtp_pt_dynamic = 96 ; Normally the Dynamic RTP Payload Type numbers + ; are 96-127, which allow 32 formats. When you + ; use more and receive the message "No Dynamic + ; RTP mapping available", extend the dynamic + ; range by going for 35 (or 0) instead of 96. + ; This allows 29 (or 64) more formats. 96 is the + ; default because any number below might be + ; rejected by a remote implementation; although + ; no such broken implementation is known, yet. + +; Changing the following lines may compromise your security. +;[files] +;astctlpermissions = 0660 +;astctlowner = root +;astctlgroup = apache +;astctl = asterisk.ctl diff --git a/version_1.8.2/pabx/etc/asterisk/calendar.conf b/version_1.8.2/pabx/etc/asterisk/calendar.conf new file mode 100644 index 0000000..8c73361 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/calendar.conf @@ -0,0 +1,109 @@ +;[calendar1] +;type = ical ; type of calendar--currently supported: ical, caldav, exchange, or ews +;url = https://example.com/home/jdoe/Calendar/ ; URL to shared calendar (Zimbra example) +;user = jdoe ; web username +;secret = supersecret ; web password +;refresh = 15 ; refresh calendar every n minutes +;timeframe = 60 ; number of minutes of calendar data to pull for each refresh period +; ; should always be >= refresh +; +; You can set up res_calendar to execute a call upon an upcoming busy status +; The following fields are available from the ${CALENDAR_EVENT()} dialplan function: +; +; summary : The VEVENT Summary property or Exchange subject +; description : The text description of the vent +; organizer : The organizer of the event +; location : The location field of the event +; calendar : The name of the calendar tied to the event +; uid : The unique ID for this event +; start : Start time of the event +; end : The end time of the event +; busystate : 0=FREE, 1=TENTATIVE, 2=BUSY +; +;autoreminder = 10 ; Override event-defined reminder before each busy status (in mins) +; +;channel = SIP/60001 ; Channel to dial +;context = default ; Context to connect to on answer +;extension = 123 ; Extension to connect to on answer +; +; or +; +;app = Playback ; Application to execute on answer (instead of context/extension) +;appdata = tt-weasels ; Data part of application to execute on answer +; +;waittime = 30 ; How long to wait for an answer, defaults to 30 seconds +; +; Channel variables can be set on the notification channel. The format is +; setvar=name=value. Variable subsitution is done on the value to allow the use of dialplan +; functions like CALENDAR_EVENT. The variables are set in order, so one can use the value +; of earlier variables in the definition of later ones. +; +;setvar = CALLERID(name)=${CALENDAR_EVENT(summary)} + +;[calendar2] +; Note: Support for Exchange Server 2003 +; +;type = exchange ; type of calendar--currently supported: ical, caldav, exchange, or ews +;url = https://example.com/exchange/jdoe ; URL to MS Exchange OWA for user (usually includes exchange/user) +;user = jdoe ; Exchange username +;secret = mysecret ; Exchange password +;refresh = 15 ; refresh calendar every n minutes +;timeframe = 60 ; number of minutes of calendar data to pull for each refresh period +; ; should always be >= refresh +; +; You can set up res_calendar to execute a call upon an upcoming busy status +;autoreminder = 10 ; Override event-defined reminder before each busy status (in mins) +; +;channel = SIP/1234 ; Channel to dial +;context = default ; Context to connect to on answer +;extension = 1234 ; Extension to connect to on answer +; +; or +; +;[calendar3] +; Note: Support for Exchange Server 2007+ +; +;type = ews ; type of calendar--currently supported: ical, caldav, exchange, or ews +;url = https://example.com/ews/Exchange.asmx ; URL to MS Exchange EWS +;user = jdoe ; Exchange username +;secret = mysecret ; Exchange password +;refresh = 15 ; refresh calendar every n minutes +;timeframe = 60 ; number of minutes of calendar data to pull for each refresh period +; ; should always be >= refresh +; +; You can set up res_calendar to execute a call upon an upcoming busy status +;autoreminder = 10 ; Override event-defined reminder before each busy status (in mins) +; +;channel = SIP/1234 ; Channel to dial +;context = default ; Context to connect to on answer +;extension = 1234 ; Extension to connect to on answer +; +; or +; +;app = Playback ; Application to execute on answer (instead of context/extension) +;appdata = tt-weasels ; Data part of application to execute on answer +; +;waittime = 30 ; How long to wait for an answer, defaults to 30 seconds + +;[calendar4] +;type = caldav ; type of calendar--currently supported: ical, caldav, exchange, or ews +;url = https://www.google.com/calendar/dav/username@gmail.com/events/ ; Main GMail calendar (the trailing slash is significant!) +;user = jdoe@gmail.com ; username +;secret = mysecret ; password +;refresh = 15 ; refresh calendar every n minutes +;timeframe = 60 ; number of minutes of calendar data to pull for each refresh period +; ; should always be >= refresh +; +; You can set up res_calendar to execute a call upon an upcoming busy status +;autoreminder = 10 ; Override event-defined reminder before each busy status (in mins) +; +;channel = SIP/1234 ; Channel to dial +;context = default ; Context to connect to on answer +;extension = 1234 ; Extension to connect to on answer +; +; or +; +;app = Playback ; Application to execute on answer (instead of context/extension) +;appdata = tt-weasels ; Data part of application to execute on answer +; +;waittime = 30 ; How long to wait for an answer, defaults to 30 seconds diff --git a/version_1.8.2/pabx/etc/asterisk/ccss.conf b/version_1.8.2/pabx/etc/asterisk/ccss.conf new file mode 100644 index 0000000..7b3fe7d --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/ccss.conf @@ -0,0 +1,205 @@ +; +; --- Call Completion Supplementary Services --- +; +; For more information about CCSS, see the CCSS user documentation +; https://wiki.asterisk.org/wiki/display/AST/Call+Completion+Supplementary+Services+(CCSS) +; + +[general] +; The cc_max_requests option is a global limit on the number of +; CC requests that may be in the Asterisk system at any time. +; +;cc_max_requests = 20 +; +; The cc_STATE_devstate variables listed below can be used to change the +; default mapping of the internal state machine tracking the state of +; call completion to an Asterisk Device State value. The acceptable values +; that can be provided are as follows, with a description of what the +; equivalent device BLF that this maps to: +; +; UNKNOWN ; Device is valid but channel didn't know state +; NOT_INUSE ; Device is not used +; INUSE ; Device is in use +; BUSY ; Device is busy +; INVALID ; Device is invalid +; UNAVAILABLE ; Device is unavailable +; RINGING ; Device is ringing +; RINGINUSE ; Device is ringing *and* in use +; ONHOLD ; Device is on hold +; +; These states are used to generate DEVICE_STATE information that can be +; included with Asterisk hints for phones to subscribe to the state information +; or dialplan to check the state using the EXTENSION_STATE() function or +; the DEVICE_STATE() function. +; +; The states are in the format of: "ccss:TECH/ID" so an example of device +; SIP/3000 making a CallCompletionRequest() could be checked by looking at +; DEVICE_STATE(ccss:SIP/3000) or an Asterisk Hint could be generated such as +; +; [hint-context] +; exten => *843000,hint,ccss:SIP/3000 +; +; and then accessed with EXTENSION_STATE(*843000@hint-context) +; or subscribed to with a BLF button on a phone. +; +; The available state mapping and default values are: +; +; cc_available_devstate = NOT_INUSE +; cc_offered_devstate = NOT_INUSE +; cc_caller_requested_devstate = NOT_INUSE +; cc_active_devstate = INUSE +; cc_callee_ready_devstate = INUSE +; cc_caller_busy_devstate = ONHOLD +; cc_recalling_devstate = RINGING +; cc_complete_devstate = NOT_INUSE +; cc_failed_devstate = NOT_INUSE + +; +;============================================ +; PLEASE READ THIS!!! +; The options described below should NOT be +; set in this file. Rather, they should be +; set per-device in a channel driver +; configuration file. +; PLEASE READ THIS!!! +;=========================================== +; +; -------------------------------------------------------------------- +; Timers +; -------------------------------------------------------------------- +;There are three configurable timers for all types of CC: the +;cc_offer_timer, the ccbs_available_timer, and the ccnr_available_timer. +;In addition, when using a generic agent, there is a fourth timer, +;the cc_recall_timer. All timers are configured in seconds, and the +;values shown below are the defaults. +; +;When a caller is offered CCBS or CCNR, the cc_offer_timer will +;be started. If the caller does not request CC before the +;cc_offer_timer expires, then the caller will be unable to request +;CC for this call. +; +;cc_offer_timer = 20 +; +;Once a caller has requested CC, then either the ccbs_available_timer +;or the ccnr_available_timer will run, depending on the service +;requested. The reason why there are two separate timers for CCBS +;and CCNR is that it is reasonable to want to have a shorter timeout +;configured for CCBS than for CCNR. If the available timer expires +;before the called party becomes available, then the CC attempt +;will have failed and monitoring of the called party will stop. +; +;ccbs_available_timer = 4800 +;ccnr_available_timer = 7200 +; +; When using a generic agent, the original caller is called back +; when one of the original called parties becomes available. The +; cc_recall_timer tells Asterisk how long it should let the original +; caller's phone ring before giving up. Please note that this parameter +; only affects operation when using a generic agent. +; +;cc_recall_timer = 20 +; -------------------------------------------------------------------- +; Policies +; -------------------------------------------------------------------- +; Policy settings tell Asterisk how to behave and what sort of +; resources to allocate in order to facilitate CC. There are two +; settings to control the actions Asterisk will take. +; +; The cc_agent_policy describes the behavior that Asterisk will +; take when communicating with the caller during CC. There are +; three possible options. +; +;never: Never offer CC to the caller. Setting the cc_agent_policy +; to this value is the way to disable CC for a call. +; +;generic: A generic CC agent is one which uses no protocol-specific +; mechanisms to offer CC to the caller. Instead, the caller +; requests CC using a dialplan function. Due to internal +; restrictions, you should only use a generic CC agent on +; phones (i.e. not "trunks"). If you are using phones which +; do not support a protocol-specific method of using CC, then +; generic CC agents are what you should use. +; +;native: A native CC agent is one which uses protocol-specific +; signaling to offer CC to the caller and accept CC requests +; from the caller. The supported protocols for native CC +; agents are SIP, ISDN ETSI PTP, ISDN ETSI PTMP, and Q.SIG +;cc_agent_policy=never +; +; The cc_monitor_policy describes the behavior that Asterisk will +; take when communicating with the called party during CC. There +; are four possible options. +; +;never: Analogous to the cc_agent_policy setting. We will never +; attempt to request CC services on this interface. +; +;generic: Analogous to the cc_agent_policy setting. We will monitor +; the called party's progress using protocol-agnostic +; capabilities. Like with generic CC agents, generic CC +; monitors should only be used for phones. +; +;native: Analogous to the cc_agent_policy setting. We will use +; protocol-specific methods to request CC from this interface +; and to monitor the interface for availability. +; +;always: If an interface is set to "always," then we will accept +; protocol-specific CC offers from the caller and use +; a native CC monitor for the remainder of the CC transaction. +; However, if the interface does not offer protocol-specific +; CC, then we will fall back to using a generic CC monitor +; instead. This is a good setting to use for phones for which +; you do not know if they support protocol-specific CC +; methodologies. +;cc_monitor_policy=never +; +; +; -------------------------------------------------------------------- +; Limits +; -------------------------------------------------------------------- +; +; The use of CC requires Asterisk to potentially use more memory than +; some administrators would like. As such, it is a good idea to limit +; the number of CC requests that can be in the system at a given time. +; The values shown below are the defaults. +; +; The cc_max_agents setting limits the number of outstanding CC +; requests a caller may have at any given time. Please note that due +; to implementation restrictions, this setting is ignored when using +; generic CC agents. Generic CC agents may only have one outstanding +; CC request. +; +;cc_max_agents = 5 +; +; The cc_max_monitors setting limits the number of outstanding CC +; requests can be made to a specific interface at a given time. +; +;cc_max_monitors = 5 +; +; -------------------------------------------------------------------- +; Other +; -------------------------------------------------------------------- +; +; When using a generic CC agent, the caller who requested CC will be +; called back when a called party becomes available. When the caller +; answers his phone, the administrator may opt to have a macro run. +; What this macro does is up to the administrator. By default there +; is no callback macro configured. +; +;cc_callback_macro= +; +; Alternatively, the administrator may run a subroutine. By default +; there is no callback subroutine configured. The subroutine should +; be specified in the format: [[context,]exten,]priority +; +;cc_callback_sub= +; +; When using an ISDN phone and a generic CC agent, Asterisk is unable +; to determine the dialstring that should be used when calling back +; the original caller. Furthermore, if you desire to use any dialstring- +; specific options, such as distinctive ring, you must set this +; configuration option. For non-ISDN phones, it is not necessary to +; set this, since Asterisk can determine the dialstring to use since +; it is identical to the name of the calling device. By default, there +; is no cc_agent_dialstring set. +; +;cc_agent_dialstring= diff --git a/version_1.8.2/pabx/etc/asterisk/cdr.conf b/version_1.8.2/pabx/etc/asterisk/cdr.conf new file mode 100644 index 0000000..cb3f24c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr.conf @@ -0,0 +1,167 @@ +; +; Asterisk Call Detail Record engine configuration +; +; CDR is Call Detail Record, which provides logging services via a variety of +; pluggable backend modules. Detailed call information can be recorded to +; databases, files, etc. Useful for billing, fraud prevention, compliance with +; Sarbanes-Oxley aka The Enron Act, QOS evaluations, and more. +; + +[general] + +; Define whether or not to use CDR logging. Setting this to "no" will override +; any loading of backend CDR modules. Default is "yes". +;enable=yes + +; Define whether or not to log unanswered calls that don't involve an outgoing +; party. Setting this to "yes" will make calls to extensions that don't answer +; and don't set a B side channel (such as by using the Dial application) +; receive CDR log entries. If this option is set to "no", then those log +; entries will not be created. Unanswered Calls which get offered to an +; outgoing line will always receive log entries regardless of this option, and +; that is the intended behaviour. +;unanswered = no +unanswered = yes + +; Define whether or not to log congested calls. Setting this to "yes" will +; report each call that fails to complete due to congestion conditions. Default +; is "no". +;congestion = no + +; Normally, CDR's are not closed out until after all extensions are finished +; executing. By enabling this option, the CDR will be ended before executing +; the "h" extension and hangup handlers so that CDR values such as "end" and +; "billsec" may be retrieved inside of of this extension. +; The default value is "no". +;endbeforehexten=no + +; Normally, the 'billsec' field logged to the backends (text files or databases) +; is simply the end time (hangup time) minus the answer time in seconds. Internally, +; asterisk stores the time in terms of microseconds and seconds. By setting +; initiatedseconds to 'yes', you can force asterisk to report any seconds +; that were initiated (a sort of round up method). Technically, this is +; when the microsecond part of the end time is greater than the microsecond +; part of the answer time, then the billsec time is incremented one second. +; The default value is "no". +;initiatedseconds=no + +; Define the CDR batch mode, where instead of posting the CDR at the end of +; every call, the data will be stored in a buffer to help alleviate load on the +; asterisk server. Default is "no". +; +; WARNING WARNING WARNING +; Use of batch mode may result in data loss after unsafe asterisk termination +; ie. software crash, power failure, kill -9, etc. +; WARNING WARNING WARNING +; +;batch=no + +; Define the maximum number of CDRs to accumulate in the buffer before posting +; them to the backend engines. 'batch' must be set to 'yes'. Default is 100. +;size=100 + +; Define the maximum time to accumulate CDRs in the buffer before posting them +; to the backend engines. If this time limit is reached, then it will post the +; records, regardless of the value defined for 'size'. 'batch' must be set to +; 'yes'. Note that time is in seconds. Default is 300 (5 minutes). +;time=300 + +; The CDR engine uses the internal asterisk scheduler to determine when to post +; records. Posting can either occur inside the scheduler thread, or a new +; thread can be spawned for the submission of every batch. For small batches, +; it might be acceptable to just use the scheduler thread, so set this to "yes". +; For large batches, say anything over size=10, a new thread is recommended, so +; set this to "no". Default is "no". +;scheduleronly=no + +; When shutting down asterisk, you can block until the CDRs are submitted. If +; you don't, then data will likely be lost. You can always check the size of +; the CDR batch buffer with the CLI "cdr status" command. To enable blocking on +; submission of CDR data during asterisk shutdown, set this to "yes". Default +; is "yes". +;safeshutdown=yes + +; +; +; CHOOSING A CDR "BACKEND" (what kind of output to generate) +; +; To choose a backend, you have to make sure either the right category is +; defined in this file, or that the appropriate config file exists, and has the +; proper definitions in it. If there are any problems, usually, the entry will +; silently ignored, and you get no output. +; +; Also, please note that you can generate CDR records in as many formats as you +; wish. If you configure 5 different CDR formats, then each event will be logged +; in 5 different places! In the example config files, all formats are commented +; out except for the cdr-csv format. +; +; Here are all the possible back ends: +; +; csv, custom, manager, odbc, pgsql, radius, sqlite, tds +; (also, mysql is available via the asterisk-addons, due to licensing +; requirements) +; (please note, also, that other backends can be created, by creating +; a new backend module in the source cdr/ directory!) +; +; Some of the modules required to provide these backends will not build or install +; unless some dependency requirements are met. Examples of this are pgsql, odbc, +; etc. If you are not getting output as you would expect, the first thing to do +; is to run the command "make menuselect", and check what modules are available, +; by looking in the "2. Call Detail Recording" option in the main menu. If your +; backend is marked with XXX, you know that the "configure" command could not find +; the required libraries for that option. +; +; To get CDRs to be logged to the plain-jane /var/log/asterisk/cdr-csv/Master.csv +; file, define the [csv] category in this file. No database necessary. The example +; config files are set up to provide this kind of output by default. +; +; To get custom csv CDR records, make sure the cdr_custom.conf file +; is present, and contains the proper [mappings] section. The advantage to +; using this backend, is that you can define which fields to output, and in +; what order. By default, the example configs are set up to mimic the cdr-csv +; output. If you don't make any changes to the mappings, you are basically generating +; the same thing as cdr-csv, but expending more CPU cycles to do so! +; +; To get manager events generated, make sure the cdr_manager.conf file exists, +; and the [general] section is defined, with the single variable 'enabled = yes'. +; +; For odbc, make sure all the proper libs are installed, that "make menuselect" +; shows that the modules are available, and the cdr_odbc.conf file exists, and +; has a [global] section with the proper variables defined. +; +; For pgsql, make sure all the proper libs are installed, that "make menuselect" +; shows that the modules are available, and the cdr_pgsql.conf file exists, and +; has a [global] section with the proper variables defined. +; +; For logging to radius databases, make sure all the proper libs are installed, that +; "make menuselect" shows that the modules are available, and the [radius] +; category is defined in this file, and in that section, make sure the 'radiuscfg' +; variable is properly pointing to an existing radiusclient.conf file. +; +; For logging to sqlite databases, make sure the 'cdr.db' file exists in the log directory, +; which is usually /var/log/asterisk. Of course, the proper libraries should be available +; during the 'configure' operation. +; +; For tds logging, make sure the proper libraries are available during the 'configure' +; phase, and that cdr_tds.conf exists and is properly set up with a [global] category. +; +; Also, remember, that if you wish to log CDR info to a database, you will have to define +; a specific table in that databse to make things work! See the doc directory for more details +; on how to create this table in each database. +; + +[csv] +usegmtime=yes ; log date/time in GMT. Default is "no" +loguniqueid=yes ; log uniqueid. Default is "no" +loguserfield=yes ; log user field. Default is "no" +accountlogs=yes ; create separate log file for each account code. Default is "yes" +newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence). + ; Default is "no". + +;[radius] +;usegmtime=yes ; log date/time in GMT +;loguniqueid=yes ; log uniqueid +;loguserfield=yes ; log user field +; Set this to the location of the radiusclient-ng configuration file +; The default is /etc/radiusclient-ng/radiusclient.conf +;radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_adaptive_odbc.conf b/version_1.8.2/pabx/etc/asterisk/cdr_adaptive_odbc.conf new file mode 100644 index 0000000..2daa983 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_adaptive_odbc.conf @@ -0,0 +1,59 @@ +; The point of this module is to allow you log whatever you like in terms of +; the CDR variables. Do you want to log uniqueid? Then simply ensure that +; your table has that column. If you don't want the column, ensure that it +; does not exist in the table structure. If you'd like to call uniqueid +; something else in your table, simply provide an alias in the configuration +; file that maps the standard CDR field name (uniqueid) to whatever column +; name you like. Perhaps you'd like some extra CDR values logged that aren't +; in the standard repertoire of CDR variables (some that come to mind are +; certain values used for LCR: route, per_minute_cost, and per_minute_price). +; Simply set those CDR variables in your dialplan, i.e. Set(CDR(route)=27), +; ensure that a corresponding column exists in your table, and cdr_adaptive_odbc +; will do the rest. +; +; This configuration defines the connections and tables for which CDRs may +; be populated. Each context specifies a different CDR table to be used. +; +; The columns in the tables should match up word-for-word (case-insensitive) +; to the CDR variables set in the dialplan. The natural advantage to this +; system is that beyond setting up the configuration file to tell you what +; tables to look at, there isn't anything more to do beyond creating the +; columns for the fields that you want, and populating the corresponding +; CDR variables in the dialplan. For the builtin variables only, you may +; create aliases for the real column name. +; +; Please note that after adding columns to the database, it is necessary to +; reload this module to get the new column names and types read. +; +; Warning: if you specify two contexts with exactly the same connection and +; table names, you will get duplicate records in that table. So be careful. +; + +;[first] +;connection=mysql1 +;table=cdr + +;[second] +;connection=mysql1 +;table=extracdr + +;[third] +;connection=sqlserver +;table=AsteriskCDR +;schema=public ; for databases which support schemas +;usegmtime=yes ; defaults to no +;alias src => source +;alias channel => source_channel +;alias dst => dest +;alias dstchannel => dest_channel +; +; Any filter specified MUST match exactly or the CDR will be discarded +;filter accountcode => somename +;filter src => 123 +; Negative filters are also now available +;filter src != 456 +; +; Additionally, we now support setting static values per column. The reason +; for this is to allow different sections to specify different values for +; a certain named column, presumably separated by filters. +;static "Some Special Value" => identifier_code diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_custom.conf b/version_1.8.2/pabx/etc/asterisk/cdr_custom.conf new file mode 100644 index 0000000..a7bf0f6 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_custom.conf @@ -0,0 +1,16 @@ +; +; Mappings for custom config file +; +; To get your CSV output in a format tailored to your liking, uncomment the +; following lines and look for the output in the cdr-custom directory (usually +; in /var/log/asterisk). Depending on which mapping you uncomment, you may see +; Master.csv, Simple.csv, or both. +; +[mappings] +Master.csv => ${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration)})},${CSV_QUOTE(${CDR(billsec)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})},${CDR(sequence)},${CSV_QUOTE(${CDR(direcao)})},${CSV_QUOTE(${CDR(ramal_origem)})},${CSV_QUOTE(${CDR(fora_horario)})} + + +; +; High Resolution Time for billsec and duration fields +;Master.csv => ${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration,f)})},${CSV_QUOTE(${CDR(billsec,f)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})},${CDR(sequence)} +;Simple.csv => ${CSV_QUOTE(${EPOCH})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})} diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_manager.conf b/version_1.8.2/pabx/etc/asterisk/cdr_manager.conf new file mode 100644 index 0000000..b95038c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_manager.conf @@ -0,0 +1,6 @@ +; +; Asterisk Call Management CDR +; +[general] +enabled = yes + diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_mysql.conf b/version_1.8.2/pabx/etc/asterisk/cdr_mysql.conf new file mode 100644 index 0000000..a1f7d38 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_mysql.conf @@ -0,0 +1,62 @@ +; +; Note - if the database server is hosted on the same machine as the +; asterisk server, you can achieve a local Unix socket connection by +; setting hostname=localhost +; +; port and sock are both optional parameters. If hostname is specified +; and is not "localhost" (you can use address 127.0.0.1 instead), then +; cdr_mysql will attempt to connect to the port specified or use the +; default port. If hostname is not specified or if hostname is +; "localhost", then cdr_mysql will attempt to connect to the socket file +; specified by sock or otherwise use the default socket file. +; +;[global] +;hostname=database.host.name +;dbname=asteriskcdrdb +;table=cdr +;password=password +;user=asteriskcdruser +;port=3306 +;sock=/tmp/mysql.sock +; By default CDRs are logged in the system's time zone +;cdrzone=UTC ; log CDRs with UTC +;usegmtime=yes ;log date/time in GMT. Default is "no" +;cdrzone=America/New_York ; or use a specific time zone +; +; If your system's locale differs from mysql database character set, +; cdr_mysql can damage non-latin characters in CDR variables. Use this +; option to protect your data. +;charset=koi8r +; +; Older versions of cdr_mysql set the calldate field to whenever the +; record was posted, rather than the start date of the call. This flag +; reverts to the old (incorrect) behavior. Note that you'll also need +; to comment out the "start=calldate" alias, below, to use this. +;compat=no +; +; ssl connections (optional) +;ssl_ca= +;ssl_cert= +;ssl_key= +; +; You may also configure the field names used in the CDR table. +; +[columns] +;static "" => +;alias => +alias start => calldate +;alias clid => +;alias src => +;alias dst => +;alias dcontext => +;alias channel => +;alias dstchannel => +;alias lastapp => +;alias lastdata => +;alias duration => +;alias billsec => +;alias disposition => +;alias amaflags => +;alias accountcode => +;alias userfield => +;alias uniqueid => diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_odbc.conf b/version_1.8.2/pabx/etc/asterisk/cdr_odbc.conf new file mode 100644 index 0000000..663ce09 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_odbc.conf @@ -0,0 +1,12 @@ +; +; cdr_odbc.conf +; + +;[global] +;dsn=MySQL-test +;loguniqueid=yes +;dispositionstring=yes +;table=cdr ;"cdr" is default table name +;usegmtime=no ; set to "yes" to log in GMT +;hrtime=yes ;Enables microsecond accuracy with the billsec and duration fields +;newcdrcolumns=yes ; Enable logging of post-1.8 CDR columns (peeraccount, linkedid, sequence) diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_pgsql.conf b/version_1.8.2/pabx/etc/asterisk/cdr_pgsql.conf new file mode 100644 index 0000000..11f4df7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_pgsql.conf @@ -0,0 +1,8 @@ +[global] +hostname=postgres +port=5432 +dbname=pbx +password=ctepgSQL +user=contacte +table=ast_bilhetes +encoding=LATIN1 diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_sqlite3_custom.conf b/version_1.8.2/pabx/etc/asterisk/cdr_sqlite3_custom.conf new file mode 100644 index 0000000..0d5dc09 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_sqlite3_custom.conf @@ -0,0 +1,10 @@ +; +; Mappings for custom config file +; +[master] ; currently, only file "master.db" is supported, with only one table at a time. +;table => cdr +;columns => calldate, clid, dcontext, channel, dstchannel, lastapp, lastdata, duration, billsec, disposition, amaflags, accountcode, uniqueid, userfield, test +;values => '${CDR(start)}','${CDR(clid)}','${CDR(dcontext)}','${CDR(channel)}','${CDR(dstchannel)}','${CDR(lastapp)}','${CDR(lastdata)}','${CDR(duration)}','${CDR(billsec)}','${CDR(disposition)}','${CDR(amaflags)}','${CDR(accountcode)}','${CDR(uniqueid)}','${CDR(userfield)}','${CDR(test)}' + +;Enable High Resolution Times for billsec and duration fields +;values => '${CDR(start)}','${CDR(clid)}','${CDR(dcontext)}','${CDR(channel)}','${CDR(dstchannel)}','${CDR(lastapp)}','${CDR(lastdata)}','${CDR(duration,f)}','${CDR(billsec,f)}','${CDR(disposition)}','${CDR(amaflags)}','${CDR(accountcode)}','${CDR(uniqueid)}','${CDR(userfield)}','${CDR(test)}' diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_syslog.conf b/version_1.8.2/pabx/etc/asterisk/cdr_syslog.conf new file mode 100644 index 0000000..3a619be --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_syslog.conf @@ -0,0 +1,83 @@ +; +; Asterisk Call Detail Records (CDR) - Syslog Backend +; + +; The cdr_syslog module writes CDRs using the facilities provided by syslog. +; +; Not only must you configure cdr_syslog from this file (cdr_syslog.conf) but +; you will also need to make changes to your /etc/syslog.conf before CDRs will +; be written to syslog. +; +; As an example, you can add the following to /etc/syslog.conf: +; +; local4.info /var/log/asterisk-cdr.log +; +; And then instruct syslogd to re-read the configuration file by sending it a +; HUP signal. On Linux this can be done like this: +; +; kill -HUP `cat /var/run/syslogd.pid` +; +; Finally, you will need to uncomment the [cdr-simple] section below, and restart +; Asterisk. When calls are placed, you should start seeing records appear in +; /var/log/asterisk-cdr.log. + +[general] +; Facility +; +; The 'facility' keyword specifies the syslog facility to use when writing out +; CDRs. +; +; Accepted values: One of the following: +; user, local0, local1, local2, local3, local4, local5, local6 +; and local7. +; +; Note: Depending on your platform, the following may also be +; available: +; auth, authpriv, cron, daemon, ftp, kern, lpr, mail, +; news, syslog, and uucp. +; +; Default value: local4 + +;facility=local0 + +; Priority +; +; Use the 'priority' keyword to select which of the syslog priority levels to +; use when logging CDRs. +; +; Accepted values: One of the following: +; alert, crit, debug, emerg, err, info, notice, warning +; Default value: info + +;priority=warn + +; Note: The settings for 'facility' and 'priority' in the [general] section +; define the default values for all of the logging locations created +; below in separate sections. + +;[cdr-master] +;facility = local5 +;priority = debug + +; Template +; +; The 'template' value allows you to specify a custom format for messages +; written to syslog. This is similar to how cdr_custom is configured. +; +; Allowed values: A diaplan style string. +; Default value: None, this is required field. +; +; Note: Because of the way substitution is done, the only meaningful values +; available when the record is logged are those available via the CDR() +; dialplan function. All other channel variables will be unavailable. + +;template = "${CDR(clid)}","${CDR(src)}","${CDR(dst)}","${CDR(dcontext)}","${CDR(channel)}","${CDR(dstchannel)}","${CDR(lastapp)}","${CDR(lastdata)}","${CDR(start)}","${CDR(answer)}","${CDR(end)}","${CDR(duration)}","${CDR(billsec)}","${CDR(disposition)}","${CDR(amaflags)}","${CDR(accountcode)}","${CDR(uniqueid)}","${CDR(userfield)}" + +; High Resolution Time for billsec and duration fields +;template = "${CDR(clid)}","${CDR(src)}","${CDR(dst)}","${CDR(dcontext)}","${CDR(channel)}","${CDR(dstchannel)}","${CDR(lastapp)}","${CDR(lastdata)}","${CDR(start)}","${CDR(answer)}","${CDR(end)}","${CDR(duration,f)}","${CDR(billsec,f)}","${CDR(disposition)}","${CDR(amaflags)}","${CDR(accountcode)}","${CDR(uniqueid)}","${CDR(userfield)}" +;[cdr-simple] + +; Since we don't specify a facility or priority for this logging location, the +; records will use the defaults specified in the [general] section. + +;template = "We received a call from ${CDR(src)}" diff --git a/version_1.8.2/pabx/etc/asterisk/cdr_tds.conf b/version_1.8.2/pabx/etc/asterisk/cdr_tds.conf new file mode 100644 index 0000000..f3a9d7c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cdr_tds.conf @@ -0,0 +1,77 @@ +; +; Asterisk Call Detail Records (CDR) - FreeTDS Backend +; + +;[global] + +; Connection +; +; Use the 'connection' keyword to specify one of the instance names from your +; 'freetds.conf' file. Note that 'freetds.conf' is not an Asterisk +; configuration file, but one specific to the FreeTDS library. See the FreeTDS +; documentation on 'freetds.conf' for more information: +; +; http://www.freetds.org/userguide/freetdsconf.htm +; +; Accepted values: One of the connections specified in freetds.conf + +;connection=ConnectionFromFreeTDSConf + +; Database Name +; +; The 'dbname' keyword specifies the database name to use when logging CDRs. +; +; Accepted values: Any valid database name + +;dbname=AsteriskCDRs + +; Database Table Name +; +; The 'table' keyword identifies which database table is used to log CDRs. +; +; Accepted value: Any valid table name +; Default value: If not specified, a table named 'cdr' is assumed + +;table=cdr + +; Credentials +; +; The 'username' and 'password' keywords specify the user credentials that +; Asterisk should use when connecting to the database. +; +; Accepted value: Any valid username and password + +;username=mangUsr +;password= + +; Language +; +; The 'language' keyword changes the language which are used for error and +; information messages returned by SQL Server. Each database and user has their +; own default value, and this default can be overriden here. +; +; Accepted value: Any language installed on the target SQL Server. +; Default value: us_english + +;language=us_english + +; Character Set +; +; The 'charset' setting is used to change the character set used when connecting +; to the database server. Each database and database user has their own +; character set setting, and this default can be overriden here. +; +; Accepted value: Any valid character set available on the target SQL server. +; Default value: iso_1 + +;charset=BIG5 + +; High Resolution Times +; +; The 'hrtime' setting is used to store high resolution (sub second) times for +; billsec and duration fields. +; +; Accepted value: true or false +; Default value: false + +;hrtime=false diff --git a/version_1.8.2/pabx/etc/asterisk/cel.conf b/version_1.8.2/pabx/etc/asterisk/cel.conf new file mode 100644 index 0000000..344a8d7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cel.conf @@ -0,0 +1,116 @@ +; +; Asterisk Channel Event Logging (CEL) +; + +; Channel Event Logging is a mechanism to provide fine-grained event information +; that can be used to generate billing information. Such event information can +; be recorded to various backend modules. +; + +[general] + +; CEL Activation +; +; Use the 'enable' keyword to turn CEL on or off. +; +; Accepted values: yes and no +; Default value: no + +enable=no + +; Application Tracking +; +; Use the 'apps' keyword to specify the list of applications for which you want +; to receive CEL events. This is a comma separated list of Asterisk dialplan +; applications, such as Dial, Queue, and Park. +; +; Accepted values: A comma separated list of Asterisk dialplan applications +; Default value: none +; +; Note: You may also use 'all' which will result in CEL events being reported +; for all Asterisk applications. This may affect Asterisk's performance +; significantly. + +apps=dial,park + +; Event Tracking +; +; Use the 'events' keyword to specify the list of events which you want to be +; raised when they occur. This is a comma separated list of the values in the +; table below. +; +; Accepted values: A comma separated list of one or more of the following: +; ALL -- Generate entries on all events +; CHAN_START -- The time a channel was created +; CHAN_END -- The time a channel was terminated +; ANSWER -- The time a channel was answered (ie, phone taken off-hook) +; HANGUP -- The time at which a hangup occurred +; BRIDGE_ENTER -- The time a channel was connected into a conference room +; BRIDGE_EXIT -- The time a channel was removed from a conference room +; APP_START -- The time a tracked application was started +; APP_END -- the time a tracked application ended +; PARK_START -- The time a call was parked +; PARK_END -- Unpark event +; BLINDTRANSFER -- When a blind transfer is initiated +; ATTENDEDTRANSFER -- When an attended transfer is initiated +; PICKUP -- This channel picked up the specified channel +; FORWARD -- This channel is being forwarded somewhere else +; LINKEDID_END -- The last channel with the given linkedid is retired +; USER_DEFINED -- Triggered from the dialplan, and has a name given by the +; user +; LOCAL_OPTIMIZE -- A local channel pair is optimizing away. +; +; Default value: none +; (Track no events) + +events=APP_START,CHAN_START,CHAN_END,ANSWER,HANGUP,BRIDGE_ENTER,BRIDGE_EXIT + +; Date Format +; +; Use the 'dateformat' keyword to specify the date format used when CEL events +; are raised. +; +; Accepted values: A strftime format string (see man strftime) +; +; Example: "%F %T" +; -> This gives the date and time in the format "2009-06-23 17:02:35" +; +; If this option is not specified, the default format is "." +; since epoch. The microseconds field will always be 6 digits in length, meaning it +; may have leading zeros. +; +;dateformat = %F %T + +; +; Asterisk Manager Interface (AMI) CEL Backend +; +[manager] + +; AMI Backend Activation +; +; Use the 'enable' keyword to turn CEL logging to the Asterisk Manager Interface +; on or off. +; +; Accepted values: yes and no +; Default value: no +;enabled=yes + +; Use 'show_user_defined' to put "USER_DEFINED" in the EventName header, +; instead of (by default) just putting the user defined event name there. +; When enabled the UserDefType header is added for user defined events to +; provide the user defined event name. +; +;show_user_defined=yes + +; +; RADIUS CEL Backend +; +[radius] +; +; Log date/time in GMT +;usegmtime=yes +; +; Set this to the location of the radiusclient-ng configuration file +; The default is /etc/radiusclient-ng/radiusclient.conf +;radiuscfg => /usr/local/etc/radiusclient-ng/radiusclient.conf +; diff --git a/version_1.8.2/pabx/etc/asterisk/cel_custom.conf b/version_1.8.2/pabx/etc/asterisk/cel_custom.conf new file mode 100644 index 0000000..8ac9e29 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cel_custom.conf @@ -0,0 +1,39 @@ +; +; Asterisk Channel Event Logging (CEL) - Custom CSV Backend +; + +; This is the configuration file for the customizable CSV backend for CEL +; logging. +; +; In order to create custom CSV logs for CEL, uncomment the template below +; (Master.csv) and start Asterisk. Once CEL events are generated, a file will +; appear in the following location: +; +; /var/log/asterisk/cel-custom/Master.csv +; +; (Note that /var/log/asterisk is the default and may differ on your system) +; +; You can also create more than one template if desired. All logs will appear +; in the cel-custom directory under your Asterisk logs directory. +; + +; +; Within a mapping, use the CALLERID() and CHANNEL() functions to retrieve +; details from the CEL event. There are also a few variables created by this +; module that can be used in a mapping: +; +; eventtype - The name of the CEL event. +; eventtime - The timestamp of the CEL event. +; eventenum - Like eventtype but is "USER_DEFINED" for a user defined event. +; userdeftype - User defined event type name from CELGenUserEvent(). +; eventextra - Extra data included with this CEL event, typically along with +; an event of type USER_DEFINED from CELGenUserEvent(). +; BRIDGEPEER - Bridged peer channel name at the time of the CEL event. +; CHANNEL(peer) could also be used. +; +;[mappings] +;Master.csv => ${CSV_QUOTE(${eventtype})},${CSV_QUOTE(${eventtime})},${CSV_QUOTE(${CALLERID(name)})},${CSV_QUOTE(${CALLERID(num)})},${CSV_QUOTE(${CALLERID(ANI)})},${CSV_QUOTE(${CALLERID(RDNIS)})},${CSV_QUOTE(${CALLERID(DNID)})},${CSV_QUOTE(${CHANNEL(exten)})},${CSV_QUOTE(${CHANNEL(context)})},${CSV_QUOTE(${CHANNEL(channame)})},${CSV_QUOTE(${CHANNEL(appname)})},${CSV_QUOTE(${CHANNEL(appdata)})},${CSV_QUOTE(${CHANNEL(amaflags)})},${CSV_QUOTE(${CHANNEL(accountcode)})},${CSV_QUOTE(${CHANNEL(uniqueid)})},${CSV_QUOTE(${CHANNEL(linkedid)})},${CSV_QUOTE(${BRIDGEPEER})},${CSV_QUOTE(${CHANNEL(userfield)})},${CSV_QUOTE(${userdeftype})},${CSV_QUOTE(${eventextra})} + + +[mappings] +Master.csv => ${CSV_QUOTE(${eventtype})},${CSV_QUOTE(${eventtime})},${CSV_QUOTE(${CALLERID(name)})},${CSV_QUOTE(${CALLERID(num)})},${CSV_QUOTE(${CALLERID(ANI)})},${CSV_QUOTE(${CALLERID(RDNIS)})},${CSV_QUOTE(${CALLERID(DNID)})},${CSV_QUOTE(${CHANNEL(exten)})},${CSV_QUOTE(${CHANNEL(context)})},${CSV_QUOTE(${CHANNEL(channame)})},${CSV_QUOTE(${CHANNEL(appname)})},${CSV_QUOTE(${CHANNEL(appdata)})},${CSV_QUOTE(${CHANNEL(amaflags)})},${CSV_QUOTE(${CHANNEL(accountcode)})},${CSV_QUOTE(${CHANNEL(uniqueid)})},${CSV_QUOTE(${CHANNEL(linkedid)})},${CSV_QUOTE(${BRIDGEPEER})},${CSV_QUOTE(${CHANNEL(userfield)})},${CSV_QUOTE(${userdeftype})},${CSV_QUOTE(${eventextra})} diff --git a/version_1.8.2/pabx/etc/asterisk/cel_odbc.conf b/version_1.8.2/pabx/etc/asterisk/cel_odbc.conf new file mode 100644 index 0000000..0c0b83f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cel_odbc.conf @@ -0,0 +1,108 @@ +; +; Asterisk Channel Event Logging (CEL) - Adaptive ODBC Backend +; + +; General module options category. +[general] +; Use 'show_user_defined' to put "USER_DEFINED" in the eventtype field, +; instead of (by default) just putting the user defined event name there. +; +;show_user_defined=yes + +; This configuration defines the connections and tables for which CEL records +; may be populated. Each context specifies a different CEL table to be used. +; +; The columns in the tables should match up word-for-word (case-insensitive) to +; the CEL variables set in the dialplan. The natural advantage to this system +; is that beyond setting up the configuration file to tell you what tables to +; look at, there isn't anything more to do beyond creating the columns for the +; fields that you want, and populating the corresponding CEL variables in the +; dialplan. +; +; Please note that after adding columns to the database, it is necessary to +; reload this module to get the new column names and types read. +; +; Warning: if you specify two contexts with exactly the same connection and +; table names, you will get duplicate records in that table. So be careful. +; +; CEL FIELDS: +; eventtype +; CHANNEL_START = 1 +; CHANNEL_END = 2 +; HANGUP = 3 +; ANSWER = 4 +; APP_START = 5 +; APP_END = 6 +; BRIDGE_START = 7 +; BRIDGE_END = 8 +; CONF_START = 9 +; CONF_END = 10 +; PARK_START = 11 +; PARK_END = 12 +; BLINDTRANSFER = 13 +; ATTENDEDTRANSFER = 14 +; TRANSFER = 15 +; HOOKFLASH = 16 +; 3WAY_START = 17 +; 3WAY_END = 18 +; CONF_ENTER = 19 +; CONF_EXIT = 20 +; USER_DEFINED = 21 +; LINKEDID_END = 22 +; BRIDGE_UPDATE = 23 +; PICKUP = 24 +; FORWARD = 25 +; eventtime (timeval, includes microseconds) +; userdeftype (set only if eventtype == USER_DEFINED) +; cid_name +; cid_num +; cid_ani +; cid_rdnis +; cid_dnid +; exten +; context +; channame +; appname +; appdata +; accountcode +; peeraccount +; uniqueid +; linkedid +; amaflags (an int) +; userfield +; peer +; extra + +; The point of this module is to allow you log whatever you like in terms of the +; CEL variables. Do you want to log uniqueid? Then simply ensure that your +; table has that column. If you don't want the column, ensure that it does not +; exist in the table structure. If you'd like to call uniqueid something else +; in your table, simply provide an alias in this file that maps the standard CEL +; field name (uniqueid) to whatever column name you like. + +;[first] +;connection=mysql1 +;table=cel + +;[second] +;connection=mysql1 +;table=extracel + +;[third] +;connection=sqlserver +;table=AsteriskCEL +;usegmtime=yes ; defaults to no +;allowleapsecond=no ; allow leap second in SQL column for eventtime, default yes. +;alias src => source +;alias channel => source_channel +;alias dst => dest +;alias dstchannel => dest_channel + +; Any filter specified MUST match exactly or the event will be discarded +;filter accountcode => somename +;filter src => 123 + +; Additionally, we now support setting static values per column. Reason +; for this is to allow different sections to specify different values for +; a certain named column, presumably separated by filters. +;static "Some Special Value" => identifier_code diff --git a/version_1.8.2/pabx/etc/asterisk/cel_pgsql.conf b/version_1.8.2/pabx/etc/asterisk/cel_pgsql.conf new file mode 100644 index 0000000..42de1a1 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cel_pgsql.conf @@ -0,0 +1,93 @@ +; +; Asterisk Channel Event Logging (CEL) - PostgreSQL Backend +; + +; Sample Asterisk config file for CEL logging to PostgreSQL +; +; CEL field names: +; +; eventtype +; CHANNEL_START = 1 +; CHANNEL_END = 2 +; HANGUP = 3 +; ANSWER = 4 +; APP_START = 5 +; APP_END = 6 +; BRIDGE_START = 7 +; BRIDGE_END = 8 +; CONF_START = 9 +; CONF_END = 10 +; PARK_START = 11 +; PARK_END = 12 +; BLINDTRANSFER = 13 +; ATTENDEDTRANSFER = 14 +; TRANSFER = 15 +; HOOKFLASH = 16 +; 3WAY_START = 17 +; 3WAY_END = 18 +; CONF_ENTER = 19 +; CONF_EXIT = 20 +; USER_DEFINED = 21 +; LINKEDID_END = 22 +; BRIDGE_UPDATE = 23 +; PICKUP = 24 +; FORWARD = 25 +; eventtime (timeval, includes microseconds) +; userdeftype (set only if eventtype == USER_DEFINED) +; cid_name +; cid_num +; cid_ani +; cid_rdnis +; cid_dnid +; exten +; context +; channame +; appname +; appdata +; accountcode +; peeraccount +; uniqueid +; linkedid +; amaflags (an int) +; userfield +; peer +; extra + +;CREATE TABLE pbx_cel ( +; id bigserial , +; eventtype varchar (32) NOT NULL , +; eventtime timestamp NOT NULL , +; userdeftype varchar(256) NOT NULL , +; cid_name varchar (128) NOT NULL , +; cid_num varchar (128) NOT NULL , +; cid_ani varchar (128) NOT NULL , +; cid_rdnis varchar (128) NOT NULL , +; cid_dnid varchar (128) NOT NULL , +; exten varchar (128) NOT NULL , +; context varchar (128) NOT NULL , +; channame varchar (128) NOT NULL , +; appname varchar (128) NOT NULL , +; appdata varchar (128) NOT NULL , +; amaflags int NOT NULL , +; accountcode varchar (32) NOT NULL , +; peeraccount varchar (32) NOT NULL , +; uniqueid varchar (160) NOT NULL , +; linkedid varchar (160) NOT NULL , +; userfield varchar (256) NOT NULL , +; peer varchar (128) NOT NULL +;); + + +[global] +; Use 'show_user_defined' to put "USER_DEFINED" in the eventtype field, +; instead of (by default) just putting the user defined event name there. +; +;show_user_defined=yes + +hostname=127.0.0.1 +port=5432 +dbname=pbx +password=ctepgSQL +user=contacte +table=pbx_cel ;SQL table where CEL's will be inserted +;appname=asterisk ; Postgres application_name support (optional). Whitespace not allowed. \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/cel_sqlite3_custom.conf b/version_1.8.2/pabx/etc/asterisk/cel_sqlite3_custom.conf new file mode 100644 index 0000000..2d9a24f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cel_sqlite3_custom.conf @@ -0,0 +1,24 @@ +; +; Asterisk Channel Event Logging (CEL) - SQLite 3 Backend +; + +; +; Mappings for sqlite3 config file +; +; Within a mapping, use the CALLERID() and CHANNEL() functions to retrieve +; details from the CEL event. There are also a few variables created by this +; module that can be used in a mapping: +; +; eventtype - The name of the CEL event. +; eventtime - The timestamp of the CEL event. +; eventenum - Like eventtype but is "USER_DEFINED" for a user defined event. +; userdeftype - User defined event type name from CELGenUserEvent(). +; eventextra - Extra data included with this CEL event, typically along with +; an event of type USER_DEFINED from CELGenUserEvent(). +; BRIDGEPEER - Bridged peer channel name at the time of the CEL event. +; CHANNEL(peer) could also be used. +; +;[master] ; currently, only file "master.db" is supported, with only one table at a time. +;table => cel +;columns => eventtype, eventtime, cidname, cidnum, cidani, cidrdnis, ciddnid, context, exten, channame, appname, appdata, amaflags, accountcode, uniqueid, userfield, peer, userdeftype, eventextra +;values => '${eventtype}','${eventtime}','${CALLERID(name)}','${CALLERID(num)}','${CALLERID(ANI)}','${CALLERID(RDNIS)}','${CALLERID(DNID)}','${CHANNEL(context)}','${CHANNEL(exten)}','${CHANNEL(channame)}','${CHANNEL(appname)}','${CHANNEL(appdata)}','${CHANNEL(amaflags)}','${CHANNEL(accountcode)}','${CHANNEL(uniqueid)}','${CHANNEL(userfield)}','${BRIDGEPEER}','${userdeftype}','${eventextra}' diff --git a/version_1.8.2/pabx/etc/asterisk/cel_tds.conf b/version_1.8.2/pabx/etc/asterisk/cel_tds.conf new file mode 100644 index 0000000..399093b --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cel_tds.conf @@ -0,0 +1,69 @@ +; +; Asterisk Channel Event Logging (CEL) - FreeTDS Backend +; + +;[global] + +; Connection +; +; Use the 'connection' keyword to specify one of the instance names from your +; 'freetds.conf' file. Note that 'freetds.conf' is not an Asterisk +; configuration file, but one specific to the FreeTDS library. See the FreeTDS +; documentation on 'freetds.conf' for more information: +; +; http://www.freetds.org/userguide/freetdsconf.htm +; +; Accepted values: One of the connections specified in freetds.conf + +;connection=ConnectionFromFreeTDSConf + +; Database Name +; +; The 'dbname' keyword specifies the database name to use when logging CEL +; records. +; +; Accepted values: Any valid database name + +;dbname=MalicoHN + +; Database Table Name +; +; The 'table' keyword identifies which database table is used to log CEL +; records. +; +; Accepted value: Any valid table name +; Default value: If not specified, a table named 'cel' is assumed + +;table=cel + +; Credentials +; +; The 'username' and 'password' keywords specify the user credentials that +; Asterisk should use when connecting to the database. +; +; Accepted value: Any valid username and password + +;username=mangUsr +;password= + +; Language +; +; The 'language' keyword changes the language which are used for error and +; information messages returned by SQL Server. Each database and user has their +; own default value, and this default can be overriden here. +; +; Accepted value: Any language installed on the target SQL Server. +; Default value: Server default + +;language=us_english + +; Character Set +; +; The 'charset' setting is used to change the character set used when connecting +; to the database server. Each database and database user has their own +; character set setting, and this default can be overriden here. +; +; Accepted value: Any valid character set available on the target server. +; Default value: Server setting + +;charset=BIG5 diff --git a/version_1.8.2/pabx/etc/asterisk/chan_dahdi.conf b/version_1.8.2/pabx/etc/asterisk/chan_dahdi.conf new file mode 100644 index 0000000..3362fd6 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/chan_dahdi.conf @@ -0,0 +1,7 @@ +[trunkgroups] + +[channels] +#include chan_dahdi_troncos.conf +#include chan_dahdi_troncos_general.conf +#include chan_dahdi_ramais_general.conf +#include chan_dahdi_ramais.conf diff --git a/version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais.conf b/version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais_general.conf b/version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais_general.conf new file mode 100644 index 0000000..d89d75f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/chan_dahdi_ramais_general.conf @@ -0,0 +1,21 @@ +;Config. Portas FXS +language=pt_br +usecallerid=yes +callwaiting=no +usecallingpres=yes +callwaitingcallerid=yes +threewaycalling=yes +transfer=yes +canpark=yes +cancallforward=yes +callreturn=yes +;rxgain=3 +;txgain=-7 +rxgain=0 +txgain=-6 +echocancel=128 +echocancelwhenbridged=yes +echotraining=yes +relaxdtmf=yes +rxflash=600 +group=10 diff --git a/version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos.conf b/version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos_general.conf b/version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos_general.conf new file mode 100644 index 0000000..7fb2dda --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/chan_dahdi_troncos_general.conf @@ -0,0 +1,15 @@ +language=pt_br +usecallerid=yes +callwaiting=no +usecallingpres=yes +callwaitingcallerid=yes +;rxgain=1 +;txgain=-7 +;rxgain=4 +;txgain=4 +;echocancel=128 +;echocancelwhenbridged=yes +;echotraining=yes +;busydetect=yes +;busycount=4 +relaxdtmf=yes \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/chan_mobile.conf b/version_1.8.2/pabx/etc/asterisk/chan_mobile.conf new file mode 100644 index 0000000..3814337 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/chan_mobile.conf @@ -0,0 +1,69 @@ +; +; chan_mobile.conf +; configuration file for chan_mobile +; + +[general] +interval=30 ; Number of seconds between trying to connect to devices. + +; The following is a list of adapters we use. +; id must be unique and address is the bdaddr of the adapter from hciconfig. +; Each adapter may only have one device (headset or phone) connected at a time. +; Add an [adapter] entry for each adapter you have. + +[adapter] +id=blue +address=00:09:DD:60:01:A3 +;forcemaster=yes ; attempt to force adapter into master mode. default is no. +;alignmentdetection=yes ; enable this if you sometimes get 'white noise' on asterisk side of the call + ; its a bug in the bluetooth adapter firmware, enabling this will compensate for it. + ; default is no. + +[adapter] +id=dlink +address=00:80:C8:35:52:78 + +; The following is a list of the devices we deal with. +; Every device listed below will be available for calls in and out of Asterisk. +; Each device needs an adapter=xxxx entry which determines which bluetooth adapter is used. +; Use the CLI command 'mobile search' to discover devices. +; Use the CLI command 'mobile show devices' to see device status. +; +; To place a call out through a mobile phone use Dial(Mobile/[device]/NNN.....) or Dial(Mobile/gn/NNN......) in your dialplan. +; To call a headset use Dial(Mobile/[device]). + +[LGTU550] +address=00:E0:91:7F:46:44 ; the address of the phone +port=4 ; the rfcomm port number (from mobile search) +context=incoming-mobile ; dialplan context for incoming calls +adapter=dlink ; adapter to use +group=1 ; this phone is in channel group 1 +;sms=no ; support SMS, defaults to yes +;nocallsetup=yes ; set this only if your phone reports that it supports call progress notification, but does not do it. Motorola L6 for example. + +[blackberry] +address=00:60:57:32:7E:B2 +port=2 +context=incoming-mobile +adapter=dlink +group=1 +;blackberry=yes ; set this if you are using a blackberry device + +[6310i] +address=00:60:57:32:7E:B1 +port=13 +context=incoming-mobile +adapter=dlink +group=1 ; this phone is in channel group 1 also. + +[headset] +address=00:0B:9E:11:AE:C6 +port=1 +type=headset ; This is a headset, not a Phone ! +adapter=blue + +[headset1] +address=00:0B:9E:11:74:A5 +port=1 +type=headset +adapter=dlink diff --git a/version_1.8.2/pabx/etc/asterisk/cli.conf b/version_1.8.2/pabx/etc/asterisk/cli.conf new file mode 100644 index 0000000..0ddd92c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cli.conf @@ -0,0 +1,12 @@ +; +; Asterisk CLI configuration +; + +[startup_commands] +; +; Any commands listed in this section will get automatically executed +; when Asterisk starts as a daemon or foreground process (-c). +; +;sip set debug on = yes +;core set verbose 3 = yes +;core set debug 1 = yes diff --git a/version_1.8.2/pabx/etc/asterisk/cli_aliases.conf b/version_1.8.2/pabx/etc/asterisk/cli_aliases.conf new file mode 100644 index 0000000..adaed90 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cli_aliases.conf @@ -0,0 +1,203 @@ +; +; CLI Aliases configuration +; +; This module also registers a "cli show aliases" CLI command to list +; configured CLI aliases. + +[general] +; Here you define what alias templates you want to use. You can also define +; multiple templates to use as well. If you do, and there is a conflict, then +; the first alias defined will win. +; +template = friendly ; By default, include friendly aliases +;template = asterisk_1dot2 ; Asterisk 1.2 style syntax +;template = asterisk_1dot4 ; Asterisk 1.4 style syntax +;template = individual_custom ; see [individual_custom] example below which + ; includes a list of aliases from an external + ; file + + +; Because the Asterisk CLI syntax follows a "module verb argument" syntax, +; sometimes we run into an issue between being consistant with this format +; in the core system, and maintaining system friendliness. In order to get +; around this we're providing some useful aliases by default. +; +[friendly] +hangup request=channel request hangup +originate=channel originate +help=core show help +pri intense debug span=pri set debug intense span +reload=module reload +pjsip reload=module reload res_pjsip.so res_pjsip_authenticator_digest.so res_pjsip_endpoint_identifier_ip.so res_pjsip_mwi.so res_pjsip_notify.so res_pjsip_outbound_publish.so res_pjsip_publish_asterisk.so res_pjsip_outbound_registration.so + +; CLI Alias Templates +; ------------------- +; +; You can define several alias templates. +; It works with context templates like all other configuration files +; +;[asterisk](!) +; To create an alias you simply set the variable name as the alias and variable +; value as the real CLI command you want executed +; +;die die die=stop now + +;[asterisk_1dot6](asterisk) +; Alias for making voicemail reload actually do module reload app_voicemail.so +;voicemail reload=module reload app_voicemail.so +; This will make the CLI command "mr" behave as though it is "module reload". +;mr=module reload +; +; +; In addition, you could also include a flat file of aliases which is loaded by +; the [individual_custom] template in the [general] section. +; +;[individual_custom] +;#include "/etc/asterisk/aliases" + +; Implemented CLI Alias Templates +; ------------------------------- +; +; Below here we have provided you with some templates, easily allowing you to +; utilize previous Asterisk CLI commands with any version of Asterisk. In this +; way you will be able to use Asterisk 1.2 and 1.4 style CLI syntax with any +; version Asterisk going forward into the future. +; +; We have also separated out the vanilla syntax into a context template which +; allows you to keep your custom changes separate of the standard templates +; we have provided you. In this way you can clearly see your custom changes, +; and also allowing you to combine various templates as you see fit. +; +; The naming scheme we have used is recommended, but certainly is not enforced +; by Asterisk. If you wish to use the provided templates, simply define the +; context name which does not utilize the '_tpl' at the end. For example, +; if you would like to use the Asterisk 1.2 style syntax, define in the +; [general] section + +[asterisk_1dot2_tpl](!) +show channeltypes=core show channeltypes +show channeltype=core show channeltype +show manager command=manager show command +show manager commands=manager show commands +show manager connected=manager show connected +show manager eventq=manager show eventq +rtp no debug=rtp set debug off +rtp rtcp debug ip=rtcp debug ip +rtp rtcp debug=rtcp debug +rtp rtcp no debug=rtcp debug off +rtp rtcp stats=rtcp stats +rtp rtcp no stats=rtcp stats off +stun no debug=stun debug off +udptl no debug=udptl debug off +show image formats=core show image formats +show file formats=core show file formats +show applications=core show applications +show functions=core show functions +show switches=core show switches +show hints=core show hints +show globals=core show globals +show function=core show function +show application=core show application +set global=core set global +show dialplan=dialplan show +show codecs=core show codecs +show audio codecs=core show audio codecs +show video codecs=core show video codecs +show image codecs=core show image codecs +show codec=core show codec +moh classes show=moh show classes +moh files show=moh show files +agi no debug=agi debug off +show agi=agi show +dump agihtml=agi dumphtml +show features=feature show +show indications=indication show +answer=console answer +hangup=console hangup +flash=console flash +dial=console dial +mute=console mute +unmute=console unmute +transfer=console transfer +send text=console send text +autoanswer=console autoanswer +oss boost=console boost +console=console active +save dialplan=dialplan save +add extension=dialplan add extension +remove extension=dialplan remove extension +add ignorepat=dialplan add ignorepat +remove ignorepat=dialplan remove ignorepat +include context=dialplan add include +dont include=dialplan remove include +extensions reload=dialplan reload +show translation=core show translation +convert=file convert +show queue=queue show +add queue member=queue add member +remove queue member=queue remove member +ael no debug=ael nodebug +sip debug=sip set debug +sip no debug=sip set debug off +show voicemail users=voicemail show users +show voicemail zones=voicemail show zones +iax2 trunk debug=iax2 set debug trunk +iax2 jb debug=iax2 set debug jb +iax2 no debug=iax2 set debug off +iax2 no trunk debug=iax2 set debug trunk off +iax2 no jb debug=iax2 set debug jb off +show agents=agent show +show agents online=agent show online +show memory allocations=memory show allocations +show memory summary=memory show summary +show version=core show version +show version files=core show file version +show profile=core show profile +clear profile=core clear profile +soft hangup=channel request hangup + +[asterisk_1dot2](asterisk_1dot2_tpl) +; add any additional custom commands you want below here, for example: +;die quickly=stop now + +[asterisk_1dot4_tpl](!) +cdr status=cdr show status +rtp debug=rtp set debug on +rtcp debug=rtcp set debug on +rtcp stats=rtcp set stats on +stun debug=stun set debug on +udptl debug=udptl set debug on +core show globals=dialplan show globals +core set global=dialplan set global +core set chanvar=dialplan set chanvar +agi dumphtml=agi dump html +ael debug=ael set debug +funcdevstate list=devstate list +sip history=sip set history on +skinny debug=skinny set debug on +mgcp set debug=mgcp set debug on +abort shutdown=core abort shutdown +stop now=core stop now +stop gracefully=core stop gracefully +stop when convenient=core stop when convenient +restart now=core restart now +restart gracefully=core restart gracefully +restart when convenient=core restart when convenient +soft hangup=channel request hangup + +[asterisk_1dot4](asterisk_1dot4_tpl) +; add any additional custom commands you want below here. + +[asterisk_11_tpl](!) +jabber list nodes=xmpp list nodes +jabber purge nodes=xmpp purge nodes +jabber delete node=xmpp delete node +jabber create collection=xmpp create collection +jabber create leaf=xmpp create leaf +jabber set debug=xmpp set debug +jabber show connections=xmpp show connections +jabber show buddies=xmpp show buddies +features reload=module reload features + +[asterisk_11](asterisk_11_tpl) +; add any additional custom commands you want below here. diff --git a/version_1.8.2/pabx/etc/asterisk/cli_permissions.conf b/version_1.8.2/pabx/etc/asterisk/cli_permissions.conf new file mode 100644 index 0000000..4a6973f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/cli_permissions.conf @@ -0,0 +1,82 @@ +; +; CLI permissions configuration example for Asterisk +; +; All the users that you want to connect with asterisk using +; rasterisk, should have write/read access to the +; asterisk socket (asterisk.ctl). You could change the permissions +; of this file in 'asterisk.conf' config parameter: 'astctlpermissions' (0666) +; found on the [files] section. +; +; general options: +; +; default_perm = permit | deny +; This is the default permissions to apply for a user that +; does not has a permissions definided. +; +; user options: +; permit = | all ; allow the user to run 'command' | +; ; allow the user to run 'all' the commands +; deny = | all ; disallow the user to run 'command' | +; ; disallow the user to run 'all' commands. +; + +[general] + +default_perm=permit ; To leave asterisk working as normal + ; we should set this parameter to 'permit' +; +; Follows the per-users permissions configs. +; +; This list is read in the sequence that is being written, so +; In this example the user 'eliel' is allow to run only the following +; commands: +; sip show peer +; core set debug +; core set verbose +; If the user is not specified, the default_perm option will be apply to +; every command. +; +; Notice that you can also use regular expressions to allow or deny access to a +; certain command like: 'core show application D*'. In this example the user will be +; allowed to view the documentation for all the applications starting with 'D'. +; Another regular expression could be: 'channel originate SIP/[0-9]* extension *' +; allowing the user to use 'channel originate' on a sip channel and with the 'extension' +; parameter and avoiding the use of the 'application' parameter. +; +; We can also use the templates syntax: +; [supportTemplate](!) +; deny=all +; permit=sip show ; all commands starting with 'sip show' will be allowed +; permit=core show +; +; You can specify permissions for a local group instead of a user, +; just put a '@' and we will know that is a group. +; IMPORTANT NOTE: Users permissions overwrite group permissions. +; +;[@adm] +;deny=all +;permit=sip +;permit=core +; +; +;[eliel] +;deny=all +;permit=sip show peer +;deny=sip show peers +;permit=core set +; +; +;User 'tommy' inherits from template 'supportTemplate': +; deny=all +; permit=sip show +; permit=core show +;[tommy](supportTemplate) +;permit=core set debug +;permit=dialplan show +; +; +;[mark] +;deny=all +;permit=all +; +; diff --git a/version_1.8.2/pabx/etc/asterisk/codecs.conf b/version_1.8.2/pabx/etc/asterisk/codecs.conf new file mode 100644 index 0000000..e1dbd79 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/codecs.conf @@ -0,0 +1,206 @@ +[speex] +; CBR encoding quality [0..10] +; used only when vbr = false +quality => 3 + +; codec complexity [0..10] +; tradeoff between cpu/quality +complexity => 2 + +; perceptual enhancement [true / false] +; improves clarity of decoded speech +enhancement => true + +; voice activity detection [true / false] +; reduces bitrate when no voice detected, used only for CBR +; (implicit in VBR/ABR) +vad => true + +; variable bit rate [true / false] +; uses bit rate proportionate to voice complexity +vbr => true + +; available bit rate [bps, 0 = off] +; encoding quality modulated to match this target bit rate +; not recommended with dtx or pp_vad - may cause bandwidth spikes +abr => 0 + +; VBR encoding quality [0-10] +; floating-point values allowed +vbr_quality => 4 + +; discontinuous transmission [true / false] +; stops transmitting completely when silence is detected +; pp_vad is far more effective but more CPU intensive +dtx => false + +; preprocessor configuration +; these options only affect Speex v1.1.8 or newer + +; enable preprocessor [true / false] +; allows dsp functionality below but incurs CPU overhead +preprocess => false + +; preproc voice activity detection [true / false] +; more advanced equivalent of DTX, based on voice frequencies +pp_vad => false + +; preproc automatic gain control [true / false] +pp_agc => false +pp_agc_level => 8000 + +; preproc denoiser [true / false] +pp_denoise => false + +; preproc dereverb [true / false] +pp_dereverb => false +pp_dereverb_decay => 0.4 +pp_dereverb_level => 0.3 + + +[plc] +; for all codecs which do not support native PLC +; this determines whether to perform generic PLC +; there is a minor performance penalty for this +genericplc => true + +; Generate custom formats for formats requiring attributes. +; After defining the custom format, the name used in defining +; the format can be used throughout Asterisk in the format 'allow' +; and 'disallow' options. +; +; Example: silk8 is a predefined custom format in this config file. +; Once this config file is loaded, silk8 can be used anywhere a +; peer's codec capabilities are defined. +; +; In sip.conf 'silk8' can be defined as a capability for a peer. +; [peer1] +; type=peer +; host=dynamic +; disallow=all +; allow=silk8 ;custom codec defined in codecs.conf +; +; LIMITATIONS +; Custom formats can only be defined at startup. Any changes to this +; file made after startup will not take into effect until after Asterisk +; is restarted. +; + +; Default Custom SILK format definitions, only one custom SILK format per +; sample rate is allowed. +[silk8] +type=silk +samprate=8000 +fec=true ; turn on or off encoding with forward error correction. + ; On recommended, off by default. +packetloss_percentage=10 ; Estimated packet loss percentage in uplink direction. This + ; affects how much redundancy is built in when using fec. + ; The higher the percentage, the larger amount of bandwidth is + ; used. Default is 0%, 10% is recommended when fec is in use. + +maxbitrate=10000 ; Use the table below to make sure a useful bitrate is choosen + ; for maxbitrate. If not set or value is not within the bounds + ; of the encoder, a default value is chosen. + ; + ; sample rate | bitrate range + ; 8khz | 5000 - 20000 bps + ; 12khz | 7000 - 25000 bps + ; 16khz | 8000 - 30000 bps + ; 24khz | 20000- 40000 bps + ; +;dtx=true ; Encode using discontinuous transmission mode or not. Turning this + ; on will save bandwidth during periods of silence at the cost of + ; increased computational complexity. Off by default. + +[silk12] +type=silk +samprate=12000 +maxbitrate=12000 +fec=true +packetloss_percentage=10; + +[silk16] +type=silk +samprate=16000 +maxbitrate=20000 +fec=true +packetloss_percentage=10; + +[silk24] +type=silk +samprate=24000 +maxbitrate=30000 +fec=true +packetloss_percentage=10; + + +; Default custom CELT codec definitions. Only one custom CELT definition is allowed +; per a sample rate. +;[celt44] +;type=celt +;samprate=44100 ; The samplerate in hz. This option is required. +;framesize=480 ; The framesize option represents the duration of each frame in samples. + ; This must be a factor of 2. This option is only advertised in an SDP + ; when it is set. Otherwise a default of framesize of 480 is assumed + ; internally + +;[celt48] +;type=celt +;samprate=48000 + +;[celt32] +;type=celt +;samprate=32000 + +;============================ OPUS Section Options ============================ +; +;[opus] +;type= ; Must be of type "opus" (default: "") +;packet_loss= ; Encoder's packet loss percentage. Can be any number between 0 + ; and 100, inclusive. A higher value results in more loss + ; resistance. (default: 0) +;complexity= ; Encoder's computational complexity. Can be any number between 0 + ; and 10, inclusive. Note, 10 equals the highest complexity. + ; (default: 10) +;max_bandwidth= ; Encoder's maximum bandwidth allowed. Sets an upper bandwidth + ; bound on the encoder. Can be any of the following: narrow, + ; medium, wide, super_wide, full. (default: full) +;signal= ; Encoder's signal type. Aids in mode selection on the encoder: Can + ; be any of the following: auto, voice, music. (default: auto) +;application= ; Encoder's application type. Can be any of the following: voip, + ; audio, low_delay. (default: voip) +;max_playback_rate= ; Override the maximum playback rate in the offer's SDP. + ; Any value between 8000 and 48000 (inclusive) is valid, + ; however typically it should match one of the usual opus + ; bandwidths. A value of "sdp" is also allowed. When set + ; to "sdp" then the value from the offer's SDP is used. + ; (default: "sdp") +;bitrate= ; Override the maximum average bitrate in the offer's SDP. Any value + ; between 500 and 512000 is valid. The following values are also + ; allowed: auto, max, sdp. When set to "sdp" then the value from + ; the offer's sdp is used. (default: "sdp") +;cbr= ; Override the constant bit rate parameter in the offer's SDP. A value of + ; 0/false/no represents a variable bit rate whereas 1/true/yes represents + ; a constant bit rate. A value of "sdp" is also allowed. When set to "sdp" + ; then the value from the offer's sdp is used. (default: "sdp") +;fec= ; Override the use inband fec parameter in the offer's SDP. A value of + ; 0/false/no represents disabled whereas 1/true/yes represents enabled. + ; A value of "sdp" is also allowed. When set to "sdp" then the value from + ; the offer's sdp is used. (default: "sdp") +;dtx= ; Override the use dtx parameter in the offer's SDP. A value of 0/false/no + ; represents disabled whereas 1/true/yes represents enabled. A value of + ; "sdp" is also allowed. When set to "sdp" then the value from the offer's + ; sdp is used. (default: "sdp") + +;=============================== OPUS Examples ================================ +; +;[opus] +;type=opus +;max_playback_rate=8000 ; Limit the maximum playback rate on the encoder +;fec=no ; Force no inband fec on the encoder (i.e don't use what's on the SDP) + +;[myopus] +;type=opus +;max_bandwidth=wide ; Maximum encoded bandwidth set to wide band (0-8000 Hz +; ; audio bandwidth at 16Khz sample rate) +;cbr=yes ; Force a constant bit rate (i.e don't use what's on the SDP) diff --git a/version_1.8.2/pabx/etc/asterisk/confbridge.conf b/version_1.8.2/pabx/etc/asterisk/confbridge.conf new file mode 100644 index 0000000..f1fccf6 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/confbridge.conf @@ -0,0 +1,12 @@ +[general] +[default_user_simplesip] +type=user +dtmf_passthrough=no +dsp_silence_threshold=2500 +dsp_drop_silence=yes + +[simplesip_menu] +type=menu +1=dialplan_exec(adiciona-conferencia,1,1) +2=admin_kick_last +9=admin_toggle_mute_participants \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/config_test.conf b/version_1.8.2/pabx/etc/asterisk/config_test.conf new file mode 100644 index 0000000..b7cb212 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/config_test.conf @@ -0,0 +1,46 @@ +; Config to test config parsing +; global and item have values that differ from defaults +; global_defaults and item_defualts are to show all defaults are set +; there should be an option for every default type, and a custom type + +[global] +intopt=-1 +uintopt=1 +timelenopt1=1ms +timelenopt2=1s +timelenopt3=1m +timelenopt4=1h +doubleopt=0.1 +sockaddropt=1.2.3.4:1234 +boolopt=true +boolflag1=true +boolflag2=false +boolflag3=true +deny=0.0.0.0/0 +permit=1.2.3.4/32 +codecopt=!all,ulaw,g729 +stropt=test +customopt=yes + +[global_defaults] + +[item] +intopt=-1 +uintopt=1 +timelenopt1=1 +timelenopt2=1 +timelenopt3=1 +timelenopt4=1 +doubleopt=0.1 +sockaddropt=1.2.3.4:1234 +boolopt=true +boolflag1=true +boolflag2=false +boolflag3=true +acldenyopt=0.0.0.0/0 +aclpermitopt=1.2.3.4/32 +codecopt=!all,ulaw,g729 +stropt=test +customopt=yes + +[item_defaults] diff --git a/version_1.8.2/pabx/etc/asterisk/console.conf b/version_1.8.2/pabx/etc/asterisk/console.conf new file mode 100644 index 0000000..aad306e --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/console.conf @@ -0,0 +1,97 @@ +; +; Configuration for chan_console, a cross-platform console channel driver. +; + +[general] + +; Set this option to "yes" to enable automatically answering calls on the +; console. This is very useful if the console is used as an intercom. +; The default value is "no". +; +;autoanswer = no + +; Set the default context to use for outgoing calls. This can be overridden by +; dialing some extension@context, unless the overridecontext option is enabled. +; The default is "default". +; +;context = default + +; Set the default extension to use for outgoing calls. The default is "s". +; +;extension = s + +; Set the default CallerID for created channels. +; +;callerid = MyName Here <(256) 428-6000> + +; Set the default language for created channels. +; +;language = en + +; If you set overridecontext to 'yes', then the whole dial string +; will be interpreted as an extension, which is extremely useful +; to dial SIP, IAX and other extensions which use the '@' character. +; The default is "no". +; +;overridecontext = no ; if 'no', the last @ will start the context + ; if 'yes' the whole string is an extension. + + +; Default Music on Hold class to use when this channel is placed on hold in +; the case that the music class is not set on the channel with +; Set(CHANNEL(musicclass)=whatever) in the dialplan and the peer channel +; putting this one on hold did not suggest a class to use. +; +;mohinterpret=default + +; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- +; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of an + ; Console channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The Console channel can't accept jitter, + ; thus an enabled jitterbuffer on the receive Console side will always + ; be used if the sending side can create jitter. + +; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + +; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + +; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a Console + ; channel. Two implementations are currently available - "fixed" + ; (with size always equals to jbmax-size) and "adaptive" (with + ; variable size, actually the new jb of IAX2). Defaults to fixed. + +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + +; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". +; ---------------------------------------------------------------------------------- + + +; +; Any configuration context defined beyond the [general] section configures +; specific devices for use. +; + +[default] +input_device = default ; When configuring an input device and output device, +output_device = default ; use the name that you see when you run the "console + ; list available" CLI command. If you say "default", the + ; system default input and output devices will be used. +autoanswer = no +context = default +extension = s +callerid = MyName Here <(256) 428-6000> +language = en +overridecontext = no +mohinterpret = default +active = yes ; This option should only be set for one console. + ; It means that it is the active console to be + ; used from the Asterisk CLI. diff --git a/version_1.8.2/pabx/etc/asterisk/dahdi_guiread.conf b/version_1.8.2/pabx/etc/asterisk/dahdi_guiread.conf new file mode 100644 index 0000000..0d3831a --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/dahdi_guiread.conf @@ -0,0 +1,5 @@ + +[general] + +#include "../zaptel.conf" + diff --git a/version_1.8.2/pabx/etc/asterisk/dahdi_scan.conf b/version_1.8.2/pabx/etc/asterisk/dahdi_scan.conf new file mode 100644 index 0000000..309d3aa --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/dahdi_scan.conf @@ -0,0 +1,11 @@ +[1] +active=yes +alarms=UNCONFIGURED +description=ZTDUMMY/1 (source: HRtimer) 1 +name=ZTDUMMY/1 +manufacturer= +devicetype=Zaptel Dummy Timing Driver +location= +basechan=1 +totchans=0 +irq=0 diff --git a/version_1.8.2/pabx/etc/asterisk/dbsep.conf b/version_1.8.2/pabx/etc/asterisk/dbsep.conf new file mode 100644 index 0000000..7a68850 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/dbsep.conf @@ -0,0 +1,34 @@ +# +# Configuration file for dbsep.cgi +# +# The purpose of this file is to provide realtime access to a database, +# possibly through ODBC, without needing to load the ODBC drivers into +# Asterisk, since there are several backend drivers which are rather +# buggy. +# +# We accomplish this separation by using the res_config_curl realtime +# driver to connect to a server running dbsep.cgi (or another, which +# implements the same protocol). +# +# This file contains the information necessary to configure dbsep.cgi. +# +# +# Once installed to a web server, you'll need to preload func_curl.so +# and res_config_curl.so in modules.conf and configure extconfig.conf: +# +# voicemail => curl,http://server/path/to/dbsep.cgi/voicemail +# sippeers => curl,http://server/path/to/dbsep.cgi/sippeers +# + +# The Data Source Name, as specified by the Perl DBI module. +# Typically, this will be along the lines of 'DBI:mysql:astdbname[:dbhostname]' or 'DBI:Pg:dbname=astdbname;hostname=dbhostname' +dsn=somedsn + +# Connected database user +dbuser=someuser + +# And its password +dbpass=password + +# For most databases, this is fine. Set to 'no' for Sybase or MS SQL Server. +backslash_is_escape=yes diff --git a/version_1.8.2/pabx/etc/asterisk/digivoice.conf b/version_1.8.2/pabx/etc/asterisk/digivoice.conf new file mode 100644 index 0000000..89a29df --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/digivoice.conf @@ -0,0 +1,27 @@ +[general] +allow_slinear=0 +allow_ulaw=1 +allow_alaw=1 +allow_gsm=0 +consolelanguage=br + +[allportsconfig] +default_callprogress=cp_default.cfg +detectiontype=1 +dialtype=1 +afterdialpause=1000 +ringbacktone1=tone1 +ringbacktone2=tone1 +ringbacktimes=1000,4000,1000,4000 +busytone1=tone1 +busytone2=tone1 +busytimes=250,250,250,250 +subchannelringtone1=tone1 +subchannelringtone2=tone1 +subchannelringtimes=100,100,100,5000 + +[groups] + +[port_config] + +[e1_config] \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/dnsmgr.conf b/version_1.8.2/pabx/etc/asterisk/dnsmgr.conf new file mode 100644 index 0000000..f028acc --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/dnsmgr.conf @@ -0,0 +1,5 @@ +[general] +enable=no ; enable creation of managed DNS lookups + ; default is 'no' +;refreshinterval=1200 ; refresh managed DNS lookups every seconds + ; default is 300 (5 minutes) \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/dsp.conf b/version_1.8.2/pabx/etc/asterisk/dsp.conf new file mode 100644 index 0000000..f13ca2f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/dsp.conf @@ -0,0 +1,42 @@ +[default] +; +; Length of sound (in milliseconds) before a period of silence is considered +; to be a change from talking to silence or a period of noise converts silence +; to talking. [default=256] +; +;silencethreshold=256 + +; DTMF Reverse Twist and Normal Twist is the difference in power between the row and column energies. +; +; Normal Twist is where the row energy is greater than the column energy. +; Reverse Twist is where the column energy is greater. +; +; Power level difference between frequencies for different Administrations/RPOAs +; Power Gain equiv +; normal reverse dB's +; AT&T(default) 6.31 2.51 8dB(normal), 4dB(reverse) +; NTT 3.16 3.16 Max. 5dB +; Danish 3.98 3.98 Max. 6dB +; Australian 10.0 10.0 Max. 10dB +; Brazilian 7.94 7.94 Max. 9dB +; ETSI 3.98 3.98 Max. 6dB + +;previous version compatible AT&T values +; RADIO_RELAX disabled, and relaxdtmf=no +; 6.30 2.50 7.99dB(normal), 3.98dB(reverse) +; RADIO_RELAX disabled, and relaxdtmf=yes +; 6.30 4.00 7.99dB(normal), 6.02dB(reverse) +; RADIO_RELAX enabled, and relaxdtmf=no +; 6.30 2.50 7.99dB(normal), 3.984dB(reverse) +; RADIO_RELAX enabled, and relaxdtmf=yes +; 6.30 6.50 7.99dB(normal), 8.13dB(reverse) + +;If you don't know what these mean, don't change them. +;dtmf_normal_twist=6.31 +;dtmf_reverse_twist=2.51 +;relax_dtmf_normal_twist=6.31 +;relax_dtmf_reverse_twist=3.98 + +;successive number hits/misses of 12.75ms before a digit/nodigit is considered valid +;dtmf_hits_to_begin=2 +;dtmf_misses_to_end=3 diff --git a/version_1.8.2/pabx/etc/asterisk/dundi.conf b/version_1.8.2/pabx/etc/asterisk/dundi.conf new file mode 100644 index 0000000..70f97d4 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/dundi.conf @@ -0,0 +1,268 @@ +; +; DUNDi configuration file +; +; For more information about DUNDi, see http://www.dundi.com +; +; +[general] +; +; The "general" section contains general parameters relating +; to the operation of the dundi client and server. +; +; The first part should be your complete contact information +; should someone else in your peer group need to contact you. +; +;department=Your Department +;organization=Your Company, Inc. +;locality=Your City +;stateprov=ST +;country=US +;email=your@email.com +;phone=+12565551212 +; +; +; Specify bind address and port number. Default is +; 4520 +; +;bindaddr=0.0.0.0 +;port=4520 +; +; See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of the tos parameter. +;tos=ef +; +; Our entity identifier (Should generally be the MAC address of the +; machine it's running on. Defaults to the first eth address, but you +; can override it here, as long as you set it to the MAC of *something* +; you own!) The EID can be overridden by a setting in asterisk.conf, +; or by setting this option. +; +;entityid=00:07:E9:3B:76:60 +; +; Peers shall cache our query responses for the specified time, +; given in seconds. Default is 3600. +; +;cachetime=3600 +; +; This defines the max depth in which to search the DUNDi system. +; Note that the maximum time that we will wait for a response is +; (2000 + 200 * ttl) ms. +; +ttl=32 +; +; If we don't get ACK to our DPDISCOVER within 2000ms, and autokill is set +; to yes, then we cancel the whole thing (that's enough time for one +; retransmission only). This is used to keep things from stalling for a long +; time for a host that is not available, but would be ill advised for bad +; connections. In addition to 'yes' or 'no' you can also specify a number +; of milliseconds. See 'qualify' for individual peers to turn on for just +; a specific peer. +; +autokill=yes +; +; pbx_dundi creates a rotating key called "secret", under the family +; 'secretpath'. The default family is dundi (resulting in +; the key being held at dundi/secret). +; +;secretpath=dundi +; +; The 'storehistory' option (also changeable at runtime with +; 'dundi store history' and 'dundi no store history') will +; cause the DUNDi engine to keep track of the last several +; queries and the amount of time each query took to execute +; for the purpose of tracking slow nodes. This option is +; off by default due to performance impacts. +; +;storehistory=yes + +[mappings] +; +; The "mappings" section maps DUNDi contexts +; to contexts on the local asterisk system. Remember +; that numbers that are made available under the e164 +; DUNDi context are regulated by the DUNDi General Peering +; Agreement (GPA) if you are a member of the DUNDi E.164 +; Peering System. +; +; dundi_context => local_context,weight,tech,dest[,options]] +; +; 'dundi_context' is the name of the context being requested +; within the DUNDi request +; +; 'local_context' is the name of the context on the local system +; in which numbers can be looked up for which responses shall be given. +; +; 'weight' is the weight to use for the responses provided from this +; mapping. The number must be >= 0 and < 60000. Since it is totally +; valid to receive multiple responses to a query, responses received +; with a lower weight are tried first. Note that the weight has a +; special meaning in the e164 context - see the GPA for more details. +; +; 'tech' is the technology to use (IAX, SIP, H323) +; +; 'dest' is the destination to supply for reaching that number. The +; following variables can be used in the destination string and will +; be automatically substituted: +; ${NUMBER}: The number being requested +; ${IPADDR}: The IP address to connect to +; ${SECRET}: The current rotating secret key to be used +; +; Further options may include: +; +; nounsolicited: No unsolicited calls of any type permitted via this +; route +; nocomunsolicit: No commercial unsolicited calls permitted via +; this route +; residential: This number is known to be a residence +; commercial: This number is known to be a business +; mobile: This number is known to be a mobile phone +; nocomunsolicit: No commercial unsolicited calls permitted via +; this route +; nopartial: Do not search for partial matches +; +; There *must* exist an entry in mappings for DUNDi to respond +; to any request, although it may be empty. +; +;e164 => dundi-e164-canonical,0,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nounsolicited,nocomunsolicit,nopartial +;e164 => dundi-e164-customers,100,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nounsolicited,nocomunsolicit,nopartial +;e164 => dundi-e164-via-pstn,400,IAX2,dundi:${SECRET}@${IPADDR}/${NUMBER},nounsolicited,nocomunsolicit,nopartial + +;digexten => default,0,IAX2,guest@lappy/${NUMBER} +;asdf => + +; +; Weights for mappings can be set a few different ways: +; +; 1) It can be set as a static number. +;testmap1 => context1,222,IAX2,guest@peer1/${NUMBER} +; +; 2) It can be an Asterisk global variable. +;testmap2 => context2,${DUNDITESTVAR},IAX2,guest@peer2${NUMBER} +; +; 3) It can be retrieved using a dialplan function. This can be extremely +; useful if you want to let an external script decide what the weight +; in a response shouuld be. +;testmap3 => context3,${SHELL(echo 123)},IAX2,guest@peer3/${NUMBER} +; +; The built in variables ${SECRET}, ${IPADDR} and ${NUMBER} can also be +; passed to the weight. For example, you could pass the ${NUMBER} value +; to your SHELL() script and use that to dynamically return a weight. +; +; Note than when using a global variable or dialplan function to set the +; weight for a mapping, that response caching should be disabled if you +; plan for these values to change frequently at all. If the results are +; cached, then any change in value will not take effect until the cache +; has expired. +; + +; +; The remaining sections represent the peers +; that we fundamentally trust. The section name +; represents the name and optionally at a specific +; DUNDi context if you want the trust to be established +; for only a specific DUNDi context. +; +; inkey - What key they will be authenticating to us with +; +; outkey - What key we use to authenticate to them +; +; host - What their host is +; +; port - The port where their host is listening (default: 4520) +; +; order - What search order to use. May be 'primary', 'secondary', +; 'tertiary' or 'quartiary'. In large systems, it is beneficial +; to only query one up-stream host in order to maximize caching +; value. Adding one with primary and one with secondary gives you +; redundancy without sacrificing performance. +; +; include - Includes this peer when searching a particular context +; for lookup (set "all" to perform all lookups with that +; host. This is also the context in which peers are permitted +; to precache. +; +; noinclude - Disincludes this peer when searching a particular context +; for lookup (set "all" to perform no lookups with that +; host. +; +; permit - Permits this peer to search a given DUNDi context on +; the local system. Set "all" to permit this host to +; lookup all contexts. This is also a context for which +; we will create/forward PRECACHE commands. +; +; deny - Denies this peer to search a given DUNDi context on +; the local system. Set "all" to deny this host to +; lookup all contexts. +; +; model - inbound, outbound, or symmetric for whether we receive +; requests only, transmit requests only, or do both. +; +; precache - Utilize/Permit precaching with this peer (to pre +; cache means to provide an answer when no request +; was made and is used so that machines with few +; routes can push those routes up a to a higher level). +; outgoing means we send precache routes to this peer, +; incoming means we permit this peer to send us +; precache routes. symmetric means we do both. +; +; Note: You cannot mix symmetric/outbound model with symmetric/inbound +; precache, nor can you mix symmetric/inbound model with symmetric/outbound +; precache. +; +; +; The '*' peer is special and matches an unspecified entity +; + +; +; Sample Primary e164 DUNDi peer +; +;[00:50:8B:F3:75:BB] +;model = symmetric +;host = 64.215.96.114 +;inkey = digium +;outkey = misery +;include = e164 +;permit = e164 +;qualify = yes + +; +; Sample Secondary e164 DUNDi peer +; +;[00:A0:C9:96:92:84] +;model = symmetric +;host = misery.digium.com +;inkey = misery +;outkey = ourkey +;include = e164 +;permit = e164 +;qualify = yes +;order = secondary + +; +; Sample "push mode" downstream host +; +;[00:0C:76:96:75:28] +;model = inbound +;host = dynamic +;precache = inbound +;inkey = littleguy +;outkey = ourkey +;include = e164 ; In this case used only for precaching +;permit = e164 +;qualify = yes + +; +; Sample "push mode" upstream host +; +;[00:07:E9:3B:76:60] +;model = outbound +;precache = outbound +;host = 216.207.245.34 +;register = yes +;inkey = dhcp34 +;permit = all ; In this case used only for precaching +;include = all +;qualify = yes +;outkey=foo + +;[*] +; diff --git a/version_1.8.2/pabx/etc/asterisk/enum.conf b/version_1.8.2/pabx/etc/asterisk/enum.conf new file mode 100644 index 0000000..39c7231 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/enum.conf @@ -0,0 +1,22 @@ +; +; ENUM Configuration for resolving phone numbers over DNS +; +; Sample config for Asterisk +; This file is reloaded at "module reload enum" in the CLI +; +[general] +; +; The search list for domains may be customized. Domains are searched +; in the order they are listed here. +; +search => e164.arpa +; +; If you'd like to use the E.164.org public ENUM registry in addition +; to the official e164.arpa one, uncomment the following line +; +;search => e164.org +; +; As there are more H323 drivers available you have to select to which +; drive a H323 URI will map. Default is "H323". +; +h323driver => H323 diff --git a/version_1.8.2/pabx/etc/asterisk/extconfig.conf b/version_1.8.2/pabx/etc/asterisk/extconfig.conf new file mode 100644 index 0000000..9e13cac --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/extconfig.conf @@ -0,0 +1,111 @@ +; +; Static and realtime external configuration +; engine configuration +; +; See https://wiki.asterisk.org/wiki/display/AST/Realtime+Database+Configuration +; for basic table formatting information. +; +[settings] +; +; Static configuration files: +; +; file.conf => driver,database[,table[,priority]] +; +; maps a particular configuration file to the given +; database driver, database and table (or uses the +; name of the file as the table if not specified) +; +; Uncomment to load queues.conf via the odbc engine. +; +;queues.conf => odbc,asterisk,ast_config +;extensions.conf => sqlite,asterisk,ast_config +; +; The following files CANNOT be loaded from Realtime storage: +; asterisk.conf +; extconfig.conf (this file) +; logger.conf +; +; Additionally, the following files cannot be loaded from +; Realtime storage unless the storage driver is loaded +; early using 'preload' statements in modules.conf: +; manager.conf +; cdr.conf +; rtp.conf +; +; Named ACLs specified in realtime also can not be used +; from manager.conf unless the storage driver is preloaded. +; Attempting to use a realtime stored named ACL before the +; driver is loaded will result in an invalid ACL which +; rejects all addresses. +; +; Realtime configuration engine +; +; maps a particular family of realtime +; configuration to a given database driver, +; database and table (or uses the name of +; the family if the table is not specified +; +;example => odbc,asterisk,alttable,1 +;example => mysql,asterisk,alttable,2 +;example2 => ldap,"dc=oxymium,dc=net",example2 +; +; Additionally, priorities are now supported for use as failover methods +; for retrieving realtime data. If one connection fails to retrieve any +; information, the next sequential priority will be tried next. This +; especially works well with ODBC connections, since res_odbc now caches +; when connection failures occur and prevents immediately retrying those +; connections until after a specified timeout. Note: priorities must +; start at 1 and be sequential (i.e. if you have only priorities 1, 2, +; and 4, then 4 will be ignored, because there is no 3). +; +; +; Possible driver backends: +; +; "odbc" is shown in the examples below, but is not the only valid realtime +; engine. Here are several of the possible options: +; odbc ... res_config_odbc +; sqlite ... res_config_sqlite +; sqlite3 ... res_config_sqlite3 +; pgsql ... res_config_pgsql +; curl ... res_config_curl +; ldap ... res_config_ldap +; mysql ... res_config_mysql (available via add-ons in menuselect) +; +; Note: The res_config_pgsql and res_config_sqlite backends configure the +; database used in their respective configuration files and ignore the +; database name configured in this file. +; +;iaxusers => odbc,asterisk +;iaxpeers => odbc,asterisk +;sippeers => odbc,asterisk +;sipregs => odbc,asterisk ; (avoid sipregs if possible, e.g. by using a view) +;ps_endpoints => odbc,asterisk +;ps_auths => odbc,asterisk +;ps_aors => odbc,asterisk +;ps_domain_aliases => odbc,asterisk +;ps_endpoint_id_ips => odbc,asterisk +;ps_outbound_publishes => odbc,asterisk +;ps_inbound_publications = odbc,asterisk +;ps_asterisk_publications = odbc,asterisk +;voicemail => odbc,asterisk +;extensions => odbc,asterisk +;meetme => mysql,general +;queues => odbc,asterisk +;queue_members => odbc,asterisk +;queue_rules => odbc,asterisk +;acls => odbc,asterisk +;musiconhold => mysql,general +;queue_log => mysql,general +; +; +; While most dynamic realtime engines are automatically used when defined in +; this file, 'extensions', distinctively, is not. To activate dynamic realtime +; extensions, you must turn them on in each respective context within +; extensions.conf with a switch statement. The syntax is: +; switch => Realtime/[[db_context@]tablename]/ +; The only option available currently is the 'p' option, which disallows +; extension pattern queries to the database. If you have no patterns defined +; in a particular context, this will save quite a bit of CPU time. However, +; note that using dynamic realtime extensions is not recommended anymore as a +; best practice; instead, you should consider writing a static dialplan with +; proper data abstraction via a tool like func_odbc. diff --git a/version_1.8.2/pabx/etc/asterisk/extensions.ael b/version_1.8.2/pabx/etc/asterisk/extensions.ael new file mode 100644 index 0000000..495001f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/extensions.ael @@ -0,0 +1,456 @@ +// +// Example AEL config file +// +// +// Static extension configuration file, used by +// the pbx_ael module. This is where you configure all your +// inbound and outbound calls in Asterisk. +// +// This configuration file is reloaded +// - With the "ael reload" command in the CLI +// - With the "reload" command (that reloads everything) in the CLI + +// The "Globals" category contains global variables that can be referenced +// in the dialplan by using the GLOBAL dialplan function: +// ${GLOBAL(VARIABLE)} +// ${${GLOBAL(VARIABLE)}} or ${text${GLOBAL(VARIABLE)}} or any hybrid +// Unix/Linux environmental variables are reached with the ENV dialplan +// function: ${ENV(VARIABLE)} +// + +// NOTE! NOTE! NOTE! +// Asterisk by default will load both extensions.conf and extensions.ael files. +// Upon loading these files the dialplans generated from both with be merged, +// so you must make sure that you don't have any overlapping contexts or global +// variables. If you do, then unexpected behavior may result when the data is +// merged. +// NOTE! NOTE! NOTE! + +globals { + CONSOLE-AEL="Console/dsp"; // Console interface for demo + //CONSOLE-AEL=Zap/1; + //CONSOLE-AEL=Phone/phone0; + IAXINFO-AEL=guest; // IAXtel username/password + //IAXINFO-AEL="myuser:mypass"; + OUTBOUND-TRUNK="Zap/g2"; // Trunk interface + // + // Note the 'g2' in the OUTBOUND-TRUNK variable above. It specifies which group (defined + // in chan_dahdi.conf) to dial, i.e. group 2, and how to choose a channel to use in + // the specified group. The four possible options are: + // + // g: select the lowest-numbered non-busy DAHDI channel + // (aka. ascending sequential hunt group). + // G: select the highest-numbered non-busy DAHDI channel + // (aka. descending sequential hunt group). + // r: use a round-robin search, starting at the next highest channel than last + // time (aka. ascending rotary hunt group). + // R: use a round-robin search, starting at the next lowest channel than last + // time (aka. descending rotary hunt group). + // + OUTBOUND-TRUNKMSD=1; // MSD digits to strip (usually 1 or 0) + //OUTBOUND-TRUNK2=IAX2/user:pass@provider; +}; + +// +// Any category other than "General" and "Globals" represent +// extension contexts, which are collections of extensions. +// +// Extension names may be numbers, letters, or combinations +// thereof. If an extension name is prefixed by a '_' +// character, it is interpreted as a pattern rather than a +// literal. In patterns, some characters have special meanings: +// +// X - any digit from 0-9 +// Z - any digit from 1-9 +// N - any digit from 2-9 +// [1235-9] - any digit in the brackets (in this example, 1,2,3,5,6,7,8,9) +// . - wildcard, matches anything remaining (e.g. _9011. matches +// anything starting with 9011 excluding 9011 itself) +// ! - wildcard, causes the matching process to complete as soon as +// it can unambiguously determine that no other matches are possible +// +// For example the extension _NXXXXXX would match normal 7 digit dialings, +// while _1NXXNXXXXXX would represent an area code plus phone number +// preceded by a one. +// +// Each step of an extension is ordered by priority, which must +// always start with 1 to be considered a valid extension. The priority +// "next" or "n" means the previous priority plus one, regardless of whether +// the previous priority was associated with the current extension or not. +// The priority "same" or "s" means the same as the previously specified +// priority, again regardless of whether the previous entry was for the +// same extension. Priorities may be immediately followed by a plus sign +// and another integer to add that amount (most useful with 's' or 'n'). +// Priorities may then also have an alias, or label, in +// parenthesis after their name which can be used in goto situations +// +// Contexts contain several lines, one for each step of each +// extension, which can take one of two forms as listed below, +// with the first form being preferred. One may include another +// context in the current one as well, optionally with a +// date and time. Included contexts are included in the order +// they are listed. +// +//context name { +// exten-name => { +// application(arg1,arg2,...); +// +// Timing list for includes is +// +//

element in certain HTTP +; response message bodies. If not furnished here, "Asterisk/{version}" will be +; used as a default value for the Server header field and the
+; element. Setting this property to a blank value will result in the omission +; of the Server header field from HTTP response message headers and the +;
element from HTTP response message bodies. +; +servername=Asterisk +; +; Whether HTTP/HTTPS interface is enabled or not. Default is no. +; This also affects manager/rawman/mxml access (see manager.conf) +; +enabled=yes +; +; Address to bind to, both for HTTP and HTTPS. You MUST specify +; a bindaddr in order for the HTTP server to run. There is no +; default value. +; +bindaddr=0.0.0.0 +; +; Port to bind to for HTTP sessions (default is 8088) +; +bindport=8088 +; +; Prefix allows you to specify a prefix for all requests +; to the server. The default is blank. If uncommented +; all requests must begin with /asterisk +; +;prefix=asterisk +; +; sessionlimit specifies the maximum number of httpsessions that will be +; allowed to exist at any given time. (default: 100) +; +;sessionlimit=100 +; +; session_inactivity specifies the number of milliseconds to wait for +; more data over the HTTP connection before closing it. +; +; Default: 30000 +;session_inactivity=30000 +; +; session_keep_alive specifies the number of milliseconds to wait for +; the next HTTP request over a persistent connection. +; +; Set to 0 to disable persistent HTTP connections. +; Default: 15000 +;session_keep_alive=15000 +; +; Whether Asterisk should serve static content from static-http +; Default is no. +; +enablestatic=yes +; +; Redirect one URI to another. This is how you would set a +; default page. +; Syntax: redirect= +; For example, if you are using the Asterisk-gui, +; it is convenient to enable the following redirect: +; +;redirect = / /static/config/index.html +; +; HTTPS support. In addition to enabled=yes, you need to +; explicitly enable tls, define the port to use, +; and have a certificate somewhere. +tlsenable=yes ; enable tls - default no. +tlsbindaddr=0.0.0.0:8089 ; address and port to bind to - default is bindaddr and port 8089. +tlscertfile=/usr/src/certificates/localhost.crt ; path to the certificate file (*.pem) only. +tlsprivatekey=/usr/src/certificates/localhost.key ; path to private key file (*.pem) only. diff --git a/version_1.8.2/pabx/etc/asterisk/iax.conf b/version_1.8.2/pabx/etc/asterisk/iax.conf new file mode 100644 index 0000000..7d6e5f7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iax.conf @@ -0,0 +1,7 @@ +[general] +#include iax_general.conf +#include iax_general_customizado.conf +#include iax_register.conf +#include iax_register_customizado.conf +#include iax_ramais.conf +#include iax_ramais_customizado.conf diff --git a/version_1.8.2/pabx/etc/asterisk/iax_general.conf b/version_1.8.2/pabx/etc/asterisk/iax_general.conf new file mode 100644 index 0000000..1c8cf54 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iax_general.conf @@ -0,0 +1,9 @@ +bindport=4569 +bindaddr=0.0.0.0 +autokill=yes +trunkfreq=30 +trunktimestamps=no +minregexpire=60 +maxregexpire=120 +authdebug=yes +tos=af11 diff --git a/version_1.8.2/pabx/etc/asterisk/iax_general_customizado.conf b/version_1.8.2/pabx/etc/asterisk/iax_general_customizado.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iax_general_customizado.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/iax_ramais.conf b/version_1.8.2/pabx/etc/asterisk/iax_ramais.conf new file mode 100644 index 0000000..139597f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iax_ramais.conf @@ -0,0 +1,2 @@ + + diff --git a/version_1.8.2/pabx/etc/asterisk/iax_ramais_customizado.conf b/version_1.8.2/pabx/etc/asterisk/iax_ramais_customizado.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iax_ramais_customizado.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/iax_register.conf b/version_1.8.2/pabx/etc/asterisk/iax_register.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/iax_register_customizado.conf b/version_1.8.2/pabx/etc/asterisk/iax_register_customizado.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iax_register_customizado.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/iaxprov.conf b/version_1.8.2/pabx/etc/asterisk/iaxprov.conf new file mode 100644 index 0000000..8b7d8e0 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/iaxprov.conf @@ -0,0 +1,80 @@ +; +; IAX2 Provisioning Information +; +; Contains provisioning information for templates and for specific service +; entries. +; +; Templates provide a group of settings from which provisioning takes place. +; A template may be based upon any template that has been specified before +; it. If the template that an entry is based on is not specified then it is +; presumed to be 'default' (unless it is the first of course). +; +; Templates which begin with 'si-' are used for provisioning units with +; specific service identifiers. For example the entry "si-000364000126" +; would be used when the device with the corresponding service identifier of +; "000364000126" attempts to register or make a call. +; +[default] +; +; The port number the device should use to bind to. The default is 4569. +; +;port=4569 +; +; server is our PRIMARY server for registration and placing calls +; +;server=192.168.69.3 +; +; altserver is the BACKUP server for registration and placing calls in the +; event the primary server is unavailable. +; +;altserver=192.168.69.4 +; +; port is the port number to use for IAX2 outbound. The connections to the +; server and altserver -- default is of course 4569. +;serverport=4569 +; +; language is the preferred language for the device +; +;language=en +; +; codec is the requested codec. The iaxy supports ulaw and adpcm +; +codec=ulaw +; +; flags is a comma separated list of flags which the device should +; use and may contain any of the following keywords: +; +; "register" - Register with server +; "secure" - Do not accept calls / provisioning not originated by the server +; "heartbeat" - Generate status packets on port 9999 sent to 255.255.255.255 +; "debug" - Output extra debugging to port 9999 +; +; Note that use can use += and -= to adjust parameters +; +flags=register,heartbeat +; +; See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of this parameter. +;tos=ef +; +; Example iaxy provisioning +; +;[si-000364000126] +;user=iaxy +;pass=bitsy +;flags += debug + +;[si-000364000127] +;user=iaxy2 +;pass=bitsy2 +;template=si-000364000126 +;flags += debug + +; +;[*] +; +; If specified, the '*' provisioning is used for all devices which do not +; have another provisioning entry within the file. If unspecified, no +; provisioning will take place for devices which have no entry. DO NOT +; USE A '*' PROVISIONING ENTRY UNLESS YOU KNOW WHAT YOU'RE DOING. +; +;template=default diff --git a/version_1.8.2/pabx/etc/asterisk/indications.conf b/version_1.8.2/pabx/etc/asterisk/indications.conf new file mode 100644 index 0000000..7ac1ba9 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/indications.conf @@ -0,0 +1,736 @@ +; +; indications.conf +; +; Configuration file for location specific tone indications +; + +; +; NOTE: +; When adding countries to this file, please keep them in alphabetical +; order according to the 2-character country codes! +; +; The [general] category is for certain global variables. +; All other categories are interpreted as location specific indications +; + +[general] +country=us ; default location + + +; [example] +; description = string +; The full name of your country, in English. +; ringcadence = num[,num]* +; List of durations the physical bell rings. +; dial = tonelist +; Set of tones to be played when one picks up the hook. +; busy = tonelist +; Set of tones played when the receiving end is busy. +; congestion = tonelist +; Set of tones played when there is some congestion (on the network?) +; callwaiting = tonelist +; Set of tones played when there is a call waiting in the background. +; dialrecall = tonelist +; Not well defined; many phone systems play a recall dial tone after hook +; flash. +; record = tonelist +; Set of tones played when call recording is in progress. +; info = tonelist +; Set of tones played with special information messages (e.g., "number is +; out of service") +; 'name' = tonelist +; Every other variable will be available as a shortcut for the "PlayList" command +; but will not be used automatically by Asterisk. +; +; +; The tonelist itself is defined by a comma-separated sequence of elements. +; Each element consist of a frequency (f) with an optional duration (in ms) +; attached to it (f/duration). The frequency component may be a mixture of two +; frequencies (f1+f2) or a frequency modulated by another frequency (f1*f2). +; The implicit modulation depth is fixed at 90%, though. +; If the list element starts with a !, that element is NOT repeated, +; therefore, only if all elements start with !, the tonelist is time-limited, +; all others will repeat indefinitely. +; +; concisely: +; element = [!]freq[+|*freq2][/duration] +; tonelist = element[,element]* +; + +[at] +description = Austria +ringcadence = 1000,5000 +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +dial = 420 +busy = 420/400,0/400 +ring = 420/1000,0/5000 +congestion = 420/200,0/200 +callwaiting = 420/40,0/1960 +dialrecall = 420 +; RECORDTONE - not specified +record = 1400/80,0/14920 +info = 950/330,1450/330,1850/330,0/1000 +stutter = 380+420 + +[au] +description = Australia +; Reference http://www.acif.org.au/__data/page/3303/S002_2001.pdf +; Normal Ring +ringcadence = 400,200,400,2000 +; Distinctive Ring 1 - Forwarded Calls +; 400,400,200,200,400,1400 +; Distinctive Ring 2 - Selective Ring 2 + Operator + Recall +; 400,400,200,2000 +; Distinctive Ring 3 - Multiple Subscriber Number 1 +; 200,200,400,2200 +; Distinctive Ring 4 - Selective Ring 1 + Centrex +; 400,2600 +; Distinctive Ring 5 - Selective Ring 3 +; 400,400,200,400,200,1400 +; Distinctive Ring 6 - Multiple Subscriber Number 2 +; 200,400,200,200,400,1600 +; Distinctive Ring 7 - Multiple Subscriber Number 3 + Data Privacy +; 200,400,200,400,200,1600 +; Tones +dial = 413+438 +busy = 425/375,0/375 +ring = 413+438/400,0/200,413+438/400,0/2000 +; XXX Congestion: Should reduce by 10 db every other cadence XXX +congestion = 425/375,0/375,420/375,0/375 +callwaiting = 425/200,0/200,425/200,0/4400 +dialrecall = 413+438 +; Record tone used for Call Intrusion/Recording or Conference +record = !425/1000,!0/15000,425/360,0/15000 +info = 425/2500,0/500 +; Other Australian Tones +; The STD "pips" indicate the call is not an untimed local call +std = !525/100,!0/100,!525/100,!0/100,!525/100,!0/100,!525/100,!0/100,!525/100 +; Facility confirmation tone (eg. Call Forward Activated) +facility = 425 +; Message Waiting "stutter" dialtone +stutter = 413+438/100,0/40 +; Ringtone for calls to Telstra mobiles +ringmobile = 400+450/400,0/200,400+450/400,0/2000 + +[bg] +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +description = Bulgaria +ringcadence = 1000,4000 +; +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 425/150,0/150,425/150,0/4000 +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +record = 1400/425,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425/1500,0/100 + +[br] +description = Brazil +ringcadence = 1000,4000 +dial = 425 +busy = 425/250,0/250 +ring = 425/1000,0/4000 +congestion = 425/250,0/250,425/750,0/250 +callwaiting = 425/50,0/1000 +; Dialrecall not used in Brazil standard (using UK standard) +dialrecall = 350+440 +; Record tone is not used in Brazil, use busy tone +record = 425/250,0/250 +; Info not used in Brazil standard (using UK standard) +info = 950/330,1400/330,1800/330 +stutter = 350+440 + +[be] +description = Belgium +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,3000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/3000 +congestion = 425/167,0/167 +callwaiting = 1400/175,0/175,1400/175,0/3500 +; DIALRECALL - not specified +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = 900/330,1400/330,1800/330,0/1000 +stutter = 425/1000,0/250 + +[ch] +description = Switzerland +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/200,0/200,425/200,0/4000 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425+340/1100,0/1100 + +[cl] +description = Chile +; According to specs from Telefonica CTC Chile +ringcadence = 1000,3000 +dial = 400 +busy = 400/500,0/500 +ring = 400/1000,0/3000 +congestion = 400/200,0/200 +callwaiting = 400/250,0/8750 +dialrecall = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 +record = 1400/500,0/15000 +info = 950/333,1400/333,1800/333,0/1000 +stutter = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 + +[cn] +description = China +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 450 +busy = 450/350,0/350 +ring = 450/1000,0/4000 +congestion = 450/700,0/700 +callwaiting = 450/400,0/4000 +dialrecall = 450 +record = 950/400,0/10000 +info = 450/100,0/100,450/100,0/100,450/100,0/100,450/400,0/400 +; STUTTER - not specified +stutter = 450+425 + +[cz] +description = Czech Republic +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425/330,0/330,425/660,0/660 +busy = 425/330,0/330 +ring = 425/1000,0/4000 +congestion = 425/165,0/165 +callwaiting = 425/330,0/9000 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425/330,0/330,425/660,0/660 +; RECORDTONE - not specified +record = 1400/500,0/14000 +info = 950/330,0/30,1400/330,0/30,1800/330,0/1000 +; STUTTER - not specified +stutter = 425/450,0/50 + +[de] +description = Germany +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/480,0/480 +ring = 425/1000,0/4000 +congestion = 425/240,0/240 +callwaiting = !425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,!0/5000,!425/200,!0/200,!425/200,0 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425+400 + +[dk] +description = Denmark +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = !425/200,!0/600,!425/200,!0/3000,!425/200,!0/200,!425/200,0 +; DIALRECALL - not specified +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; RECORDTONE - not specified +record = 1400/80,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +; STUTTER - not specified +stutter = 425/450,0/50 + +[ee] +description = Estonia +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425 +busy = 425/300,0/300 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +; CALLWAIT not in accordance to ITU +callwaiting = 950/650,0/325,950/325,0/30,1400/1300,0/2600 +; DIALRECALL - not specified +dialrecall = 425/650,0/25 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; INFO not in accordance to ITU +info = 950/650,0/325,950/325,0/30,1400/1300,0/2600 +; STUTTER not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[es] +description = Spain +ringcadence = 1500,3000 +dial = 425 +busy = 425/200,0/200 +ring = 425/1500,0/3000 +congestion = 425/200,0/200,425/200,0/200,425/200,0/600 +callwaiting = 425/175,0/175,425/175,0/3500 +dialrecall = !425/200,!0/200,!425/200,!0/200,!425/200,!0/200,425 +record = 1400/500,0/15000 +info = 950/330,0/1000 +dialout = 500 +; STUTTER not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + + +[fi] +description = Finland +ringcadence = 1000,4000 +dial = 425 +busy = 425/300,0/300 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/150,0/150,425/150,0/8000 +dialrecall = 425/650,0/25 +record = 1400/500,0/15000 +info = 950/650,0/325,950/325,0/30,1400/1300,0/2600 +stutter = 425/650,0/25 + +[fr] +description = France +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1500,3500 +; Dialtone can also be 440+330 +dial = 440 +busy = 440/500,0/500 +ring = 440/1500,0/3500 +; CONGESTION - not specified +congestion = 440/250,0/250 +callwait = 440/300,0/10000 +; DIALRECALL - not specified +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330 +stutter = !440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,!440/100,!0/100,440 + +[gr] +description = Greece +ringcadence = 1000,4000 +dial = 425/200,0/300,425/700,0/800 +busy = 425/300,0/300 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/150,0/150,425/150,0/8000 +dialrecall = 425/650,0/25 +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 425/650,0/25 + +[hu] +description = Hungary +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1250,3750 +dial = 425 +busy = 425/300,0/300 +ring = 425/1250,0/3750 +congestion = 425/300,0/300 +callwaiting = 425/40,0/1960 +dialrecall = 425+450 +; RECORDTONE - not specified +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 350+375+400 + +[il] +description = Israel +ringcadence = 1000,3000 +dial = 414 +busy = 414/500,0/500 +ring = 414/1000,0/3000 +congestion = 414/250,0/250 +callwaiting = 414/100,0/100,414/100,0/100,414/600,0/3000 +dialrecall = !414/100,!0/100,!414/100,!0/100,!414/100,!0/100,414 +record = 1400/500,0/15000 +info = 1000/330,1400/330,1800/330,0/1000 +stutter = !414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,!414/160,!0/160,414 + + +[in] +description = India +ringcadence = 400,200,400,2000 +dial = 400*25 +busy = 400/750,0/750 +ring = 400*25/400,0/200,400*25/400,0/2000 +congestion = 400/250,0/250 +callwaiting = 400/200,0/100,400/200,0/7500 +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0/1000 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,400*25 + +[it] +description = Italy +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +dial = 425/200,0/200,425/600,0/1000 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/400,0/100,425/250,0/100,425/150,0/14000 +dialrecall = 470/400,425/400 +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 470/400,425/400 + +[lt] +description = Lithuania +ringcadence = 1000,4000 +dial = 425 +busy = 425/350,0/350 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/150,0/150,425/150,0/4000 +; DIALRECALL - not specified +dialrecall = 425/500,0/50 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +; STUTTER - not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[jp] +description = Japan +ringcadence = 1000,2000 +dial = 400 +busy = 400/500,0/500 +ring = 400+15/1000,0/2000 +congestion = 400/500,0/500 +callwaiting = 400+16/500,0/8000 +dialrecall = !400/200,!0/200,!400/200,!0/200,!400/200,!0/200,400 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 + +[mx] +description = Mexico +ringcadence = 2000,4000 +dial = 425 +busy = 425/250,0/250 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 425/200,0/600,425/200,0/10000 +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +record = 1400/500,0/15000 +info = 950/330,0/30,1400/330,0/30,1800/330,0/1000 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,425 + +[my] +description = Malaysia +ringcadence = 2000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/400,0/200,425/400,0/2000 +congestion = 425/500,0/500 +; STUTTER - not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[nl] +description = Netherlands +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +ringcadence = 1000,4000 +; Most of these 425's can also be 450's +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 425/500,0/9500 +; DIALRECALL - not specified +dialrecall = 425/500,0/50 +; RECORDTONE - not specified +record = 1400/500,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = 425/500,0/50 + +[no] +description = Norway +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/200,0/200 +callwaiting = 425/200,0/600,425/200,0/10000 +dialrecall = 470/400,425/400 +record = 1400/400,0/15000 +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,0 +stutter = 470/400,425/400 + +[nz] +description = New Zealand +; Reference = http://www.telepermit.co.nz/TNA102.pdf +ringcadence = 400,200,400,2000 +dial = 400 +busy = 400/500,0/500 +ring = 400+450/400,0/200,400+450/400,0/2000 +congestion = 400/250,0/250 +callwaiting = !400/200,!0/3000,!400/200,!0/3000,!400/200,!0/3000,!400/200 +dialrecall = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 +record = 1400/425,0/15000 +info = 400/750,0/100,400/750,0/100,400/750,0/100,400/750,0/400 +stutter = !400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,!400/100,!0/100,400 +unobtainable = 400/75,0/100,400/75,0/100,400/75,0/100,400/75,0/400 + +[ph] + +; reference http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf + +description = Philippines +ringcadence = 1000,4000 +dial = 425 +busy = 480+620/500,0/500 +ring = 425+480/1000,0/4000 +congestion = 480+620/250,0/250 +callwaiting = 440/300,0/10000 +; DIALRECALL - not specified +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; INFO - not specified +info = !950/330,!1400/330,!1800/330,0 +; STUTTER - not specified +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,425 + + +[pl] +description = Poland +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/500,0/500 +callwaiting = 425/150,0/150,425/150,0/4000 +; DIALRECALL - not specified +dialrecall = 425/500,0/50 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; 950/1400/1800 3x0.33 on 1.0 off repeated 3 times +info = !950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000,!950/330,!1400/330,!1800/330,!0/1000 +; STUTTER - not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[pt] +description = Portugal +ringcadence = 1000,5000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/5000 +congestion = 425/200,0/200 +callwaiting = 440/300,0/10000 +dialrecall = 425/1000,0/200 +record = 1400/500,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[ru] +; References: +; http://www.minsvyaz.ru/site.shtml?id=1806 +; http://www.aboutphone.info/lib/gost/45-223-2001.html +description = Russian Federation / ex Soviet Union +ringcadence = 1000,4000 +dial = 425 +busy = 425/350,0/350 +ring = 425/1000,0/4000 +congestion = 425/175,0/175 +callwaiting = 425/200,0/5000 +record = 1400/400,0/15000 +info = 950/330,1400/330,1800/330,0/1000 +dialrecall = 425/400,0/40 +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + +[se] +description = Sweden +ringcadence = 1000,5000 +dial = 425 +busy = 425/250,0/250 +ring = 425/1000,0/5000 +congestion = 425/250,0/750 +callwaiting = 425/200,0/500,425/200,0/9100 +dialrecall = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +record = 1400/500,0/15000 +info = !950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,!0/2024,!950/332,!0/24,!1400/332,!0/24,!1800/332,0 +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 +; stutter = 425/320,0/20 ; Real swedish standard, not used for now + +[sg] +description = Singapore +; Singapore +; Reference: http://www.ida.gov.sg/idaweb/doc/download/I397/ida_ts_pstn1_i4r2.pdf +; Frequency specs are: 425 Hz +/- 20Hz; 24 Hz +/- 2Hz; modulation depth 100%; SIT +/- 50Hz +ringcadence = 400,200,400,2000 +dial = 425 +ring = 425*24/400,0/200,425*24/400,0/2000 ; modulation should be 100%, not 90% +busy = 425/750,0/750 +congestion = 425/250,0/250 +callwaiting = 425*24/300,0/200,425*24/300,0/3200 +stutter = !425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,!425/200,!0/200,!425/600,!0/200,425 +info = 950/330,1400/330,1800/330,0/1000 ; not currently in use acc. to reference +dialrecall = 425*24/500,0/500,425/500,0/2500 ; unspecified in IDA reference, use repeating Holding Tone A,B +record = 1400/500,0/15000 ; unspecified in IDA reference, use 0.5s tone every 15s +; additionally defined in reference +nutone = 425/2500,0/500 +intrusion = 425/250,0/2000 +warning = 425/624,0/4376 ; end of period tone, warning +acceptance = 425/125,0/125 +holdinga = !425*24/500,!0/500 ; followed by holdingb +holdingb = !425/500,!0/2500 + +[th] +description = Thailand +ringcadence = 1000,4000 +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +dial = 400*50 +busy = 400/500,0/500 +ring = 420/1000,0/5000 +congestion = 400/300,0/300 +callwaiting = 1000/400,10000/400,1000/400 +; DIALRECALL - not specified - use special dial tone instead. +dialrecall = 400*50/400,0/100,400*50/400,0/100 +; RECORDTONE - not specified +record = 1400/500,0/15000 +; INFO - specified as an announcement - use special information tones instead +info = 950/330,1400/330,1800/330 +; STUTTER - not specified +stutter = !400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,!400/200,!0/200,!400/600,!0/200,400 + +[uk] +description = United Kingdom +ringcadence = 400,200,400,2000 +; These are the official tones taken from BT SIN350. The actual tones +; used by BT include some volume differences so sound slightly different +; from Asterisk-generated ones. +dial = 350+440 +; Special dial is the intermittent dial tone heard when, for example, +; you have a divert active on the line +specialdial = 350+440/750,440/750 +; Busy is also called "Engaged" +busy = 400/375,0/375 +; "Congestion" is the Beep-bip engaged tone +congestion = 400/400,0/350,400/225,0/525 +; "Special Congestion" is not used by BT very often if at all +specialcongestion = 400/200,1004/300 +unobtainable = 400 +ring = 400+450/400,0/200,400+450/400,0/2000 +callwaiting = 400/100,0/4000 +; BT seem to use "Special Call Waiting" rather than just "Call Waiting" tones +specialcallwaiting = 400/250,0/250,400/250,0/250,400/250,0/5000 +; "Pips" used by BT on payphones. (Sounds wrong, but this is what BT claim it +; is and I've not used a payphone for years) +creditexpired = 400/125,0/125 +; These two are used to confirm/reject service requests on exchanges that +; don't do voice announcements. +confirm = 1400 +switching = 400/200,0/400,400/2000,0/400 +; This is the three rising tones Doo-dah-dee "Special Information Tone", +; usually followed by the BT woman saying an appropriate message. +info = 950/330,0/15,1400/330,0/15,1800/330,0/1000 +; Not listed in SIN350 +record = 1400/500,0/60000 +stutter = 350+440/750,440/750 + +[us] +description = United States / North America +ringcadence = 2000,4000 +dial = 350+440 +busy = 480+620/500,0/500 +ring = 440+480/2000,0/4000 +congestion = 480+620/250,0/250 +callwaiting = 440/300,0/10000 +dialrecall = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + +[us-old] +description = United States Circa 1950/ North America +ringcadence = 2000,4000 +dial = 600*120 +busy = 500*100/500,0/500 +ring = 420*40/2000,0/4000 +congestion = 500*100/250,0/250 +callwaiting = 440/300,0/10000 +dialrecall = !600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,600*120 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,!600*120/100,!0/100,600*120 + +[tw] +description = Taiwan +; http://nemesis.lonestar.org/reference/telecom/signaling/dialtone.html +; http://nemesis.lonestar.org/reference/telecom/signaling/busy.html +; http://www.iproducts.com.tw/ee/kylink/06ky-1000a.htm +; http://www.pbx-manufacturer.com/ky120dx.htm +; http://www.nettwerked.net/tones.txt +; http://www.cisco.com/univercd/cc/td/doc/product/tel_pswt/vco_prod/taiw_sup/taiw2.htm +; +; busy tone 480+620Hz 0.5 sec. on ,0.5 sec. off +; reorder tone 480+620Hz 0.25 sec. on,0.25 sec. off +; ringing tone 440+480Hz 1 sec. on ,2 sec. off +; +ringcadence = 1000,4000 +dial = 350+440 +busy = 480+620/500,0/500 +ring = 440+480/1000,0/2000 +congestion = 480+620/250,0/250 +callwaiting = 350+440/250,0/250,350+440/250,0/3250 +dialrecall = 300/1500,0/500 +record = 1400/500,0/15000 +info = !950/330,!1400/330,!1800/330,0 +stutter = !350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,!350+440/100,!0/100,350+440 + +[ve] +; Tone definition source for ve found on +; Reference: http://www.itu.int/ITU-T/inr/forms/files/tones-0203.pdf +description = Venezuela / South America +ringcadence = 1000,4000 +dial = 425 +busy = 425/500,0/500 +ring = 425/1000,0/4000 +congestion = 425/250,0/250 +callwaiting = 400+450/300,0/6000 +dialrecall = 425 +record = 1400/500,0/15000 +info = !950/330,!1440/330,!1800/330,0/1000 +; STUTTER - not specified +stutter = !425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,!425/100,!0/100,425 + + +[za] +description = South Africa +; http://www.cisco.com/univercd/cc/td/doc/product/tel_pswt/vco_prod/safr_sup/saf02.htm +; (definitions for other countries can also be found there) +; Note, though, that South Africa uses two switch types in their network -- +; Alcatel switches -- mainly in the Western Cape, and Siemens elsewhere. +; The former use 383+417 in dial, ringback etc. The latter use 400*33 +; I've provided both, uncomment the ones you prefer +ringcadence = 400,200,400,2000 +; dial/ring/callwaiting for the Siemens switches: +dial = 400*33 +ring = 400*33/400,0/200,400*33/400,0/2000 +callwaiting = 400*33/250,0/250,400*33/250,0/250,400*33/250,0/250,400*33/250,0/250 +; dial/ring/callwaiting for the Alcatel switches: +; dial = 383+417 +; ring = 383+417/400,0/200,383+417/400,0/2000 +; callwaiting = 383+417/250,0/250,383+417/250,0/250,383+417/250,0/250,383+417/250,0/250 +congestion = 400/250,0/250 +busy = 400/500,0/500 +dialrecall = 350+440 +; XXX Not sure about the RECORDTONE +record = 1400/500,0/10000 +info = 950/330,1400/330,1800/330,0/330 +stutter = !400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,!400*33/100,!0/100,400*33 diff --git a/version_1.8.2/pabx/etc/asterisk/jabber.conf b/version_1.8.2/pabx/etc/asterisk/jabber.conf new file mode 100644 index 0000000..5ee26e5 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/jabber.conf @@ -0,0 +1,18 @@ +[general] +;debug=yes ;;Turn on debugging by default. +;autoprune=yes ;;Auto remove users from buddy list. +;autoregister=yes ;;Auto register users from buddy list. + +;[asterisk] ;;label +;type=client ;;Client or Component connection +;serverhost=astjab.org ;;Route to server for example, + ;; talk.google.com +;username=asterisk@astjab.org/asterisk ;;Username with optional roster. +;secret=blah ;;Password +;port=5222 ;;Port to use defaults to 5222 +;usetls=yes ;;Use tls or not +;usesasl=yes ;;Use sasl or not +;buddy=mogorman@astjab.org ;;Manual addition of buddy to list. +;statusmessage="I am available" ;;Have custom status message for + ;;Asterisk. +;timeout=100 ;;Timeout on the message stack. diff --git a/version_1.8.2/pabx/etc/asterisk/keys/asterisk.crt b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.crt new file mode 100644 index 0000000..9e3330b --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.crt @@ -0,0 +1,23 @@ +-----BEGIN CERTIFICATE----- +MIID2jCCAcICAQEwDQYJKoZIhvcNAQELBQAwMjEcMBoGA1UEAwwTQXN0ZXJpc2sg +UHJpdmF0ZSBDQTESMBAGA1UECgwJU2ltcGxlc0lQMB4XDTI0MDYyNDE1MTIxOFoX +DTI1MDYyNDE1MTIxOFowNDEeMBwGA1UEAwwVbWF0aGVvLVZvc3Ryby0xNS01NTEw +MRIwEAYDVQQKDAlTaW1wbGVzSVAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdGLjRj36RPiOVYLimOuKuQ1BGSTJw18YhNv/qDwaUcIevGtwCaz4SV4OF +8kxSsWonpczgFiLXq6nDcP4fYu4RQkJm2XiVjsyDXsidWvvXZXmYjprow2QbHyua +vHYCp2pE9XAL7NLdiFjTnuSmaokaeWPTExbF120oa7W7NSRhEH7suONsmpaIzArt +6bu0XTMCHWilveNOL0IlBE2lPELK7DVtkOqxR99HlTcH0V2sONTQz/8IQSHcvWNU +GG2cBMLxPUzR+wLZQXs6SvRB1oCI7wOwRzU5p39pIKayGFZ4K2x8fv8SJhM+CAsY +5ETBxcEAbAjL7YwU+cerbHY/kcQNAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAFjG +h6XBeSxoz6PeHOL4odXF+0LN/uF7+9zwb6vQXgekHwCrJmIXMm/fzdUhjoUJ5c1V +YpfJ7oSmAnv5exCxnxbVwYRnGvHfZMFvdzKOq8W86F35TQ92LPC1RGvl2+B1P4e+ +z37tdwkUxJNLmheEahYp7U4RFsWCL+SxYdWwIcRFlo6JoOEWdvsEdfnB8VO7zmKV +YkTaASTML+bK5M38SbU/rTwHZkH490aCoIawvtBUWYwwjfQBFYSDUvczmDb7JKs2 +qY9g17edCVOTa0WVu3Ne7rc3qlSCNnw7xCq+G7rbiBp8CFkdHaptZuqm96oq5ilA +kx4/+/3G6TP9O5lu8ZSJrYXU2c7LnVYsr9aV/ZbGl9XBKto8xfLarSY+jpmiEMw0 +zjy4n9fN4IS+JLBIGdpXh3PCuCdoYK7MTrCLqU+7d2wVSY/DFHbRIW+mbazJQaYF +HH1N1U/5Vvm9mjMbB9dN+ExEks3ZCGDjH90JkFv26MlgIeW7ZHz8vpfOOvD6Ty/5 +9jDOiFYX8SNpll/zCtu3GqqFkXmnskra5oAQoVhel0+6BrZ0S5aZJGkTdXZ7k6Qi +vfc+mF8i8i4eUgtlOfXkJpaDL5dFjhvwCHTj6DpC6vI9HzeP4GDN3kwg/E/AjZbj +8B2rS1m3RZYvW+GW0JPziVA3ddKERZgbGF/nn6jG +-----END CERTIFICATE----- diff --git a/version_1.8.2/pabx/etc/asterisk/keys/asterisk.csr b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.csr new file mode 100644 index 0000000..b2719c7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.csr @@ -0,0 +1,16 @@ +-----BEGIN CERTIFICATE REQUEST----- +MIICeTCCAWECAQAwNDEeMBwGA1UEAwwVbWF0aGVvLVZvc3Ryby0xNS01NTEwMRIw +EAYDVQQKDAlTaW1wbGVzSVAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB +AQCdGLjRj36RPiOVYLimOuKuQ1BGSTJw18YhNv/qDwaUcIevGtwCaz4SV4OF8kxS +sWonpczgFiLXq6nDcP4fYu4RQkJm2XiVjsyDXsidWvvXZXmYjprow2QbHyuavHYC +p2pE9XAL7NLdiFjTnuSmaokaeWPTExbF120oa7W7NSRhEH7suONsmpaIzArt6bu0 +XTMCHWilveNOL0IlBE2lPELK7DVtkOqxR99HlTcH0V2sONTQz/8IQSHcvWNUGG2c +BMLxPUzR+wLZQXs6SvRB1oCI7wOwRzU5p39pIKayGFZ4K2x8fv8SJhM+CAsY5ETB +xcEAbAjL7YwU+cerbHY/kcQNAgMBAAGgADANBgkqhkiG9w0BAQsFAAOCAQEAE1EW +F49YQD9TDHrgFodyC2HLSQrLwPdCV2giIQKiZjXYoB5TYj8H4z0dhrjB/qvIMJaW +tSH8noaFAoR/tjauSHwbn3dAdlmyiWpT+Xu9YP+M0IJIrxG/AztD9o+XdGIWOmJh +QJj6R58dAFRD/4Ts/XMyR2lBLstsIKAUbscBTf2P5KmVj7lFagOurylzLX0EfH4h +npLDu9hybkkOQj8I+hJyuoDRfLEb1CJzzO6XOvYIZFapM5ZIzYAiVBzLQDzsN0iS +uvIBVBVqxAPaciSeqSxarSYy8NoCr+tGoeYvbL+/qru4mbL+FanncQ3/4NnH/rDA +gDS2gDfSZX7qQw9nmA== +-----END CERTIFICATE REQUEST----- diff --git a/version_1.8.2/pabx/etc/asterisk/keys/asterisk.key b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.key new file mode 100644 index 0000000..d407a31 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.key @@ -0,0 +1,28 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdGLjRj36RPiOV +YLimOuKuQ1BGSTJw18YhNv/qDwaUcIevGtwCaz4SV4OF8kxSsWonpczgFiLXq6nD +cP4fYu4RQkJm2XiVjsyDXsidWvvXZXmYjprow2QbHyuavHYCp2pE9XAL7NLdiFjT +nuSmaokaeWPTExbF120oa7W7NSRhEH7suONsmpaIzArt6bu0XTMCHWilveNOL0Il +BE2lPELK7DVtkOqxR99HlTcH0V2sONTQz/8IQSHcvWNUGG2cBMLxPUzR+wLZQXs6 +SvRB1oCI7wOwRzU5p39pIKayGFZ4K2x8fv8SJhM+CAsY5ETBxcEAbAjL7YwU+cer +bHY/kcQNAgMBAAECggEAJCofyeZdvbPvXyEAAQyHSJSoczXAjeeubdEKguhonF13 +buEhCtGDXZeV6I0J8vNyu6PYkTGnXbzf/OUTK0iMA58cSC8CKnPQMuHsDwV1+nUa +0/roQHNSpUe8swd1p1DBDxTtcWFYfbU4tabbflACNf0B9QJs+KiKMYbyNCGcuVdF +D47BZljDY2e6YDReH1tXfQwmNg02m+0aZNXpxSs+mQqICRb8bXWt+jgaUWp6mC8h +XeZz/5d9Fw/qh5s6fnID73RkiOTkfoLsDve7xxHROC2rKDIJ+F/HFEBvHJIgjat6 +BXNX4wlGeV1DtcEIkmdlhO12BFhDGT611h1wFoLnBQKBgQDcqIlgT55NRzv6swDX +HdRuml1KLH4hiAeaWaE/QgT2uWhsYL1AADnveONoswgj0It2bb2AVv5e8TBdgfVT +SPyTYp4ZezkyWZSbAxOx214njICI/XPQ+SrChbyLMsf1YaodKabKbDfaQgBb65ts +128XLicv3IoXacqkq27O29mBJwKBgQC2QgRLdKQFlXgBkhjSmzoA0pa2TVhQ1LxK +uYOf/aB4Zs/eo+C5OdEUyG6Rk3hfQwkW95TYwlbs0oXIwp2ClTMTNlBDsQEDvGoh +SnHFLYxqiAOokOcjzKqPt+AwqBoCyCUtcHKty4eJ/z3PznhmX5b1FkcsSVUcK7Ac +a1PMWOTpqwKBgQCA7uHGqv8evJ7pcCrvh3iXYA9exfy1bxyyLekwY00vNUs0+Jnc +icVQjlyi0unQs4yqGJmAIlTj+R5/pO5KSf17yUYEMaJML1fL89JQPJQZm9mHMkG4 +O7+mhiqTU4rPcM/L1oilAvLnz2USUOsyf/djng47wyvVXnWQHrPSn1fKRQKBgFe/ +pxOxH7s0gGe5MExNwfpdaYRx7qBUHCeZ875WvSjazx/xJKPpKznnWhyqtJygyMKP +BtHplzJEFXdYA7+4F7QbRT+h+8wRrcNDdU0qpd0wiRpiUXaR9lhlfgHPHV7Tf9rF +teDpCeOtyNPBI4SeZy6uwCuZTunWOt8j6V+MOQIrAoGBANZi8TPB6Kmqh6WA3u8X +BNA5oMDR5rv9Qeq5l/hbACPLXagoWsMT/C/6GEqGT96HGt0I4C84/2V1UWqHgEwq +ZntFGomLMQ9EuM5NtVkqgVZYhGfF5IryG4zx9Hj/FAgU9tAPDSA1rI58Gyf5gE6p +AVR7EIxKksh5Ie2M98x5iy/X +-----END PRIVATE KEY----- diff --git a/version_1.8.2/pabx/etc/asterisk/keys/asterisk.pem b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.pem new file mode 100644 index 0000000..e519ff8 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/asterisk.pem @@ -0,0 +1,51 @@ +-----BEGIN PRIVATE KEY----- +MIIEvgIBADANBgkqhkiG9w0BAQEFAASCBKgwggSkAgEAAoIBAQCdGLjRj36RPiOV +YLimOuKuQ1BGSTJw18YhNv/qDwaUcIevGtwCaz4SV4OF8kxSsWonpczgFiLXq6nD +cP4fYu4RQkJm2XiVjsyDXsidWvvXZXmYjprow2QbHyuavHYCp2pE9XAL7NLdiFjT +nuSmaokaeWPTExbF120oa7W7NSRhEH7suONsmpaIzArt6bu0XTMCHWilveNOL0Il +BE2lPELK7DVtkOqxR99HlTcH0V2sONTQz/8IQSHcvWNUGG2cBMLxPUzR+wLZQXs6 +SvRB1oCI7wOwRzU5p39pIKayGFZ4K2x8fv8SJhM+CAsY5ETBxcEAbAjL7YwU+cer +bHY/kcQNAgMBAAECggEAJCofyeZdvbPvXyEAAQyHSJSoczXAjeeubdEKguhonF13 +buEhCtGDXZeV6I0J8vNyu6PYkTGnXbzf/OUTK0iMA58cSC8CKnPQMuHsDwV1+nUa +0/roQHNSpUe8swd1p1DBDxTtcWFYfbU4tabbflACNf0B9QJs+KiKMYbyNCGcuVdF +D47BZljDY2e6YDReH1tXfQwmNg02m+0aZNXpxSs+mQqICRb8bXWt+jgaUWp6mC8h +XeZz/5d9Fw/qh5s6fnID73RkiOTkfoLsDve7xxHROC2rKDIJ+F/HFEBvHJIgjat6 +BXNX4wlGeV1DtcEIkmdlhO12BFhDGT611h1wFoLnBQKBgQDcqIlgT55NRzv6swDX +HdRuml1KLH4hiAeaWaE/QgT2uWhsYL1AADnveONoswgj0It2bb2AVv5e8TBdgfVT +SPyTYp4ZezkyWZSbAxOx214njICI/XPQ+SrChbyLMsf1YaodKabKbDfaQgBb65ts +128XLicv3IoXacqkq27O29mBJwKBgQC2QgRLdKQFlXgBkhjSmzoA0pa2TVhQ1LxK +uYOf/aB4Zs/eo+C5OdEUyG6Rk3hfQwkW95TYwlbs0oXIwp2ClTMTNlBDsQEDvGoh +SnHFLYxqiAOokOcjzKqPt+AwqBoCyCUtcHKty4eJ/z3PznhmX5b1FkcsSVUcK7Ac +a1PMWOTpqwKBgQCA7uHGqv8evJ7pcCrvh3iXYA9exfy1bxyyLekwY00vNUs0+Jnc +icVQjlyi0unQs4yqGJmAIlTj+R5/pO5KSf17yUYEMaJML1fL89JQPJQZm9mHMkG4 +O7+mhiqTU4rPcM/L1oilAvLnz2USUOsyf/djng47wyvVXnWQHrPSn1fKRQKBgFe/ +pxOxH7s0gGe5MExNwfpdaYRx7qBUHCeZ875WvSjazx/xJKPpKznnWhyqtJygyMKP +BtHplzJEFXdYA7+4F7QbRT+h+8wRrcNDdU0qpd0wiRpiUXaR9lhlfgHPHV7Tf9rF +teDpCeOtyNPBI4SeZy6uwCuZTunWOt8j6V+MOQIrAoGBANZi8TPB6Kmqh6WA3u8X +BNA5oMDR5rv9Qeq5l/hbACPLXagoWsMT/C/6GEqGT96HGt0I4C84/2V1UWqHgEwq +ZntFGomLMQ9EuM5NtVkqgVZYhGfF5IryG4zx9Hj/FAgU9tAPDSA1rI58Gyf5gE6p +AVR7EIxKksh5Ie2M98x5iy/X +-----END PRIVATE KEY----- +-----BEGIN CERTIFICATE----- +MIID2jCCAcICAQEwDQYJKoZIhvcNAQELBQAwMjEcMBoGA1UEAwwTQXN0ZXJpc2sg +UHJpdmF0ZSBDQTESMBAGA1UECgwJU2ltcGxlc0lQMB4XDTI0MDYyNDE1MTIxOFoX +DTI1MDYyNDE1MTIxOFowNDEeMBwGA1UEAwwVbWF0aGVvLVZvc3Ryby0xNS01NTEw +MRIwEAYDVQQKDAlTaW1wbGVzSVAwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEK +AoIBAQCdGLjRj36RPiOVYLimOuKuQ1BGSTJw18YhNv/qDwaUcIevGtwCaz4SV4OF +8kxSsWonpczgFiLXq6nDcP4fYu4RQkJm2XiVjsyDXsidWvvXZXmYjprow2QbHyua +vHYCp2pE9XAL7NLdiFjTnuSmaokaeWPTExbF120oa7W7NSRhEH7suONsmpaIzArt +6bu0XTMCHWilveNOL0IlBE2lPELK7DVtkOqxR99HlTcH0V2sONTQz/8IQSHcvWNU +GG2cBMLxPUzR+wLZQXs6SvRB1oCI7wOwRzU5p39pIKayGFZ4K2x8fv8SJhM+CAsY +5ETBxcEAbAjL7YwU+cerbHY/kcQNAgMBAAEwDQYJKoZIhvcNAQELBQADggIBAFjG +h6XBeSxoz6PeHOL4odXF+0LN/uF7+9zwb6vQXgekHwCrJmIXMm/fzdUhjoUJ5c1V +YpfJ7oSmAnv5exCxnxbVwYRnGvHfZMFvdzKOq8W86F35TQ92LPC1RGvl2+B1P4e+ +z37tdwkUxJNLmheEahYp7U4RFsWCL+SxYdWwIcRFlo6JoOEWdvsEdfnB8VO7zmKV +YkTaASTML+bK5M38SbU/rTwHZkH490aCoIawvtBUWYwwjfQBFYSDUvczmDb7JKs2 +qY9g17edCVOTa0WVu3Ne7rc3qlSCNnw7xCq+G7rbiBp8CFkdHaptZuqm96oq5ilA +kx4/+/3G6TP9O5lu8ZSJrYXU2c7LnVYsr9aV/ZbGl9XBKto8xfLarSY+jpmiEMw0 +zjy4n9fN4IS+JLBIGdpXh3PCuCdoYK7MTrCLqU+7d2wVSY/DFHbRIW+mbazJQaYF +HH1N1U/5Vvm9mjMbB9dN+ExEks3ZCGDjH90JkFv26MlgIeW7ZHz8vpfOOvD6Ty/5 +9jDOiFYX8SNpll/zCtu3GqqFkXmnskra5oAQoVhel0+6BrZ0S5aZJGkTdXZ7k6Qi +vfc+mF8i8i4eUgtlOfXkJpaDL5dFjhvwCHTj6DpC6vI9HzeP4GDN3kwg/E/AjZbj +8B2rS1m3RZYvW+GW0JPziVA3ddKERZgbGF/nn6jG +-----END CERTIFICATE----- diff --git a/version_1.8.2/pabx/etc/asterisk/keys/ca.cfg b/version_1.8.2/pabx/etc/asterisk/keys/ca.cfg new file mode 100644 index 0000000..56f0be8 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/ca.cfg @@ -0,0 +1,10 @@ +[req] +distinguished_name = req_distinguished_name +prompt = no + +[req_distinguished_name] +CN=Asterisk Private CA +O=SimplesIP + +[ext] +basicConstraints=CA:TRUE diff --git a/version_1.8.2/pabx/etc/asterisk/keys/ca.crt b/version_1.8.2/pabx/etc/asterisk/keys/ca.crt new file mode 100644 index 0000000..632f715 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/ca.crt @@ -0,0 +1,29 @@ +-----BEGIN CERTIFICATE----- +MIIE6zCCAtMCFGFy/YolQ88cSTU3Xz8ShTwYcDecMA0GCSqGSIb3DQEBCwUAMDIx +HDAaBgNVBAMME0FzdGVyaXNrIFByaXZhdGUgQ0ExEjAQBgNVBAoMCVNpbXBsZXNJ +UDAeFw0yNDA2MjQxNTEyMThaFw0yNTA2MjQxNTEyMThaMDIxHDAaBgNVBAMME0Fz +dGVyaXNrIFByaXZhdGUgQ0ExEjAQBgNVBAoMCVNpbXBsZXNJUDCCAiIwDQYJKoZI +hvcNAQEBBQADggIPADCCAgoCggIBAKSHAmnHgKocbumdco47bHpgMZS88NdIF0KC +3qBhEPzw/ryoAdDLXadOyhBZ2vcWcwJzdfmnhg/L6cfcONTixzsMAbtEtQd/1mMK +TOYR7eInDyR8sOpd7DKVjJdMDPEeYZu665Utq0DDuqGieterum5g2kyZYH2DGYPQ +zZFU0JVetM92u0IqnCEa8GSD8YZC2L2TcrF4uKlHxSuJZEFNbKmFj5GA/gfaJB7h +Grq5dIAViiEQKSm0l76HMD36mFaefylGoEPxjI7lY9ylBvHNCe4MgN8ohZCi+mU4 +4xEEuRScdG/xs135VavM/MUOYkbwGQL3pQB18fLsrVs2iwN3O5pd5m3KB/gx9K/5 +IU5rUwQ3kQjdQUr7Cic9cpQbSPPSLmRiqJjHEbXxh8NWHVt1EjH5skPVK3e1q7Jd +hrNb8w1walT5xqi0BYaaeBScwiN3mIScMutFXux6WSBeBjASzkFLX09UA87g1XjZ +ll3pQieF9tTCetcFnnNsvOc5YRAcX782en0gDM8xqU+TR2Btq2Txjt2RiNWQfA/b +ERUFZVMLSjISQ8RXdLl+k06zpYh3UAP2eVzJlk2Vzzscjppm7wLdGdrSFmGLaJZs +B1R7MoHa1Nka6Gm+fniNoSRp6ExNAl/qgF+ROZ1KbU3qnZmXd7Ws3Jqq4fyxIo7j +HLTc+Hu3AgMBAAEwDQYJKoZIhvcNAQELBQADggIBAHKNij3ACxdhX/lAtuW/1oEm +R0DIamIM7JltE2S7XwYyF9kCniLpgkoST38PMNdWMrI6/bX1US7WShxYwnapcuqV +oj9JQdVVepxI0mBde1eOgMGgAK9jblr4qyG+V2A7orRYfSi+SHYS+fx2r7MIMqsn +VANcndz8J0Mf8MWQuo+t0AbK7KAQMiebKYbE3ie5tDB1jWNRC6A565sOVBl9oxJC +jLwGwgjk89x/JXf1nFgsPm2ct4h4SIstOTDyormmuQvWIOMPT/Ulb2Z8SDkhLp7+ +rM5oBg9bNVjJpqJWsRw2Mtv7acIaFkEBdK1RHRslUFXviPFt1kkc7W9671bRFULV +VEEXLsP+jYoctBtWx97uN93T5UfEG0wuuhZgnNa4h5HWHc/ZLacaRYxWkuSgmrEX +8Zo7g7vFGvi+nMA1O/glYWZdowZ2dHu2fCug1L73cNgSIaYGFBjiz0Pb0inYLXCX +Xm3MxCEoOyrnoQPWyl3C2uDcdGkz/5jQaEhz7hqwx68lxXaxXt/Wr29P51eqsgi3 +woKD31vDEPpaSxdOMV9B2NUmRY5ivvMkcEOU491GTGDd2cc7c1Ep6MCEBaGAxPZp +abfM4Qkff8SEzcALSwWJy1hSOw879XwGOia2FZpSg0FE/CSOU+VGAfVj39WazUye +EaDAooR6vI2ULjTyytRE +-----END CERTIFICATE----- diff --git a/version_1.8.2/pabx/etc/asterisk/keys/ca.key b/version_1.8.2/pabx/etc/asterisk/keys/ca.key new file mode 100644 index 0000000..dfffebe --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/ca.key @@ -0,0 +1,54 @@ +-----BEGIN ENCRYPTED PRIVATE KEY----- +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 +0RerQ1yyQoXES8LbDU1XFEfDvBj5p02p +-----END ENCRYPTED PRIVATE KEY----- diff --git a/version_1.8.2/pabx/etc/asterisk/keys/tmp.cfg b/version_1.8.2/pabx/etc/asterisk/keys/tmp.cfg new file mode 100644 index 0000000..91020f0 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/keys/tmp.cfg @@ -0,0 +1,8 @@ +[req] +distinguished_name = req_distinguished_name +prompt = no + +[req_distinguished_name] +CN=matheo-Vostro-15-5510 +O=SimplesIP + diff --git a/version_1.8.2/pabx/etc/asterisk/khomp.conf b/version_1.8.2/pabx/etc/asterisk/khomp.conf new file mode 100644 index 0000000..930af97 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/khomp.conf @@ -0,0 +1,21 @@ +[globals] +log-to-disk=diagnostic; + +[channels] +pendulum-native = none +pendulum-incoming = none + +[groups] +1=b0l0:entrada-pstn + + +[cadences] + +[fxs-branches] + + +[fxs-hotlines] + + +[fxs-options] + diff --git a/version_1.8.2/pabx/etc/asterisk/khomp.tpl b/version_1.8.2/pabx/etc/asterisk/khomp.tpl new file mode 100644 index 0000000..c0b3a26 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/khomp.tpl @@ -0,0 +1,906 @@ +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;; This is the configuration file for the Khomp ;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;; channel version 4.2 ;;;;;;;;;;;;;;;;;;;;;;;;;;; +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; + +;;;; +;;;; Section for main general configurations +;;;; + +[globals] + +;; +;; Enable/disable the dial string compatibility with DAHDI in Dial string form, +;; if enabled all Khomp dial will use the dial string like DAHDI. +;; +;; possible syntaxes: +;; +;; Dial(Khomp/[c|r|d]/) + ;; Dial(Khomp/(g|G|r|R)[c|r|d]/) + ;; Dial(Khomp/i/) + ;; + ;; (default = no) + + ; dial-string-like-dahdi = no + + ;; + ;; Defines the behaviour of the module load function if communication to + ;; Khomp boards and/or devices cannot be started. Possible values: + ;; + ;; failure - Return failure and halts Asterisk execution. + ;; skip - Skips loading this module. + ;; + ;; (default = failure) + + ; load-error = failure + + ;; + ;; Defines the incoming context for calls on E1 channels. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD-LL) + + ; context-digital = khomp-DD-LL + + ;; + ;; Defines the incoming context for calls on FXS channels. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD-CC) + + ; context-fxs = khomp-DD-CC + + ;; + ;; Defines the "alternative" context for calls on FXS channels, which will be + ;; checked if the main context does not match for a call. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD) + + ; context-fxs-alt = khomp-DD + + ;; + ;; Defines the incoming context for calls on FXO channels. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD-CC) + + ; context-fxo = khomp-DD-CC + + ;; + ;; Defines the "alternative" context for calls on FXO channels, which will be + ;; checked if the main context does not match for a call. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD) + + ; context-fxo-alt = khomp-DD + + ;; + ;; Defines the incoming context for calls on GSM channels. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD-CC) + + ; context-gsm-call = khomp-DD-CC + + ;; + ;; Defines the "alternative" context for calls on GSM channels, which will be + ;; checked if the main context does not match for a call. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD) + + ; context-gsm-call-alt = khomp-DD + + ;; + ;; Defines the incoming context for messages on GSM channels. Some wildcards are + ;; accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-sms-DD-CC) + + ; context-gsm-sms = khomp-sms-DD-CC + + ;; + ;; Defines the incoming context for execution of a waiting call on GSM channels, + ;; used when some KGSM channel is already handling calls and another incoming + ;; call arrives in the same channel. + ;; + ;; The channel type used for execution is a special Khomp_Wait channel, which + ;; does not have any audio nor can be answered/dialed. Some wildcards are + ;; accepted on the context name, and described in the bottom of this section. + ;; + ;; Use "none" for disabling this feature. + ;; + ;; (default = khomp-wait-DD-CC) + + ; context-gsm-wait = khomp-wait-DD-CC + + ;; + ;; Defines the incoming context for calls on Passive Record boards (KPR). Some + ;; wildcards are accepted, and described in the bottom of this section. + ;; + ;; (default = khomp-DD-CC) + + ; context-pr = khomp-DD-CC + + ;; + ;; Set the logging of messages to console. Possible values (to set more than one, + ;; separate the values with comma): + ;; + ;; errors -- Error messages, when something goes really wrong. + ;; warnings -- Warnings, used when something might not be going as expected. + ;; messages -- Generic messages, used to indicate some information. + ;; events -- Show received K3L events as console messages. + ;; commands -- Show sent K3L commands as console messages. + ;; audio -- Enable messages for K3L audio events (very verbose!). + ;; modem -- Enable messages for data received from KGSM modems. + ;; link -- Enable logging of link status changes. + ;; standard -- Special, enable default messages (RECOMMENDED). + ;; all -- Special, enable ALL messages (should not be used naively). + ;; + ;; (default = standard) + + ; log-to-console = standard + + ;; + ;; Set the logging of messages to disk. Possible values (to set more than one, + ;; separate the values with comma): + ;; + ;; errors -- Error messages, when something goes really wrong. + ;; warnings -- Warnings, used when something might not be going as expected. + ;; messages -- Generic messages, used to indicate some information. + ;; events -- Record received K3L events as log messages. + ;; commands -- Record sent K3L commands as log messages. + ;; audio -- Enable messages for K3L audio events (very verbose!). + ;; modem -- Enable messages for data received from KGSM modems. + ;; link -- Enable logging of link status changes. + ;; functions -- Enable debugging for functions. Should not be used naively! + ;; threads -- Enable debugging for threads. Should not be used naively! + ;; locks -- Enable debugging for locks. Should not be used naively! + ;; stream-notice -- Enable debugging for stream changes, failures, overruns, underruns. + ;; Should not be used naively! + ;; stream-debug -- Enable debugging for streams (DO NOT USE THIS!). + ;; + ;; standard -- Special, enable default messages (RECOMMENDED). + ;; debugging -- Special, enable debug messages (should not be used naively). + ;; all -- Special, enable ALL messages (DO NOT USE THIS!). + ;; + ;; (default = standard) + + ; log-to-disk = standard + + ;; + ;; Sets the global orig (CALLERID) base for FXS boards. This number is added + ;; to a sequencial number, which is incremented for each FXS board and FXS + ;; channel in the system. + ;; + ;; For more example of how to use this option, see channel README file, + ;; section 'Opcoes do application Dial', item 'Dial(Khomp/r304)'. + ;; + ;; (default = 00) + + ; fxs-global-orig = 00 + + ;; + ;; Defines the way audio RX synchorization is handled. + ;; + ;; Possible values: + ;; + ;; softtimer-thread - Creates a thread which signals all channels for + ;; pending data each (audio-packet-length/8) ms. + ;; Default mode of operation, works on virtually any + ;; system using default configuration. + ;; + ;; softtimer-multi-thread - Same as above, but creates one thread for each + ;; device (board or module). + ;; + ;; softtimer-kernel - Available for kernel 2.6.22+ and {g,eg}libc 2.7+, + ;; uses timerfd syscalls for creating timers for + ;; synchronizing the audio stream reported to Asterisk. + ;; + ;; auto (default) - Selects best method for synchronization, currently just + ;; sets the option for 'softtimer-thread'. + + ; audio-rx-sync = auto + + ;; + ;; Defines the length (in BYTES) for A-Law audio packets sent to Asterisk. Can + ;; be used to change the packet size for applications and/or channels that need + ;; fixed-sized data at a specific size (e.g.: iaxmodem, some SIP devices). + ;; DO NOT CHANGE THIS OPTION NAIVELY, AS IT MAY RESULT IN UNDESIRED DELAY DUE + ;; TO EXTRA BUFFERING NEEDED FOR PACKET SIZE CONVERSION. + ;; + ;; Some useful values: + ;; + ;; 16 ms => 128 bytes (default, no extra buffering needed) + ;; + ;; 10 ms => 80 bytes (minimum) + ;; 20 ms => 160 bytes + ;; 30 ms => 240 bytes (maximum) + ;; + ;; Minimum step is 8 bytes (1ms). + + ; audio-packet-length = 128 + + ;; + ;; Defines if the activation and deactivation of Kommuter is done automatically by + ;; the channel, or manually by the user. Possible values: + ;; + ;; auto -- Khomp channel driver starts all kommuter devices at initialization + ;; and stops them if the module is unloaded. + ;; + ;; manual -- The user must explicity call the CLI command < khomp kommuter on/off >, + ;; that starts or stops the kommuter devices connected to this machine. + ;; + ;; (default = auto) + + ; kommuter-activation = auto + + ;; + ;; Defines the default value for the Kommuter watchdog in seconds. + ;; All kommuters conected to this machine will be initialized with this value, + ;; and will commute the links after reaching this time with no response of the channel. + ;; The minimum is 0 (will never commute the links), and maximum value is 255 seconds. + ;; + ;; (default = 10) + + ; kommuter-timeout = 10 + + ;; + ;; When adjusted to some DTMF digit sequence, it will define those as the digits + ;; to be used to initialize a call transfer using PBX-to-PBX signaling. + ;; + ;; (default = empty) + + ; user-transfer-digits = + + + ;;;;;;;;;;;;;;;;;;;;;; CONTEXTS WILDCARDS ;;;;;;;;;;;;;;;;;;;;;; + ;; + ;; For incoming contexts, you can use the following wildcards: + ;; + ;; 'DD' (device number): the sequence number of the board on the + ;; system (can be checked using "khomp summary", valid for all + ;; board models); + ;; + ;; 'LL' (link number): the sequence number of link where the call + ;; has arrived on the board. valid only for E1 boards. + ;; + ;; 'SSSS' (serial number): the serial number of the board (can + ;; be checked using "khomp summary", and it's valid for all + ;; board models); + ;; + ;; 'CC' (channel number): the channel number on which the call + ;; or message has arrived (valid for FXO, FXS and GSM boards); + ;; + ;; 'CCC' (channel number): same as above, but valid only for E1 + ;; channels; + ;; + + + ;;;; + ;;;; Section for main configurations about channels. + ;;;; + + ;;;; In this section you can apply any of the configurations below to a specific + ;;;; channel selection, by using the customized section [channels-], + ;;;; where is a custom dialstring, as the one used on the Dial() application. + ;;;; The other channels will have the configurations defined on the [channels] + ;;;; section, while the specific channels defined here will have these options + ;;;; overwritten. For more information about the dialstrings allowed + ;;;; check the Khomp channel driver manual. + + ;;;; ex: [channels-b0l0] + ;;;; drop-collect-call = yes + ;;;; + ;;;; [channels-b1c0+b1c1] + ;;;; input-volume = +2 + ;;;; output-volume = +2 + + + [channels] + + ;; + ;; Enable/disable generalized echo cancellation in the channel, for calls + ;; passing inside Asterisk (disabled for bridged calls). + ;; + ;; (default = yes) + + ; echo-canceller = yes + + ;; + ;; Enable/disable AGC (auto gain control). Should be used carefully, as it + ;; can make line noise really loud. + ;; + ;; (default = no) + + ; auto-gain-control = no + + ;; + ;; Enable/disable sending DTMFs out-band as a way to pass detected DTMFs to + ;; Asterisk. Needed if Asterisk generates digits for us in Dial (option 'D') + ;; or is being used for IVR ("URA", in pt_BR). + ;; + ;; (default = yes) + + ; out-of-band-dtmfs = yes + + ;; + ;; Enable/disable DTMF suppression. WARNING: If you disable this, DTMFs will + ;; not be suppressed anymore! You should only use this option if you know what + ;; you are doing. + ;; + ;; (default = yes) + + ; dtmf-suppression = yes + + ;; + ;; Adjust connection automagically if a FAX tone is detected. + ;; + ;; (default = yes) + + ; auto-fax-adjustment = yes + + ;; + ;; Time (is seconds) since connection, when we may detect FAX tone and perform + ;; automagical adjustment. After this, FAX tone detection is ignored. + ;; + ;; Possible values: 0 - 9999 + ;; + ;; (default = 30). + + + ; fax-adjustment-timeout = 30 + + ;; + ;; Enable/disable pulse detection (reported as DTMF digits). + ;; + ;; (default = no) + + ; pulse-forwarding = no + + ;; + ;; Enable correct standard following for R2/MFC protocol. + ;; + ;; NOTE: This option is disabled by default as R2 protocol timeout for condition + ;; reporting is only 7 seconds, and for correct operation we need to send a + ;; fake "Line Free" condition if Asterisk is used in the midle of two R2 links + ;; (forwarding calls from one to another) or if incoming calls may take long to + ;; receive RINGING or BUSY status. + ;; + ;; You can set this to "yes" to have a correct behaviour for condition + ;; obtaining/reporting, but only if Asterisk is directly connected to a CO (central + ;; office) or a fast signaling PBX, or incoming calls are handled quickly enogth by + ;; dialplan logic - IOW, you must GUARANTEE there will be no more than 7 seconds from + ;; call arrival to call progress reporting. + ;; + ;; (default = no) + + ; r2-strict-behaviour = no + + ;; + ;; Set the delay (in ms) after sending ringback condition where audio stream + ;; should be opened for the channel. Limited to 25ms minimum, 500ms maximum. + ;; + ;; (default = 250) + + ; r2-preconnect-wait = 250 + + ;; + ;; Chooses the method for disconnecting calls on the R2/MFC protocol. + ;; + ;; NOTE: This option is adjusted to "force-disconnect" by default, as disconnecting + ;; incoming calls in the standard way may result in 90 seconds delay for releasing the + ;; timeslot, thus leading to an under-utilization of the available lines. This option + ;; is non-ITU.T, but allowed by Brazillian variant of R2/MFC. + ;; + ;; This option can be changed to "release" for a more agressive disconnect method, if + ;; the "force-disconnect" is not releasing calls fast enought, or to "disconnect" for + ;; attaining strictly to the international R2 standard. + ;; + ;; WARNING: Do not use the option 'release' unless you really know what you are doing! + ;; This option instructs the channel to have a complete non-standard behaviour, + ;; which could result in signaling errors for the remote site. + ;; + ;; Available options: + ;; + ;; force-disconnect Use force disconnection (signals AB as '00') + ;; disconnect Use standard disconnection (signals AB as '11') + ;; release Release the channel w/o disconnecting (signals AB as '10') + ;; + ;; (default = "force-disconnect") + + ; r2-hangup-behaviour = force-disconnect + + ;; + ;; Set output volume level. Possible values: + ;; + ;; * '+ N' = increase N times; + ;; * '- N' = decrease N times. + ;; * '0' = leave default. + ;; + ;; (default = 0) + + ; output-volume = 0 + + ;; + ;; Set input volume level. Can only be used if AGC (and not pulse detection) + ;; is enabled on the board configuration. Possible values: + ;; + ;; * '+ N' = increase N times; + ;; * '- N' = decrease N times. + ;; * '0' = leave default. + ;; + ;; (default = 0) + + ; input-volume = 0 + + ;; + ;; Sets the default AMA flags, affecting the categorization of entries in the + ;; call detail records. + ;; + ;; (default = default) + + ; amaflags = default + + ;; + ;; Defines call groups for calls of all channel. + ;; + ;; (default = 0) + + ; callgroup = 0 + + ;; + ;; Set the default group that can pickup fellow workers' calls. + ;; + ;; (default = 0) + + ; pickupgroup = 0 + + ;; + ;; Sets the account code for calls placed on the channel. The account code may + ;; be any alphanumeric string. + ;; + ;; (default = ) + + ; accountcode = + + ;; + ;; Set the language of the channel (useful for selecting audio messages of a + ;; specific language on answer). + ;; + ;; (default = ) + + ; language = pt_BR + + ;; + ;; Set the music on hold class of the channel (useful for selecting a group of + ;; songs to play on hold). + ;; + ;; (default = default) + + ; mohclass = default + + ;; + ;; Sets the CallerID detection type for FXO boards using Asterisk(r) interface. + ;; + ;; NOTE: This option is not used for BINA DTMF, which is detected by the + ;; board DSPs, and is always enabled. + ;; + ;; Possible values: + ;; + ;; bell Bell FSK standard + ;; v23 V23 FSK standard + ;; none Disable the detection + ;; + ;; (default = bell) + + ; fxo-fsk-detection = bell + + ;; Sets the timeout for CallerID detection (is ms). + ;; + ;; (default = 2000) + + ; fxo-fsk-timeout = 2000 + + ;; + ;; Sets the amount of time to wait before sending FLASH command on KUserTransfer + ;; application. Possible values are between 500 and 5000 miliseconds. + ;; + ;; (default = 1000) + + ; fxo-user-xfer-delay = 1000 + + ;; + ;; Enable or disable sending originator number throught BINA DTMF signalization + ;; to a FXS branch during call setup. + ;; (default = no) + + ; fxs-send-bina-dtmf = no + + ;; + ;; Enable or disable sending originator number throught FSK signalization to a + ;; FXS branch during call setup. + ;; (default = no) + + ; fxs-send-fsk = no + + ;; + ;; Enables/disables the use of sharp (#) as an end-of-number digit for immediate + ;; dialing. This does not affect special numbers which start on sharp, like '#8'. + ;; + ;; (default = no) + + ; immediate-sharp-dial = no + + ;; + ;; Sets the numbers (separated by comma) in which the standard dialtone will + ;; be changed to CO dialtone (central office tone) when they are pressed. + ;; + ;; (default = ) + + ; co-dialtone-digits = 0,90 + + ;; + ;; Sets the cadence name for standard dialtone (PBX dialtone by default). + ;; + ;; (default = std-dialtone) + + ; dialtone-cadence = pbx-dialtone + + ;; + ;; Sets the cadence name for voicemail dialtone, used for the branch + ;; associated with an user when he/she has voicemail. + ;; + ;; (default = vm-dialtone) + + ; vm-dialtone-cadence = vm-dialtone + + ;; + ;; Sets the cadence name for CO dialtone. + ;; + ;; (default = co-dialtone) + + ; co-dialtone-cadence = co-dialtone + + ;; + ;; This is the delay time to really disconnect a channel after the disconnect + ;; event arrive. If a connect event comes up in this interval, then the + ;; disconnection is ignored and the call keeps going on. Values are in + ;; miliseconds. + ;; + ;; (default = 0) + + ; disconnect-delay = 0 + + ;; + ;; This timer controls the delay associated with ringback generation in the + ;; Khomp channel, when the other side *does not send audio* - in other words, + ;; this is used when calling peers located at VoIP channels. + ;; Values are in milliseconds. + ;; + ;; (default = 1500) + + ; delay-ringback-co = 1500 + + ;; + ;; This timer controls the delay associated with ringback generation in the + ;; Khomp channel when the other side report a continuous stream of audio in + ;; silence - in other words, this is used when the audio is present but does + ;; not have any tone. Values are in milliseconds. + ;; + ;; (default = 2500) + + ; delay-ringback-pbx = 2500 + + ;; + ;; Defines if the channel should optimize audio delay by droping longstanding + ;; packets from audio buffer. This guarantees the minimal audio delay for the + ;; user, and avoid delays associated with miscoded SIP clients. However, + ;; depending on the system's scheduling policy (some 2.6 kernel releases), + ;; this may result on excessive drop of packets, and audible audio skipping. + ;; This should not be changed naively. + ;; + ;; (default = no) + + ; optimize-audio-path = no + + ;; + ;; Defines if the channel should ignore some uncommon DTMF digits detected by + ;; the board (A, B, C and D). This reduces the number of false positives which + ;; may happen sometimes, without affecting correctness on traditional scenarios. + ;; However, if you need to pass those digits througth the board, you may need + ;; to set this option to 'no'. + ;; + ;; (default = yes) + + ; ignore-letter-dtmfs = yes + + ;; + ;; For KFXO boards, defines if audio will be allowed being sent into outgoing + ;; calls before it has been answered. + ;; + ;; (default = yes) + + ; fxo-send-pre-audio = yes + + ;; + ;; When there is a request to indicate busy for an incoming KFXO call, the + ;; ringing channel is taken off hook and then placed on hook, so it now goes + ;; to answered state and we can send audio throught the line. + + ;; If the off/on hook time interval is too short, the PSTN may ignore it, and + ;; keep the line in a ringing state. If it is too long, the call may be charged. + ;; The option below defines the delay between the line being answered and being + ;; disconnected, in miliseconds (from 50ms to 90000ms). + ;; + ;; (default = 1250) + + ; fxo-busy-disconnection = 1250 + + ;; + ;; Defines the timeout, in seconds, between digits of a FXS board's extension. + ;; + ;; (default = 7) + + ; fxs-digit-timeout = 7 + + ;; + ;; Enables/Disables the action of dropping collect calls. If enabled, all + ;; collect calls will be dropped no matter what KDropCollectCall is set to. + ;; This feature is not available for KGSM-USB devices. + ;; + ;; (default = no) + + ; drop-collect-call = no + + ;; + ;; Configures which calls detected by call analyzer will be dropped + ;; when the "drop" option is passed on the Dial application. + ;; Available only in digital signaling (E1 or GSM). + ;; Possible values: + ;; + ;; message_box,human_answer,answering_machine,carrier_message,unknown + ;; + ;; (default = ) + + ; drop-options = + + ;; + ;; When enabled, this channel will be elegible for transfer using PBX-to-PBX signaling + ;; if the underlying signalization supports this feature (ISDN, Line Side, CAS EL7, + ;; E1 LC, or FXO signalings). + ;; + ;; (default = yes) + + ; user-transfer-enable = yes + + ;; + ;; Defines the facility used by the ISDN protocol for QSig transfers. Possible values: + ;; + ;; qsig-ct Use QSig CT transfer (preferred method). + ;; qsig-ct-rr Use QSig CT transfer with reroute. + ;; qsig-ct-pr Use QSig CT transfer eith path replace. + ;; qsig-ssct Use QSig SSCT transfer. + ;; any Use any method. + ;; none Do not transfer ISDN calls. + ;; + ;; (default = qsig-ct) + + ; qsig-transfer-facility = qsig-ct + + ;; + ;; Defines the flash behaviour: attended transfer or pendulum. + ;; + ;; Possible values: + ;; + ;; xfer Use atxfer option from features.conf. + ;; pendulum Use pendulum (if enabled). + ;; auto If enabled, use pendulum, if not, use xfer. + ;; + ;; (default = xfer) + + ;; flash-behaviour = xfer + + ;; + ;; Defines the DTMF digit sequence used to answer a waiting call (placing the current + ;; on hold), place the active call on hold and start a new outgoing call, and to + ;; alternate between answered calls. + ;; + ;; (default = empty) + + ; pendulum-digits = + + ;; Defines the channels where the pendulum feature for outgoing will be enabled automatically. + ;; + ;; Possible values: + ;; + ;; none No channel will have the feature by default. + ;; fxs Enable the feature for FXS channels only. + ;; all All channels will have the feature. + ;; + ;; (default = fxs) + + pendulum-native = none + + ;; Defines the channels where the pendulum feature for incoming will be enabled automatically + ;; (removing the need to use "@" in the Dial string for activation). + ;; + ;; Possible values: + ;; + ;; none No channel will have the feature by default. + ;; fxs Enable the feature for FXS channels only. + ;; all All channels will have the feature. + ;; + ;; (default = fxs) + ;; + ;; NOTE: In case of signallings or technologies where a single channel does not + ;; necessarily corresponds to a specific user or destination, the "@" + ;; notation is needed for specifying the destination number to the + ;; allocation procedures. For more info, please check the Manual. + + pendulum-incoming = none + + ;; Defines the timeout for an waiting call to stay in the ringing state without being + ;; answered. After this, the waiting call is dropped, and the waiting cadence is stopped. + ;; + ;; (default = 20000ms) + + ; pendulum-timeout = 20000 + + ;; Defines if channels should be enabled or not. Useful in specific channel sections. + ;; Use for debugging purpouses only, not recommended for production environments. + ;; + ;; (default = yes) + + ; enabled = yes + + + ;;;; + ;;;; Section for configuring allocation groups. + ;;;; + + [groups] + + ;; In this section, you should define options using the following syntax: + ;; + ;; = [:] + ;; + ;; ex: 'pstn = b0l0 + b1c38' (without quotes) + ;; ex: 'pstn = b0l0 + b1c38:from-pstn' (without quotes) + ;; + ;; You may define your own groups. In the example above, the group + ;; called pstn can be used in the Dial string as Dial(Khomp/Gpstn/...) + ;; or Dial(Khomp/gpstn/...). As a result, the allocation string will be + ;; replaced with the one associated with the group "pstn". This is the same + ;; of doing Dial(Khomp/b0l0 + b1c38/...). + ;; In the second example, a context is also defined which can be used in + ;; extensions.conf for inbound calls on that allocation string's range. + ;; + ;; If, and only if, choose compatibility mode like DAHDI in compatibily session, your + ;; groups must follow the syntax: + ;; = -[:] | , [:] + ;; + ;; ex: '1 = 1-30' (without quotes) + ;; ex: '1 = 1,2,3,4-10:from-pstn' (without quotes) + ;; + ;; Or if no group was added, the groups for compatibily mode like DAHDI will be set automatically + ;; with full range of channels at the each board/link, and each board/link will be a group, + ;; per example, for a E1 only board, will be generated two groups, first with a 1 to 30 channels (link 1), and + ;; second group of 31 to 60 channels (link 2). + + + ;;;; + ;;;; Section for configuring cadences used on FXS boards and the whole + ;;;; channel (fast busy, ringback tones, etc). + ;;;; + ;E1 + ;1=b0l0 + + ;GSM + ;Vazio + ;1=b1c2-4 + ;Claro + ;2=b1c0-7 + ;OI + ;3=b1c5-6 + ;Vivo + ;4=b1c7 + {GRUPOS} + [cadences] + + ;; Default value for cadences. You may define your own cadences, and + ;; also use them in the Dial arguments as "ring_cadence=your_cadence_name". + ;; + ;; "0,0" means a continuous dialtone, only valid for audio generation + ;; (i.e. cannot be used for ringing an FXS channel). + ;; + ;; (default as defined below, independent of compatibility mode, + ;; and only to be used in Dial arguments) + + ; co-dialtone = 0,0 + ; vm-dialtone = 1000,100,100,100 + ; pbx-dialtone = 1000,100 + ; fast-busy = 100,100 + ; ringback = 1000,4000 + ; waiting-call = 100,100,100,3700 + ; ring = 1000,4000 + + ;; If choose compatibily mode like DAHDI in compatibility session, the + ;; cadences must be a sequential number starts by 1, to be used in dial string. + ;; + ;; ex: Dial(Khomp/1r1/9901) + ;; + ;; Note: Negative values are not accepted, to configuring where the caller ID spill is + ;; to be placed, use the properly configuration section. + ;; + ;; (default as defined below) + + ; 1 = 125, 125, 2000, 4000 + ; 2 = 250, 250, 500, 1000 + ; 3 = 125, 125, 125, 125 + ; 4 = 1000, 500, 2500, 5000 + + + ;;;; + ;;;; Section for configuring CALLERID's associated with FXS boards. + ;;;; + + [fxs-branches] + + ;; In this section, you should define options using the following syntax: + ;; + ;; 'orig_prefix = serial number 0, serial number 1, ...' + ;; + ;; ex: '800 = 1234,4535' (without quotes) + + {SERIES} + + ;; + ;; In the example above (assuming KFXS-SPX boards 1234 and 4535), the + ;; branches will be numbered from 800 to 829 in board 1234, and from + ;; 830 to 859 in board 4535. + + + ;;;; + ;;;; Section for configuring FXS hotlines. + ;;;; + + [fxs-hotlines] + + ;; In this section, you should define options using the following syntax: + ;; + ;; 'orig_prefix = destination_number' + ;; + ;; ex: '804 = 32332933' (without quotes) + ;; + ;; In the example above, the branch numbered 804 will call the number + ;; 3233-2933 (Khomp support number) every time the FXS branch goes off hook. + + {HOTLINES} + + ;;; + ;;; Section for configuring specific options for FXS branches. + ;;; + + [fxs-options] + + ;; In this section, you should define options using the following syntax: + ;; + ;; 'orig_prefix = option1:value | option2:value | option3:value' ... + ;; + ;; ex: '804 = pickupgroup:1,4-15 | output-volume:+2' (without quotes) + ;; + + {RAMAIS} + + ;; In the example above, the branch numbered 804 will have specific + ;; configuration for 'pickupgroup' and default output volume set to +2. + ;; + ;; Possible values to options is: + ;; pickupgroup, callgroup, context, input-volume, output-volume language, + ;; mohclass, amaflags, accountcode, calleridnum, calleridname, mailbox. + + + diff --git a/version_1.8.2/pabx/etc/asterisk/logger.conf b/version_1.8.2/pabx/etc/asterisk/logger.conf new file mode 100644 index 0000000..0ae364a --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/logger.conf @@ -0,0 +1,142 @@ +; +; Logging Configuration +; +; In this file, you configure logging to files or to +; the syslog system. +; +; "logger reload" at the CLI will reload configuration +; of the logging system. + +[general] +; +; Customize the display of debug message time stamps +; this example is the ISO 8601 date format (yyyy-mm-dd HH:MM:SS) +; +; see strftime(3) Linux manual for format specifiers. Note that there is also +; a fractional second parameter which may be used in this field. Use %1q +; for tenths, %2q for hundredths, etc. +; +;dateformat=%F %T ; ISO 8601 date format +;dateformat=%F %T.%3q ; with milliseconds +; +; +; This makes Asterisk write callids to log messages +; (defaults to yes) +;use_callids = no +; +; This appends the hostname to the name of the log files. +;appendhostname = yes +; +; This determines whether or not we log queue events to a file +; (defaults to yes). +;queue_log = no +; +; Determines whether the queue_log always goes to a file, even +; when a realtime backend is present (defaults to no). +;queue_log_to_file = yes +; +; Set the queue_log filename +; (defaults to queue_log) +;queue_log_name = queue_log +; +; When using realtime for the queue log, use GMT for the timestamp +; instead of localtime. The default of this option is 'no'. +;queue_log_realtime_use_gmt = yes +; +; Log rotation strategy: +; none: Do not perform any logrotation at all. You should make +; very sure to set up some external logrotate mechanism +; as the asterisk logs can get very large, very quickly. +; sequential: Rename archived logs in order, such that the newest +; has the highest sequence number [default]. When +; exec_after_rotate is set, ${filename} will specify +; the new archived logfile. +; rotate: Rotate all the old files, such that the oldest has the +; highest sequence number [this is the expected behavior +; for Unix administrators]. When exec_after_rotate is +; set, ${filename} will specify the original root filename. +; timestamp: Rename the logfiles using a timestamp instead of a +; sequence number when "logger rotate" is executed. +; When exec_after_rotate is set, ${filename} will +; specify the new archived logfile. +;rotatestrategy = rotate +; +; Run a system command after rotating the files. This is mainly +; useful for rotatestrategy=rotate. The example allows the last +; two archive files to remain uncompressed, but after that point, +; they are compressed on disk. +; +; exec_after_rotate=gzip -9 ${filename}.2 +; +; +; For each file, specify what to log. +; +; For console logging, you set options at start of +; Asterisk with -v for verbose and -d for debug +; See 'asterisk -h' for more information. +; +; Directory for log files is configures in asterisk.conf +; option astlogdir +; +; All log messages go to a queue serviced by a single thread +; which does all the IO. This setting controls how big that +; queue can get (and therefore how much memory is allocated) +; before new messages are discarded. +; The default is 1000 +logger_queue_limit = 15000 +; +; +[logfiles] +; +; Format is "filename" and then "levels" of debugging to be included: +; debug +; notice +; warning +; error +; verbose() +; dtmf +; fax +; security +; +; Special filename "console" represents the root console +; +; Filenames can either be relative to the standard Asterisk log directory +; (see 'astlogdir' in asterisk.conf), or absolute paths that begin with +; '/'. +; +; Verbose takes an optional argument, in the form of an integer level. +; Verbose messages with higher levels will not be logged to the file. If +; the verbose level is not specified, it will log verbose messages following +; the current level of the root console. +; +; Special level name "*" means all levels, even dynamic levels registered +; by modules after the logger has been initialized (this means that loading +; and unloading modules that create/remove dynamic logger levels will result +; in these levels being included on filenames that have a level name of "*", +; without any need to perform a 'logger reload' or similar operation). +; Note that there is no value in specifying both "*" and specific level names +; for a filename; the "*" level means all levels. The only exception is if +; you need to specify a specific verbose level. e.g, "verbose(3),*". +; +; We highly recommend that you DO NOT turn on debug mode if you are simply +; running a production system. Debug mode turns on a LOT of extra messages, +; most of which you are unlikely to understand without an understanding of +; the underlying code. Do NOT report debug messages as code issues, unless +; you have a specific issue that you are attempting to debug. They are +; messages for just that -- debugging -- and do not rise to the level of +; something that merit your attention as an Asterisk administrator. Debug +; messages are also very verbose and can and do fill up logfiles quickly; +; this is another reason not to have debug mode on a production system unless +; you are in the process of debugging a specific issue. +; +;debug => debug +;security => security +console => notice,warning,error +;console => notice,warning,error,debug +messages => notice,warning,error +full => notice,warning,error,debug,verbose,dtmf,fax + +;syslog keyword : This special keyword logs to syslog facility +; +;syslog.local0 => notice,warning,error +; diff --git a/version_1.8.2/pabx/etc/asterisk/manager.conf b/version_1.8.2/pabx/etc/asterisk/manager.conf new file mode 100644 index 0000000..1aceacd --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/manager.conf @@ -0,0 +1,37 @@ +[general] +;displaysystemname = yes +enabled = yes +webenabled = no +port = 5038 +httptimeout = 60 +bindaddr = 0.0.0.0 +displayconnects = yes +;timestampevents = yes + +[manager] +deny=0.0.0.0/0 +permit=127.0.0.1/32 +permit=192.168.115.0/24 +secret=manager007 +writetimeout=200 +read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan +write = system,call,agent,user,config,command,reporting,originate,message,dtmf + +[sipadmin] +deny=0.0.0.0/0 +permit=127.0.0.1/32 +permit=192.168.115.0/24 +secret=SIPadmin007@8280 +writetimeout=200 +read = system,call,log,verbose,agent,user,config,dtmf,reporting,cdr,dialplan +write = system,call,agent,user,config,command,reporting,originate,message,dtmf + +[opensev] +deny=0.0.0.0/0 +permit=127.0.0.1/32 +permit=192.0.0.0/8 +permit=172.0.0.0/8 +permit=10.0.0.0/8 +secret=20170802_0p3ns3v +writetimeout=200 +read=call diff --git a/version_1.8.2/pabx/etc/asterisk/meetme.conf b/version_1.8.2/pabx/etc/asterisk/meetme.conf new file mode 100644 index 0000000..1d25aec --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/meetme.conf @@ -0,0 +1,5 @@ +[general] +;audiobuffers=32 + +#include meetme_salas.conf +#include meetme_dinamica.conf diff --git a/version_1.8.2/pabx/etc/asterisk/meetme_dinamica.conf b/version_1.8.2/pabx/etc/asterisk/meetme_dinamica.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/meetme_salas.conf b/version_1.8.2/pabx/etc/asterisk/meetme_salas.conf new file mode 100644 index 0000000..f567a81 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/meetme_salas.conf @@ -0,0 +1 @@ +[rooms] diff --git a/version_1.8.2/pabx/etc/asterisk/mgcp.conf b/version_1.8.2/pabx/etc/asterisk/mgcp.conf new file mode 100644 index 0000000..107a30d --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/mgcp.conf @@ -0,0 +1,142 @@ +; +; MGCP Configuration for Asterisk +; +[general] +;port = 2427 +;bindaddr = 0.0.0.0 + +; See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of these parameters. +;tos=cs3 ; Sets TOS for signaling packets. +;tos_audio=ef ; Sets TOS for RTP audio packets. +;cos=3 ; Sets 802.1p priority for signaling packets. +;cos_audio=5 ; Sets 802.1p priority for RTP audio packets. + +; --------------------- DIGIT TIMEOUTS ---------------------------- +firstdigittimeout = 30000 ; default 16000 = 16s +gendigittimeout = 10000 ; default 8000 = 8s +matchdigittimeout = 5000 ; defaults 3000 = 3s + +; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- +; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a + ; MGCP channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The MGCP channel can accept jitter, + ; thus an enabled jitterbuffer on the receive MGCP side will only + ; be used if the sending side can create jitter and jbforce is + ; also set to yes. + +; jbforce = no ; Forces the use of a jitterbuffer on the receive side of a MGCP + ; channel. Defaults to "no". + +; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + +; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + +; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a MGCP + ; channel. Two implementations are currently available - "fixed" + ; (with size always equals to jbmax-size) and "adaptive" (with + ; variable size, actually the new jb of IAX2). Defaults to fixed. + +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + +; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". +; ---------------------------------------------------------------------------------- + +;[dlinkgw] +;host = 192.168.0.64 +;context = default +;directmedia = no +;line => aaln/2 +;line => aaln/1 + +;; The MGCP channel supports the following service codes: +;; # - Transfer +;; *67 - Calling Number Delivery Blocking +;; *70 - Cancel Call Waiting +;; *72 - Call Forwarding Activation +;; *73 - Call Forwarding Deactivation +;; *78 - Do Not Disturb Activation +;; *79 - Do Not Disturb Deactivation +;; *8 - Call pick-up +; +; known to work with Swissvoice IP10s +;[192.168.1.20] +;context=local +;host=192.168.1.20 +;callerid = "John Doe" <123> +;callgroup=0 ; in the range from 0 to 63 +;pickupgroup=0 ; in the range from 0 to 63 +;nat=no +;threewaycalling=yes +;transfer=yes ; transfer requires threewaycalling=yes. Use FLASH to transfer +;callwaiting=yes ; this might be a cause of trouble for ip10s +;cancallforward=yes +;line => aaln/1 +; + +;[dph100] +; +; Supporting the DPH100M requires defining DLINK_BUGGY_FIRMWARE in +; chan_mgcp.c in addition to enabling the slowsequence mode due to +; bugs in the D-Link firmware +; +;context=local +;host=dynamic +;dtmfmode=none ; DTMF Mode can be 'none', 'rfc2833', or 'inband' or + ; 'hybrid' which starts in none and moves to inband. Default is none. +;slowsequence=yes ; The DPH100M does not follow MGCP standards for sequencing +;line => aaln/1 + +; known to work with wave7optics FTTH LMGs +;[192.168.1.20] +;accountcode = 1000 ; record this in cdr as account identification for billing +;amaflags = billing ; record this in cdr as flagged for 'billing', + ; 'documentation', or 'omit' +;context = local +;host = 192.168.1.20 +;wcardep = aaln/* ; enables wildcard endpoint and sets it to 'aaln/*' + ; another common format is '*' +;callerid = "Duane Cox" <123> ; now lets setup line 1 using per endpoint configuration... +;callwaiting = no +;callreturn = yes +;cancallforward = yes +;directmedia = no +;transfer = no +;dtmfmode = inband +;setvar=one=1 ; Set channel variables associated with this incoming line +;setvar=two=2 +;line => aaln/1 ; now lets save this config to line1 aka aaln/1 +;clearvars=all ; Reset list of variables back to none +;callerid = "Duane Cox" <456> ; now lets setup line 2 +;callwaiting = no +;callreturn = yes +;cancallforward = yes +;directmedia = no +;transfer = no +;dtmfmode = inband +;line => aaln/2 ; now lets save this config to line2 aka aaln/2 + +; PacketCable +;[sbv5121e-mta.test.local] +;host = 10.0.1.3 +;callwaiting = 1 +;canreinvite = 1 +;dtmfmode = rfc2833 +;amaflags = BILLING +;ncs = yes ; Use NCS 1.0 signalling +;pktcgatealloc = yes ; Allocate DQOS gate on CMTS +;hangupongateremove = yes ; Hangup the channel if the CMTS close the gate +;callerid = 3622622225 +;accountcode = test-3622622225 +;line = aaln/1 +;callerid = 3622622226 +;accountcode = test-3622622226 +;line = aaln/2 diff --git a/version_1.8.2/pabx/etc/asterisk/minivm.conf b/version_1.8.2/pabx/etc/asterisk/minivm.conf new file mode 100644 index 0000000..79fdbb0 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/minivm.conf @@ -0,0 +1,218 @@ +; +; Mini-Voicemail Configuration +; for the MiniVM set of applications +; +; MiniVM consists of the following dialplan applications +; MinivmGreet Play personal prompts for busy/unavailable/temporary messages or default prompts +; MinivmRecord Record voice prompts to account directory or default directory +; MinivmNotify Notify via e-mail or pager - with or without attachment +; MinivmDelete Delete voice prompt (filename as argument or channel variable set by MinivmRecord) +; +; MiniVM works without accounts (just give e-mail address as argument) or with accounts in +; this configuration file or realtime. The idea is to build voicemail as building blocks so that +; a complete and adaptive voicemail system can be built in the dialplan +; +; ----------------------------- Variables to use in subject, from and message body ------------------ +; Change the from, body and/or subject, variables: +; MVM_NAME, MVM_DUR, MVM_MSGNUM, VM_MAILBOX, MVM_CALLERID, MVM_CIDNUM, +; MVM_CIDNAME, MVM_DATE +; +; In addition to these, you can set the MVM_COUNTER channel variable in the +; dial plan and use that as a counter. It will also be used in the file name +; of the media file attached to the message +; +; Note: The emailbody config row can only be up to 512 characters due to a +; limitation in the Asterisk configuration subsystem. +; To create longer mails, use the templatefile option when creating the template +; --------------------------------------------------------------------------------------------------- + +[general] +; Default format for storing and sending voicemail +; (only one format. Can also be set on a per-mailbox level) +format=wav49 +;format=gsm +; +;Turn on logfile with the following syntax. One line per voicemail received +;with minivmRecord() +; Mailbox:domain:macrocontext:exten:priority:callerchan:callerid:origdate:origtime:duration:durationstatus:accountcode +;logfile=/var/log/asterisk/minivm.log +; Who the e-mail notification should appear to come from +serveremail=asterisk +;serveremail=asterisk@asterisk.example.com +; Minimum length of a voicemail message in seconds for the message to be kept +; The default is no minimum. +;minmessage=3 +; How many seconds of silence before we end the recording +maxsilence=10 +; Silence threshold (what we consider silence: the lower, the more sensitive) +silencethreshold=128 +; How long greeting messages (busy/unavailable/temp/name) are allowed to be, in seconds +;maxgreet=120 +; If you need to have an external program, i.e. /usr/bin/myapp called when a +; voicemail is received by the server. The arguments are +; +; +; +;externnotify=/usr/bin/myapp +; The character set for voicemail messages can be specified here +;charset=ISO-8859-1 +; Skip the "[PBX]:" string from the message title +;pbxskip=yes +; Change the From: string + +; You can override the default program to send e-mail if you wish, too +; This is used both for e-mail and pager messages +;mailcmd=/usr/sbin/sendmail -t +; +; -------------Default e-mail message template (used if no templates are used) ------ +;fromstring=The Asterisk PBX +; + +;emailsubject=[PBX]: New message ${MVM_COUNER} in mailbox ${VM_MAILBOX} +; The following definition is very close to the default, but the default shows +; just the CIDNAME, if it is not null, otherwise just the CIDNUM, or "an unknown +; caller", if they are both null. +;emailbody=Dear ${MVM_NAME}:\n\n\tjust wanted to let you know you were just left a ${MVM_DUR} long message (number ${MVM_COUNTER})\nin mailbox ${MVM_MAILBOX} from ${MVM_CALLERID}, on ${MVM_DATE}, so you might\nwant to check it when you get a chance. Thanks!\n\n\t\t\t\t--Asterisk\n +; +; Set the date format on outgoing mails. Valid arguments can be found on the +; strftime(3) man page +; +; Default +emaildateformat=%A, %B %d, %Y at %r +; 24h date format +;emaildateformat=%A, %d %B %Y at %H:%M:%S +; +; -------------Default pager message template (used if no templates are used) ------ +; You can also change the Pager From: string, the pager body and/or subject. +; The above defined variables also can be used here +;pagerfromstring=The Asterisk PBX +;pagersubject=New VM ${MVM_COUNTER} +;pagerbody=New ${MVM_DUR} long msg in box ${MVM_MAILBOX}\nfrom ${MVM_CALLERID}, on ${MVM_DATE} +; +; +; -------------Timezone definitions (used in voicemail accounts) ------------------- +; +; Users may be located in different timezones, or may have different +; message announcements for their introductory message when they enter +; the voicemail system. Set the message and the timezone each user +; hears here. Set the user into one of these zones with the tz= attribute +; in the options field of the mailbox. Of course, language substitution +; still applies here so you may have several directory trees that have +; alternate language choices. +; +; Look in /usr/share/zoneinfo/ for names of timezones. +; Look at the manual page for strftime for a quick tutorial on how the +; variable substitution is done on the values below. +; +; Supported values: +; 'filename' filename of a soundfile (single ticks around the filename +; required) +; ${VAR} variable substitution +; A or a Day of week (Saturday, Sunday, ...) +; B or b or h Month name (January, February, ...) +; d or e numeric day of month (first, second, ..., thirty-first) +; Y Year +; I or l Hour, 12 hour clock +; H Hour, 24 hour clock (single digit hours preceded by "oh") +; k Hour, 24 hour clock (single digit hours NOT preceded by "oh") +; M Minute, with 00 pronounced as "o'clock" +; N Minute, with 00 pronounced as "hundred" (US military time) +; P or p AM or PM +; Q "today", "yesterday" or ABdY +; (*note: not standard strftime value) +; q "" (for today), "yesterday", weekday, or ABdY +; (*note: not standard strftime value) +; R 24 hour time, including minute +; +; The message here is not used in mini-voicemail, but stays for +; backwards compatibility + +[zonemessages] +eastern=America/New_York|'vm-received' Q 'digits/at' IMp +central=America/Chicago|'vm-received' Q 'digits/at' IMp +central24=America/Chicago|'vm-received' q 'digits/at' H N 'hours' +military=Zulu|'vm-received' q 'digits/at' H N 'hours' 'phonetic/z_p' + +; ---------------------- Message body templates--------------------- +; [template-name] ; "template-" is a verbatim marker +; fromaddress = Your Friendly Asterisk Server +; fromemail = asteriskvm@digium.com +; subject = +; attachmedia = yes | no ; Add media file as attachment? +; dateformat = ; See above +; charset = ; Mime charset definition for e-mail messages +; locale = ; Locale for LC_TIME - to get weekdays in local language +; ; See your O/S documentation for proper settings for setlocale() +; templatefile = ; File name (relative to Asterisk configuration directory, + ; or absolute +; messagebody = Format ; Message body definition with variables +; +[template-sv_SE_email] +messagebody=Hej ${MVM_NAME}:\n\n\tDu har fått ett röstbrevlåde-meddelande från ${MVM_CALLERID}.\nLängd: ${MVM_DUR}\nMailbox ${MVM_MAILBOX}\nDatum: ${MVM_DATE}. \nMeddelandet bifogas det här brevet. Om du inte kan läsa det, kontakta intern support. \nHälsningar\n\n\t\t\t\t--Asterisk\n +subject = Du har fått röstmeddelande (se bilaga) +fromemail = swedish-voicemail-service@stockholm.example.com +fromaddress = Asterisk Röstbrevlåda +charset=iso-8859-1 +attachmedia=yes +dateformat=%A, %d %B %Y at %H:%M:%S +locale=sv_SE + +[template-en_US_email] +messagebody=Dear ${MVM_NAME}:\n\n\tjust wanted to let you know you were just left a ${MVM_DUR} long message \nin mailbox ${MVM_MAILBOX} from ${MVM_CALLERID}, on ${MVM_DATE}, so you might\nwant to check it when you get a chance. Thanks!\n\n\t\t\t\t--Asterisk\n +subject = New voicemail +charset=ascii +attachmedia=yes +dateformat=%A, %B %d, %Y at %r + +;[template-sv_SE_pager] +;templatefile = templates/pager_sv_se.txt +;subject = Du har fått voicemail +;charset=iso-8859-1 +;attachmedia=no +;locale=sv_SE + +;[template-nb_NO_email] +;templatefile = templates/email_nb_NO.txt +;subject = Du har fått voicemail +;charset=iso-8859-1 +;locale=nb_NO + +;[template-en_US_email_southern] +;templatefile = templates/email_en_US.txt +;subject = Y'all got voicemail, honey! +;charset=ascii + +;[template-en_UK_email] +;templatefile = templates/email_en_us.txt +;subject = Dear old chap, you've got an electronic communique +;charset=ascii + +; ---------------------- Mailbox accounts -------------------------- +;Template for mailbox definition - all options +; +; [username@domain] ; Has to be unique within domain (MWM_USERNAME, MWM_DOMAIN) +; etemplate = sv_SE ; Email template from [templates] +; ptemplate = en_US ; Pager template from [templates] +; email = userpart@domain ; Extra e-mail address (overrides mailbox name) +; pager = pageremail@domain ; E-mail address for pager messages +; fullname = Mark Spencer ; Full name (MWM_NAME) +; options = ; E-mail options, se below +; accountcode = ; Account code (read in dialplan function MINIVMACCOUNT) +; pincode = ; Numeric pin code (read in dialplan function MINIVMACCOUNT) +; timezone=se ; Time zone +; serveremail = asterisk@digium.com ; Who to send email from (overrides template if set) +; externnotify = ; External application for this account +; volgain = ; Volume gain setting (requires "sox") +; setvar=SERVICENAME=Voop.com Networks ; Extra variables to use in template + +; Remember that you can use Asterisk Configuration Templates (ACT) + +; [template@example.com](!) ; Declare template +; setvar=customerdomain=example.com +; setvar=customerclass=gold +; etemplate = sv_se_email +; serveremail = voicemail@example.com + +; [user2@example.com](template@example.com) ; Declare user2 account using template +; fullname = Olle E. Johansson +; ; User inherits everything from template diff --git a/version_1.8.2/pabx/etc/asterisk/misdn.conf b/version_1.8.2/pabx/etc/asterisk/misdn.conf new file mode 100644 index 0000000..ca27c03 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/misdn.conf @@ -0,0 +1,537 @@ +; +; chan_misdn sample config +; + +; general section: +; +; for debugging and general setup, things that are not bound to port groups +; + +[general] +; +; Sets the Path to the misdn-init.conf (for nt_ptp mode checking) +; +misdn_init=/etc/misdn-init.conf + +; set debugging flag: +; 0 - No Debug +; 1 - mISDN Messages and * - Messages, and * - State changes +; 2 - Messages + Message specific Informations (e.g. bearer capability) +; 3 - very Verbose, the above + lots of Driver specific infos +; 4 - even more Verbose than 3 +; +; default value: 0 +; +debug=0 + + + +; set debugging file and flags for mISDNuser (NT-Stack) +; +; flags can be or'ed with the following values: +; +; DBGM_NET 0x00000001 +; DBGM_MSG 0x00000002 +; DBGM_FSM 0x00000004 +; DBGM_TEI 0x00000010 +; DBGM_L2 0x00000020 +; DBGM_L3 0x00000040 +; DBGM_L3DATA 0x00000080 +; DBGM_BC 0x00000100 +; DBGM_TONE 0x00000200 +; DBGM_BCDATA 0x00000400 +; DBGM_MAN 0x00001000 +; DBGM_APPL 0x00002000 +; DBGM_ISDN 0x00004000 +; DBGM_SOCK 0x00010000 +; DBGM_CONN 0x00020000 +; DBGM_CDATA 0x00040000 +; DBGM_DDATA 0x00080000 +; DBGM_SOUND 0x00100000 +; DBGM_SDATA 0x00200000 +; DBGM_TOPLEVEL 0x40000000 +; DBGM_ALL 0xffffffff +; + +ntdebugflags=0 +ntdebugfile=/var/log/misdn-nt.log + + +; some pbx systems do cut the L1 for some milliseconds, to avoid +; dropping running calls, we can set this flag to yes and tell +; mISDNuser not to drop the calls on L2_RELEASE +ntkeepcalls=no + +; the big trace +; +; default value: [not set] +; +;tracefile=/var/log/asterisk/misdn.log + + +; set to yes if you want mISDN_dsp to bridge the calls in HW +; +; default value: yes +; +bridging=no + + +; stops dialtone after getting first digit on nt Port +; +; default value: yes +; +stop_tone_after_first_digit=yes + +; whether to append overlapdialed Digits to Extension or not +; +; default value: yes +; +append_digits2exten=yes + +;;; CRYPTION STUFF + +; Whether to look for dynamic crypting attempt +; +; default value: no +; +dynamic_crypt=no + +; crypt_prefix, what is used for crypting Protocol +; +; default value: [not set] +; +crypt_prefix=** + +; Keys for cryption, you reference them in the dialplan +; later also in dynamic encr. +; +; default value: [not set] +; +crypt_keys=test,muh + +; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- +; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a + ; SIP channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The SIP channel can accept jitter, + ; thus a jitterbuffer on the receive SIP side will be used only + ; if it is forced and enabled. + +; jbforce = no ; Forces the use of a jitterbuffer on the receive side of a SIP + ; channel. Defaults to "no". + +; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + +; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + +; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a SIP + ; channel. Two implementations are currently available - "fixed" + ; (with size always equals to jbmaxsize) and "adaptive" (with + ; variable size, actually the new jb of IAX2). Defaults to fixed. + +; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + +; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". +; ---------------------------------------------------------------------------------- + +; users sections: +; +; name your sections as you wish but not "general" or "default" ! +; the sections are Groups, you can dial out in extensions.conf +; with Dial(mISDN/g:extern/101) where extern is a section name, +; chan_misdn tries every port in this section to find a +; new free channel +; +; The default section is not a group section, it just contains config elements +; which are inherited by group sections. +; +[default] + +; define your default context here +; +; default value: default +; +context=misdn + +; language +; +; default value: en +; +language=en + +; +; This option specifies a default music on hold class to +; use when put on hold if the channel's moh class was not +; explicitly set with Set(CHANNEL(musicclass)=whatever) and +; the peer channel did not suggest a class to use. +; +musicclass=default + +; +; Either if we should produce DTMF Tones ourselves +; +senddtmf=yes + +; +; If we should generate Ringing for chan_sip and others +; +far_alerting=no + + +; +; Here you can list which bearer capabilities should be allowed: +; all - allow any bearer capability +; speech - allow speech +; 3_1khz - allow 3.1KHz audio +; digital_unrestricted - allow unrestricted digital +; digital_restricted - allow restricted digital +; video - allow video +; +; Example: +; allowed_bearers=speech,3_1khz +; +allowed_bearers=all + +; Incoming number prefixes for the indicated Type-Of-Number. These are +; inserted before any number (caller, dialed, connected, redirecting, +; redirection) received from the ISDN link if that number has the +; corresponding Type-Of-Number. +; See the dialplan options. +; +; default values: +; unknownprefix= +; internationalprefix=00 +; nationalprefix=0 +; netspecificprefix= +; subscriberprefix= +; abbreviatedprefix= +; +;unknownprefix= +internationalprefix=00 +nationalprefix=0 +;netspecificprefix= +;subscriberprefix= +;abbreviatedprefix= + +; set rx/tx gains between -8 and 8 to change the RX/TX Gain +; +; default values: rxgain: 0 +; txgain: 0 +; +rxgain=0 +txgain=0 + +; some telcos especially in NL seem to need this set to yes, also in +; switzerland this seems to be important +; +; default value: no +; +te_choose_channel=no + + + +; +; Monitors L1 of the port. If L1 is down it tries +; to bring it up. The polling timeout is given in seconds. +; Setting the value to 0 disables monitoring L1 of the port. +; +; default value: 0 +; +; This option is only read at chan_misdn loading time. +; You need to unload and load chan_misdn to change the +; value. An asterisk restart will also do the trick. +; +l1watcher_timeout=0 + +; +; This option defines, if chan_misdn should check the L1 on a PMP +; before making a group call on it. The L1 may go down for PMP Ports +; so we might need this. +; But be aware! a broken or plugged off cable might be used for a group call +; as well, since chan_misdn has no chance to distinguish if the L1 is down +; because of a lost Link or because the Provider shut it down... +; +; default: no +; +pmp_l1_check=no + + +; +; in PMP this option defines which cause should be sent out to +; the 3. caller. chan_misdn does not support callwaiting on TE +; PMP side. This allows to modify the RELEASE_COMPLETE cause +; at least. +; +reject_cause=16 + + +; +; Send Setup_Acknowledge on incoming calls anyway (instead of PROCEEDING), +; this requests additional Infos, so we can waitfordigits +; without much issues. This works only for PTP Ports +; +; default value: no +; +need_more_infos=no + + +; +; set this to yes if you want to disconnect calls when a timeout occurs +; for example during the overlapdial phase +; +nttimeout=no + +; Set the method to use for channel selection: +; standard - Use the first free channel starting from the lowest number. +; standard_dec - Use the first free channel starting from the highest number. +; round_robin - Use the round robin algorithm to select a channel. Use this +; if you want to balance your load. +; +; default value: standard +; +method=standard + + +; specify if chan_misdn should collect digits before going into the +; dialplan, you can choose yes=4 Seconds, no, or specify the amount +; of seconds you need; +; +overlapdial=yes + +; +; dialplan means Type Of Number in ISDN Terms +; There are different types of the dialplan: +; +; dialplan -> for outgoing call's dialed number +; localdialplan -> for outgoing call's callerid +; (if -1 is set use the value from the asterisk channel) +; cpndialplan -> for incoming call's connected party number sent to caller +; (if -1 is set use the value from the asterisk channel) +; +; dialplan options: +; +; 0 - unknown +; 1 - International +; 2 - National +; 3 - Network-Specific +; 4 - Subscriber +; 5 - Abbreviated +; +; default value: 0 +; +dialplan=0 +localdialplan=0 +cpndialplan=0 + + + +; +; turn this to no if you don't mind correct handling of Progress Indicators +; +early_bconnect=yes + + +; +; turn this on if you like to send Tone Indications to a Incoming +; isdn channel on a TE Port. Rarely used, only if the Telco allows +; you to send indications by yourself, normally the Telco sends the +; indications to the remote party. +; +; default: no +; +incoming_early_audio=no + +; uncomment the following to get into s extension at extension conf +; there you can use DigitTimeout if you can't or don't want to use +; isdn overlap dial. +; note: This will jump into the s exten for every exten! +; +; default value: no +; +;always_immediate=no + +; +; set this to yes if you want to generate your own dialtone +; with always_immediate=yes, else chan_misdn generates the dialtone +; +; default value: no +; +nodialtone=no + + +; uncomment the following if you want callers which called exactly the +; base number (so no extension is set) jump to the s extension. +; if the user dials something more it jumps to the correct extension +; instead +; +; default value: no +; +;immediate=no + +; uncomment the following to have hold and retrieve support +; +; default value: no +; +;hold_allowed=yes + +; Pickup and Callgroup +; +; default values: not set = 0 +; range: 0-63 +; +;callgroup=1 +;pickupgroup=1 + +; Named pickup groups and named call groups +; +; give a name to groups and configure any number of groups +; +;namedcallgroup=engineering,sales,netgroup,protgroup +;namedpickupgroup=sales + +; Set the outgoing caller id to the value. +;callerid="name" + +; +; these are the exact isdn screening and presentation indicators +; if -1 is given for either value the presentation indicators are used +; from asterisks CALLERPRES function. +; s=0, p=0 -> callerid presented +; s=1, p=1 -> callerid restricted (the remote end does not see it!) +; +; default values s=-1, p=-1 +presentation=-1 +screen=-1 + +; Incoming calls will have a caller ID tag set to this value +; +;incoming_cid_tag = "asterisk" + +; With this set, you can automatically append the MSN of a party +; to the cid_tag. Incoming calls have the dialed number appended +; to the tag, and outgoing calls have the caller number appended +; to the tag. An '_' is used to separate the tag from the +; MSN. +; Default is no. +; +;append_msn_to_cid_tag = no + +; Select what to do with outgoing COLP information on this port. +; +; 0 - Send out COLP information unaltered. (default) +; 1 - Force COLP to restricted on all outgoing COLP information. +; 2 - Do not send COLP information. +outgoing_colp=0 + +; Put a display ie in the CONNECT message containing the following +; information if it is available (nt port only): +; +; 0 - Do not put the connected line information in the display ie. +; 1 - Put the available connected line name in the display ie. +; 2 - Put the available connected line number in the display ie. +; 3 - Put the available connected line name and number in the display ie. +; +display_connected=0 + +; Put a display ie in the SETUP message containing the following +; information if it is available (nt port only): +; +; 0 - Do not put the caller information in the display ie. +; 1 - Put the available caller name in the display ie. +; 2 - Put the available caller number in the display ie. +; 3 - Put the available caller name and number in the display ie. +; +display_setup=0 + +; This enables echo cancellation with the given number of taps. +; Be aware: Move this setting only to outgoing portgroups! +; A value of zero turns echo cancellation off. +; +; possible values are: 0,32,64,128,256,yes(=128),no(=0) +; +; default value: no +; +;echocancel=no + +; +; chan_misdns jitterbuffer, default 4000 +; +jitterbuffer=4000 + +; +; change this threshold to enable dejitter functionality +; +jitterbuffer_upper_threshold=0 + + +; +; change this to yes, if you want to bridge a mISDN data channel to +; another channel type or to an application. +; +hdlc=no + + +; +; defines the maximum amount of incoming calls per port for +; this group. Calls which exceed the maximum will be marked with +; the channel variable MAX_OVERFLOW. It will contain the amount of +; overflowed calls +; +max_incoming=-1 + +; +; defines the maximum amount of outgoing calls per port for this group +; exceeding calls will be rejected +; +max_outgoing=-1 + +; +; Enable/disable the call-completion retention option support (ptp only). +; +; Note: To use the CCBS/CCNR supplementary service feature and other +; supplementary services using FACILITY messages requires a +; modified version of mISDN from: +; http://svn.digium.com/svn/thirdparty/mISDN/trunk +; http://svn.digium.com/svn/thirdparty/mISDNuser/trunk +; +cc_request_retention=yes + +[intern] +; define your ports, e.g. 1,2 (depends on mISDN-driver loading order) +ports=1,2 +; context where to go to when incoming Call on one of the above ports +context=Intern + +[internPP] +; +; adding the postfix 'ptp' to a port number is obsolete now, chan_misdn +; parses /etc/misdn-init.conf and sets the ptp mode to the corresponding +; configs. For backwards compatibility you can still set ptp here. +; +ports=3 + +[first_extern] +; again port defs +ports=4 +; again a context for incoming calls +context=Extern1 +; msns for te ports, listen on those numbers on the above ports, and +; indicate the incoming calls to asterisk +; here you can give a comma separated list or simply an '*' for +; any msn. +msns=* + +; here an example with given msns +[second_extern] +ports=5 +context=Extern2 +callerid="Asterisk" <1234> +msns=102,144,101,104 diff --git a/version_1.8.2/pabx/etc/asterisk/modprobe_default b/version_1.8.2/pabx/etc/asterisk/modprobe_default new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/modules.conf b/version_1.8.2/pabx/etc/asterisk/modules.conf new file mode 100644 index 0000000..fd2c19d --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/modules.conf @@ -0,0 +1,55 @@ +; +; Asterisk configuration file +; +; Module Loader configuration file +; + +[modules] +autoload=yes +; +; Any modules that need to be loaded before the Asterisk core has been +; initialized (just after the logger has been initialized) can be loaded +; using 'preload'. This will frequently be needed if you wish to map all +; module configuration files into Realtime storage, since the Realtime +; driver will need to be loaded before the modules using those configuration +; files are initialized. +; +; An example of loading ODBC support would be: +;preload => res_odbc.so +;preload => res_config_odbc.so +; +; Uncomment the following if you wish to use the Speech Recognition API +;preload => res_speech.so +; +; If you want, load the GTK console right away. +; +noload => pbx_gtkconsole.so +;load => pbx_gtkconsole.so +; +load => res_musiconhold.so +; +; Load either OSS or ALSA, not both +; By default, load OSS only (automatically) and do not load ALSA +; +noload => chan_alsa.so +noload => chan_dgv.so +;noload => chan_dahdi.so +noload => chan_khomp.so +;noload => chan_oss.so + +noload => res_config_pgsql.so +noload => res_odbc.so +noload => app_festival.so +noload => cdr_odbc.so +noload => app_followme.so +noload => res_config_odbc.so +noload => func_odbc.so + +noload => chan_mgcp.so +noload => chan_ooh323.so +noload => chan_skinny.so +noload => chan_phone.so +noload => pbx_dundi.so + +noload => cel_odbc.so +noload => cdr_adaptive_odbc.so \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/motif.conf b/version_1.8.2/pabx/etc/asterisk/motif.conf new file mode 100644 index 0000000..9d5bc80 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/motif.conf @@ -0,0 +1,99 @@ +; Sample configuration file for chan_motif + +; Transports +; +; There are three different transports and protocol derivatives supported by chan_motif. They are in order of preference: +; Jingle using ICE-UDP, Google Jingle, and Google-V1. +; +; Jingle as defined in XEP-0166 supports the widest range of features. It is referred to as "ice-udp" in this file. This is +; the specification that Jingle clients implement. +; +; Google Jingle follows the Jingle specification for signaling but uses a custom transport for media. It is supported +; by the Google Talk Plug-in in Gmail and by some other Jingle clients. It is referred to as "google" in this file. +; +; Google-V1 is the original Google Talk signaling protocol which uses an initial preliminary version of Jingle. +; It also uses the same custom transport as Google Jingle for media. It is supported by Google Voice, some other Jingle +; clients, and the Windows Google Talk client. It is referred to as "google-v1" in this file. +; +; Incoming sessions will automatically switch to the correct transport once it has been determined. +; +; Outgoing sessions are capable of determining if the target is capable of Jingle or a Google transport if the target is +; in the roster. Unfortunately it is not possible to differentiate between a Google Jingle or Google-V1 capable resource +; until a session initiate attempt occurs. If a resource is determined to use a Google transport it will initially use +; Google Jingle but will fall back to Google-V1 if required. +; +; If an outgoing session attempt fails due to failure to support the given transport chan_motif will fall back in preference +; order listed at the beginning of this document until all transports have been exhausted. +; + +; Dialing and Resource Selection Strategy +; +; Placing a call through an endpoint can be accomplished using the following dial string: +; +; Motif// +; +; When placing an outgoing call through an endpoint the requested target is searched for in the roster list. If present +; the first Jingle or Google Jingle capable resource is specifically targetted. Since the capabilities of the resource are +; known the outgoing session initation will disregard the configured transport and use the determined one. +; +; If the target is not found in the roster the target will be used as-is and a session will be initiated using the +; transport specified in this configuration file. If no transport has been specified the endpoint defaults to ice-udp. +; + +; Video Support +; +; Support for video does not need to be explicitly enabled. Configuring any video codec on your endpoint will +; automatically enable it. + +; DTMF +; +; The only supported method for DTMF is RFC2833. This is always enabled on audio streams and negotiated if possible. + +; Incoming Calls +; +; Incoming calls will first look for the extension matching the name of the endpoint in the configured context. If +; no such extension exists the call will automatically fall back to the "s" extension. + +; CallerID +; +; The incoming caller id number is populated with the username of the caller and the name is populated with the full +; identity of the caller. If you would like to perform authentication or filtering of incoming calls it is recommended +; that you use these fields to do so. +; +; Outgoing caller id can *not* be set. +; +; IMPORTANT: Multiple endpoints using the same connection is *NOT* supported. Doing so may result in broken calls. + +; Default template for endpoints, to be included in their definition +[default](!) +disallow=all +allow=ulaw +allow=h264 +context=incoming-motif ; Default context that incoming sessions will land in + +;maxicecandidates = 10 ; Maximum number of ICE candidates we will offer +;maxpayloads = 30 ; Maximum number of payloads we will offer + +; Sample configuration entry for Jingle +;[jingle-endpoint](default) +;transport=ice-udp ; Change the default protocol of outgoing sessions to Jingle ICE-UDP +;allow=g722 ; Add G.722 as an allowed format since the other side may support it +;connection=local-jabber-account ; Connection to accept traffic on and send traffic out +;accountcode=jingle ; Account code for CDR purposes + +; Sample configuration entry for Google Talk +[gtalk-endpoint](default) +;transport=google ; Since this is a Google Talk endpoint we want to offer Google Jingle for outgoing sessions +;connection=gtalk-account + +; Sample configuration entry for Google Voice +;[gvoice](default) +;transport=google-v1 ; Google Voice uses the original Google Talk protocol +;connection=gvoice-account + +; Additional options +; callgroup +; pickupgroup +; language +; musicclass +; parkinglot diff --git a/version_1.8.2/pabx/etc/asterisk/musiconhold.conf b/version_1.8.2/pabx/etc/asterisk/musiconhold.conf new file mode 100644 index 0000000..7886d6b --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/musiconhold.conf @@ -0,0 +1,11 @@ +[general] + +[agentes] +mode=files +directory=/var/lib/asterisk/moh/agentes +sort=random + +[default] +mode=files +directory=/var/lib/asterisk/moh/default +sort=random \ No newline at end of file diff --git a/version_1.8.2/pabx/etc/asterisk/muted.conf b/version_1.8.2/pabx/etc/asterisk/muted.conf new file mode 100644 index 0000000..15c7409 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/muted.conf @@ -0,0 +1,39 @@ +# +# Sample muted configuration file +# +# Copyright (C) 2004 Digium, Inc. +# +# First you have the host, username, and password +# we use to connect to the asterisk system +# +# What is this? Well, haven't you ever wished you could automatically +# turn down the volume on your stereo, CDPlayer, etc, when a call comes in, +# and then return it to normal when the call ends? Well, this is a possible +# mechanism to make this happen! +# You have to fire up the new utils/muted, which runs as a daemon in the +# background. This daemon connects to asterisk via a manager interface, and +# also reads this config file from /etc/muted.conf. when the channels mentioned +# are activated, it tweaks the sound levels on the sound card(s). +# So, depending on the sound card, you may be able to run all your sound +# generating devices thru your sound card, and use this mechanism to quiet +# them down while you are on the phone. If anyone figures out how to make +# this work with kids, please inform!! +# +host localhost +user user +pass pass +# +# List each channel we're supposed to watch +# +channel DAHDI/1 +channel DAHDI/2 +channel SIP/mark +# +# Mute level is the percentage of the current volume we should +# lower the music to. +# +mutelevel 20 +# +# Smooth fade makes the fadein/fadeout nicer sounding +# +smoothfade diff --git a/version_1.8.2/pabx/etc/asterisk/ooh323.conf b/version_1.8.2/pabx/etc/asterisk/ooh323.conf new file mode 100644 index 0000000..563ec9f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/ooh323.conf @@ -0,0 +1,203 @@ +; --------------------------------------------------------------------------------- +; --- ******* IMPORTANT NOTE *********** +; --- +; --- This module is currently unsupported. Use it at your own risk. +; --- +; --------------------------------------------------------------------------------- + +; Objective System's H323 Configuration example for Asterisk +; ooh323c driver configuration +; +; [general] section defines global parameters +; +; This is followed by profiles which can be of three types - user/peer/friend +; Name of the user profile should match with the h323id of the user device. +; For peer/friend profiles, host ip address must be provided as "dynamic" is +; not supported as of now. +; +; Syntax for specifying a H323 device in extensions.conf is +; For Registered peers/friends profiles: +; OOH323/name where name is the name of the peer/friend profile. +; +; For unregistered H.323 phones: +; OOH323/ip[:port] OR if gk is used OOH323/alias where alias can be any H323 +; alias +; +; For dialing into another asterisk peer at a specific exten +; OOH323/exten/peer OR OOH323/exten@ip +; +; Domain name resolution is not yet supported. +; +; When a H.323 user calls into asterisk, his H323ID is matched with the profile +; name and context is determined to route the call +; +; The channel driver will register all global aliases and aliases defined in +; peer profiles with the gatekeeper, if one exists. So, that when someone +; outside our pbx (non-user) calls an extension, gatekeeper will route that +; call to our asterisk box, from where it will be routed as per dial plan. + + +[general] +;Define the asetrisk server h323 endpoint + +;The port asterisk should listen for incoming H323 connections. +;Default - 1720 +;port=1720 + +;The dotted IP address asterisk should listen on for incoming H323 +;connections +;Default - tries to find out local ip address on it's own +bindaddr=0.0.0.0 + +;This parameter indicates whether channel driver should register with +;gatekeeper as a gateway or an endpoint. +;Default - no +;gateway=no + +;Whether asterisk should use fast-start and tunneling for H323 connections. +;Default - yes +;faststart=no +;h245tunneling=no + +;Whether media wait for connect +;Default - No +;mediawaitforconnect=yes + +;H323-ID to be used for asterisk server +;Default - Asterisk PBX +h323id=ObjSysAsterisk +e164=100 + +;CallerID to use for calls +;Default - Same as h323id +callerid=asterisk + +; Whether asterisk send back to caller own connected line id on incoming call as called number +; Default - no +aniasdni=no + +;Whether this asterisk server will use gatekeeper. +;Default - DISABLE +;gatekeeper = DISCOVER +;gatekeeper = a.b.c.d +gatekeeper = DISABLE + +;Location for H323 log file +;Default - /var/log/asterisk/h323_log +;logfile=/var/log/asterisk/h323_log + + +;Following values apply to all users/peers/friends defined below, unless +;overridden within their client definition + +;Sets default context all clients will be placed in. +;Default - default +context=default + +;Sets rtptimeout for all clients, unless overridden +;Default - 60 seconds +;rtptimeout=60 ; Terminate call if 60 seconds of no RTP activity + ; when we're not on hold + +;Type of Service +;Default - none (lowdelay, thoughput, reliability, mincost, none) +;tos=lowdelay + +;amaflags = default + +;The account code used by default for all clients. +;accountcode=h3230101 + +;The codecs to be used for all clients.Only ulaw and gsm supported as of now. +;Default - ulaw +; ONLY ulaw, gsm, g729 and g7231 supported as of now +disallow=all ;Note order of disallow/allow is important. +allow=gsm +allow=ulaw + + +; dtmf mode to be used by default for all clients. Supports rfc2833, q931keypad +; h245alphanumeric, h245signal. +;Default - rfc 2833 +dtmfmode=rfc2833 +; +; round trip delay request, default = 0,0 (not send) +; x - count of unreplied requests before hangup, y - interval in sec between requests +; +;roundtrip=x,y + +; +; FAX detection will cause the OOH323 channel to jump to the 'fax' extension (if it exists) +; based one or more events being detected. The events that can be detected are an incoming +; CNG tone or an incoming T.38 RequestMode packet +; +; yes - enable both detection (CNG & T.38) +; no - disable both +; cng - enable CNG detection (default) +; t38 - enable T.38 request detection +; +faxdetect = cng + +; User/peer/friend definitions: +; User config options Peer config options +; ------------------ ------------------- +; context +; disallow disallow +; allow allow +; accountcode accountcode +; amaflags amaflags +; dtmfmode dtmfmode +; rtptimeout ip +; port +; h323id +; email +; url +; e164 +; rtptimeout + +; + +; +; direct rtp between two remote peers, disabled by default +; can be specified globally or per peer/user section +; +directmedia=no +; +; early direct rtp (try to establish direct rtp before asnwer) +; disabled by default, auto enabled by directmedia is enabled +; can be disabled escpecially if directmedia is enabled. +; can be specified globally or per peer/user section +; +; +directrtpsetup=no + +;Define users here +;Section header is extension +[myuser1] +type=user +context=context1 +disallow=all +allow=gsm +allow=ulaw + + + +[mypeer1] +type=peer +context=context2 +ip=a.b.c.d ; UPDATE with appropriate ip address +port=1720 ; UPDATE with appropriate port +e164=101 + + + +[myfriend1] +type=friend +context=default +ip=10.0.0.82 ; UPDATE with appropriate ip address +port=1820 ; UPDATE with appropriate port +disallow=all +allow=ulaw +e164=12345 +rtptimeout=60 +dtmfmode=rfc2833 diff --git a/version_1.8.2/pabx/etc/asterisk/osp.conf b/version_1.8.2/pabx/etc/asterisk/osp.conf new file mode 100644 index 0000000..e72aa32 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/osp.conf @@ -0,0 +1,117 @@ +; +; Open Settlement Protocol Sample Configuration File +; +; This file contains configuration of OSP server providers that are used by the +; Asterisk OSP module. The section "general" is reserved for global options. +; All other sections describe specific OSP Providers. The provider "default" +; is used when no provider is otherwise specified. +; +; The "servicepoint" and "source" parameters must be configured. For most +; implementations the other parameters in this file can be left unchanged. +; +[general] +; +; Enable cryptographic acceleration hardware. +; The default value is no. +; +;accelerate=no +; +; Enable security features. +; If security features are disabled, Asterisk cannot validate signed tokens and +; all certificate file name parameters are ignored. +; The default value is no. +; +;securityfeatures=no +; +; Defines the status of tokens that Asterisk will validate. +; 0 - signed tokens only +; 1 - unsigned tokens only +; 2 - both signed and unsigned +; The default value is 0, i.e. the Asterisk will only validate signed tokens. +; If securityfeatures are disabled, Asterisk cannot validate signed tokens. +; +;tokenformat=0 +; +;[default] +; +; List all service points (OSP servers) for this provider. +; Use either domain name or IP address. Most OSP servers use port 5045. +; +;servicepoint=http://osptestserver.transnexus.com:5045/osp +; +; Define the "source" device for requesting OSP authorization. +; This value is usually the domain name or IP address of the the Asterisk server. +; +;source=domain name or [IP address in brackets] +; +; Define path and file name of crypto files. +; The default path for crypto file is /var/lib/asterisk/keys. If no path is +; defined, crypto files will in /var/lib/asterisk/keys directory. +; +; Specify the private key file name. +; If this parameter is unspecified or not present, the default name will be the +; osp.conf section name followed by "-privatekey.pem" (for example: +; default-privatekey.pem) +; If securityfeatures are disabled, this parameter is ignored. +; +;privatekey=pkey.pem +; +; Specify the local certificate file. +; If this parameter is unspecified or not present, the default name will be the +; osp.conf section name followed by "- localcert.pem " (for example: +; default-localcert.pem) +; If securityfeatures are disabled, this parameter is ignored. +; +;localcert=localcert.pem +; +; Specify one or more Certificate Authority key file names. If none are listed, +; a single Certificate Authority key file name is added with the default name of +; the osp.conf section name followed by "-cacert_0.pem " (for example: +; default-cacert_0.pem) +; If securityfeatures are disabled, this parameter is ignored. +; +;cacert=cacert_0.pem +; +; Configure parameters for OSP communication between Asterisk OSP client and OSP +; servers. +; +; maxconnections: Max number of simultaneous connections to the provider OSP +; server (default=20) +; retrydelay: Extra delay between retries (default=0) +; retrylimit: Max number of retries before giving up (default=2) +; timeout: Timeout for response in milliseconds (default=500) +; +;maxconnections=20 +;retrydelay=0 +;retrylimit=2 +;timeout=500 +; +; Set the authentication policy. +; 0 - NO - Accept all calls. +; 1 - YES - Accept calls with valid token or no token. Block calls with +; invalid token. +; 2 - EXCLUSIVE - Accept calls with valid token. Block calls with invalid token +; or no token. +; Default is 1, +; If securityfeatures are disabled, Asterisk cannot validate signed tokens. +; +;authpolicy=1 +; +; Set the default destination protocol. The OSP module supports SIP, H323, and +; IAX protocols. The default protocol is set to SIP. +; +;defaultprotocol=SIP +; +; Set the work mode. +; 0 - Direct +; 1 - Indirect +; Default is 0, +; +;workmode=0 +; +; Set the service type. +; 0 - Normal voice service +; 1 - Ported number query service +; Default is 0, +; +;servicetype=0 diff --git a/version_1.8.2/pabx/etc/asterisk/oss.conf b/version_1.8.2/pabx/etc/asterisk/oss.conf new file mode 100644 index 0000000..b0b3831 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/oss.conf @@ -0,0 +1,152 @@ +; +; Automatically generated from ../channels/chan_oss.c +; + +[general] + ; General config options, with default values shown. + ; You should use one section per device, with [general] being used + ; for the first device and also as a template for other devices. + ; + ; All but 'debug' can go also in the device-specific sections. + ; + ; debug = 0x0 ; misc debug flags, default is 0 + + ; Set the device to use for I/O + ; device = /dev/dsp + + ; Optional mixer command to run upon startup (e.g. to set + ; volume levels, mutes, etc. + ; mixer = + + ; Software mic volume booster (or attenuator), useful for sound + ; cards or microphones with poor sensitivity. The volume level + ; is in dB, ranging from -20.0 to +20.0 + ; boost = n ; mic volume boost in dB + + ; Set the callerid for outgoing calls + ; callerid = John Doe <555-1234> + + ; autoanswer = no ; no autoanswer on call + ; autohangup = yes ; hangup when other party closes + ; extension = s ; default extension to call + ; context = default ; default context for outgoing calls + ; language = "" ; default language + + ; If you set overridecontext to 'yes', then the whole dial string + ; will be interpreted as an extension, which is extremely useful + ; to dial SIP, IAX and other extensions which use the '@' character. + ; The default is 'no' just for backward compatibility, but the + ; suggestion is to change it. + ; overridecontext = no ; if 'no', the last @ will start the context + ; if 'yes' the whole string is an extension. + + ; low level device parameters in case you have problems with the + ; device driver on your operating system. You should not touch these + ; unless you know what you are doing. + ; queuesize = 10 ; frames in device driver + ; frags = 8 ; argument to SETFRAGMENT + + ; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- + ; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of an + ; OSS channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The OSS channel can't accept jitter, + ; thus an enabled jitterbuffer on the receive OSS side will always + ; be used if the sending side can create jitter. + + ; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + + ; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + + ; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of an OSS + ; channel. Two implementations are currently available - "fixed" + ; (with size always equals to jbmax-size) and "adaptive" (with + ; variable size, actually the new jb of IAX2). Defaults to fixed. + + ; jbtargetextra = 40 ; This option only affects the jb when 'jbimpl = adaptive' is set. + ; The option represents the number of milliseconds by which the new + ; jitter buffer will pad its size. the default is 40, so without + ; modification, the new jitter buffer will set its size to the jitter + ; value plus 40 milliseconds. increasing this value may help if your + ; network normally has low jitter, but occasionally has spikes. + + ; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". + ; ---------------------------------------------------------------------------------- + +; below is an entry for a second console channel +; [card1] + ; device = /dev/dsp1 ; alternate device + +; Below are the settings to support video. You can include them +; in your general configuration as [general](+,video) +; The parameters are all available through the CLI as "console name value" +; Section names used here are only examples. + +[my_video](!) ; you can just include in your config + videodevice = /dev/video0 ; uses your V4L webcam as video source + videodevice = X11 ; X11 grabber. Dragging on the local display moves the origin. + videocodec = h263 ; also h261, h263p, h264, mpeg4, ... + + ; video_size is the geometry used by the encoder. + ; Depending on the codec your choice is restricted. + video_size = 352x288 ; the format WIDTHxHEIGHT is also ok + video_size = cif ; sqcif, qcif, cif, qvga, vga, ... + + ; You can also set the geometry used for the camera, local display and remote display. + ; The local window is on the right, the remote window is on the left. + ; Right clicking with the mouse on a video window increases the size, + ; center-clicking reduces the size. + camera_size = cif + remote_size = cif + local_size = qcif + + bitrate = 60000 ; rate told to ffmpeg. + fps = 5 ; frames per second from the source. + ; qmin = 3 ; quantizer value passed to the encoder. + +; The keypad is made of an image (in any format supported by SDL_image) +; and some configuration entries indicating the location and function of buttons. +; These entries can also be contained in the comment field of the image, +; which is a lot more convenient to manage. +; E.g. for jpeg you can write them with wrjpgcom (part of libjpeg). +; The format to define keys is +; region = x0 y0 x1 y1 h +; where is the event to be generated (a digit, pickup, hangup,...) +; is the shape of the region (currently 'rect' and 'circle' are +; supported, the latter is really an ellipse), x0 y0 x1 y1 are the +; coordinates of the base of the rectangle or main diameter of the ellipse, +; (they can be rotated) while h is the height of the rectangle or the other +; diameter of the ellipse. +; +[my_skin](!) + keypad = /tmp/keypad.jpg + region = 1 rect 19 18 67 18 28 + region = 2 rect 84 18 133 18 28 + region = 3 rect 152 18 201 18 28 + region = 4 rect 19 60 67 60 28 + region = 5 rect 84 60 133 60 28 + region = 6 rect 152 60 201 60 28 + region = 7 rect 19 103 67 103 28 + region = 8 rect 84 103 133 103 28 + region = 9 rect 152 103 201 103 28 + region = * rect 19 146 67 146 28 + region = 0 rect 84 146 133 146 28 + region = # rect 152 146 201 146 28 + region = pickup rect 229 15 267 15 40 + region = hangup rect 230 66 270 64 40 + region = mute circle 232 141 264 141 33 + region = sendvideo circle 235 185 266 185 33 + region = autoanswer rect 228 212 275 212 50 + +; another skin with entries for the keypad and a small font +; to write to the message boards in the skin. +[skin2](!) + keypad = /tmp/kpad2.jpg + keypad_font = /tmp/font.png + +; to add video support, uncomment this and remember to install +; the keypad and keypad_font files to the right place +; [general](+,my_video,skin2) diff --git a/version_1.8.2/pabx/etc/asterisk/phone.conf b/version_1.8.2/pabx/etc/asterisk/phone.conf new file mode 100644 index 0000000..3d4a7c2 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/phone.conf @@ -0,0 +1,51 @@ +; +; Linux Telephony Interface +; +; Configuration file +; +[interfaces] +; +; Select a mode, either the phone jack provides dialtone, reads digits, +; then starts PBX with the given extension (dialtone mode), or +; immediately provides the PBX without reading any digits or providing +; any dialtone (this is the immediate mode, the default). Also, you +; can set the mode to "fxo" if you have a linejack to make it operate +; properly. If you are using a Sigma Designs board you may set this to +; "sig". +; +mode=immediate +;mode=dialtone +;mode=fxo +;mode=sig +; +; You can decide which format to use by default, "g723.1", "g729", or "slinear". +; Note that g729 is only supported for Sigma Designs boards. +; XXX Be careful, sometimes the card causes kernel panics when running +; in signed linear mode for some reason... XXX +; +format=slinear +;format=g723.1 +;format=g729 +; +; And set the echo cancellation to "off", "low", "medium", and "high". +; This is not supported on all phones. +; +echocancel=medium +; +; You can optionally use VAD/CNG silence suppression +; +;silencesupression=yes +; +; List all devices we can use. Contexts may also be specified +; +;context=local +; +; You can set txgain and rxgain for each device in the same way as context. +; If you want to change default gain value (1.0 =~ 100%) for device, simple +; add txgain or rxgain line before device line. But remember, if you change +; volume all cards listed below will be affected by these values. You can +; use float values (1.0, 0.5, 2.0) or percentage values (100%, 150%, 50%). +; +;txgain=100% +;rxgain=1.0 +;device => /dev/phone0 diff --git a/version_1.8.2/pabx/etc/asterisk/phoneprov.conf b/version_1.8.2/pabx/etc/asterisk/phoneprov.conf new file mode 100644 index 0000000..df3058f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/phoneprov.conf @@ -0,0 +1,142 @@ +[general] +; This section applies only to the default sip.conf/users.conf config provider +; embedded in res_phoneprov. Other providers may provide their own default settings. + +; The default behavior of res_phoneprov will be to set the SERVER template variable to +; the IP address that the phone uses to contact the provisioning server and the +; SERVER_PORT variable to the bindport setting in sip.conf. Unless you have a very +; unusual setup, you should not need to set serveraddr, serveriface, or serverport. + +;serveraddr=192.168.1.1 ; Override address to send to the phone to use as server address. +;serveriface=eth0 ; Same as above, except an ethernet interface. + ; Useful for when the interface uses DHCP and the asterisk http + ; server listens on a different IP than chan_sip. +;serverport=5060 ; Override port to send to the phone to use as server port. +default_profile=polycom ; The default profile to use if none specified in users.conf + +; You can define profiles for different phones specifying what files to register +; with the provisioning server. You can define either static files, or dynamically +; generated files that can have dynamic names and point to templates that variables +; can be substituted into. You can also set arbitrary variables for the profiles +; templates to have access to. Profiles are shared across all config providers. +; Example: + +;[example] +;mime_type => application/octet-stream +;static_file => example/firmware +;static_file => example/default.cfg,text/xml +;${TOUPPER(${MAC})}.cfg => templates/example-mac.cfg +;setvar => DB_CIDNAME=${ODBC_CID_NAME_LOOKUP(${USERNAME})} + +; Dynamically generated files have a filename registered with variable substitution +; with variables obtained from various config providers. The default provider +; embedded in res_phoneprov reads users.conf. Other providers will have their own +; sources for the variables and may provide additional variables not listed here. + +; Built in variables and the options in users.conf that they come from +; MAC (macaddress) +; USERNAME (username) +; DISPLAY_NAME (fullname) +; SECRET (secret) +; LABEL (label) +; CALLERID (cid_number) +; VOCIEMAIL_EXTEN (vmexten) +; EXTENSION_LENGTH (localextenlength) +; LINE +; LINEKEYS + +; Built-in variables and the options in phoneprov.conf that they come from +; SERVER (server) +; SERVER_PORT (serverport) + + +; Built-in variables for managing timezones and daylight savings time. +; TZOFFSET +; DST_ENABLE +; DST_START_MONTH +; DST_START_MDAY +; DST_START_HOUR +; DST_END_MONTH +; DST_END_MDAY +; DST_END_HOUR +; TIMEZONE + +[polycom] +staticdir => configs/ ; Sub directory of AST_DATA_DIR/phoneprov that static files reside + ; in. This allows a request to /phoneprov/sip.cfg to pull the file + ; from /phoneprov/configs/sip.cfg +mime_type => text/xml ; Default mime type to use if one isn't specified or the + ; extension isn't recognized +static_file => bootrom.ld,application/octet-stream ; Static files the phone will download +static_file => bootrom.ver,plain/text ; static_file => filename,mime-type +static_file => sip.ld,application/octet-stream +static_file => sip.ver,plain/text +static_file => sip.cfg +static_file => custom.cfg +static_file => 2201-06642-001.bootrom.ld,application/octet-stream +static_file => 2201-06642-001.sip.ld,application/octet-stream +static_file => 2345-11000-001.bootrom.ld,application/octet-stream +static_file => 2345-11300-001.bootrom.ld,application/octet-stream +static_file => 2345-11300-010.bootrom.ld,application/octet-stream +static_file => 2345-11300-010.sip.ld,application/octet-stream +static_file => 2345-11402-001.bootrom.ld,application/octet-stream +static_file => 2345-11402-001.sip.ld,application/octet-stream +static_file => 2345-11500-001.bootrom.ld,application/octet-stream +static_file => 2345-11500-010.bootrom.ld,application/octet-stream +static_file => 2345-11500-020.bootrom.ld,application/octet-stream +static_file => 2345-11500-030.bootrom.ld,application/octet-stream +static_file => 2345-11500-030.sip.ld,application/octet-stream +static_file => 2345-11500-040.bootrom.ld,application/octet-stream +static_file => 2345-11500-040.sip.ld,application/octet-stream +static_file => 2345-11600-001.bootrom.ld,application/octet-stream +static_file => 2345-11600-001.sip.ld,application/octet-stream +static_file => 2345-11605-001.bootrom.ld,application/octet-stream +static_file => 2345-11605-001.sip.ld,application/octet-stream +static_file => 2345-12200-001.bootrom.ld,application/octet-stream +static_file => 2345-12200-001.sip.ld,application/octet-stream +static_file => 2345-12200-002.bootrom.ld,application/octet-stream +static_file => 2345-12200-002.sip.ld,application/octet-stream +static_file => 2345-12200-004.bootrom.ld,application/octet-stream +static_file => 2345-12200-004.sip.ld,application/octet-stream +static_file => 2345-12200-005.bootrom.ld,application/octet-stream +static_file => 2345-12200-005.sip.ld,application/octet-stream +static_file => 2345-12365-001.bootrom.ld,application/octet-stream +static_file => 2345-12365-001.sip.ld,application/octet-stream +static_file => 2345-12500-001.bootrom.ld,application/octet-stream +static_file => 2345-12500-001.sip.ld,application/octet-stream +static_file => 2345-12560-001.bootrom.ld,application/octet-stream +static_file => 2345-12560-001.sip.ld,application/octet-stream +static_file => 2345-12600-001.bootrom.ld,application/octet-stream +static_file => 2345-12600-001.sip.ld,application/octet-stream +static_file => 2345-12670-001.bootrom.ld,application/octet-stream +static_file => 2345-12670-001.sip.ld,application/octet-stream +static_file => 3111-15600-001.bootrom.ld,application/octet-stream +static_file => 3111-15600-001.sip.ld,application/octet-stream +static_file => 3111-40000-001.bootrom.ld,application/octet-stream +static_file => 3111-40000-001.sip.ld,application/octet-stream +static_file => SoundPointIPWelcome.wav,application/octet-stream +static_file => SoundPointIPLocalization/Japanese_Japan/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Norwegian_Norway/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Spanish_Spain/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Portuguese_Portugal/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/English_United_Kingdom/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/English_United_States/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Russian_Russia/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Italian_Italy/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Chinese_China/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Swedish_Sweden/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/English_Canada/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/German_Germany/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/French_France/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Danish_Denmark/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Dutch_Netherlands/SoundPointIP-dictionary.xml +static_file => SoundPointIPLocalization/Korean_Korea/SoundPointIP-dictionary.xml + +${MAC}.cfg => 000000000000.cfg ; Dynamically generated files. +${MAC}-phone.cfg => 000000000000-phone.cfg ; (relative to AST_DATA_DIR/phoneprov) +config/${MAC} => polycom.xml ; Dynamic Filename => template file +${MAC}-directory.xml => 000000000000-directory.xml +setvar => CUSTOM_CONFIG=/var/lib/asterisk/phoneprov/configs/custom.cfg ; Custom variable + +;snom 300, 320, 360, 370, 820, 821, 870 support +snom-${MAC}.xml => snom-mac.xml diff --git a/version_1.8.2/pabx/etc/asterisk/pjproject.conf b/version_1.8.2/pabx/etc/asterisk/pjproject.conf new file mode 100644 index 0000000..82c81a1 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/pjproject.conf @@ -0,0 +1,49 @@ +; Common pjproject options +; + +;[startup] +; NOTES: The name of this section in the pjproject.conf configuration file must +; remain startup or the configuration will not be applied. +; +;log_level=default ; Initial maximum pjproject logging level to log + ; Valid values are: 0-6, and default + ; + ; Note: This option is needed very early in the startup + ; process so it can only be read from config files because + ; the modules for other methods have not been loaded yet. +;type= ; Must be of type startup (default: "") + +;========================LOG_MAPPINGS SECTION OPTIONS=============================== +;[log_mappings] +; SYNOPSIS: Provides pjproject to Asterisk log level mappings. +; NOTES: The name of this section in the pjproject.conf configuration file must +; remain log_mappings or the configuration will not be applied. +; The defaults mentioned below only apply if this file or the 'log_mappings' +; object can't be found. If the object is found, there are no defaults. If +; you don't specify an entry, nothing will be logged for that level. +; +; These logging level meanings are typically used by pjproject: +; - 0: fatal error +; - 1: error +; - 2: warning +; - 3: info +; - 4: debug +; - 5: trace +; - 6: more detailed trace +; +;asterisk_error = ; A comma separated list of pjproject log levels to map to + ; Asterisk errors. + ; (default: "0,1") +;asterisk_warning = ; A comma separated list of pjproject log levels to map to + ; Asterisk warnings. + ; (default: "2") +;asterisk_notice = ; A comma separated list of pjproject log levels to map to + ; Asterisk notices. + ; (default: "") +;asterisk_verbose = ; A comma separated list of pjproject log levels to map to + ; Asterisk verbose. + ; (default: "") +;asterisk_debug = ; A comma separated list of pjproject log levels to map to + ; Asterisk debug + ; (default: "3,4,5,6") +;type= ; Must be of type log_mappings (default: "") diff --git a/version_1.8.2/pabx/etc/asterisk/pjsip.conf b/version_1.8.2/pabx/etc/asterisk/pjsip.conf new file mode 100644 index 0000000..ba7d932 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/pjsip.conf @@ -0,0 +1,1266 @@ +; PJSIP Configuration Samples and Quick Reference +; +; This file has several very basic configuration examples, to serve as a quick +; reference to jog your memory when you need to write up a new configuration. +; It is not intended to teach PJSIP configuration or serve as an exhaustive +; reference of options and potential scenarios. +; +; This file has two main sections. +; First, manually written examples to serve as a handy reference. +; Second, a list of all possible PJSIP config options by section. This is +; pulled from the XML config help. It only shows the synopsis for every item. +; If you want to see more detail please check the documentation sources +; mentioned at the top of this file. + +; ============================================================================ +; NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE NOTICE +; +; This file does not maintain the complete option documentation. +; ============================================================================ + +; Documentation +; +; The official documentation is at http://wiki.asterisk.org +; You can read the XML configuration help via Asterisk command line with +; "config show help res_pjsip", then you can drill down through the various +; sections and their options. +; + +;========!!!!!!!!!!!!!!!!!!! SECURITY NOTICE !!!!!!!!!!!!!!!!!!!!=========== +; +; At a minimum please read the file "README-SERIOUSLY.bestpractices.txt", +; located in the Asterisk source directory before starting Asterisk. +; Otherwise you risk allowing the security of the Asterisk system to be +; compromised. Beyond that please visit and read the security information on +; the wiki at: https://wiki.asterisk.org/wiki/x/EwFB +; +; A few basics to pay attention to: +; +; Anonymous Calls +; +; By default anonymous inbound calls via PJSIP are not allowed. If you want to +; route anonymous calls you'll need to define an endpoint named "anonymous". +; res_pjsip_endpoint_identifier_anonymous.so handles that functionality so it +; must be loaded. It is not recommended to accept anonymous calls. +; +; Access Control Lists +; +; See the example ACL configuration in this file. Read the configuration help +; for the section and all of its options. Look over the samples in acl.conf +; and documentation at https://wiki.asterisk.org/wiki/x/uA80AQ +; If possible, restrict access to only networks and addresses you trust. +; +; Dialplan Contexts +; +; When defining configuration (such as an endpoint) that links into +; dialplan configuration, be aware of what that dialplan does. It's easy to +; accidentally provide access to internal or outbound dialing extensions which +; could cost you severely. The "context=" line in endpoint configuration +; determines which dialplan context inbound calls will enter into. +; +;============================================================================= + +; Overview of Configuration Section Types Used in the Examples +; +; * Transport "transport" +; * Configures res_pjsip transport layer interaction. +; * Endpoint "endpoint" +; * Configures core SIP functionality related to SIP endpoints. +; * Authentication "auth" +; * Stores inbound or outbound authentication credentials for use by trunks, +; endpoints, registrations. +; * Address of Record "aor" +; * Stores contact information for use by endpoints. +; * Endpoint Identification "identify" +; * Maps a host directly to an endpoint +; * Access Control List "acl" +; * Defines a permission list or references one stored in acl.conf +; * Registration "registration" +; * Contains information about an outbound SIP registration +; * Resource Lists +; * Contains information for configuring resource lists. +; * Phone Provisioning "phoneprov" +; * Contains information needed by res_phoneprov for autoprovisioning + +; The following sections show example configurations for various scenarios. +; Most require a couple or more configuration types configured in concert. + +;============================================================================= + +; Naming of Configuration Sections +; +; Configuration section names are denoted with enclosing brackets, +; e.g. [6001] +; In most cases, you can name a section whatever makes sense to you. For example +; you might name a transport [transport-udp-nat] to help you remember how that +; section is being used. However, in some cases, ("endpoint" and "aor" types) +; the section name has a relationship to its function. +; +; Depending on the modules loaded, Asterisk can match SIP requests to an +; endpoint or aor in a few ways: +; +; 1) Match a section name for endpoint type sections to the username in the +; "From" header of inbound SIP requests. +; 2) Match a section name for aor type sections to the username in the "To" +; header of inbound SIP REGISTER requests. +; 3) With an identify type section configured, match an inbound SIP request of +; any type to an endpoint or aor based on the IP source address of the +; request. +; +; Note that sections can have the same name as long as their "type" options are +; set to different values. In most cases it makes sense to have associated +; configuration sections use the same name, as you'll see in the examples within +; this file. + +;===============EXAMPLE TRANSPORTS============================================ +; +; A few examples for potential transport options. +; +; For the NAT transport example, be aware that the options starting with +; the prefix "external_" will only apply to communication with addresses +; outside the range set with "local_net=". +; +; You can have more than one of any type of transport, as long as it doesn't +; use the same resources (bind address, port, etc) as the others. + +; Basic UDP transport +; +;[transport-udp] +;type=transport +;protocol=udp ;udp,tcp,tls,ws,wss +;bind=0.0.0.0 + +; UDP transport behind NAT +; +;[transport-udp-nat] +;type=transport +;protocol=udp +;bind=0.0.0.0 +;local_net=192.0.2.0/24 +;external_media_address=203.0.113.1 +;external_signaling_address=203.0.113.1 + +; Basic IPv6 UDP transport +; +;[transport-udp-ipv6] +;type=transport +;protocol=udp +;bind=:: + +; Example IPv4 TLS transport +; +;[transport-tls] +;type=transport +;protocol=tls +;bind=0.0.0.0 +;cert_file=/path/mycert.crt +;priv_key_file=/path/mykey.key +;cipher=ADH-AES256-SHA,ADH-AES128-SHA +;method=tlsv1 + + +;===============OUTBOUND REGISTRATION WITH OUTBOUND AUTHENTICATION============ +; +; This is a simple registration that works with some SIP trunking providers. +; You'll need to set up the auth example "mytrunk_auth" below to enable outbound +; authentication. Note that we "outbound_auth=" use for outbound authentication +; instead of "auth=", which is for inbound authentication. +; +; If you are registering to a server from behind NAT, be sure you assign a transport +; that is appropriately configured with NAT related settings. See the NAT transport example. +; +; "contact_user=" sets the SIP contact header's user portion of the SIP URI +; this will affect the extension reached in dialplan when the far end calls you at this +; registration. The default is 's'. +; +; If you would like to enable line support and have incoming calls related to this +; registration go to an endpoint automatically the "line" and "endpoint" options must +; be set. The "endpoint" option specifies what endpoint the incoming call should be +; associated with. + +;[mytrunk] +;type=registration +;transport=transport-udp +;outbound_auth=mytrunk_auth +;server_uri=sip:sip.example.com +;client_uri=sip:1234567890@sip.example.com +;contact_user=1234567890 +;retry_interval=60 +;forbidden_retry_interval=600 +;expiration=3600 +;line=yes +;endpoint=mytrunk + +;[mytrunk_auth] +;type=auth +;auth_type=userpass +;password=1234567890 +;username=1234567890 +;realm=sip.example.com + +;===============ENDPOINT CONFIGURED AS A TRUNK, OUTBOUND AUTHENTICATION======= +; +; This is one way to configure an endpoint as a trunk. It is set up with +; "outbound_auth=" to enable authentication when dialing out through this +; endpoint. There is no inbound authentication set up since a provider will +; not normally authenticate when calling you. +; +; The identify configuration enables IP address matching against this endpoint. +; For calls from a trunking provider, the From user may be different every time, +; so we want to match against IP address instead of From user. +; +; If you want the provider of your trunk to know where to send your calls +; you'll need to use an outbound registration as in the example above this +; section. +; +; NAT +; +; At a basic level configure the endpoint with a transport that is set up +; with the appropriate NAT settings. There may be some additional settings you +; need here based on your NAT/Firewall scenario. Look to the CLI config help +; "config show help res_pjsip endpoint" or on the wiki for other NAT related +; options and configuration. We've included a few below. +; +; AOR +; +; Endpoints use one or more AOR sections to store their contact details. +; You can define multiple contact addresses in SIP URI format in multiple +; "contact=" entries. +; + +;[mytrunk] +;type=endpoint +;transport=transport-udp +;context=from-external +;disallow=all +;allow=ulaw +;outbound_auth=mytrunk_auth +;aors=mytrunk +; ;A few NAT relevant options that may come in handy. +;force_rport=yes ;It's a good idea to read the configuration help for each +;direct_media=no ;of these options. +;ice_support=yes + +;[mytrunk] +;type=aor +;contact=sip:198.51.100.1:5060 +;contact=sip:198.51.100.2:5060 + +;[mytrunk] +;type=identify +;endpoint=mytrunk +;match=198.51.100.1 +;match=198.51.100.2 + + +;=============ENDPOINT CONFIGURED AS A TRUNK, INBOUND AUTH AND REGISTRATION=== +; +; Here we are allowing a remote device to register to Asterisk and requiring +; that they authenticate for registration and calls. +; You'll note that this configuration is essentially the same as configuring +; an endpoint for use with a SIP phone. + + +;[7000] +;type=endpoint +;context=from-external +;disallow=all +;allow=ulaw +;transport=transport-udp +;auth=7000 +;aors=7000 + +;[7000] +;type=auth +;auth_type=userpass +;password=7000 +;username=7000 + +;[7000] +;type=aor +;max_contacts=1 + + +;===============ENDPOINT CONFIGURED FOR USE WITH A SIP PHONE================== +; +; This example includes the endpoint, auth and aor configurations. It +; requires inbound authentication and allows registration, as well as references +; a transport that you'll need to uncomment from the previous examples. +; +; Uncomment one of the transport lines to choose which transport you want. If +; not specified then the default transport chosen is the first defined transport +; in the configuration file. +; +; Modify the "max_contacts=" line to change how many unique registrations to allow. +; +; Use the "contact=" line instead of max_contacts= if you want to statically +; define the location of the device. +; +; If using the TLS enabled transport, you may want the "media_encryption=sdes" +; option to additionally enable SRTP, though they are not mutually inclusive. +; +; If this endpoint were remote, and it was using a transport configured for NAT +; then you likely want to use "direct_media=no" to prevent audio issues. + + +;[6001] +;type=endpoint +;transport=transport-udp +;context=from-internal +;disallow=all +;allow=ulaw +;allow=gsm +;auth=6001 +;aors=6001 +; +; A few more transports to pick from, and some related options below them. +; +;transport=transport-tls +;media_encryption=sdes +;transport=transport-udp-ipv6 +;transport=transport-udp-nat +;direct_media=no +; +; MWI related options + +;aggregate_mwi=yes +;mailboxes=6001@default,7001@default +;mwi_from_user=6001 +; +; Extension and Device state options +; +;device_state_busy_at=1 +;allow_subscribe=yes +;sub_min_expiry=30 + +;[6001] +;type=auth +;auth_type=userpass +;password=6001 +;username=6001 + +;[6001] +;type=aor +;max_contacts=1 +;contact=sip:6001@192.0.2.1:5060 + +;===============ENDPOINT BEHIND NAT OR FIREWALL=============================== +; +; This example assumes your transport is configured with a public IP and the +; endpoint itself is behind NAT and maybe a firewall, rather than having +; Asterisk behind NAT. For the sake of simplicity, we'll assume a typical +; VOIP phone. The most important settings to configure are: +; +; * direct_media, to ensure Asterisk stays in the media path +; * rtp_symmetric and force_rport options to help the far-end NAT/firewall +; +; Depending on the settings of your remote SIP device or NAT/firewall device +; you may have to experiment with a combination of these settings. +; +; If both Asterisk and the remote phones are a behind NAT/firewall then you'll +; have to make sure to use a transport with appropriate settings (as in the +; transport-udp-nat example). +; +;[6002] +;type=endpoint +;transport=transport-udp +;context=from-internal +;disallow=all +;allow=ulaw +;auth=6002 +;aors=6002 +;direct_media=no +;rtp_symmetric=yes +;force_rport=yes +;rewrite_contact=yes ; necessary if endpoint does not know/register public ip:port +;ice_support=yes ;This is specific to clients that support NAT traversal + ;for media via ICE,STUN,TURN. See the wiki at: + ;https://wiki.asterisk.org/wiki/x/D4FHAQ + ;for a deeper explanation of this topic. + +;[6002] +;type=auth +;auth_type=userpass +;password=6002 +;username=6002 + +;[6002] +;type=aor +;max_contacts=2 + + +;============EXAMPLE ACL CONFIGURATION========================================== +; +; The ACL or Access Control List section defines a set of permissions to permit +; or deny access to various address or addresses. Alternatively it references an +; ACL configuration already set in acl.conf. +; +; The ACL configuration is independent of individual endpoint configuration and +; operates on all inbound SIP communication using res_pjsip. + +; Reference an ACL defined in acl.conf. +; +;[acl] +;type=acl +;acl=example_named_acl1 + +; Reference a contactacl specifically. +; +;[acl] +;type=acl +;contact_acl=example_contact_acl1 + +; Define your own ACL here in pjsip.conf and +; permit or deny by IP address or range. +; +;[acl] +;type=acl +;deny=0.0.0.0/0.0.0.0 +;permit=209.16.236.0/24 +;deny=209.16.236.1 + +; Restrict based on Contact Headers rather than IP. +; Define options multiple times for various addresses or use a comma-delimited string. +; +;[acl] +;type=acl +;contact_deny=0.0.0.0/0.0.0.0 +;contact_permit=209.16.236.0/24 +;contact_permit=209.16.236.1 +;contact_permit=209.16.236.2,209.16.236.3 + +; Restrict based on Contact Headers rather than IP and use +; advanced syntax. Note the bang symbol used for "NOT", so we can deny +; 209.16.236.12/32 within the permit= statement. +; +;[acl] +;type=acl +;contact_deny=0.0.0.0/0.0.0.0 +;contact_permit=209.16.236.0 +;permit=209.16.236.0/24, !209.16.236.12/32 + + +;============EXAMPLE RLS CONFIGURATION========================================== +; +;Asterisk provides support for RFC 4662 Resource List Subscriptions. This allows +;for an endpoint to, through a single subscription, subscribe to the states of +;multiple resources. Resource lists are configured in pjsip.conf using the +;resource_list configuration object. Below is an example of a resource list that +;allows an endpoint to subscribe to the presence of alice, bob, and carol. + +;[my_list] +;type=resource_list +;list_item=alice +;list_item=bob +;list_item=carol +;event=presence + +;The "event" option in the resource list corresponds to the SIP event-package +;that the subscribed resources belong to. A resource list can only provide states +;for resources that belong to the same event-package. This means that you cannot +;create a list that is a combination of presence and message-summary resources, +;for instance. Any event-package that Asterisk supports can be used in a resource +;list (presence, dialog, and message-summary). Whenever support for a new event- +;package is added to Asterisk, support for that event-package in resource lists +;will automatically be supported. + +;The "list_item" options indicate the names of resources to subscribe to. The +;way these are interpreted is event-package specific. For instance, with presence +;list_items, hints in the dialplan are looked up. With message-summary list_items, +;mailboxes are looked up using your installed voicemail provider (app_voicemail +;by default). Note that in the above example, the list_item options were given +;one per line. However, it is also permissible to provide multiple list_item +;options on a single line (e.g. list_item = alice,bob,carol). + +;In addition to the options presented in the above configuration, there are two +;more configuration options that can be set. +; * full_state: dictates whether Asterisk should always send the states of +; all resources in the list at once. Defaults to "no". You should only set +; this to "yes" if you are interoperating with an endpoint that does not +; behave correctly when partial state notifications are sent to it. +; * notification_batch_interval: By default, Asterisk will send a NOTIFY request +; immediately when a resource changes state. This option causes Asterisk to +; start batching resource state changes for the specified number of milliseconds +; after a resource changes states. This way, if multiple resources change state +; within a brief interval, Asterisk can send a single NOTIFY request with all +; of the state changes reflected in it. + +;There is a limitation to the size of resource lists in Asterisk. If a constructed +;notification from Asterisk will exceed 64000 bytes, then the message is deemed +;too large to send. If you find that you are seeing error messages about SIP +;NOTIFY requests being too large to send, consider breaking your lists into +;sub-lists. + +;============EXAMPLE PHONEPROV CONFIGURATION================================ + +; Before configuring provisioning here, see the documentation for res_phoneprov +; and configure phoneprov.conf appropriately. + +; For each user to be autoprovisioned, a [phoneprov] configuration section +; must be created. At a minimum, the 'type', 'PROFILE' and 'MAC' variables must +; be set. All other variables are optional. +; Example: + +;[1000] +;type=phoneprov ; must be specified as 'phoneprov' +;endpoint=1000 ; Required only if automatic setting of + ; USERNAME, SECRET, DISPLAY_NAME and CALLERID + ; are needed. +;PROFILE=digium ; required +;MAC=deadbeef4dad ; required +;SERVER=myserver.example.com ; A standard variable +;TIMEZONE=America/Denver ; A standard variable +;MYVAR=somevalue ; A user confdigured variable + +; If the phoneprov sections have common variables, it is best to create a +; phoneprov template. The example below will produce the same configuration +; as the one specified above except that MYVAR will be overridden for +; the specific user. +; Example: + +;[phoneprov_defaults](!) +;type=phoneprov ; must be specified as 'phoneprov' +;PROFILE=digium ; required +;SERVER=myserver.example.com ; A standard variable +;TIMEZONE=America/Denver ; A standard variable +;MYVAR=somevalue ; A user configured variable + +;[1000](phoneprov_defaults) +;endpoint=1000 ; Required only if automatic setting of + ; USERNAME, SECRET, DISPLAY_NAME and CALLERID + ; are needed. +;MAC=deadbeef4dad ; required +;MYVAR=someOTHERvalue ; A user confdigured variable + +; To have USERNAME and SECRET automatically set, the endpoint +; specified here must in turn have an outbound_auth section defined. + +; Fuller example: + +;[1000] +;type=endpoint +;outbound_auth=1000-auth +;callerid=My Name <8005551212> +;transport=transport-udp-nat + +;[1000-auth] +;type=auth +;auth_type=userpass +;username=myname +;password=mysecret + +;[phoneprov_defaults](!) +;type=phoneprov ; must be specified as 'phoneprov' +;PROFILE=someprofile ; required +;SERVER=myserver.example.com ; A standard variable +;TIMEZONE=America/Denver ; A standard variable +;MYVAR=somevalue ; A user configured variable + +;[1000](phoneprov_defaults) +;endpoint=1000 ; Required only if automatic setting of + ; USERNAME, SECRET, DISPLAY_NAME and CALLERID + ; are needed. +;MAC=deadbeef4dad ; required +;MYVAR=someUSERvalue ; A user confdigured variable +;LABEL=1000 ; A standard variable + +; The previous sections would produce a template substitution map as follows: + +;MAC=deadbeef4dad ;added by pp1000 +;USERNAME=myname ;automatically added by 1000-auth username +;SECRET=mysecret ;automatically added by 1000-auth password +;PROFILE=someprofile ;added by defaults +;SERVER=myserver.example.com ;added by defaults +;SERVER_PORT=5060 ;added by defaults +;MYVAR=someUSERvalue ;added by defaults but overdidden by user +;CALLERID=8005551212 ;automatically added by 1000 callerid +;DISPLAY_NAME=My Name ;automatically added by 1000 callerid +;TIMEZONE=America/Denver ;added by defaults +;TZOFFSET=252100 ;automatically calculated by res_phoneprov +;DST_ENABLE=1 ;automatically calculated by res_phoneprov +;DST_START_MONTH=3 ;automatically calculated by res_phoneprov +;DST_START_MDAY=9 ;automatically calculated by res_phoneprov +;DST_START_HOUR=3 ;automatically calculated by res_phoneprov +;DST_END_MONTH=11 ;automatically calculated by res_phoneprov +;DST_END_MDAY=2 ;automatically calculated by res_phoneprov +;DST_END_HOUR=1 ;automatically calculated by res_phoneprov +;ENDPOINT_ID=1000 ;automatically added by this module +;AUTH_ID=1000-auth ;automatically added by this module +;TRANSPORT_ID=transport-udp-nat ;automatically added by this module +;LABEL=1000 ;added by user + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip +;==========================ENDPOINT SECTION OPTIONS========================= +;[endpoint] +; SYNOPSIS: Endpoint +;100rel=yes ; Allow support for RFC3262 provisional ACK tags (default: + ; "yes") +;aggregate_mwi=yes ; (default: "yes") +;allow= ; Media Codec s to allow (default: "") +;allow_overlap=yes ; Enable RFC3578 overlap dialing support. (default: "yes") +;aors= ; AoR s to be used with the endpoint (default: "") +;auth= ; Authentication Object s associated with the endpoint (default: "") +;callerid= ; CallerID information for the endpoint (default: "") +;callerid_privacy=allowed_not_screened ; Default privacy level (default: "allowed_not_screened") +;callerid_tag= ; Internal id_tag for the endpoint (default: "") +;context=default ; Dialplan context for inbound sessions (default: + ; "default") +;direct_media_glare_mitigation=none ; Mitigation of direct media re INVITE + ; glare (default: "none") +;direct_media_method=invite ; Direct Media method type (default: "invite") +;connected_line_method=invite ; Connected line method type. + ; When set to "invite", check the remote's + ; Allow header and if UPDATE is allowed, send + ; UPDATE instead of INVITE to avoid SDP + ; renegotiation. If UPDATE is not Allowed, + ; send INVITE. + ; If set to "update", send UPDATE regardless + ; of what the remote Allows. + ; (default: "invite") +;direct_media=yes ; Determines whether media may flow directly between + ; endpoints (default: "yes") +;disable_direct_media_on_nat=no ; Disable direct media session refreshes when + ; NAT obstructs the media session (default: + ; "no") +;disallow= ; Media Codec s to disallow (default: "") +;dtmf_mode=rfc4733 ; DTMF mode (default: "rfc4733") +;media_address= ; IP address used in SDP for media handling (default: "") +;bind_rtp_to_media_address= ; Bind the RTP session to the media_address. + ; This causes all RTP packets to be sent from + ; the specified address. (default: "no") +;force_rport=yes ; Force use of return port (default: "yes") +;ice_support=no ; Enable the ICE mechanism to help traverse NAT (default: "no") +;identify_by=username ; A comma-separated list of ways the Endpoint or AoR can be + ; identified. + ; "username": Identify by the From or To username and domain + ; "auth_username": Identify by the Authorization username and realm + ; In all cases, if an exact match on username and domain/realm fails, + ; the match will be retried with just the username. + ; (default: "username") +;redirect_method=user ; How redirects received from an endpoint are handled + ; (default: "user") +;mailboxes= ; NOTIFY the endpoint when state changes for any of the specified mailboxes. + ; Asterisk will send unsolicited MWI NOTIFY messages to the endpoint when state + ; changes happen for any of the specified mailboxes. (default: "") +;voicemail_extension= ; The voicemail extension to send in the NOTIFY Message-Account header + ; (default: global/default_voicemail_extension) +;mwi_subscribe_replaces_unsolicited=no + ; An MWI subscribe will replace unsoliticed NOTIFYs + ; (default: "no") +;moh_suggest=default ; Default Music On Hold class (default: "default") +;outbound_auth= ; Authentication object used for outbound requests (default: + ; "") +;outbound_proxy= ; Proxy through which to send requests, a full SIP URI + ; must be provided (default: "") +;rewrite_contact=no ; Allow Contact header to be rewritten with the source + ; IP address port (default: "no") +;rtp_symmetric=no ; Enforce that RTP must be symmetric (default: "no") +;send_diversion=yes ; Send the Diversion header conveying the diversion + ; information to the called user agent (default: "yes") +;send_pai=no ; Send the P Asserted Identity header (default: "no") +;send_rpid=no ; Send the Remote Party ID header (default: "no") +;rpid_immediate=no ; Send connected line updates on unanswered incoming calls immediately. (default: "no") +;timers_min_se=90 ; Minimum session timers expiration period (default: + ; "90") +;timers=yes ; Session timers for SIP packets (default: "yes") +;timers_sess_expires=1800 ; Maximum session timer expiration period + ; (default: "1800") +;transport= ; Desired transport configuration (default: "") +;trust_id_inbound=no ; Accept identification information received from this + ; endpoint (default: "no") +;trust_id_outbound=no ; Send private identification details to the endpoint + ; (default: "no") +;type= ; Must be of type endpoint (default: "") +;use_ptime=no ; Use Endpoint s requested packetisation interval (default: + ; "no") +;use_avpf=no ; Determines whether res_pjsip will use and enforce usage of + ; AVPF for this endpoint (default: "no") +;media_encryption=no ; Determines whether res_pjsip will use and enforce + ; usage of media encryption for this endpoint (default: + ; "no") +;media_encryption_optimistic=no ; Use encryption if possible but don't fail the call + ; if not possible. +;g726_non_standard=no ; When set to "yes" and an endpoint negotiates g.726 + ; audio then g.726 for AAL2 packing order is used contrary + ; to what is recommended in RFC3551. Note, 'g726aal2' also + ; needs to be specified in the codec allow list + ; (default: "no") +;inband_progress=no ; Determines whether chan_pjsip will indicate ringing + ; using inband progress (default: "no") +;call_group= ; The numeric pickup groups for a channel (default: "") +;pickup_group= ; The numeric pickup groups that a channel can pickup (default: + ; "") +;named_call_group= ; The named pickup groups for a channel (default: "") +;named_pickup_group= ; The named pickup groups that a channel can pickup + ; (default: "") +;device_state_busy_at=0 ; The number of in use channels which will cause busy + ; to be returned as device state (default: "0") +;t38_udptl=no ; Whether T 38 UDPTL support is enabled or not (default: "no") +;t38_udptl_ec=none ; T 38 UDPTL error correction method (default: "none") +;t38_udptl_maxdatagram=0 ; T 38 UDPTL maximum datagram size (default: + ; "0") +;fax_detect=no ; Whether CNG tone detection is enabled (default: "no") +;fax_detect_timeout=30 ; How many seconds into a call before fax_detect is + ; disabled for the call. + ; Zero disables the timeout. + ; (default: "0") +;t38_udptl_nat=no ; Whether NAT support is enabled on UDPTL sessions + ; (default: "no") +;tone_zone= ; Set which country s indications to use for channels created + ; for this endpoint (default: "") +;language= ; Set the default language to use for channels created for this + ; endpoint (default: "") +;one_touch_recording=no ; Determines whether one touch recording is allowed for + ; this endpoint (default: "no") +;record_on_feature=automixmon ; The feature to enact when one touch recording + ; is turned on (default: "automixmon") +;record_off_feature=automixmon ; The feature to enact when one touch recording + ; is turned off (default: "automixmon") +;rtp_engine=asterisk ; Name of the RTP engine to use for channels created + ; for this endpoint (default: "asterisk") +;allow_transfer=yes ; Determines whether SIP REFER transfers are allowed + ; for this endpoint (default: "yes") +;sdp_owner=- ; String placed as the username portion of an SDP origin o line + ; (default: "-") +;sdp_session=Asterisk ; String used for the SDP session s line (default: + ; "Asterisk") +;tos_audio=0 ; DSCP TOS bits for audio streams (default: "0") +;tos_video=0 ; DSCP TOS bits for video streams (default: "0") +;cos_audio=0 ; Priority for audio streams (default: "0") +;cos_video=0 ; Priority for video streams (default: "0") +;allow_subscribe=yes ; Determines if endpoint is allowed to initiate + ; subscriptions with Asterisk (default: "yes") +;sub_min_expiry=0 ; The minimum allowed expiry time for subscriptions + ; initiated by the endpoint (default: "0") +;from_user= ; Username to use in From header for requests to this endpoint + ; (default: "") +;mwi_from_user= ; Username to use in From header for unsolicited MWI NOTIFYs to + ; this endpoint (default: "") +;from_domain= ; Domain to user in From header for requests to this endpoint + ; (default: "") +;dtls_verify=no ; Verify that the provided peer certificate is valid (default: + ; "no") +;dtls_rekey=0 ; Interval at which to renegotiate the TLS session and rekey + ; the SRTP session (default: "0") +;dtls_cert_file= ; Path to certificate file to present to peer (default: + ; "") +;dtls_private_key= ; Path to private key for certificate file (default: + ; "") +;dtls_cipher= ; Cipher to use for DTLS negotiation (default: "") +;dtls_ca_file= ; Path to certificate authority certificate (default: "") +;dtls_ca_path= ; Path to a directory containing certificate authority + ; certificates (default: "") +;dtls_setup= ; Whether we are willing to accept connections connect to the + ; other party or both (default: "") +;dtls_fingerprint= ; Hash to use for the fingerprint placed into SDP + ; (default: "SHA-256") +;srtp_tag_32=no ; Determines whether 32 byte tags should be used instead of 80 + ; byte tags (default: "no") +;set_var= ; Variable set on a channel involving the endpoint. For multiple + ; channel variables specify multiple 'set_var'(s) +;rtp_keepalive= ; Interval, in seconds, between comfort noise RTP packets if + ; RTP is not flowing. This setting is useful for ensuring that + ; holes in NATs and firewalls are kept open throughout a call. +;rtp_timeout= ; Hang up channel if RTP is not received for the specified + ; number of seconds when the channel is off hold (default: + ; "0" or not enabled) +;rtp_timeout_hold= ; Hang up channel if RTP is not received for the specified + ; number of seconds when the channel is on hold (default: + ; "0" or not enabled) +;contact_user= ; On outgoing requests, force the user portion of the Contact + ; header to this value (default: "") +;asymmetric_rtp_codec= ; Allow the sending and receiving codec to differ and + ; not be automatically matched (default: "no") +;refer_blind_progress= ; Whether to notifies all the progress details on blind + ; transfer (default: "yes"). The value "no" is useful + ; for some SIP phones (Mitel/Aastra, Snom) which expect + ; a sip/frag "200 OK" after REFER has been accepted. +;notify_early_inuse_ringing = ; Whether to notifies dialog-info 'early' + ; on INUSE && RINGING state (default: "no"). + ; The value "yes" is useful for some SIP phones + ; (Cisco SPA) to be able to indicate and pick up + ; ringing devices. +;incoming_mwi_mailbox = ; Mailbox name to use when incoming MWI NOTIFYs are + ; received. + ; If an MWI NOTIFY is received FROM this endpoint, + ; this mailbox will be used when notifying other modules + ; of MWI status changes. If not set, incoming MWI + ; NOTIFYs are ignored. + +;==========================AUTH SECTION OPTIONS========================= +;[auth] +; SYNOPSIS: Authentication type +; +; Note: Using the same auth section for inbound and outbound +; authentication is not recommended. There is a difference in +; meaning for an empty realm setting between inbound and outbound +; authentication uses. Look to the CLI config help +; "config show help res_pjsip auth realm" or on the wiki for the +; difference. +; +;auth_type=userpass ; Authentication type (default: "userpass") +;nonce_lifetime=32 ; Lifetime of a nonce associated with this + ; authentication config (default: "32") +;md5_cred= ; MD5 Hash used for authentication (default: "") +;password= ; PlainText password used for authentication (default: "") +;realm= ; SIP realm for endpoint (default: "") +;type= ; Must be auth (default: "") +;username= ; Username to use for account (default: "") + + +;==========================DOMAIN_ALIAS SECTION OPTIONS========================= +;[domain_alias] +; SYNOPSIS: Domain Alias +;type= ; Must be of type domain_alias (default: "") +;domain= ; Domain to be aliased (default: "") + + +;==========================TRANSPORT SECTION OPTIONS========================= +;[transport] +; SYNOPSIS: SIP Transport +;async_operations=1 ; Number of simultaneous Asynchronous Operations + ; (default: "1") +;bind= ; IP Address and optional port to bind to for this transport (default: + ; "") +;ca_list_file= ; File containing a list of certificates to read TLS ONLY + ; (default: "") +;ca_list_path= ; Path to directory containing certificates to read TLS ONLY. + ; PJProject version 2.4 or higher is required for this option to + ; be used. + ; (default: "") +;cert_file= ; Certificate file for endpoint TLS ONLY + ; Will read .crt or .pem file but only uses cert, + ; a .key file must be specified via priv_key_file + ; (default: "") +;cipher= ; Preferred cryptography cipher names TLS ONLY (default: "") +;domain= ; Domain the transport comes from (default: "") +;external_media_address= ; External IP address to use in RTP handling + ; (default: "") +;external_signaling_address= ; External address for SIP signalling (default: + ; "") +;external_signaling_port=0 ; External port for SIP signalling (default: + ; "0") +;method= ; Method of SSL transport TLS ONLY (default: "") +;local_net= ; Network to consider local used for NAT purposes (default: "") +;password= ; Password required for transport (default: "") +;priv_key_file= ; Private key file TLS ONLY (default: "") +;protocol=udp ; Protocol to use for SIP traffic (default: "udp") +;require_client_cert= ; Require client certificate TLS ONLY (default: "") +;type= ; Must be of type transport (default: "") +;verify_client= ; Require verification of client certificate TLS ONLY (default: + ; "") +;verify_server= ; Require verification of server certificate TLS ONLY (default: + ; "") +;tos=0 ; Enable TOS for the signalling sent over this transport (default: "0") +;cos=0 ; Enable COS for the signalling sent over this transport (default: "0") +;websocket_write_timeout=100 ; Default write timeout to set on websocket + ; transports. This value may need to be adjusted + ; for connections where Asterisk must write a + ; substantial amount of data and the receiving + ; clients are slow to process the received + ; information. Value is in milliseconds; default + ; is 100 ms. +;allow_reload=no ; Although transports can now be reloaded, that may not be + ; desirable because of the slight possibility of dropped + ; calls. To make sure there are no unintentional drops, if + ; this option is set to 'no' (the default) changes to the + ; particular transport will be ignored. If set to 'yes', + ; changes (if any) will be applied. +;symmetric_transport=no ; When a request from a dynamic contact comes in on a + ; transport with this option set to 'yes', the transport + ; name will be saved and used for subsequent outgoing + ; requests like OPTIONS, NOTIFY and INVITE. It's saved + ; as a contact uri parameter named 'x-ast-txp' and will + ; display with the contact uri in CLI, AMI, and ARI + ; output. On the outgoing request, if a transport + ; wasn't explicitly set on the endpoint AND the request + ; URI is not a hostname, the saved transport will be + ; used and the 'x-ast-txp' parameter stripped from the + ; outgoing packet. + +;==========================AOR SECTION OPTIONS========================= +;[aor] +; SYNOPSIS: The configuration for a location of an endpoint +;contact= ; Permanent contacts assigned to AoR (default: "") +;default_expiration=3600 ; Default expiration time in seconds for + ; contacts that are dynamically bound to an AoR + ; (default: "3600") +;mailboxes= ; Allow subscriptions for the specified mailbox(es) + ; This option applies when an external entity subscribes to an AoR + ; for Message Waiting Indications. (default: "") +;voicemail_extension= ; The voicemail extension to send in the NOTIFY Message-Account header + ; (default: global/default_voicemail_extension) +;maximum_expiration=7200 ; Maximum time to keep an AoR (default: "7200") +;max_contacts=0 ; Maximum number of contacts that can bind to an AoR (default: + ; "0") +;minimum_expiration=60 ; Minimum keep alive time for an AoR (default: "60") +;remove_existing=no ; Allow a registration to succeed by displacing any existing + ; contacts that now exceed the max_contacts count. Any + ; removed contacts are the next to expire. The behaviour is + ; beneficial when rewrite_contact is enabled and max_contacts + ; is greater than one. The removed contact is likely the old + ; contact created by rewrite_contact that the device is + ; refreshing. + ; (default: "no") +;type= ; Must be of type aor (default: "") +;qualify_frequency=0 ; Interval at which to qualify an AoR (default: "0") +;qualify_timeout=3.0 ; Qualify timeout in fractional seconds (default: "3.0") +;authenticate_qualify=no ; Authenticates a qualify request if needed + ; (default: "no") +;outbound_proxy= ; Proxy through which to send OPTIONS requests, a full SIP URI + ; must be provided (default: "") + + +;==========================SYSTEM SECTION OPTIONS========================= +;[system] +; SYNOPSIS: Options that apply to the SIP stack as well as other system-wide settings +;timer_t1=500 ; Set transaction timer T1 value milliseconds (default: "500") +;timer_b=32000 ; Set transaction timer B value milliseconds (default: "32000") +;compact_headers=no ; Use the short forms of common SIP header names + ; (default: "no") +;threadpool_initial_size=0 ; Initial number of threads in the res_pjsip + ; threadpool (default: "0") +;threadpool_auto_increment=5 ; The amount by which the number of threads is + ; incremented when necessary (default: "5") +;threadpool_idle_timeout=60 ; Number of seconds before an idle thread + ; should be disposed of (default: "60") +;threadpool_max_size=0 ; Maximum number of threads in the res_pjsip threadpool + ; A value of 0 indicates no maximum (default: "0") +;disable_tcp_switch=yes ; Disable automatic switching from UDP to TCP transports + ; if outgoing request is too large. + ; See RFC 3261 section 18.1.1. + ; Disabling this option has been known to cause interoperability + ; issues, so disable at your own risk. + ; (default: "yes") +;type= ; Must be of type system (default: "") + +;==========================GLOBAL SECTION OPTIONS========================= +;[global] +; SYNOPSIS: Options that apply globally to all SIP communications +;max_forwards=70 ; Value used in Max Forwards header for SIP requests + ; (default: "70") +;type= ; Must be of type global (default: "") +;user_agent=Asterisk PBX ; Allows you to change the user agent string + ; The default user agent string also contains + ; the Asterisk version. If you don't want to + ; expose this, change the user_agent string. +;default_outbound_endpoint=default_outbound_endpoint ; Endpoint to use when + ; sending an outbound + ; request to a URI + ; without a specified + ; endpoint (default: "d + ; efault_outbound_endpo + ; int") +;debug=no ; Enable/Disable SIP debug logging. Valid options include yes|no + ; or a host address (default: "no") +;keep_alive_interval=20 ; The interval (in seconds) at which to send keepalive + ; messages on all active connection-oriented transports + ; (default: "0") +;contact_expiration_check_interval=30 + ; The interval (in seconds) to check for expired contacts. +;disable_multi_domain=no + ; Disable Multi Domain support. + ; If disabled it can improve realtime performace by reducing + ; number of database requsts + ; (default: "no") +;endpoint_identifier_order=ip,username,anonymous + ; The order by which endpoint identifiers are given priority. + ; Currently, "ip", "username", "auth_username" and "anonymous" are valid + ; identifiers as registered by the res_pjsip_endpoint_identifier_* modules. + ; Some modules like res_pjsip_endpoint_identifier_user register more than + ; one identifier. Use the CLI command "pjsip show identifiers" to see the + ; identifiers currently available. + ; (default: ip,username,anonymous) +;max_initial_qualify_time=4 ; The maximum amount of time (in seconds) from + ; startup that qualifies should be attempted on all + ; contacts. If greater than the qualify_frequency + ; for an aor, qualify_frequency will be used instead. +;regcontext=sipregistrations ; If regcontext is specified, Asterisk will dynamically + ; create and destroy a NoOp priority 1 extension for a + ; given endpoint who registers or unregisters with us. + ; The extension added is the name of the endpoint. +;default_voicemail_extension=asterisk + ; The voicemail extension to send in the NOTIFY Message-Account header + ; if not set on endpoint or aor. + ; (default: "") +; +; The following unidentified_request options are only used when "auth_username" +; matching is enabled in "endpoint_identifier_order". +; +;unidentified_request_count=5 ; The number of unidentified requests that can be + ; received from a single IP address in + ; unidentified_request_period seconds before a security + ; event is generated. (default: 5) +;unidentified_request_period=5 ; See above. (default: 5 seconds) +;unidentified_request_prune_interval=30 + ; The interval at which unidentified requests + ; are check to see if they can be pruned. If they're + ; older than twice the unidentified_request_period, + ; they're pruned. +; +;default_from_user=asterisk ; When Asterisk generates an outgoing SIP request, the + ; From header username will be set to this value if + ; there is no better option (such as CallerID or + ; endpoint/from_user) to be used +;default_realm=asterisk ; When Asterisk generates a challenge, the digest realm + ; will be set to this value if there is no better option + ; (such as auth/realm) to be used. + + ; Asterisk Task Processor Queue Size + ; On heavy loaded system with DB storage you may need to increase + ; taskprocessor queue. + ; If the taskprocessor queue size reached high water level, + ; the alert is triggered. + ; If the alert is set the pjsip distibutor stops processing incoming + ; requests until the alert is cleared. + ; The alert is cleared when taskprocessor queue size drops to the + ; low water clear level. + ; The next options set taskprocessor queue levels for MWI. +;mwi_tps_queue_high=500 ; Taskprocessor high water alert trigger level. +;mwi_tps_queue_low=450 ; Taskprocessor low water clear alert level. + ; The default is -1 for 90% of high water level. + + ; Unsolicited MWI + ; If there are endpoints configured with unsolicited MWI + ; then res_pjsip_mwi module tries to send MWI to all endpoints on startup. +;mwi_disable_initial_unsolicited=no ; Disable sending unsolicited mwi to all endpoints on startup. + ; If disabled then unsolicited mwi will start processing + ; on the endpoint's next contact update. + +;ignore_uri_user_options=no ; Enable/Disable ignoring SIP URI user field options. + ; If you have this option enabled and there are semicolons + ; in the user field of a SIP URI then the field is truncated + ; at the first semicolon. This effectively makes the semicolon + ; a non-usable character for PJSIP endpoint names, extensions, + ; and AORs. This can be useful for improving compatability with + ; an ITSP that likes to use user options for whatever reason. + ; Example: + ; URI: "sip:1235557890;phone-context=national@x.x.x.x;user=phone" + ; The user field is "1235557890;phone-context=national" + ; Which becomes this: "1235557890" + ; + ; Note: The caller-id and redirecting number strings obtained + ; from incoming SIP URI user fields are always truncated at the + ; first semicolon. + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip_acl +;==========================ACL SECTION OPTIONS========================= +;[acl] +; SYNOPSIS: Access Control List +;acl= ; List of IP ACL section names in acl conf (default: "") +;contact_acl= ; List of Contact ACL section names in acl conf (default: "") +;contact_deny= ; List of Contact header addresses to deny (default: "") +;contact_permit= ; List of Contact header addresses to permit (default: + ; "") +;deny= ; List of IP addresses to deny access from (default: "") +;permit= ; List of IP addresses to permit access from (default: "") +;type= ; Must be of type acl (default: "") + + + + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip_outbound_registration +;==========================REGISTRATION SECTION OPTIONS========================= +;[registration] +; SYNOPSIS: The configuration for outbound registration +;auth_rejection_permanent=yes ; Determines whether failed authentication + ; challenges are treated as permanent failures + ; (default: "yes") +;client_uri= ; Client SIP URI used when attemping outbound registration + ; (default: "") +;contact_user= ; Contact User to use in request (default: "") +;expiration=3600 ; Expiration time for registrations in seconds + ; (default: "3600") +;max_retries=10 ; Maximum number of registration attempts (default: "10") +;outbound_auth= ; Authentication object to be used for outbound registrations + ; (default: "") +;outbound_proxy= ; Proxy through which to send registrations, a full SIP URI + ; must be provided (default: "") +;retry_interval=60 ; Interval in seconds between retries if outbound + ; registration is unsuccessful (default: "60") +;forbidden_retry_interval=0 ; Interval used when receiving a 403 Forbidden + ; response (default: "0") +;fatal_retry_interval=0 ; Interval used when receiving a fatal response. + ; (default: "0") A fatal response is any permanent + ; failure (non-temporary 4xx, 5xx, 6xx) response + ; received from the registrar. NOTE - if also set + ; the 'forbidden_retry_interval' takes precedence + ; over this one when a 403 is received. Also, if + ; 'auth_rejection_permanent' equals 'yes' a 401 and + ; 407 become subject to this retry interval. +;server_uri= ; SIP URI of the server to register against (default: "") +;transport= ; Transport used for outbound authentication (default: "") +;line= ; When enabled this option will cause a 'line' parameter to be + ; added to the Contact header placed into the outgoing + ; registration request. If the remote server sends a call + ; this line parameter will be used to establish a relationship + ; to the outbound registration, ultimately causing the + ; configured endpoint to be used (default: "no") +;endpoint= ; When line support is enabled this configured endpoint name + ; is used for incoming calls that are related to the outbound + ; registration (default: "") +;type= ; Must be of type registration (default: "") + + + + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip_endpoint_identifier_ip +;==========================IDENTIFY SECTION OPTIONS========================= +;[identify] +; SYNOPSIS: Identifies endpoints via source IP address +;endpoint= ; Name of Endpoint (default: "") +;match= ; IP addresses or networks to match against (default: "") +;type= ; Must be of type identify (default: "") + + + + +;========================PHONEPROV_USER SECTION OPTIONS======================= +;[phoneprov] +; SYNOPSIS: Contains variables for autoprovisioning each user +;endpoint= ; The endpoint from which to gather username, secret, etc. (default: "") +;PROFILE= ; The name of a profile configured in phoneprov.conf (default: "") +;MAC= ; The mac address for this user (default: "") +;OTHERVAR= ; Any other name value pair to be used in templates (default: "") + ; Common variables include LINE, LINEKEYS, etc. + ; See phoneprov.conf.sample for others. +;type= ; Must be of type phoneprov (default: "") + + + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip_outbound_publish +;======================OUTBOUND_PUBLISH SECTION OPTIONS===================== +; See https://wiki.asterisk.org/wiki/display/AST/Publishing+Extension+State +; for more information. +;[outbound-publish] +;type=outbound-publish ; Must be of type 'outbound-publish'. + +;expiration=3600 ; Expiration time for publications in seconds + +;outbound_auth= ; Authentication object(s) to be used for outbound + ; publishes. + ; This is a comma-delimited list of auth sections + ; defined in pjsip.conf used to respond to outbound + ; authentication challenges. + ; Using the same auth section for inbound and + ; outbound authentication is not recommended. There + ; is a difference in meaning for an empty realm + ; setting between inbound and outbound authentication + ; uses. See the auth realm description for details. + +;outbound_proxy= ; SIP URI of the outbound proxy used to send + ; publishes + +;server_uri= ; SIP URI of the server and entity to publish to. + ; This is the URI at which to find the entity and + ; server to send the outbound PUBLISH to. + ; This URI is used as the request URI of the outbound + ; PUBLISH request from Asterisk. + +;from_uri= ; SIP URI to use in the From header. + ; This is the URI that will be placed into the From + ; header of outgoing PUBLISH messages. If no URI is + ; specified then the URI provided in server_uri will + ; be used. + +;to_uri= ; SIP URI to use in the To header. + ; This is the URI that will be placed into the To + ; header of outgoing PUBLISH messages. If no URI is + ; specified then the URI provided in server_uri will + ; be used. + +;event= ; Event type of the PUBLISH. + +;max_auth_attempts= ; Maximum number of authentication attempts before + ; stopping the pub. + +;transport= ; Transport used for outbound publish. + ; A transport configured in pjsip.conf. As with other + ; res_pjsip modules, this will use the first + ; available transport of the appropriate type if + ; unconfigured. + +;multi_user=no ; Enable multi-user support (Asterisk 14+ only) + + + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip_pubsub +;=============================RESOURCE-LIST=================================== +; See https://wiki.asterisk.org/wiki/pages/viewpage.action?pageId=30278158 +; for more information. +;[resource_list] +;type=resource_list ; Must be of type 'resource_list'. + +;event= ; The SIP event package that the list resource. + ; belongs to. The SIP event package describes the + ; types of resources that Asterisk reports the state + ; of. + +;list_item= ; The name of a resource to report state on. + ; In general Asterisk looks up list items in the + ; following way: + ; 1. Check if the list item refers to another + ; configured resource list. + ; 2. Pass the name of the resource off to + ; event-package-specific handlers to find the + ; specified resource. + ; The second part means that the way the list item + ; is specified depends on what type of list this is. + ; For instance, if you have the event set to + ; presence, then list items should be in the form of + ; dialplan_extension@dialplan_context. For + ; message-summary, mailbox names should be listed. + +;full_state=no ; Indicates if the entire list's state should be + ; sent out. + ; If this option is enabled, and a resource changes + ; state, then Asterisk will construct a notification + ; that contains the state of all resources in the + ; list. If the option is disabled, Asterisk will + ; construct a notification that only contains the + ; states of resources that have changed. + ; NOTE: Even with this option disabled, there are + ; certain situations where Asterisk is forced to send + ; a notification with the states of all resources in + ; the list. When a subscriber renews or terminates + ; its subscription to the list, Asterisk MUST send + ; a full state notification. + +;notification_batch_interval=0 + ; Time Asterisk should wait, in milliseconds, + ; before sending notifications. + +;==========================INBOUND_PUBLICATION================================ +; See https://wiki.asterisk.org/wiki/display/AST/Exchanging+Device+and+Mailbox+State+Using+PJSIP +; for more information. +;[inbound-publication] +;type= ; Must be of type 'inbound-publication'. + +;endpoint= ; Optional name of an endpoint that is only allowed + ; to publish to this resource. + + +; MODULE PROVIDING BELOW SECTION(S): res_pjsip_publish_asterisk +;==========================ASTERISK_PUBLICATION=============================== +; See https://wiki.asterisk.org/wiki/display/AST/Exchanging+Device+and+Mailbox+State+Using+PJSIP +; for more information. +;[asterisk-publication] +;type=asterisk-publication ; Must be of type 'asterisk-publication'. + +;devicestate_publish= ; Optional name of a publish item that can be used + ; to publish a req. + +;mailboxstate_publish= ; Optional name of a publish item that can be used + ; to publish a req. + +;device_state=no ; Whether we should permit incoming device state + ; events. + +;device_state_filter= ; Optional regular expression used to filter what + ; devices we accept events for. + +;mailbox_state=no ; Whether we should permit incoming mailbox state + ; events. + +;mailbox_state_filter= ; Optional regular expression used to filter what + ; mailboxes we accept events for. diff --git a/version_1.8.2/pabx/etc/asterisk/pjsip_notify.conf b/version_1.8.2/pabx/etc/asterisk/pjsip_notify.conf new file mode 100644 index 0000000..8224ee1 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/pjsip_notify.conf @@ -0,0 +1,57 @@ +; rfc3842 +; put empty "Content=>" at the end to have CRLF after last body line + +[clear-mwi] +Event=>message-summary +Content-type=>application/simple-message-summary +Content=>Messages-Waiting: no +Content=>Message-Account: sip:asterisk@127.0.0.1 +Content=>Voice-Message: 0/0 (0/0) +Content=> + +; Aastra + +[aastra-check-cfg] +Event=>check-sync + +[aastra-xml] +Event=>aastra-xml + +; Digium + +[digium-check-cfg] +Event=>check-sync + +; Linksys + +[linksys-cold-restart] +Event=>reboot_now + +[linksys-warm-restart] +Event=>restart_now + +; Polycom + +[polycom-check-cfg] +Event=>check-sync + +; Sipura + +[sipura-check-cfg] +Event=>resync + +[sipura-get-report] +Event=>report + +; snom + +[snom-check-cfg] +Event=>check-sync\;reboot=false + +[snom-reboot] +Event=>check-sync\;reboot=true + +; Cisco + +[cisco-check-cfg] +Event=>check-sync diff --git a/version_1.8.2/pabx/etc/asterisk/pjsip_wizard.conf b/version_1.8.2/pabx/etc/asterisk/pjsip_wizard.conf new file mode 100644 index 0000000..8c8572e --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/pjsip_wizard.conf @@ -0,0 +1,159 @@ +; PJSIP Wizard Configuration Samples and Quick Reference +; +; This file has several very basic configuration examples, to serve as a quick +; reference to jog your memory when you need to write up a new configuration. +; It is not intended to teach PJSIP configuration or serve as an exhaustive +; reference of options and potential scenarios. +; +; This file has two main sections. +; First, manually written examples to serve as a handy reference. +; Second, a list of all possible PJSIP config options by section. This is +; pulled from the XML config help. It only shows the synopsis for every item. +; If you want to see more detail please check the documentation sources +; mentioned at the top of this file. + +; Documentation +; +; The official documentation is at http://wiki.asterisk.org +; You can read the XML configuration help via Asterisk command line with +; "config show help res_pjsip_config_wizard", then you can drill down through +; the various sections and their options. +; + + +;============EXAMPLE WIZARD CONFIGURATION FOR A PHONE======================= + +; This config would create an endpoint, aor with dynamic contact, inbound +; auth, a phoneprov object and a dialplan hint for extension 1000. + +;[myphone] +;type = wizard +;accepts_auth = yes +;accepts_registrations = yes +;has_phoneprov = yes +;transport = ipv4 +;has_hint = yes +;hint_exten = 1000 +;inbound_auth/username = testname +;inbound_auth/password = test password +;endpoint/allow = ulaw +;endpoint/context = default +;phoneprov/MAC = 001122aa4455 +;phoneprov/PROFILE = profile1 + + +;============EXAMPLE WIZARD CONFIGURATION FOR AN ITSP TRUNK================= + +; This ITSP has 2 servers available and requires registration. + +; This config would create an endpoint, an aor with 2 static contacts, an +; outbound auth, an identify with 2 matches, and 2 registrations. + +;[mytrunk] +;type = wizard +;sends_auth = yes +;sends_registrations = yes +;transport = ipv4 +;remote_hosts = sip1.myitsp.com:5060,sip2.myitsp.com:5060 +;outbound_auth/username = testname +;outbound_auth/password = test password +;endpoint/allow = ulaw +;endpoint/context = default + + +;========================WIZARD SECTION OPTIONS=============================== +;[wizard] +; SYNOPSIS: Provides configuration wizard for common scenarios. +;sends_auth= ; Will create an outbound auth object for the endpoint and + ; registration. + ; If yes, outbound/username must be specified. + ; (default = "no") + +;accepts_auth= ; Will create an inbound auth object for the endpoint. + ; If yes, inbound/username must be specified. + ; (default = "no") + +;sends_registrations= ; Will create an outbound registration object and an + ; identify match for each host in remote_hosts (which + ; must be specified). + ; sends_auth must also be specified. + ; (default: "no") + +;sends_line_with_registrations= ; Setting this to true will cause the wizard to + ; skip the creation of an identify object to match + ; incoming requests to the endpoint and instead add the + ; line and endpoint parameters to the outbound + ; registration object. + ; (default: "no") + +;accepts_registrations= ; Will create an aor with dynamic contacts which will + ; accept registrations. + ; accepts_auth must also be specified. + ; (default: "no") + +;remote_hosts= ; A comma separated list of remote hosts in the form of + ; [:port] [,[:port] ] ... + ; If specified, a static contact for each host will be created + ; in the aor. If accepts_registrations is no, an identify + ; object is also created with a match line for each remote host. + ; If an aor/contact or match/identify is explicitly supplied, + ; remote_hosts will not be used to automatically create contacts + ; or matches respectively. + ; Hostnames must resolve to A, AAAA or CNAME records. + ; SRV records are not currently supported. + ; (default: "") + +;outbound_proxy= ; Setting this is a shortcut for setting + ; endpoint/outbound_proxy + ; aor/outbound_proxy + ; registration/outbound_proxy + +;transport= ; The transport to use for the endpoint and registrations + ; (default: the pjsip default) + +;server_uri_pattern= ; The pattern used to construct the registration + ; server_uri. The replaceable parameter ${REMOTE_HOST} isa + ; available for use. + ; (default: "sip:${REMOTE_HOST}") + +;client_uri_pattern= ; The pattern used to construct the registration client_uri. + ; The replaceable parameters ${REMOTE_HOST} and ${USERNAME} + ; are available for use. + ; (default: "sip:${USERNAME}@${REMOTE_HOST}") + +;contact_pattern= ; The pattern used to construct the aor contact. + ; The replaceable parameter ${REMOTE_HOST} is available + ; for use. + ; (default: "sip:${REMOTE_HOST}") + +;has_phoneprov= ; Will create a phoneprov object. + ; If yes, phoneprov/MAC must be specified. + ; (default: "no") + +;has_hint= ; Create hint and optionally a default application. + ; (default: "no") + +;hint_context ; Any hints created for this wizard will be placed in this + ; context. + ; (default: endpoint/context) + +;hint_exten ; If specified, a PJSIP/ hint will be created + ; for this extension in 'hint_context'. + ; context. + ; (default: none) + +;hint_application ; If specified, an extension will be placed in 'hint_context' + ; at priority 1 that calls this application. Could be any + ; valid dialplan expression like + ; "Gosub(stdexten,${EXTEN},1(${HINT}))" + ; (default: "Dial(${HINT})") + +;endpoint/ ; Any parameters to be passed directly to and validated +;aor/ ; by their respective objects. +;inbound_auth/ +;outbound_auth/ +;identify/ +;registration/ +;phoneprov/ + +;type= ; Must be of type wizard (default: "") diff --git a/version_1.8.2/pabx/etc/asterisk/privacy.conf b/version_1.8.2/pabx/etc/asterisk/privacy.conf new file mode 100644 index 0000000..0236bcc --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/privacy.conf @@ -0,0 +1,3 @@ +[general] + +maxretries = 2 ;How many chances the caller has to enter their number diff --git a/version_1.8.2/pabx/etc/asterisk/proxy-ssl.conf b/version_1.8.2/pabx/etc/asterisk/proxy-ssl.conf new file mode 100644 index 0000000..d10d9a1 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/proxy-ssl.conf @@ -0,0 +1,154 @@ +# Asterisk SSL configuration +# +# OpenSSL configuration file for custom Certificate Authority. Use a +# different openssl.cnf file to generate certificate signing requests; +# this one is for use only in Certificate Authority operations (csr -> +# cert, cert revocation, revocation list generation). +# +# Be sure to customize this file prior to use, e.g. the commonName and +# other options under the root_ca_distinguished_name section. + +HOME = . +RANDFILE = $ENV::HOME/.rnd + +[ ca ] +default_ca = MyAsteriskCA + +[ MyAsteriskCA ] +dir = . +# unsed at present, and my limited certs can be kept in current dir +#certs = $dir/certs +new_certs_dir = $dir/newcerts +crl_dir = $dir/crl +database = $dir/index + +certificate = $dir/ca-cert.pem +serial = $dir/serial +crl = $dir/ca-crl.pem +private_key = $dir/private/ca-key.pem +RANDFILE = $dir/private/.rand + +x509_extensions = usr_cert + +# Comment out the following two lines for the "traditional" +# (and highly broken) format. +name_opt = ca_default +cert_opt = ca_default + +default_crl_days= 30 +default_days = 7300 +# if need to be compatible with older software, use weaker md5 +default_md = sha1 +# MSIE may need following set to yes? +preserve = no + +# A few difference way of specifying how similar the request should look +# For type CA, the listed attributes must be the same, and the optional +# and supplied fields are just that :-) +policy = policy_match + +# For the CA policy +[ policy_match ] +countryName = US +stateOrProvinceName = CA +organizationName = XYZ +organizationalUnitName = XYZ +commonName = asterisk +emailAddress = root@localhost + +# For the 'anything' policy +# At this point in time, you must list all acceptable 'object' +# types. +[ policy_anything ] +countryName = optional +stateOrProvinceName = optional +localityName = optional +organizationName = optional +organizationalUnitName = optional +commonName = supplied +emailAddress = optional + +#################################################################### +[ req ] +default_bits = 2048 +default_keyfile = ./private/ca-key.pem +default_md = sha1 + +prompt = no +distinguished_name = root_ca_distinguished_name + +x509_extensions = v3_ca + +# Passwords for private keys if not present they will be prompted for +# input_password = secret +# output_password = secret + +# This sets a mask for permitted string types. There are several options. +# default: PrintableString, T61String, BMPString. +# pkix : PrintableString, BMPString. +# utf8only: only UTF8Strings. +# nombstr : PrintableString, T61String (no BMPStrings or UTF8Strings). +# MASK:XXXX a literal mask value. +# WARNING: current versions of Netscape crash on BMPStrings or UTF8Strings +# so use this option with caution! +string_mask = nombstr + +# req_extensions = v3_req + +[ root_ca_distinguished_name ] +commonName = NoSuchCA CA +countryName = US +stateOrProvinceName = California +localityName = San Mateo +0.organizationName = domain.net +emailAddress = nobody@localhost + +[ usr_cert ] + +# These extensions are added when 'ca' signs a request. + +# This goes against PKIX guidelines but some CAs do it and some software +# requires this to avoid interpreting an end user certificate as a CA. + +basicConstraints=CA:FALSE + +# PKIX recommendations harmless if included in all certificates. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid,issuer:always + +nsCaRevocationUrl = https://www.sial.org/ca-crl.pem +#nsBaseUrl +#nsRevocationUrl +#nsRenewalUrl +#nsCaPolicyUrl +#nsSslServerName + +[ v3_req ] + +# Extensions to add to a certificate request + +basicConstraints = CA:FALSE +keyUsage = nonRepudiation, digitalSignature, keyEncipherment + +[ v3_ca ] + + +# Extensions for a typical CA + +# PKIX recommendation. +subjectKeyIdentifier=hash +authorityKeyIdentifier=keyid:always,issuer:always + +# This is what PKIX recommends but some broken software chokes on critical +# extensions. +#basicConstraints = critical,CA:true +# So we do this instead. +basicConstraints = CA:true + +[ crl_ext ] + +# CRL extensions. +# Only issuerAltName and authorityKeyIdentifier make any sense in a CRL. + +# issuerAltName=issuer:copy +authorityKeyIdentifier=keyid:always,issuer:always diff --git a/version_1.8.2/pabx/etc/asterisk/queuerules.conf b/version_1.8.2/pabx/etc/asterisk/queuerules.conf new file mode 100644 index 0000000..7a56275 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/queuerules.conf @@ -0,0 +1,30 @@ + +[general] + +; Look for queue rules in the queue_rules database table through RealTime. Note +; that this option is not strictly "RealTime", in the sense that the queue +; rules are only loaded and parsed during module load/reload. Queue rules +; must have a unique rule name and support relative min/max penalties. +; +; realtime_rules = yes +; + +; It is possible to change the value of the QUEUE_MAX_PENALTY and QUEUE_MIN_PENALTY +; channel variables in mid-call by defining rules in the queue for when to do so. This can allow for +; a call to be opened to more members or potentially a different set of members. +; The advantage to changing members this way as opposed to inserting the caller into a +; different queue with more members or reinserting the caller into the same queue with a different +; QUEUE_MAX_PENALTY or QUEUE_MIN_PENALTY set is that the caller does not lose his place in the queue. +; +; Note: There is a limitation to these rules; a caller will follow the penaltychange rules for +; the queue that were defined at the time the caller entered the queue. If an update to the rules is +; made during the caller's stay in the queue, these will not be reflected for that caller. +; +; The syntax for these rules is +; penaltychange => ,[,absolute or relative change to QUEUE_MIN_PENALTY] +; +; Example: +; [myrule] +; penaltychange => 30,+3 ; 30 seconds into the call increase the QUEUE_MAX_PENALTY by 3, no change to QUEUE_MIN_PENALTY +; penaltychange => 60,10,5 ; 60 seconds into the call increase the QUEUE_MAX_PENALTY to 10 and increase the QUEUE_MIN_PENALTY to 5 +; penaltychange => 75,,7 ; 75 seconds into the call keep the QUEUE_MAX_PENALTY the same and increase the QUEUE_MIN_PENALTY to 7 diff --git a/version_1.8.2/pabx/etc/asterisk/queues.conf b/version_1.8.2/pabx/etc/asterisk/queues.conf new file mode 100644 index 0000000..2a6d1f7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/queues.conf @@ -0,0 +1,6 @@ +[general] ; configurações gerais para as filas +#include queues_general.conf +#include queues_general_customizado.conf +#include queues_filas.conf +#include queues_filas_customizado.conf +#include queues_campanha.conf diff --git a/version_1.8.2/pabx/etc/asterisk/queues_campanha.conf b/version_1.8.2/pabx/etc/asterisk/queues_campanha.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/queues_campanha.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/queues_filas.conf b/version_1.8.2/pabx/etc/asterisk/queues_filas.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/queues_filas_customizado.conf b/version_1.8.2/pabx/etc/asterisk/queues_filas_customizado.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/queues_general.conf b/version_1.8.2/pabx/etc/asterisk/queues_general.conf new file mode 100644 index 0000000..ee828f4 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/queues_general.conf @@ -0,0 +1 @@ +persistentmembers=yes diff --git a/version_1.8.2/pabx/etc/asterisk/queues_general_customizado.conf b/version_1.8.2/pabx/etc/asterisk/queues_general_customizado.conf new file mode 100644 index 0000000..885fe28 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/queues_general_customizado.conf @@ -0,0 +1,2 @@ +autofill = yes +monitor-type = MixMonitor diff --git a/version_1.8.2/pabx/etc/asterisk/res_config_mysql.conf b/version_1.8.2/pabx/etc/asterisk/res_config_mysql.conf new file mode 100644 index 0000000..7d9c78e --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_config_mysql.conf @@ -0,0 +1,43 @@ +; +; Sample configuration for res_config_mysql.c +; +; The value of dbhost may be either a hostname or an IP address. +; If dbhost is commented out or the string "localhost", a connection +; to the local host is assumed and dbsock is used instead of TCP/IP +; to connect to the server. If no dbcharset is specified, the connection +; is made with no extra charset configurations sent to MySQL, leaving all +; configured MySQL charset options and defaults untouched. +; +; Multiple database contexts may be configured, with the caveat that +; all context names should be unique and must not contain the slash ('/') +; character. If you wish to separate reads from writes in your database +; configuration, you specify the database (NOT HERE, in other files) +; separated by a slash, read database first. If your database +; specification does not contain a slash, the implication is that reads +; and writes should be performed to the same database. +; +; For example, in extconfig.conf, you could specify a line like: +; sippeers => mysql,readhost.asterisk/writehost.asterisk,sippeers +; and then define the contexts [readhost.asterisk] and [writehost.asterisk] +; below. +; +; The requirements parameter is available only in Asterisk 1.6.1 and +; later and must be present in all contexts. It specifies the behavior +; when a column name is required by the system. The default behavior is +; "warn" and simply sends a warning to the logger that the column does +; not exist (or is of the wrong type or precision). The other two +; possibilities are "createclose", which adds the column with the right +; type and length, and "createchar", which adds the column as a char +; type, with the appropriate length to accept the data. Note that with +; the MySQL driver, both "createclose" and "createchar" will, on occasion, +; widen a table column width to meet the requirements specified. +; +[general] +;dbhost = 127.0.0.1 +;dbname = asterisk +;dbuser = myuser +;dbpass = mypass +;dbport = 3306 +;dbsock = /tmp/mysql.sock +;dbcharset = latin1 +;requirements=warn ; or createclose or createchar diff --git a/version_1.8.2/pabx/etc/asterisk/res_config_sqlite.conf b/version_1.8.2/pabx/etc/asterisk/res_config_sqlite.conf new file mode 100644 index 0000000..2d14d46 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_config_sqlite.conf @@ -0,0 +1,11 @@ +[general] + +; The database file. +dbfile => /var/lib/asterisk/sqlite.db + +; Both config_table and cdr_table are optional. If config_table is omitted, +; you must specify it in extconfig.conf. If it is both provided here and in +; extconfig.conf, the value given here is used. If cdr_table is omitted, CDR +; support is simply disabled. +config_table => ast_config +; cdr_table => ast_cdr diff --git a/version_1.8.2/pabx/etc/asterisk/res_config_sqlite3.conf b/version_1.8.2/pabx/etc/asterisk/res_config_sqlite3.conf new file mode 100644 index 0000000..83569ad --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_config_sqlite3.conf @@ -0,0 +1,30 @@ +; Define a realtime database name to use in extconfig.conf +; +;[asterisk] +;dbfile => /var/lib/asterisk/realtime.sqlite3 +; +; debug - Turn on debugging information +;debug=yes +; +; requirements - At startup, each realtime family will make requirements +; on the backend. There are several strategies for handling requirements: +; warn - Warn if the required column does not exist. +; createclose - Create columns as close to the requirements as possible. +; createchar - Create char columns only +; +;requirements=warn +; +; batch - SQLite 3 write performance can be greatly improved by wrapping +; multiple writes in transactions. This option specifies the duration in +; milliseconds of auto-generated transactions. Any changes made during an +; unfinished transaction will be immediately available to the same database +; connection, but any external connections could see a delay up to the value +; of this setting. It is also possible that if asterisk crashes, any changes +; made during this time could be lost. Due to the nearly 100x performance +; benefit, the default is 100 ms. Set to 0 to disable batching. +; +; PLEASE NOTE: If you need to write to the database from another connection +; you will need to set batch=0 as the transactions will cause the database +; to lock for writing. +; +;batch=1000 diff --git a/version_1.8.2/pabx/etc/asterisk/res_corosync.conf b/version_1.8.2/pabx/etc/asterisk/res_corosync.conf new file mode 100644 index 0000000..9a72c1c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_corosync.conf @@ -0,0 +1,31 @@ +; +; Sample configuration file for res_corosync. +; +; This module allows events to be shared amongst a local cluster of +; Asterisk servers. Specifically, the types of events that may be +; shared include: +; +; - Device State (for shared presence information) +; +; - Message Waiting Indication, or MWI (to allow Voicemail to live on +; a server that is different from where the phones are registered) +; +; For more information about Corosync, see: http://www.corosync.org/ +; + +[general] + +; +; Publish Message Waiting Indication (MWI) events from this server to the +; cluster. +;publish_event = mwi +; +; Subscribe to MWI events from the cluster. +;subscribe_event = mwi +; +; Publish Device State (presence) events from this server to the cluster. +;publish_event = device_state +; +; Subscribe to Device State (presence) events from the cluster. +;subscribe_event = device_state +; diff --git a/version_1.8.2/pabx/etc/asterisk/res_curl.conf b/version_1.8.2/pabx/etc/asterisk/res_curl.conf new file mode 100644 index 0000000..cc47298 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_curl.conf @@ -0,0 +1,8 @@ +; +; CURLOPT global settings (mostly set for realtime) +; +[globals] +;proxy=myproxy.example.com +proxytype=http +proxyport=8001 +;proxyuserpwd=asterisk:asteriskrocks diff --git a/version_1.8.2/pabx/etc/asterisk/res_fax.conf b/version_1.8.2/pabx/etc/asterisk/res_fax.conf new file mode 100644 index 0000000..95e6be8 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_fax.conf @@ -0,0 +1,32 @@ +; Generic Fax Application configuration + +[general] +; Maximum Transmission Rate +; Possible values are { 2400 | 4800 | 7200 | 9600 | 12000 | 14400 } +; Set this value to the maximum desired transfer rate. Default: 14400 +;maxrate=14400 + +; Minimum Transmission Rate +; Possible values are { 2400 | 4800 | 7200 | 9600 | 12000 | 14400 } +; Set this value to the minimum desired transfer rate. Default: 4800 +;minrate=4800 + +; Send Progress/Status events to manager session +; Manager events with 'call' class permissions will receive events indicating the +; steps to initiate a fax session. Fax completion events are always sent to manager +; sessions with 'call' class permissions, regardless of the value of this option. +; Default: no +statusevents=yes + +; modem capabilities +; Possible values are { v17 | v27 | v29 } +; Set this value to modify the default modem options. Default: v17,v27,v29 +;modems=v17,v27,v29 + +; Enable/disable T.30 ECM (error correction mode) by default. +; Default: Enabled +;ecm=yes + +; T.38 Negotiation Timeout in milliseconds +; Default: 5000 +t38timeout=5000 diff --git a/version_1.8.2/pabx/etc/asterisk/res_ldap.conf b/version_1.8.2/pabx/etc/asterisk/res_ldap.conf new file mode 100644 index 0000000..c8d1286 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_ldap.conf @@ -0,0 +1,198 @@ +; +; Configuration file for res_config_ldap +; + +; Realtime configuration +; ---------------------- +; In order to use this module, you start +; in extconfig.conf with a configuration like this: +; +; sippeers = ldap,"dc=myDomain,dc=myDomainExt",sip +; extensions = ldap,"dc=myDomain,dc=myDomainExt",extensions +; sip.conf = ldap,"dc=myDomain,dc=myDomainExt",config +; +; In the case of LDAP the last keyword in each line above specifies +; a section in this file. +; +; LDAP schema and ldif files can be located in contrib/scripts. + +; TLS support +; ----------- +; Note that you can configure an ldaps: url here to get TLS support. +; Detailed configuration of certificates and supported CAs is done in your +; ldap.conf file for OpenLDAP clients on your system. +; This requires that you have OpenLDAP libraries compiled with TLS support + +; ********************************************************************************* +; NOTE: res_ldap.conf should be chmod 600 because it contains the plain-text LDAP +; password to an account with WRITE access to the asterisk configuration. +; ********************************************************************************* + +[_general] +; +; Specify one of either host and port OR url. URL is preferred, as you can +; use more options. +;host=192.168.1.1 ; LDAP host +;port=389 +;url=ldap://ldap3.mydomain.com:3890 +;protocol=3 ; Version of the LDAP protocol to use; default is 3. +;basedn=dc=example,dc=tld ; Base DN +;user=cn=asterisk,dc=example,dc=tld ; Bind DN +;pass=MyPassword ; Bind password + +; Configuration Table +[config] +; +; additionalFilter - This specifies an additional set of criteria to be used +; when querying the LDAP server. +; +additionalFilter=(objectClass=AstConfig) +; +; Attributes mapping (asterisk variable name = ldap attribute name) +; When Asterisk requests the variable by the name of the value on the left, +; this module will look up the attribute listed on the right. +; +filename = AstConfigFilename +category = AstConfigCategory +variable_name = AstConfigVariableName +variable_value = AstConfigVariableValue +cat_metric = AstConfigCategoryMetric +commented = AstConfigCommented + +; +; Extensions Table +; +[extensions] +context = AstExtensionContext +exten = AstExtensionExten +priority = AstExtensionPriority +app = AstExtensionApplication +appdata = AstExtensionApplicationData +additionalFilter=(objectClass=AstExtension) + +; +; Sip Users Table +; +[sip] +name = cn ; We use the "cn" as the default value for name on the line above + ; because objectClass=AsteriskSIPUser does not include a uid as an allowed field + ; If your entry combines other objectClasses and uid is available, you may + ; prefer to change the line to be name = uid, especially if your LDAP entries + ; contain spaces in the cn field. + ; You may also find it appropriate to use something completely different. + ; This is possible by changing the line above to name = AstAccountName (or whatever you + ; prefer). + ; +amaflags = AstAccountAMAFlags +callgroup = AstAccountCallGroup +callerid = AstAccountCallerID +directmedia = AstAccountDirectMedia +context = AstAccountContext +dtmfmode = AstAccountDTMFMode +fromuser = AstAccountFromUser +fromdomain = AstAccountFromDomain +fullcontact = AstAccountFullContact +fullcontact = gecos +host = AstAccountHost +insecure = AstAccountInsecure +mailbox = AstAccountMailbox +md5secret = AstAccountRealmedPassword ; Must be an MD5 hash. Field value can start with + ; {md5} but it is not required. + ; Generate the password via the md5sum command, e.g. + ; echo "my_password" | md5sum +nat = AstAccountNAT +deny = AstAccountDeny +permit = AstAccountPermit +pickupgroup = AstAccountPickupGroup +port = AstAccountPort +qualify = AstAccountQualify +restrictcid = AstAccountRestrictCID +rtptimeout = AstAccountRTPTimeout +rtpholdtimeout = AstAccountRTPHoldTimeout +type = AstAccountType +disallow = AstAccountDisallowedCodec +allow = AstAccountAllowedCodec +MusicOnHold = AstAccountMusicOnHold +regseconds = AstAccountExpirationTimestamp +regcontext = AstAccountRegistrationContext +regexten = AstAccountRegistrationExten +CanCallForward = AstAccountCanCallForward +ipaddr = AstAccountIPAddress +defaultuser = AstAccountDefaultUser +regserver = AstAccountRegistrationServer +lastms = AstAccountLastQualifyMilliseconds +supportpath = AstAccountPathSupport +additionalFilter=(objectClass=AsteriskSIPUser) + +; +; IAX Users Table +; +[iax] +amaflags = AstAccountAMAFlags +callerid = AstAccountCallerID +context = AstAccountContext +fullcontact = AstAccountFullContact +fullcontact = gecos +host = AstAccountHost +mailbox = AstAccountMailbox +md5secret = AstAccountRealmedPassword ; Must be an MD5 hash. Field value can start with + ; {md5} but it is not required. + ; Generate the password via the md5sum command, e.g. + ; echo "my_password" | md5sum +deny = AstAccountDeny +permit = AstAccountPermit +port = AstAccountPort +qualify = AstAccountQualify +type = AstAccountType +disallow = AstAccountDisallowedCodec +allow = AstAccountAllowedCodec +regseconds = AstAccountExpirationTimestamp +regcontext = AstAccountRegistrationContext +regexten = AstAccountRegistrationExten +notransfer = AstAccountNoTransfer +lastms = AstAccountLastQualifyMilliseconds +additionalFilter=(objectClass=AstAccountIAX) + +; +; A Test Family +; +[testfamily] +MyUSERID = uid +additionalFilter=(objectClass=*) + +[accounts] +amaflags = AstAccountAMAFlags +callgroup = AstAccountCallGroup +callerid = AstAccountCallerID +directmedia = AstAccountDirectMedia +context = AstAccountContext +dtmfmode = AstAccountDTMFMode +fromuser = AstAccountFromUser +fromdomain = AstAccountFromDomain +fullcontact = AstAccountFullContact +fullcontact = gecos +host = AstAccountHost +insecure = AstAccountInsecure +mailbox = AstAccountMailbox +md5secret = AstAccountRealmedPassword ; Must be an MD5 hash. Field value can start with + ; {md5} but it is not required. + ; Generate the password via the md5sum command, e.g. + ; echo "my_password" | md5sum +nat = AstAccountNAT +deny = AstAccountDeny +permit = AstAccountPermit +pickupgroup = AstAccountPickupGroup +port = AstAccountPort +qualify = AstAccountQualify +restrictcid = AstAccountRestrictCID +rtptimeout = AstAccountRTPTimeout +rtpholdtimeout = AstAccountRTPHoldTimeout +type = AstAccountType +disallow = AstAccountDisallowedCodec +allow = AstAccountAllowedCodec +MusicOnHold = AstAccountMusicOnHold +regseconds = AstAccountExpirationTimestamp +regcontext = AstAccountRegistrationContext +regexten = AstAccountRegistrationExten +CanCallForward = AstAccountCanCallForward +additionalFilter=(objectClass=AstAccount) diff --git a/version_1.8.2/pabx/etc/asterisk/res_mysql.conf b/version_1.8.2/pabx/etc/asterisk/res_mysql.conf new file mode 100644 index 0000000..56af578 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_mysql.conf @@ -0,0 +1,15 @@ +; +; Sample configuration for res_config_mysql.c +; +; The value of dbhost may be either a hostname or an IP address. +; If dbhost is commented out or the string "localhost", a connection +; to the local host is assumed and dbsock is used instead of TCP/IP +; to connect to the server. +; +[general] +;dbhost = 127.0.0.1 +;dbname = asterisk +;dbuser = myuser +;dbpass = mypass +;dbport = 3306 +;dbsock = /tmp/mysql.sock diff --git a/version_1.8.2/pabx/etc/asterisk/res_odbc.conf b/version_1.8.2/pabx/etc/asterisk/res_odbc.conf new file mode 100644 index 0000000..c69f556 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_odbc.conf @@ -0,0 +1,111 @@ +;;; odbc setup file + +; ENV is a global set of environmental variables that will get set. +; Note that all environmental variables can be seen by all connections, +; so you can't have different values for different connections. +[ENV] +;INFORMIXSERVER => my_special_database +;INFORMIXDIR => /opt/informix +;ORACLE_HOME => /home/oracle + +; All other sections are arbitrary names for database connections. + +; +; The context name is what will be used in other configuration files, such +; as extconfig.conf and func_odbc.conf, to reference this connection. +[asterisk] +; +; Permit disabling sections without needing to comment them out. +; If not specified, it is assumed the section is enabled. +enabled => no +; +; This value should match an entry in /etc/odbc.ini +; (or /usr/local/etc/odbc.ini, on FreeBSD and similar systems). +dsn => asterisk +; +; Username for connecting to the database. The user defaults to the context name if unspecified. +;username => myuser +; +; Password for authenticating the user to the database. The default +; password is blank. +;password => mypass +; +; Build a connection at startup? +pre-connect => yes +; +; What should we execute to ensure that our connection is still alive? The +; statement should return a non-zero value in the first field of its first +; record. The default is "select 1". +;sanitysql => select 1 +; +; The maximum number of connections to have open at any given time. +; This defaults to 1 and it is highly recommended to only set this higher +; if using a version of UnixODBC greater than 2.3.1. +;max_connections => 20 +; +; When the channel is destroyed, should any uncommitted open transactions +; automatically be committed? +;forcecommit => no +; +; How should we perceive data in other transactions within the database? +; Possible values are read_uncommitted, read_committed, repeatable_read, +; and serializable. The default is read_committed. +;isolation => repeatable_read +; +; Is the backslash a native escape character? The default is yes, but for +; MS SQL Server, the answer is no. +;backslash_is_escape => yes +; +; How long (in seconds) should we attempt to connect before considering the +; connection dead? The default is 10 seconds, but you may wish to reduce it, +; to increase responsiveness. +;connect_timeout => 10 +; +; When a connection fails, how long (in seconds) should we cache that +; information before we attempt another connection? This increases +; responsiveness, when a database resource is not working. +;negative_connection_cache => 300 + +[mysql2] +enabled => no +dsn => MySQL-asterisk +username => myuser +password => mypass +pre-connect => yes + +; Certain servers, such as MS SQL Server and Sybase use the TDS protocol, which +; limits the number of active queries per connection to 1. +[sqlserver] +enabled => no +dsn => mickeysoft +max_connections => 5 +username => oscar +password => thegrouch +pre-connect => yes +sanitysql => select count(*) from systables +; forcecommit => no ; Default to committing uncommitted transactions? + ; Note: this is NOT the autocommit flag; this + ; determines the end result of transactions which + ; are not explicitly committed or rolled back. By + ; default, such transactions are rolled back if the + ; call ends without an explicit commit. +; isolation => read_committed ; Isolation level; supported levels are: + ; read_uncommitted, read_committed, repeatable_read, + ; serializable. Note that not all databases support + ; all isolation levels (e.g. Postgres only supports + ; repeatable_read and serializable). See database + ; documentation for further information. +; +; Many databases have a default of '\' to escape special characters. MS SQL +; Server does not. +backslash_is_escape => no + +; +; If you are having problems with concurrency, please read this note from the +; mailing lists, regarding UnixODBC: +; +; http://lists.digium.com/pipermail/asterisk-dev/2009-February/036539.html +; +; In summary, try setting "Threading=2" in the relevant section within your +; odbcinst.ini. +; diff --git a/version_1.8.2/pabx/etc/asterisk/res_parking.conf b/version_1.8.2/pabx/etc/asterisk/res_parking.conf new file mode 100644 index 0000000..e08ef9a --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_parking.conf @@ -0,0 +1,12 @@ +[general] +parkeddynamic = yes + +[default] +parkext => 700 +parkpos => 701-750 +context => parkedcalls +parkingtime => 9000 +courtesytone = beep +parkedplay = caller +findslot => first +parkedmusicclass = default diff --git a/version_1.8.2/pabx/etc/asterisk/res_pgsql.conf b/version_1.8.2/pabx/etc/asterisk/res_pgsql.conf new file mode 100644 index 0000000..015d68c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_pgsql.conf @@ -0,0 +1,30 @@ +; +; Sample configuration for res_config_pgsql +; +; The value of dbhost may be either a hostname or an IP address. +; If dbhost is commented out or the string "localhost", a connection +; to the local host is assumed and dbsock is used instead of TCP/IP +; to connect to the server. +; +[general] +dbhost=127.0.0.1 +dbport=5432 +dbname=asterisk +dbuser=asterisk +dbpass=password +;dbappname=asterisk ; Postgres application_name support (optional). Whitespace not allowed. +; +; dbsock is specified as the directory where the socket file may be found. The +; actual socket is constructed as a combination of dbsock and dbport. For +; example, the values of '/tmp' and '5432', respectively, will specify a socket +; file of '/tmp/.s.PGSQL.5432'. +; +;dbsock=/tmp +; +; requirements - At startup, each realtime family will make requirements +; on the backend. There are several strategies for handling requirements: +; warn - Warn if the required column does not exist. +; createclose - Create columns as close to the requirements as possible. +; createchar - Create char columns only +; +requirements=warn diff --git a/version_1.8.2/pabx/etc/asterisk/res_pktccops.conf b/version_1.8.2/pabx/etc/asterisk/res_pktccops.conf new file mode 100644 index 0000000..769508d --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_pktccops.conf @@ -0,0 +1,32 @@ +;; Sample res_pktccops.conf +; +;[general] +;gateinfoperiod => 60 ; default 60s +;gatetimeout = 150 ; default 150 +;t1 => 250 ; default 250s +;t7 => 200 ; default 200s +;t8 => 300 ; default 300s +;keepalive => 60 ; default 60s +; +;[teszt] +;host => 192.168.0.24 +;pool => 10.0.1.0 10.0.1.255 +;pool => 10.0.3.0 10.0.3.255 +;pool => 10.0.7.0 10.0.8.255 +;pool => 10.0.10.0 10.0.11.255 +; +;[general] +;gateinfoperiod => 60 ; default 60s +;gatetimeout = 150 ; default 150 +;t1 => 250 ; default 250s +;t7 => 200 ; default 200s +;t8 => 300 ; default 300s +;keepalive => 60 ; default 60s +; +;[test] +;host => 192.168.0.24 +;pool => 10.0.1.0 10.0.1.255 +;pool => 10.0.3.0 10.0.3.255 +;pool => 10.0.7.0 10.0.8.255 +;pool => 10.0.10.0 10.0.11.255 +; diff --git a/version_1.8.2/pabx/etc/asterisk/res_snmp.conf b/version_1.8.2/pabx/etc/asterisk/res_snmp.conf new file mode 100644 index 0000000..c017c0e --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_snmp.conf @@ -0,0 +1,22 @@ +; +; Configuration file for res_snmp +; -------------------------------- +; +; Res_snmp can run as a subagent or standalone SNMP agent. The standalone snmp +; agent is based on net-snmp and will read a configuration file called +; asterisk.conf in the net-snmp configuration file path, starting with +; /etc/snmp on many systems. +; +; If you use the subagent model, you need to enable agentx in snmpd.conf +; Note that you can only run one Asterisk on the system in this case. +; +; See https://wiki.asterisk.org/wiki/display/AST/Simple+Network+Management+Protocol+(SNMP)+Support +; to get more information about +; snmp support in Asterisk + +[general] +; We run as a subagent per default -- to run as a full agent +; we must run as root (to be able to bind to port 161) +;subagent = yes +; SNMP must be explicitly enabled to be active +;enabled = yes diff --git a/version_1.8.2/pabx/etc/asterisk/res_stun_monitor.conf b/version_1.8.2/pabx/etc/asterisk/res_stun_monitor.conf new file mode 100644 index 0000000..12d32a4 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/res_stun_monitor.conf @@ -0,0 +1,27 @@ +; +; Configuration file for the res_stun_monitor module +; +; The res_stun_monitor module sends STUN requests to a configured STUN server +; periodically. If the monitor detects a change in the external IP address or port +; provided by the STUN server an event is sent out internally within Asterisk +; to alert all listeners to that event of the change. + +; The current default listeners for the network change event include chan_sip +; and chan_iax. Both of these channel drivers by default react to this event +; by renewing all outbound registrations. This allows the endpoints Asterisk +; is registering with to become aware of the address change and know the new +; location. +; +[general] +; +; ---- STUN Server configuration --- +; Setting the 'stunaddr' option to a valid address enables the STUN monitor. +; +;stunaddr = mystunserver.com ; Address of the STUN server to query. + ; Valid form: + ; [(hostname | IP-address) [':' port]] + ; The port defaults to the standard STUN port (3478). + ; Set to an empty value to disable STUN monitoring. + ; Default is disabled. +;stunrefresh = 30 ; Number of seconds between STUN refreshes. + ; Default is 30. diff --git a/version_1.8.2/pabx/etc/asterisk/rpt.conf b/version_1.8.2/pabx/etc/asterisk/rpt.conf new file mode 100644 index 0000000..6aee784 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/rpt.conf @@ -0,0 +1,193 @@ +; Radio Repeater / Remote Base configuration file (for use with app_rpt) +; As of app_rpt version 0.39, 12/20/2005 +; + +;[000] ; Node ID of first repeater + +;rxchannel = Zap/1 ; Rx audio/signalling channel +; Note: if you use a unified interface (tx/rx on one channel), only +; specify the rxchannel and the txchannel will be assumed from the rxchannel +;txchannel = Zap/2 ; Tx audio/signalling channel +;duplex = 2 ; (Optional) set duplex operating mode +;; 0 = half duplex (telemetry and courtesy tones do not transmit) +;; 1 = semi-half duplex (telemetry and courtesy tones transmit, but not +;; repeated audio +;; 2 = normal full-duplex mode (Default) +;; 3 = full-duplex mode, without repeated audio from main input source +;functions = functions-repeater ; DTMF function list +;; specify this for a different function list then local when on link +;;link_functions = functions-different ; DTMF function list for link +;;phone_functions = functions-phone ; (optional) different functions for 'P' mode +;;dphone_functions = functions-dphone ; (optional) different functions for 'D' mode +;;nodes = nodes-different ; (optional) different node list +;tonezone = us ; use US tones (default) +;context = default ; dialing context for phone +;callerid = "WB6NIL Repeater" <(213) 555-0123> ; Callerid for phone calls +;idrecording = wb6nil ; id recording +;accountcode=RADIO ; account code (optional) +;funcchar = * ; function lead-in character (defaults to '*') +;endchar = # ; command mode end character (defaults to '#') +;;nobusyout=yes ; (optional) Do not busy-out reverse-patch when + ; normal patch in use +;hangtime=1000 ; squelch tail hang time (in ms) (optional) +;totime=100000 ; transmit time-out time (in ms) (optional) +;idtime=30000 ; id interval time (in ms) (optional) +;politeid=30000 ; time in milliseconds before ID timer + ; expires to try and ID in the tail. + ; (optional, default is 30000). +;idtalkover=|iwb6nil/rpt ; Talkover ID (optional) default is none +;unlinkedct=ct2 ; unlinked courtesy tone (optional) default is none + +;; The tailmessagetime,tailsquashedtime, and tailmessages need to be set +;; to support tail messages. They can be omitted otherwise. +;tailmessagetime=300000 ; Play a tail message every 5 mins +;tailsquashedtime=30000 ; If squashed by another user, +;; try again after 30 seconds +;tailmessages=msg1,msg2,msg3 ;list of messages to be played for tail message + +; The default values for hangtime, time-out time, and id interval time are +; 5 seconds (5000 ms), 3 minutes (180000 ms), and 5 minutes (300000 ms) +; respectively + +;[001] ; Node ID of first repeater + +;rxchannel = Zap/3 ; Rx audio/signalling channel +; Note: if you use a unified interface (tx/rx on one channel), only +; specify the rxchannel and the txchannel will be assumed from the rxchannel +;txchannel = Zap/4 ; Tx audio/signalling channel +;functions = functions-repeater ; DTMF function list +;; specify this for a different function list then local when on link +;;link_functions = functions-different ; DTMF function list for link +;;phone_functions = functions-phone ; (optional) different functions for 'P' mode +;;dphone_functions = functions-dphone ; (optional) different functions for 'D' mode +;;nodes = nodes-different ; (optional) different node list +;tonezone = us ; use US tones (default) +;context = default ; dialing context for phone +;callerid = "WB6NIL Repeater" <(213) 555-0123> ; Callerid for phone calls +;idrecording = wb6nil ; id recording +;accountcode=RADIO ; account code (optional) +;funcchar = * ; function lead-in character (defaults to '*') +;endchar = # ; command mode end character (defaults to '#') +;;nobusyout=yes ; (optional) Do not busy-out reverse-patch when + ; normal patch in use +;hangtime=1000 ; squelch tail hang time (in ms) (optional) +;totime=100000 ; transmit time-out time (in ms) (optional) +;idtime=30000 ; id interval time (in ms) (optional) +;politeid=30000 ; time in milliseconds before ID timer + ; expires to try and ID in the tail. + ; (optional, default is 30000). +;idtalkover=|iwb6nil/rpt ; Talkover ID (optional) default is none +;unlinkedct=ct2 ; unlinked courtesy tone (optional) default is none + +;[002] ; Node ID of remote base + +;rxchannel = Zap/5 ; Rx audio/signalling channel +; Note: if you use a unified interface (tx/rx on one channel), only +; specify the rxchannel and the txchannel will be assumed from the rxchannel +;txchannel = Zap/6 ; Tx audio/signalling channel +;functions = functions-remote +;remote = ft897 ; Set remote=y for dumb remote or + ; remote=ft897 for Yaesu FT-897 or + ; remote=rbi for Doug Hall RBI1 +;iobase = 0x378 ; Specify IO port for parallel port (optional) + +;[functions-repeater] +;1=ilink,1 ; Specific link disconnect +;2=ilink,2 ; Specific Link connect - monitor only +;3=ilink,3 ; Specific Link connect - transceive +;4=ilink,4 ; Enter command mode on a specific link +;7=ilink,5 ; Link status +;;XX=ilink,6 ; Disconnect all links (not used here) + +;80=status,1 ; System info +;81=status,2 ; Time +;82=status,3 ; app_rpt.c Version + +;6=autopatchup ; Autopatch up +;0=autopatchdn ; Autopatch down + +;90=cop,1 ; System warm boot +;91=cop,2 ; System enable +;92=cop,3 ; System disable + +;[functions-remote] + +;0=remote,1 ; Retrieve Memory +;1=remote,2 ; Set freq. +;2=remote,3 ; Set Rx PL tone. +;40=remote,100 ; Rx PL off +;41=remote,101 ; Rx PL on +;42=remote,102 ; Tx PL off +;43=remote,103 ; Tx PL on +;44=remote,104 ; Low Pwr +;45=remote,105 ; Med Pwr +;46=remote,106 ; Hi Pwr +;5=remote,5 ; Status + +;[telemetry] + +; Telemetry entries are shared across all repeaters +; Can be a tone sequence, morse string, or a file +; +; |t - Tone escape sequence +; +; Tone sequences consist of 1 or more 4-tuple entries (freq1, freq2, duration, amplitude) +; Single frequencies are created by setting freq1 or freq2 to zero. +; +; |m - Morse escape sequence +; +; Sends Morse code at the telemetry amplitude and telemetry frequency as defined in the +; [morse] section. +; +; Follow with an alphanumeric string +; +; |i - Morse ID escape sequence +; +; Sends Morse code at the ID amplitude and ID frequency as defined in the +; [morse] section. +; +; Follow with an alphanumeric string + + +;ct1=|t(350,0,100,2048)(500,0,100,2048)(660,0,100,2048) +;ct2=|t(660,880,150,2048) +;ct3=|t(440,0,150,2048) +;ct4=|t(550,0,150,2048) +;ct5=|t(660,0,150,2048) +;ct6=|t(880,0,150,2048) +;ct7=|t(660,440,150,2048) +;ct8=|t(700,1100,150,2048) +;remotetx=|t(2000,0,75,2048)(0,0,75,0)(1600,0,75,2048); +;remotemon=|t(1600,0,75,2048) +;cmdmode=|t(900,903,200,2048) +;functcomplete=|t(1000,0,100,2048)(0,0,100,0)(1000,0,100,2048) + + +;[morse] + +;speed=20 ; Approximate speed in WPM +;frequency=800 ; Morse Telemetry Frequency +;amplitude=4096 ; Morse Telemetry Amplitude +;idfrequency=330 ; Morse ID Frequency +;idamplitude=2048 ; Morse ID Amplitude + +;[nodes] + +;000 = context_A@foo.bar.com/1234,foo.bar.com +;001 = context_B@baz.waldo.com/4321,baz.waldo.com +;002 = context_C@pepper.salt.com/5678,pepper.salt.com,y ; this is a remote + +;of course, you can also specify these with domain names, but why rely +;on DNS working unnecessarily? + +;[memory] + +;; this example gives you 146.460, simplex, 100.0 HZ PL, hi-power, transmit PL +;00 = 146.460,100.0,sht +;; this example gives you 146.940, minus offset, 100.0 HZ PL, low-power, no PL +;01 = 146.940,100.0,-l + +; The format for these entries is: Receive-Freq,Receive-PL,Attrbutes +; Attributes: l=low power, m=medium power, h=high power, -=minus offset, +; s=simplex, +=plus offset, t=tx PL enable, r=rx PL enable + diff --git a/version_1.8.2/pabx/etc/asterisk/rtp.conf b/version_1.8.2/pabx/etc/asterisk/rtp.conf new file mode 100644 index 0000000..f2f7982 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/rtp.conf @@ -0,0 +1,26 @@ +; +; RTP Configuration +; +[general] +; +; RTP start and RTP end configure start and end addresses +; +; Defaults are rtpstart=5000 and rtpend=31000 +; +rtpstart=10000 +rtpend=10030 +icesupport=yes +stunaddr=stun.l.google.com:19302 + +;ice_permit=0.0.0.0/0 +; +; Whether to enable or disable UDP checksums on RTP traffic +; +;rtpchecksums=yes +; +; The amount of time a DTMF digit with no 'end' marker should be +; allowed to continue (in 'samples', 1/8000 of a second) +; +;dtmftimeout=3000 +; rtcpinterval = 5000 ; Milliseconds between rtcp reports + ;(min 500, max 60000, default 5000) diff --git a/version_1.8.2/pabx/etc/asterisk/say.conf b/version_1.8.2/pabx/etc/asterisk/say.conf new file mode 100644 index 0000000..de35ee4 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/say.conf @@ -0,0 +1,383 @@ +; +; language configuration +; + +[general] +mode=old ; method for playing numbers and dates + ; old - using asterisk core function + ; new - using this configuration file + +; The new language routines produce strings of the form +; prefix:[format:]data +; that are matched against the rules in this file to produce +; an output. +; +; The data is generally the string to be spelled (either a number, +; an ascii string or a date/time in the format specified below). +; It is available, in the right hand side of a rule, as variable ${SAY}. +; +; The format is optional and normally used only for date/time. +; The prefix is used to select the pronunciation - standard +; prefixes are +; num used for numbers +; enum used for enumerations +; date for dates +; time for times +; datetime for dates and times +; char for character strings +; phonetic for phonetic strings +; digit for digit strings +; +; but others can be used at will. +; +; Processing occurs as follows: +; If the format is empty, or there is no format, the entire +; string is matched against one of the pattern on the left hand side. +; On the first match, the various comma-separated components on the right +; hand side are pronounced, as follows: +; + a component starting with a prefix: (i.e. with a ':' in it) +; is re-processed according to these rules; +; + a component without a ':' in it is considered a filename and +; the corresponding file is played. +; +; If the format is non-empty, the format is split into its components +; (individual characters, or filenames in single quotes), and then +; filenames are played, whereas single characters are used to +; generate a new string format:pat:data to be processed. +; +; DATES/AND TIMES assume that the date info is available in +; the form YYYYMMDDHHmm.ss-dow-doy +; with 4 digits for the year, 2 for month, day, hour, minutes, seconds, +; one digit for the day-of-week, and 3 digits for the day-of-year. +; +; Example: +; datetime::200604172030.00-4-102 +; (typical format for a date) is first matched against the line +; datetime::. => date:AdBY 'digits/at' IMp:${SAY} +; which is normally present with the default format for dates. +; In turn, the format string "AdBY 'digits/at' IMp" results in +; the sequence +; date:A:200604172030.00-4-102 +; date:d:200604172030.00-4-102 +; date:B:200604172030.00-4-102 +; date:Y:200604172030.00-4-102 +; digits/at +; date:I:200604172030.00-4-102 +; date:M:200604172030.00-4-102 +; date:p:200604172030.00-4-102 +; +; +; Remember, normally X Z N are special, and the search is +; case insensitive, so you must use [X] [N] [Z] .. if you +; want exact match. + +; We start with the basic rules that might be more-or-less +; language-independent + +[digit-base](!) ; base rule for digit strings + ; XXX incomplete yet + _digit:[0-9] => digits/${SAY} + _digit:[-] => letters/dash + _digit:[*] => letters/star + _digit:[@] => letters/at + _digit:[0-9]. => digit:${SAY:0:1}, digit:${SAY:1} + +[date-base](!) ; base rules for dates and times + ; the 'SAY' variable contains YYYYMMDDHHmm.ss-dow-doy + ; these rule map the strftime attributes. + _date:Y:. => num:${SAY:0:4} ; year, 19xx + _date:[Bbh]:. => digits/mon-$[${SAY:4:2}-1] ; month name, 0..11 + _date:[Aa]:. => digits/day-${SAY:16:1} ; day of week + _date:[de]:. => num:${SAY:6:2} ; day of month + _date:[H]:. => digits/oh, num:${SAY:8:2} ; hour (oh one, oh two, ..., oh nine, ten, eleven, ..., twenty-three) + _date:[I]:. => num:$[${SAY:8:2} % 12] ; hour 0-12 + _date:[M]:. => num:${SAY:10:2} ; minute + ; XXX too bad the '?' function does not remove the quotes + ; _date:[pP]:. => digits/$[ ${SAY:10:2} > 12 ? "p-m" :: "a-m"] ; am pm + _date:[pP]:. => digits/p-m ; am pm + _date:[S]:. => num:${SAY:13:2} ; seconds + _date:[Ii]:. => num:$[${SAY:8:2} % 12] ; hour 0-12 + _date:[k]:. => num:${SAY:8:2} ; hour (one, two. three, ...,twenty three + _date:[m]:. => num:${SAY:4:2} ; month number + _date:[Q]:. => date:dby ;incompleat ; "today", "yesterday" or ABdY + _date:[q]:. => date:dby ;incompleat ; "" (for today), "yesterday", weekday, or ABdY + _date:[R]:. => date:HM${SAY} ; 24 hour time, including minute + _date:[T]:. => date:HMS${SAY} ; 24 hour, minure, seconds + +[en-base](!) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1X => digits/${SAY} + _[n]um:[2-9]0 => digits/${SAY} + _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1} + _[n]um:X00 => num:${SAY:0:1}, digits/hundred + _[n]um:XXX => num:${SAY:0:1}, digits/hundred, num:${SAY:1} + + _[n]um:X000 => num:${SAY:0:1}, digits/thousand + _[n]um:XXXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousand + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3} + + _[n]um:X000000 => num:${SAY:0:1}, digits/million + _[n]um:XXXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/million + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/million + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3} + + _[n]um:X000000000 => num:${SAY:0:1}, digits/billion + _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1} + _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion + _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2} + _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion + _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3} + + ; enumeration + _e[n]um:X => digits/h-${SAY} + _e[n]um:1X => digits/h-${SAY} + _e[n]um:[2-9]0 => digits/h-${SAY} + _e[n]um:[2-9][1-9] => num:${SAY:0:1}0, digits/h-${SAY:1} + _e[n]um:[1-9]00 => num:${SAY:0:1}, digits/h-hundred + _e[n]um:[1-9]XX => num:${SAY:0:1}, digits/h-hundred, enum:${SAY:1} + +[en_GB](date-base,digit-base,en-base) + _[n]um:XXX => num:${SAY:0:1}, digits/hundred, vm-and, num:${SAY:1} + +[it](digit-base,date-base) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1X => digits/${SAY} + _[n]um:[2-9]0 => digits/${SAY} + _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1} + _[n]um:100 => digits/hundred + _[n]um:1XX => digits/hundred, num:${SAY:1} + _[n]um:[2-9]00 => num:${SAY:0:1}, digits/hundred + _[n]um:[2-9]XX => num:${SAY:0:1}, digits/hundred, num:${SAY:1} + + _[n]um:1000 => digits/thousand + _[n]um:1XXX => digits/thousand, num:${SAY:1} + _[n]um:[2-9]000 => num:${SAY:0:1}, digits/thousands + _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousands, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousands + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousands, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousands + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousands, num:${SAY:3} + + _[n]um:1000000 => num:${SAY:0:1}, digits/million + _[n]um:1XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1} + _[n]um:[2-9]000000 => num:${SAY:0:1}, digits/millions + _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/millions, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/millions + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3} + + _[n]um:X000000000 => num:${SAY:0:1}, digits/billion + _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1} + _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion + _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2} + _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion + _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3} + + _datetime::. => date:AdBY 'digits/at' IMp:${SAY} + _date::. => date:AdBY:${SAY} + _time::. => date:IMp:${SAY} + +[en](en-base,date-base,digit-base) + _datetime::. => date:AdBY 'digits/at' IMp:${SAY} + _date::. => date:AdBY:${SAY} + _time::. => date:IMp:${SAY} + +[de](date-base,digit-base) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1X => digits/${SAY} + _[n]um:[2-9]0 => digits/${SAY} + _[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/${SAY:0:1}0 + _[n]um:100 => digits/ein, digits/hundred + _[n]um:1XX => digits/ein, digits/hundred, num:${SAY:1} + _[n]um:[2-9]00 => digits/${SAY:0:1}, digits/hundred + _[n]um:[2-9]XX => digits/${SAY:0:1}, digits/hundred, num:${SAY:1} + + _[n]um:1000 => digits/ein, digits/thousand + _[n]um:1XXX => digits/ein, digits/thousand, num:${SAY:1} + _[n]um:[2-9]000 => digits/${SAY:0:1}, digits/thousand + _[n]um:[2-9]XXX => digits/${SAY:0:1}, digits/thousand, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousand + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:1} + + _[n]um:1000000 => digits/eine, digits/million + _[n]um:1XXXXXX => digits/eine, digits/million, num:${SAY:1} + _[n]um:[2-9]000000 => digits/${SAY:0:1}, digits/millions + _[n]um:[2-9]XXXXXX => digits/${SAY:0:1}, digits/millions, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/millions + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3} + + _datetime::. => date:AdBY 'digits/at' IMp:${SAY} + _date::. => date:AdBY:${SAY} + _time::. => date:IMp:${SAY} + +[hu](digit-base,date-base) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1[1-9] => digits/10en, digits/${SAY:1} + _[n]um:2[1-9] => digits/20on, digits/${SAY:1} + _[n]um:[1-9]0 => digits/${SAY} + _[n]um:[3-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1} + _[n]um:XXX => num:${SAY:0:1}, digits/hundred, num:${SAY:1} + + _[n]um:X000 => num:${SAY:0:1}, digits/thousand + _[n]um:XXXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousand + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3} + + _[n]um:X000000 => num:${SAY:0:1}, digits/million + _[n]um:XXXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/million + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/million + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3} + + _[n]um:X000000000 => num:${SAY:0:1}, digits/billion + _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1} + _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion + _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2} + _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion + _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3} + + _datetime::. => date:YBdA k 'ora' M 'perc':${SAY} + _date::. => date:YBdA:${SAY} + _time::. => date:k 'ora' M 'perc':${SAY} + +[fr](date-base,digit-base) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1X => digits/${SAY} + _[n]um:[2-9]0 => digits/${SAY} + _[n]um:[2-6]1 => digits/${SAY:0:1}0, vm-and, digits/${SAY:1} + _[n]um:71 => digits/60, vm-and, num:1${SAY:1} + _[n]um:7X => digits/60, num:1${SAY:1} + _[n]um:9X => digits/80, num:1${SAY:1} + _[n]um:[2-9][1-9] => digits/${SAY:0:1}0, num:${SAY:1} + _[n]um:100 => digits/hundred + _[n]um:1XX => digits/hundred, num:${SAY:1} + _[n]um:[2-9]00 => num:${SAY:0:1}, digits/hundred + _[n]um:[2-9]XX => num:${SAY:0:1}, digits/hundred, num:${SAY:1} + + _[n]um:1000 => digits/thousand + _[n]um:1XXX => digits/thousand, num:${SAY:1} + _[n]um:[2-9]000 => num:${SAY:0:1}, digits/thousand + _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousand + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3} + + _[n]um:1000000 => num:${SAY:0:1}, digits/million + _[n]um:1XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1} + _[n]um:[2-9]000000 => num:${SAY:0:1}, digits/million + _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/million, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/million + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/million, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/million + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/million, num:${SAY:3} + + _datetime::. => date:AdBY 'digits/at' H 'hours' M 'perc':${SAY} + _date::. => date:AdBY:${SAY} + _time::. => date:H 'hours' M 'perc':${SAY} + + _pho[n]e:XXXX => num:${SAY:0:2}, num:${SAY:2:2} + _pho[n]e:0[1-9]XXXXXXXX => num:${SAY:0:1}, num:${SAY:1:1}, num:${SAY:2:2}, num:${SAY:4:2}, num:${SAY:6:2}, num:${SAY:8:2} + _pho[n]e:. => digit:${SAY} + +[es](date-base,digit-base) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1X => digits/${SAY} + _[n]um:[2-9]0 => digits/${SAY} + _[n]um:2[1-9] => digits/20-and, digits/${SAY:1} + _[n]um:[3-9][1-9] => digits/${SAY:0:1}0, vm-and, digits/${SAY:1} + _[n]um:100 => digits/hundred + _[n]um:1XX => digits/100-and, num:${SAY:1} + _[n]um:[2-9]00 => digits/${SAY} + _[n]um:[2-9]XX => digits/${SAY:0:1}00, num:${SAY:1} + + _[n]um:1000 => digits/thousand + _[n]um:1XXX => digits/thousand, num:${SAY:1} + _[n]um:[2-9]000 => num:${SAY:0:1}, digits/thousand + _[n]um:[2-9]XXX => num:${SAY:0:1}, digits/thousand, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousand + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3} + + _[n]um:1000000 => digits/1M, digits/million + _[n]um:1XXXXXX => digits/1M, digits/million, num:${SAY:1} + _[n]um:[2-9]000000 => num:${SAY:0:1}, digits/millions + _[n]um:[2-9]XXXXXX => num:${SAY:0:1}, digits/millions, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/millions + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3} + _[n]um:XXXX000000 => num:${SAY:0:4}, digits/millions + _[n]um:XXXXXXXXXX => num:${SAY:0:4}, digits/millions, num:${SAY:4} + + _datetime::. => date:Ad 'letters/d' B 'letters/d' Y 'digits/at' HMp:${SAY} + _date::. => date:Ad 'letters/d' B 'letters/d' Y:${SAY} + _time::. => date:HMp:${SAY} + +[da](date-base,digit-base) + _[n]um:0. => num:${SAY:1} + _[n]um:X => digits/${SAY} + _[n]um:1X => digits/${SAY} + _[n]um:[2-9]0 => digits/${SAY} + _[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/${SAY:0:1}0 + _[n]um:100 => digits/1N, digits/hundred + _[n]um:1XX => digits/1N, digits/hundred, num:${SAY:1} + _[n]um:[2-9]00 => digits/${SAY:0:1}, digits/hundred + _[n]um:[2-9]XX => digits/${SAY:0:1}, digits/hundred, num:${SAY:1} + + _[n]um:1000 => digits/1N, digits/thousand + _[n]um:1XXX => digits/1N, digits/thousand, num:${SAY:1} + _[n]um:[2-9]000 => digits/${SAY:0:1}, digits/thousand + _[n]um:[2-9]XXX => digits/${SAY:0:1}, digits/thousand, num:${SAY:1} + _[n]um:XX000 => num:${SAY:0:2}, digits/thousand + _[n]um:XXXXX => num:${SAY:0:2}, digits/thousand, num:${SAY:2} + _[n]um:XXX000 => num:${SAY:0:3}, digits/thousand + _[n]um:XXXXXX => num:${SAY:0:3}, digits/thousand, num:${SAY:3} + + _[n]um:X000000 => digits/${SAY:0:1}, digits/million + _[n]um:XXXXXXX => digits/${SAY:0:1}, digits/million, num:${SAY:1} + _[n]um:XX000000 => num:${SAY:0:2}, digits/millions + _[n]um:XXXXXXXX => num:${SAY:0:2}, digits/millions, num:${SAY:2} + _[n]um:XXX000000 => num:${SAY:0:3}, digits/millions + _[n]um:XXXXXXXXX => num:${SAY:0:3}, digits/millions, num:${SAY:3} + + _[n]um:X000000000 => num:${SAY:0:1}, digits/billion + _[n]um:XXXXXXXXXX => num:${SAY:0:1}, digits/billion, num:${SAY:1} + _[n]um:XX000000000 => num:${SAY:0:2}, digits/billion + _[n]um:XXXXXXXXXXX => num:${SAY:0:2}, digits/billion, num:${SAY:2} + _[n]um:XXX000000000 => num:${SAY:0:3}, digits/billion + _[n]um:XXXXXXXXXXXX => num:${SAY:0:3}, digits/billion, num:${SAY:3} + + _datetime::. => date:AdBY 'digits/at' kM:${SAY} + _date::. => date:AdBY:${SAY} + _time::. => date:HM:${SAY} + + ; enumeration + _e[n]um:X => digits/h-${SAY} + _e[n]um:1X => digits/h-${SAY} + _e[n]um:[2-9]0 => digits/h-${SAY} + _e[n]um:[2-9][1-9] => digits/${SAY:1}-and, digits/h-${SAY:0:1}0 + _e[n]um:100 => digits/1N, digits/h-hundred + _e[n]um:1XX => digits/1N, digits/h-hundred, enum:${SAY:1} + _e[n]um:[2-9]00 => num:${SAY:0:1}, digits/h-hundred + _e[n]um:[2-9]XX => num:${SAY:0:1}, digits/h-hundred, enum:${SAY:1} diff --git a/version_1.8.2/pabx/etc/asterisk/sip.conf b/version_1.8.2/pabx/etc/asterisk/sip.conf new file mode 100644 index 0000000..009a71c --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sip.conf @@ -0,0 +1,8 @@ +[general] +#include sip_general.conf +#include sip_webrtc.conf +#include sip_general_customizado.conf +#include sip_register.conf +#include sip_register_customizado.conf +#include sip_ramais.conf +#include sip_ramais_customizado.conf diff --git a/version_1.8.2/pabx/etc/asterisk/sip_general.conf b/version_1.8.2/pabx/etc/asterisk/sip_general.conf new file mode 100644 index 0000000..ffea1ec --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sip_general.conf @@ -0,0 +1,15 @@ +allowguest=no +bindport=5060 +bindaddr=0.0.0.0 +tos_sip=cs0 +tos_audio=cs1 +tos_video=cs0 +maxexpiry=1200 +minexpiry=60 +relaxdtmf=yes +alwaysauthreject=yes +sipdebug=no + +externaddr=192.168.115.179 +localnet=0.0.0.0/32 +media_address=192.168.115.179 diff --git a/version_1.8.2/pabx/etc/asterisk/sip_general_customizado.conf b/version_1.8.2/pabx/etc/asterisk/sip_general_customizado.conf new file mode 100644 index 0000000..b23d2b9 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sip_general_customizado.conf @@ -0,0 +1,17 @@ +nat=force_rport,comedia +limitonpeers=yes +t38pt_udptl=yes +srvlookup=yes +defaultexpiry=1800 +ignoresdpversion=yes ;(para evitar falhas ao originar chamadas para numeros portados) +insecure=no +reinvite=no + +;Ativa BLF +notifyringing=yes +notifyhold=yes +allowsubscribe=yes +subscribecontext=hints + +callcounter=yes +context=convidados diff --git a/version_1.8.2/pabx/etc/asterisk/sip_notify.conf b/version_1.8.2/pabx/etc/asterisk/sip_notify.conf new file mode 100644 index 0000000..8224ee1 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sip_notify.conf @@ -0,0 +1,57 @@ +; rfc3842 +; put empty "Content=>" at the end to have CRLF after last body line + +[clear-mwi] +Event=>message-summary +Content-type=>application/simple-message-summary +Content=>Messages-Waiting: no +Content=>Message-Account: sip:asterisk@127.0.0.1 +Content=>Voice-Message: 0/0 (0/0) +Content=> + +; Aastra + +[aastra-check-cfg] +Event=>check-sync + +[aastra-xml] +Event=>aastra-xml + +; Digium + +[digium-check-cfg] +Event=>check-sync + +; Linksys + +[linksys-cold-restart] +Event=>reboot_now + +[linksys-warm-restart] +Event=>restart_now + +; Polycom + +[polycom-check-cfg] +Event=>check-sync + +; Sipura + +[sipura-check-cfg] +Event=>resync + +[sipura-get-report] +Event=>report + +; snom + +[snom-check-cfg] +Event=>check-sync\;reboot=false + +[snom-reboot] +Event=>check-sync\;reboot=true + +; Cisco + +[cisco-check-cfg] +Event=>check-sync diff --git a/version_1.8.2/pabx/etc/asterisk/sip_ramais.conf b/version_1.8.2/pabx/etc/asterisk/sip_ramais.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/sip_ramais_customizado.conf b/version_1.8.2/pabx/etc/asterisk/sip_ramais_customizado.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/sip_register.conf b/version_1.8.2/pabx/etc/asterisk/sip_register.conf new file mode 100644 index 0000000..e69de29 diff --git a/version_1.8.2/pabx/etc/asterisk/sip_register_customizado.conf b/version_1.8.2/pabx/etc/asterisk/sip_register_customizado.conf new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sip_register_customizado.conf @@ -0,0 +1 @@ + diff --git a/version_1.8.2/pabx/etc/asterisk/sip_webrtc.conf b/version_1.8.2/pabx/etc/asterisk/sip_webrtc.conf new file mode 100644 index 0000000..3c6400f --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sip_webrtc.conf @@ -0,0 +1,18 @@ +;Ativar WebRTC +allowoverlap=no +udpbindaddr=0.0.0.0 +tcpenable=no +tcpbindaddr=0.0.0.0 +websocket_enabled=true +session-timers=refuse +session-expires=1800 +session-minse=90 +session-refresher=uas +icesupport=yes +avpf=yes +force_avp=yes +rtcp_mux=yes +transport=udp,tls,ws,wss +allow=opus,ulaw,alaw,g722,vp8 +videosupport=yes +directmedia=no diff --git a/version_1.8.2/pabx/etc/asterisk/skinny.conf b/version_1.8.2/pabx/etc/asterisk/skinny.conf new file mode 100644 index 0000000..9ee602e --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/skinny.conf @@ -0,0 +1,207 @@ +; +; Skinny Configuration for Asterisk +; +[general] +bindaddr=0.0.0.0 ; Address to bind to +bindport=2000 ; Port to bind to, default tcp/2000 +dateformat=M-D-Y ; M,D,Y in any order (6 chars max) + ; "A" may also be used, but it must be at the end. + ; Use M for month, D for day, Y for year, A for 12-hour time. +keepalive=120 + +;authtimeout = 30 ; authtimeout specifies the maximum number of seconds a + ; client has to authenticate. If the client does not + ; authenticate beofre this timeout expires, the client + ; will be disconnected. (default: 30 seconds) + +;authlimit = 50 ; authlimit specifies the maximum number of + ; unauthenticated sessions that will be allowed to + ; connect at any given time. (default: 50) + +;vmexten=8500 ; Systemwide voicemailmain pilot number + ; It must be in the same context as the calling + ; device/line + +; If regcontext is specified, Asterisk will dynamically create and destroy a +; NoOp priority 1 extension for a given line which registers or unregisters with +; us and have a "regexten=" configuration item. +; Multiple contexts may be specified by separating them with '&'. The +; actual extension is the 'regexten' parameter of the registering line or its +; name if 'regexten' is not provided. If more than one context is provided, +; the context must be specified within regexten by appending the desired +; context after '@'. More than one regexten may be supplied if they are +; separated by '&'. Patterns may be used in regexten. +; +;regcontext=skinnyregistrations + +;allow=all ; see https://wiki.asterisk.org/wiki/display/AST/RTP+Packetization + ; for framing options +;disallow= + +; The imeddialkey option allows for a key to be used to immediately dial the already +; entered number. This is useful where the dialplan includes variable length pattern +; matching. Valid options are '#' and '*'. On devices with soft buttons, a button will +; be available to immediately dial when a pattern than can be dialed has been entered. +; Default is unset, that is no immediated dial key (softbutton still exists). +; +;immeddialkey=# + +; See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of these parameters. +;tos=cs3 ; Sets TOS for signaling packets. +;tos_audio=ef ; Sets TOS for RTP audio packets. +;tos_video=af41 ; Sets TOS for RTP video packets. +;cos=3 ; Sets 802.1p priority for signaling packets. +;cos_audio=5 ; Sets 802.1p priority for RTP audio packets. +;cos_video=4 ; Sets 802.1p priority for RTP video packets. + +; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- +;jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a + ; skinny channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The skinny channel can accept + ; jitter, thus a jitterbuffer on the receive skinny side will be + ; used only if it is forced and enabled. + +;jbforce = no ; Forces the use of a jitterbuffer on the receive side of a skinny + ; channel. Defaults to "no". + +;jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + +;jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + +;jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a + ; skinny channel. Two implementations are currently available + ; - "fixed" (with size always equals to jbmaxsize) + ; - "adaptive" (with variable size, actually the new jb of IAX2). + ; Defaults to fixed. + +;jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". +; ---------------------------------------------------------------------------------- + +[lines] +; ---------------------------------- LINES SECTION -------------------------------- +; Options set under [lines] apply to all lines unless explicitly set for a particular +; device. The options that can be set under lines are specified in GENERAL LINE OPTIONS. +; These options can also be set for each individual device as well as those under SPECIFIC +; LINE OPTIONS. +; +; Each label below [lines] in [] is a new line with the specific options specified below +; it. Config stops reading new lines when one of the following is found: [general], [devices] +; or the end of skinny.conf. +; +; Where options are common to both lines and devices, the results typically take that of +; the least permission. ie if a no is set for either line or device, the call will not be +; able to use that permission +; ------------------------------- GENERAL LINE OPTIONS ----------------------------- +;earlyrtp=1 ; whether audio signalling should be provided by asterisk +; ; (earlyrtp=1) or device generated (earlyrtp=0). default=yes +;transfer=1 ; whether the device is allowed to transfer. default=yes +;context=default ; context to use for this line. +;callfwdtimeout=20000 ; ms before cfwd_noans occurs (default 20 secs) +; ------------------------------ SPECIFIC LINE OPTIONS ----------------------------- +;setvar= ; allows for the setting of chanvars. +; ---------------------------------------------------------------------------------- + +;[100] +;nat=yes +;callerid="Customer Support" <810-234-1212> +; Note: app_voicemail mailboxes must be in the form of mailbox@context. +;mailbox=100 +;vmexten=8500 ; Device level voicemailmain pilot number +;regexten=100 +;context=inbound +;linelabel="Support Line" ; Displays next to the line + ; button on 7940's and 7960s +;[110] +;callerid="John Chambers" <408-526-4000> +;context=did +;regexten=110 +;linelabel="John" +;mailbox=110 + +;[120] +;Nothing set, so all the defaults are used + +;[500] +;nat=yes +;callerid="George W. Bush" <202-456-1414> +;setvar=CUSTID=5678 ; Channel variable to be set for all calls from this device +;setvar=ATTENDED_TRANSFER_COMPLETE_SOUND=beep ; This channel variable will + ; cause the given audio file to + ; be played upon completion of + ; an attended transfer to the + ; target of the transfer. +;mailbox=500 +;callwaiting=yes +;transfer=yes +;threewaycalling=yes +;context=default +;mohinterpret=default ; This option specifies a default music on hold class to + ; use when put on hold if the channel's moh class was not + ; explicitly set with Set(CHANNEL(musicclass)=whatever) and + ; the peer channel did not suggest a class to use. +;mohsuggest=default ; This option specifies which music on hold class to suggest to the peer channel + ; when this channel places the peer on hold. It may be specified globally or on + ; a per-user or per-peer basis. + + +[devices] +; --------------------------------- DEVICES SECTION ------------------------------- +; Options set under [devices] apply to all devices unless explicitly set for a particular +; device. The options that can be set under devices are specified in GENERAL DEVICE OPTIONS. +; These options can also be set for each individual device as well as those under SPECIFIC +; DEVICE OPTIONS. +; +; Each label below [devices] in [] is a new device with the specific options specified below +; it. Config stop reading new devices when one of the following is found: [general], [lines] +; or the end of skinny.conf. +; +; Where options are common to both lines and devices, the results typically take that of +; the least permission. ie if a no is set for either line or device, the call will not be +; able to use that permission +; ------------------------------ GENERAL DEVICE OPTIONS ---------------------------- +;earlyrtp=1 ; whether audio signalling should be provided by asterisk +; ; (earlyrtp=1) or device generated (earlyrtp=0). default=yes +;transfer=1 ; whether the device is allowed to transfer. default=yes +; ----------------------------- SPECIFIC DEVICE OPTIONS ---------------------------- +;device="SEPxxxxxxxxxxxx ; id of the device. Must be set. +;version=P002G204 ; firmware version to be loaded. If this version is different +; ; to the one on the device, the device will try to load this +; ; version from the tftp server. Set to device firmware version. +; ---------------------------------------------------------------------------------- + +; Typical config for 12SP+ +;[florian] +;device=SEP00D0BA847E6B +;version=P002G204 ; Thanks critch +;context=did +;directmedia=yes ; Allow media to go directly between two RTP endpoints. +;line=120 ; Dial(Skinny/120@florian) + +; Service URLs attached to line buttons (eg phone directory) +; See http://www.voip-info.org/wiki/view/Asterisk+Cisco+79XX+XML+Services +; for intro to xml structure. +;serviceurl=Directory,http://host/file.xml + + +; Typical config for a 7910 +;[duba] ; Device name +;device=SEP0007EB463101 ; Official identifier +;version=P002F202 ; Firmware version identifier +;host=192.168.1.144 +;permit=192.168.0/24 ; Optional, used for authentication +;line=500 + + +; Typical config for a 7940 with dual 7914s +;[support] +;device=SEP0007EB463121 +;line=100 +;line=110 +;speeddial => 111,Jack Smith ; Adds a speeddial button to a device. +;speeddial => 112@hints,Bob Peterson ; When a context is specified, the speeddial watches a dialplan hint. +;addon => 7914 +;addon => 7914 diff --git a/version_1.8.2/pabx/etc/asterisk/sla.conf b/version_1.8.2/pabx/etc/asterisk/sla.conf new file mode 100644 index 0000000..1f5a56e --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sla.conf @@ -0,0 +1,150 @@ +; +; Configuration for Shared Line Appearances (SLA). +; +; See http://wiki.asterisk.org or doc/AST.pdf for more information. +; + +; ---- General Options ---------------- +[general] + +;attemptcallerid=no ; Attempt CallerID handling. The default value for this + ; is "no" because CallerID handling with an SLA setup is + ; known to not work properly in some situations. However, + ; feel free to enable it if you would like. If you do, and + ; you find problems, please do not report them. +; ------------------------------------- + + +; ******************************** +; **** Configuration Ordering **** +; ******************************** + +; Note that SLA configuration processing assumes that *all* trunk declarations are +; listed in the configuration file before any stations. + +; ******************************** +; ******************************** + + +; ---- Trunk Declarations ------------- +; +;[line1] ; Provide a name for this trunk. + +;type=trunk ; This line is what marks this entry as a trunk. + +;device=DAHDI/3 ; Map this trunk declaration to a specific device. + ; NOTE: You can not just put any type of channel here. + ; DAHDI channels can be directly used. IP trunks + ; require some indirect configuration which is + ; described in + ; https://wiki.asterisk.org/wiki/display/AST/SLA+Trunk+Configuration + +;autocontext=line1 ; This supports automatic generation of the dialplan entries + ; if the autocontext option is used. Each trunk should have + ; a unique context name. Then, in chan_dahdi.conf, this device + ; should be configured to have incoming calls go to this context. + +;ringtimeout=30 ; Set how long to allow this trunk to ring on an inbound call before hanging + ; it up as an unanswered call. The value is in seconds. + +;barge=no ; If this option is set to "no", then no station will be + ; allowed to join a call that is in progress. The default + ; value is "yes". + +;hold=private ; This option configure hold permissions for this trunk. + ; "open" - This means that any station can put this trunk + ; on hold, and any station can retrieve it from + ; hold. This is the default. + ; "private" - This means that once a station puts the + ; trunk on hold, no other station will be + ; allowed to retrieve the call from hold. + +;[line2] +;type=trunk +;device=DAHDI/4 +;autocontext=line2 + +;[line3] +;type=trunk +;device=DAHDI/3 +;autocontext=line3 + +;[line4] +;type=trunk +;device=Local/disa@line4_outbound ; A Local channel in combination with the Disa + ; application can be used to support IP trunks. + ; See https://wiki.asterisk.org/wiki/display/AST/SLA+Trunk+Configuration +;autocontext=line4 +; -------------------------------------- + + +; ---- Station Declarations ------------ + +;[station1] ; Define a name for this station. + +;type=station ; This line indicates that this entry is a station. + +;device=SIP/station1 ; Each station must be mapped to a device. + +;autocontext=sla_stations ; This supports automatic generation of the dialplan entries if + ; the autocontext option is used. All stations can use the same + ; context without conflict. The device for this station should + ; have its context configured to the same one listed here. + +;ringtimeout=10 ; Set a timeout for how long to allow the station to ring for an + ; incoming call, in seconds. + +;ringdelay=10 ; Set a time for how long to wait before beginning to ring this station + ; once there is an incoming call, in seconds. + +;hold=private ; This option configure hold permissions for this station. Note + ; that if private hold is set in the trunk entry, that will override + ; anything here. However, if a trunk has open hold access, but this + ; station is set to private hold, then the private hold will be in + ; effect. + ; "open" - This means that once this station puts a call + ; on hold, any other station is allowed to retrieve + ; it. This is the default. + ; "private" - This means that once this station puts a + ; call on hold, no other station will be + ; allowed to retrieve the call from hold. + + +;trunk=line1 ; Individually list all of the trunks that will appear on this station. This + ; order is significant. It should be the same order as they appear on the + ; phone. The order here defines the order of preference that the trunks will + ; be used. +;trunk=line2 +;trunk=line3,ringdelay=5 ; A ring delay for the station can also be specified for a specific trunk. + ; If a ring delay is specified both for the whole station and for a specific + ; trunk on a station, the setting for the specific trunk will take priority. + ; This value is in seconds. + +;trunk=line4,ringtimeout=5 ; A ring timeout for the station can also be specified for a specific trunk. + ; If a ring timeout is specified both for the whole station and for a specific + ; trunk on a station, the setting for the specific trunk will take priority. + ; This value is in seconds. + + +;[station](!) ; When there are a lot of stations that are configured the same way, + ; it is convenient to use a configuration template like this so that + ; the common settings stay in one place. +;type=station +;autocontext=sla_stations +;trunk=line1 +;trunk=line2 +;trunk=line3 +;trunk=line4 + +;[station2](station) ; Define a station that uses the configuration from the template "station". +;device=SIP/station2 +; +;[station3](station) +;device=SIP/station3 +; +;[station4](station) +;device=SIP/station4 +; +;[station5](station) +;device=SIP/station5 +; -------------------------------------- diff --git a/version_1.8.2/pabx/etc/asterisk/smdi.conf b/version_1.8.2/pabx/etc/asterisk/smdi.conf new file mode 100644 index 0000000..62464c4 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/smdi.conf @@ -0,0 +1,75 @@ +; Asterisk SMDI configuration + +[interfaces] +; Specify serial ports to listen for SMDI messages on below. These will be +; referenced later in chan_dahdi.conf. If you do not specify any interfaces then +; SMDI will be disabled. Interfaces can have several different attributes +; associated with them. + +; Set the number of stop bits to use per character here. The default is no, +; in which case one stop bit will be used. + +;twostopbits = no + +; Character size or bit length is the size of each character sent across the +; link. Character size can be 7 or 8. The default is 7. + +;charsize = 7 + +; If you need parity checking enabled you can turn it on here. Acceptable +; values are even, odd, and none. The default is even. + +;paritybit = even + +; The baudrate to use for this port. Acceptable values are 1200, 2400, 4800, +; and 9600. The default is 9600. + +;baudrate = 1200 + +; Often the numbering scheme for a set of mailboxes or extensions will not be 7 +; or 10 digits (as SMDI requires). Use the msdstrip option to strip unused +; digits from the start of numbers. + +;msdstrip = 0 + +; Occasionally Asterisk and the SMDI switch may become out of sync. If this +; happens, Asterisk will appear one or several calls behind as it processes +; voicemail requests. To prevent this from happening, adjust the msgexpirytime. +; This will make Asterisk discard old SMDI messages that have not yet been +; processed. The default expiry time is 30000 milliseconds. + +;msgexpirytime = 30000 + +;smdiport => /dev/ttyS0 + + +[mailboxes] +; This section configures parameters related to MWI handling for the SMDI link. + +; This option configures the polling interval used to check to see if the +; mailboxes have any new messages. This option is specified in seconds. +; The default value is 10 seconds. +; +;pollinginterval=10 + +; Every other entry in this section of the configuration file is interpreted as +; a mapping between the mailbox ID on the SMDI link, and the local Asterisk +; mailbox name. In many cases, they are the same thing, but they still must be +; listed here so that this module knows which mailboxes it needs to pay +; attention to. +; +; Syntax: +; =[@Asterisk Voicemail Context] +; +; If no Asterisk voicemail context is specified, "default" will be assumed. +; +; Before specifying mailboxes, you must specify an SMDI interface. All mailbox +; definitions that follow will correspond to that SMDI interface. If you specify +; another interface, then all definitions following that will correspond to the +; new interface. +; +;smdiport=/dev/ttyS0 +;2565551234=1234@vmcontext1 +;2565555678=5678@vmcontext2 +;smdiport=/dev/ttyS1 +;2565559999=9999 diff --git a/version_1.8.2/pabx/etc/asterisk/sorcery.conf b/version_1.8.2/pabx/etc/asterisk/sorcery.conf new file mode 100644 index 0000000..1e7d72a --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/sorcery.conf @@ -0,0 +1,78 @@ +; Sample configuration file for Sorcery Data Access Layer + +; +; Wizards +; +; Wizards are the persistence mechanism for objects. They are loaded as Asterisk modules and register +; themselves with the sorcery core. All implementation specific details of how objects are persisted is isolated +; within wizards. +; + +; +; Caching +; +; A wizard can optionally be marked as an object cache by adding "/cache" to the object type within the mapping. +; If an object is returned from a non-object cache it is immediately given to the cache to be created. Multiple +; object caches can be configured for a single object type. +; + +; +; Object Type Mappings +; +; To allow configuration of where and how an object is persisted object mappings can be defined within this file +; on a per-module basis. The mapping consists of the object type, options, wizard name, and wizard configuration +; data. This has the following format: +; +; object type [/options] = wizard name, wizard configuration data +; +; For example to configure an in-memory wizard for the 'bob' object type: +; +; bob = memory +; +; Or to configure the object type 'joe' from a configuration file: +; +; joe = config,joe.conf +; +; Note that an object type can have multiple mappings defined. Each mapping will be consulted in the order in which +; it appears within the configuration file. This means that if you are configuring a wizard as a cache it should +; appear as the first mapping so the cache is consulted before all other mappings. +; + +; +; The following object mappings are used by the unit test to test certain functionality of sorcery. +; +[test_sorcery_section] +test=memory + +[test_sorcery_cache] +test/cache=test +test=memory + +; +; The following object mapping is the default mapping of external MWI mailbox +; objects to give persistence to the message counts. +; +;[res_mwi_external] +;mailboxes=astdb,mwi_external + +; +; The following object mappings set PJSIP objects to use realtime database mappings from extconfig +; with the table names used when automatically generating configuration from the alembic script. +; +;[res_pjsip] +;endpoint=realtime,ps_endpoints +;auth=realtime,ps_auths +;aor=realtime,ps_aors +;domain_alias=realtime,ps_domain_aliases + +;[res_pjsip_endpoint_identifier_ip] +;identify=realtime,ps_endpoint_id_ips + +;[res_pjsip_outbound_publish] +;outbound-publish=realtime,ps_outbound_publishes + +;[res_pjsip_pubsub] +;inbound-publication=realtime,ps_inbound_publications + +;[res_pjsip_publish_asterisk] +;asterisk-publication=realtime,ps_asterisk_publications diff --git a/version_1.8.2/pabx/etc/asterisk/ss7.timers b/version_1.8.2/pabx/etc/asterisk/ss7.timers new file mode 100644 index 0000000..9cf9bd1 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/ss7.timers @@ -0,0 +1,65 @@ +;;;;; ITU-T Q.707 timers + +;mtp3_timer.q707_t1 = 4000 +;mtp3_timer.q707_t2 = 30000 + +;;;;; MTP3 timers as specified in ITU-T Q.704 or ANSI T1.111-2001 + +mtp3_timer.t1 = 500 +mtp3_timer.t2 = 700 +mtp3_timer.t3 = 500 +mtp3_timer.t4 = 500 +mtp3_timer.t5 = 500 +mtp3_timer.t6 = 500 +mtp3_timer.t7 = 1000 + +mtp3_timer.t10 = 60000 + +mtp3_timer.t12 = 800 +mtp3_timer.t13 = 800 +mtp3_timer.t14 = 2000 + +; enable for ITU only. Timers after T17 are defined differently for ANSI +;mtp3_timer.t19 = 67000 +;mtp3_timer.t21 = 63000 +; +;mtp3_timer.t22 = 300000 +;mtp3_timer.t23 = 300000 + + +;;;;; ISUP timers as specified in ITU-T Q.764 or ANSI T1.113-2000 + +isup_timer.t1 = 15000 +;isup_timer.t2 = 180000 ; ITU only + +;isup_timer.t5 = 300000 ; for ITU +;isup_timer.t5 = 60000 ; for ANSI +isup_timer.t6 = 30000 +isup_timer.t7 = 20000 +isup_timer.t8 = 10000 + +;isup_timer.t10 = 4000 ; ITU only + +isup_timer.t12 = 15000 +;isup_timer.t13 = 300000 ; for ITU +;isup_timer.t13 = 60000 ; for ANSI +isup_timer.t14 = 15000 +;isup_timer.t15 = 300000 ; for ITU +;isup_timer.t15 = 60000 ; for ANSI +isup_timer.t16 = 15000 +;isup_timer.t17 = 300000 ; for ITU +;isup_timer.t17 = 60000 ; for ANSI +isup_timer.t18 = 15000 +;isup_timer.t19 = 300000 ; for ITU +;isup_timer.t19 = 60000 ; for ANSI +isup_timer.t20 = 15000 +;isup_timer.t21 = 300000 ; for ITU +;isup_timer.t21 = 60000 ; for ANSI +isup_timer.t22 = 15000 +;isup_timer.t23 = 300000 ; for ITU +;isup_timer.t23 = 60000 ; for ANSI + +isup_timer.t27 = 240000 + +isup_timer.t33 = 12000 +;isup_timer.t35 = 15000 ; ITU only diff --git a/version_1.8.2/pabx/etc/asterisk/stasis.conf b/version_1.8.2/pabx/etc/asterisk/stasis.conf new file mode 100644 index 0000000..e591e76 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/stasis.conf @@ -0,0 +1,132 @@ +[threadpool] +;initial_size = 5 ; Initial size of the threadpool. +; ; 0 means the threadpool has no threads initially +; ; until a task needs a thread. +;idle_timeout_sec = 20 ; Number of seconds a thread should be idle before +; ; dying. 0 means threads never time out. +;max_size = 50 ; Maximum number of threads in the Stasis threadpool. +; ; 0 means no limit to the number of threads in the +; ; threadpool. + +[declined_message_types] +; This config section contains the names of message types that should be prevented +; from being created. By default, all message types are allowed to be created. +; +; Using this functionality requires knowledge of the names of internal stasis +; message types which is generally the same as the name of the accessor function. +; +; Use of this functionality may break more complex functionality in Asterisk +; such as CEL, CDR, transfers, etc. and will likely cause related messages in ARI +; and AMI to go missing. +; decline=stasis_app_recording_snapshot_type +; decline=stasis_app_playback_snapshot_type +; decline=stasis_test_message_type +; decline=confbridge_start_type +; decline=confbridge_end_type +; decline=confbridge_join_type +; decline=confbridge_leave_type +; decline=confbridge_start_record_type +; decline=confbridge_stop_record_type +; decline=confbridge_mute_type +; decline=confbridge_unmute_type +; decline=confbridge_talking_type +; decline=cel_generic_type +; decline=ast_bridge_snapshot_type +; decline=ast_bridge_merge_message_type +; decline=ast_channel_entered_bridge_type +; decline=ast_channel_left_bridge_type +; decline=ast_blind_transfer_type +; decline=ast_attended_transfer_type +; decline=ast_endpoint_snapshot_type +; decline=ast_endpoint_state_type +; decline=ast_device_state_message_type +; decline=ast_test_suite_message_type +; decline=ast_mwi_state_type +; decline=ast_mwi_vm_app_type +; decline=ast_format_register_type +; decline=ast_format_unregister_type +; decline=ast_manager_get_generic_type +; decline=ast_parked_call_type +; decline=ast_channel_snapshot_type +; decline=ast_channel_dial_type +; decline=ast_channel_varset_type +; decline=ast_channel_hangup_request_type +; decline=ast_channel_dtmf_begin_type +; decline=ast_channel_dtmf_end_type +; decline=ast_channel_hold_type +; decline=ast_channel_unhold_type +; decline=ast_channel_chanspy_start_type +; decline=ast_channel_chanspy_stop_type +; decline=ast_channel_fax_type +; decline=ast_channel_hangup_handler_type +; decline=ast_channel_moh_start_type +; decline=ast_channel_moh_stop_type +; decline=ast_channel_monitor_start_type +; decline=ast_channel_monitor_stop_type +; decline=ast_channel_agent_login_type +; decline=ast_channel_agent_logoff_type +; decline=ast_channel_talking_start +; decline=ast_channel_talking_stop +; decline=ast_security_event_type +; decline=ast_named_acl_change_type +; decline=ast_local_bridge_type +; decline=ast_local_optimization_begin_type +; decline=ast_local_optimization_end_type +; decline=stasis_subscription_change_type +; decline=ast_multi_user_event_type +; decline=stasis_cache_clear_type +; decline=stasis_cache_update_type +; decline=ast_network_change_type +; decline=ast_system_registry_type +; decline=ast_cc_available_type +; decline=ast_cc_offertimerstart_type +; decline=ast_cc_requested_type +; decline=ast_cc_requestacknowledged_type +; decline=ast_cc_callerstopmonitoring_type +; decline=ast_cc_callerstartmonitoring_type +; decline=ast_cc_callerrecalling_type +; decline=ast_cc_recallcomplete_type +; decline=ast_cc_failure_type +; decline=ast_cc_monitorfailed_type +; decline=ast_presence_state_message_type +; decline=ast_rtp_rtcp_sent_type +; decline=ast_rtp_rtcp_received_type +; decline=ast_call_pickup_type +; decline=aoc_s_type +; decline=aoc_d_type +; decline=aoc_e_type +; decline=dahdichannel_type +; decline=mcid_type +; decline=session_timeout_type +; decline=cdr_read_message_type +; decline=cdr_write_message_type +; decline=cdr_prop_write_message_type +; decline=corosync_ping_message_type +; decline=agi_exec_start_type +; decline=agi_exec_end_type +; decline=agi_async_start_type +; decline=agi_async_exec_type +; decline=agi_async_end_type +; decline=queue_caller_join_type +; decline=queue_caller_leave_type +; decline=queue_caller_abandon_type +; decline=queue_member_status_type +; decline=queue_member_added_type +; decline=queue_member_removed_type +; decline=queue_member_pause_type +; decline=queue_member_penalty_type +; decline=queue_member_ringinuse_type +; decline=queue_agent_called_type +; decline=queue_agent_connect_type +; decline=queue_agent_complete_type +; decline=queue_agent_dump_type +; decline=queue_agent_ringnoanswer_type +; decline=meetme_join_type +; decline=meetme_leave_type +; decline=meetme_end_type +; decline=meetme_mute_type +; decline=meetme_talking_type +; decline=meetme_talk_request_type +; decline=appcdr_message_type +; decline=forkcdr_message_type +; decline=cdr_sync_message_type diff --git a/version_1.8.2/pabx/etc/asterisk/statsd.conf b/version_1.8.2/pabx/etc/asterisk/statsd.conf new file mode 100644 index 0000000..8060973 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/statsd.conf @@ -0,0 +1,8 @@ +[general] +;enabled = yes ; When set to yes, statsd support is enabled +;server = 127.0.0.1 ; server[:port] of statsd server to use. + ; If not specified, the port is 8125 +;prefix = ; Prefix to prepend to all metrics +;add_newline = no ; Append a newline to every event. This is + ; useful if you want to run a fake statsd + ; server using netcat (nc -lu 8125) diff --git a/version_1.8.2/pabx/etc/asterisk/telcordia-1.adsi b/version_1.8.2/pabx/etc/asterisk/telcordia-1.adsi new file mode 100644 index 0000000..1486aa9 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/telcordia-1.adsi @@ -0,0 +1,83 @@ +; +; Asterisk default ADSI script +; +; +; Begin with the preamble requirements +; +DESCRIPTION "Telcordia Demo" ; Name of vendor +VERSION 0x02 ; Version of stuff +;SECURITY "_AST" ; Security code +SECURITY 0x0000 ; Security code +FDN 0x0000000f ; Descriptor number + +; +; Predefined strings +; +DISPLAY "talkingto" IS "Talking To" "$Call1p" WRAP +DISPLAY "titles" IS "20th Century IQ Svc" +DISPLAY "newcall" IS "New Call From" "$Call1p" WRAP +DISPLAY "ringing" IS "Ringing" + +; +; Begin state definitions +; +STATE "callup" ; Call is currently up +STATE "inactive" ; No active call + +; +; Begin soft key definitions +; +KEY "CB_OH" IS "Block" OR "Call Block" + OFFHOOK + VOICEMODE + WAITDIALTONE + SENDDTMF "*60" + SUBSCRIPT "offHook" +ENDKEY + +KEY "CB" IS "Block" OR "Call Block" + SENDDTMF "*60" +ENDKEY + +; +; Begin main subroutine +; + +SUB "main" IS + IFEVENT NEARANSWER THEN + CLEAR + SHOWDISPLAY "talkingto" AT 1 + GOTO "stableCall" + ENDIF + IFEVENT OFFHOOK THEN + CLEAR + SHOWDISPLAY "titles" AT 1 + SHOWKEYS "CB" + GOTO "offHook" + ENDIF + IFEVENT IDLE THEN + CLEAR + SHOWDISPLAY "titles" AT 1 + SHOWKEYS "CB_OH" + ENDIF + IFEVENT CALLERID THEN + CLEAR + SHOWDISPLAY "newcall" AT 1 + ENDIF +ENDSUB + +SUB "offHook" IS + IFEVENT FARRING THEN + CLEAR + SHOWDISPLAY "ringing" AT 1 + ENDIF + IFEVENT FARANSWER THEN + CLEAR + SHOWDISPLAY "talkingto" AT 1 + GOTO "stableCall" + ENDIF +ENDSUB + +SUB "stableCall" IS + +ENDSUB diff --git a/version_1.8.2/pabx/etc/asterisk/test_sorcery.conf b/version_1.8.2/pabx/etc/asterisk/test_sorcery.conf new file mode 100644 index 0000000..c465dbf --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/test_sorcery.conf @@ -0,0 +1,14 @@ +; This is a res_sorcery_config compatible file for the sorcery unit tests + +[hey] +bob=98 +joe=41 + +[hey2] +type=zombies +bob=97 +joe=40 + +[hey3] +bob=96 +joe=39 diff --git a/version_1.8.2/pabx/etc/asterisk/udptl.conf b/version_1.8.2/pabx/etc/asterisk/udptl.conf new file mode 100644 index 0000000..4436116 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/udptl.conf @@ -0,0 +1,30 @@ +; +; UDPTL Configuration (UDPTL is one of the transports for T.38) +; +[general] + +; UDPTL start and UDPTL end configure start and end addresses +; +udptlstart=4000 +udptlend=4999 +; +; Whether to enable or disable UDP checksums on UDPTL traffic +; +;udptlchecksums=no +; +; The error correction type to be sent +; +;T38FaxUdpEC = t38UDPFEC +;T38FaxUdpEC = t38UDPRedundancy +; +; The maximum length of a UDPTL packet +; +;T38FaxMaxDatagram = 400 +; +; The number of error correction entries in a UDPTL packet +; +udptlfecentries = 3 +; +; The span over which parity is calculated for FEC in a UDPTL packet +; +udptlfecspan = 3 diff --git a/version_1.8.2/pabx/etc/asterisk/unistim.conf b/version_1.8.2/pabx/etc/asterisk/unistim.conf new file mode 100644 index 0000000..a096427 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/unistim.conf @@ -0,0 +1,88 @@ +; +; chan_unistim configuration file. +; + +[general] +port=5000 ; UDP port +; +; See https://wiki.asterisk.org/wiki/display/AST/IP+Quality+of+Service for a description of these parameters. +;tos=cs3 ; Sets TOS for signaling packets. +;tos_audio=ef ; Sets TOS for RTP audio packets. +;cos=3 ; Sets 802.1p priority for signaling packets. +;cos_audio=5 ; Sets 802.1p priority for RTP audio packets. +; +;debug=yes ; Enable debug (default no) +;keepalive=120 ; in seconds, default = 120 +;public_ip= ; if asterisk is behind a nat, specify your public IP +;autoprovisioning=no ; Allow undeclared phones to register an extension. See README for important + ; informations. no (default), yes, tn. +;mohsuggest=default +; ----------------------------- JITTER BUFFER CONFIGURATION -------------------------- +; jbenable = yes ; Enables the use of a jitterbuffer on the receiving side of a + ; SIP channel. Defaults to "no". An enabled jitterbuffer will + ; be used only if the sending side can create and the receiving + ; side can not accept jitter. The SIP channel can accept jitter, + ; thus a jitterbuffer on the receive SIP side will be used only + ; if it is forced and enabled. + +; jbforce = no ; Forces the use of a jitterbuffer on the receive side of a SIP + ; channel. Defaults to "no". + +; jbmaxsize = 200 ; Max length of the jitterbuffer in milliseconds. + +; jbresyncthreshold = 1000 ; Jump in the frame timestamps over which the jitterbuffer is + ; resynchronized. Useful to improve the quality of the voice, with + ; big jumps in/broken timestamps, usually sent from exotic devices + ; and programs. Defaults to 1000. + +; jbimpl = fixed ; Jitterbuffer implementation, used on the receiving side of a SIP + ; channel. Two implementations are currently available - "fixed" + ; (with size always equals to jbmaxsize) and "adaptive" (with + ; variable size, actually the new jb of IAX2). Defaults to fixed. + +; jblog = no ; Enables jitterbuffer frame logging. Defaults to "no". +; ---------------------------------------------------------------------------------- + + +;[black] ; name of the device +;device=000ae4012345 ; mac address of the phone +;rtp_port=10000 ; RTP port used by the phone, default = 10000. RTCP = rtp_port+1 +;rtp_method=0 ; If you don't have sound, you can try 1, 2 or 3, default = 0 + ; value 3 works on newer i2004, 1120E and 1140E +;status_method=0 ; If you don't see status text, try 1, default = 0 + ; value 1 works on 1120E and 1140E +;titledefault=Asterisk ; default = "TimeZone (your time zone)". 12 characters max +;height=3 ; default = 3, the number of display lines the device can show + ; For example on a Nortel I2001 or I2002, set this to 1 +;maintext0="you can insert" ; default = "Welcome", 24 characters max +;maintext1="a custom text" ; default = the name of the device, 24 characters max +;maintext2="(main page)" ; default = the public IP of the phone, 24 characters max +;dateformat=0 ; 0 (default) = 31Jan, 1 = Jan31, 2 = month/day, 3 = day/month +;timeformat=1 ; 0 = 0:00am ; 1 (default) = 0h00, 2 = 0:00 +;contrast=8 ; define the contrast of the LCD. From 0 to 15. Default = 8 +;country=us ; country (ccTLD) for dial tone frequency. See README, default = us +;language=ru ; language used for audio files and onscreen messages translate +;ringvolume=2 ; ring volume : 0,1,2,3, can be overrided by Dial(), default = 2 +;ringstyle=3 ; ring style : 0 to 7, can be overrided by Dial(), default = 3 +;cwvolume=2 ; ring volume : 0,1,2,3, default = 0 +;cwstyle=3 ; ring style : 0 to 7, default = 2 +;sharpdial=1 ; dial number by pressing #, default = 0 +;dtmf_duration=0 ; DTMF playback duration (in milliseconds) 0..150 (0 = off (default), 150 = maximum) +;interdigit_timer=4000 ; timer for automatic dial after several digits of number entered (in ms, 0 is off) +;callhistory=1 ; 0 = disable, 1 = enable call history, default = 1 +;callerid="Customer Support" <555-234-5678> +;context=default ; context, default="default" +;mailbox=1234 ; Specify the mailbox number. Used by Message Waiting Indication +;linelabel="Support" ; Softkey label for the next line=> entry, 9 char max. +;extension=none ; Add an extension into the dialplan. Only valid in context specified previously. + ; none=don't add (default), ask=prompt user, line=use the line number +;line => 100 ; Any number of lines can be defined in any order with bookmarks +;line => 200 ; After line defined it placed in next available slot +;bookmark=Hans C.@123 ; Use a softkey to dial 123. Name : 9 char max +;bookmark=Mailbox@011@54 ; 54 shows a mailbox icon. See #define FAV_ICON_ for other values (32 to 63) +;bookmark=Test@*@USTM/violet ; Display an icon if violet is connected (dynamic), only for unistim device +;bookmark=4@Pager@54321@51 ; Display a pager icon and dial 54321 when softkey 4 is pressed + +;[violet] +;device=006038abcdef +;line => 102 diff --git a/version_1.8.2/pabx/etc/asterisk/users.conf b/version_1.8.2/pabx/etc/asterisk/users.conf new file mode 100644 index 0000000..ccde3bf --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/users.conf @@ -0,0 +1,113 @@ +; +; User configuration +; +; Creating entries in users.conf is a "shorthand" for creating individual +; entries in each configuration file. Using users.conf is not intended to +; provide you with as much flexibility as using the separate configuration +; files (e.g. sip.conf, iax.conf, etc) but is intended to accelerate the +; simple task of adding users. Note that creating individual items (e.g. +; custom SIP peers, IAX friends, etc.) will allow you to override specific +; parameters within this file. Parameter names here are the same as they +; appear in the other configuration files. There is no way to change the +; value of a parameter here for just one subsystem. +; + +[general] +; +; Full name of a user +; +;fullname = New User +; +; Starting point of allocation of extensions +; +;userbase = 6000 +; +; Create voicemail mailbox and use use macro-stdexten +; +;hasvoicemail = yes +; +; Set voicemail mailbox 6000 password to 1234 +; +;vmsecret = 1234 +; +; Create SIP Peer +; +;hassip = yes +; +; Create IAX friend +; +;hasiax = yes +; +; Create H.323 friend +; +;hash323 = yes +; +; Create manager entry +; +;hasmanager = no +; +; Set permissions for manager entry (see manager.conf.sample for documentation) +; (defaults to *all* permissions) +;managerread = system,call,log,verbose,command,agent,user,config +;managerwrite = system,call,log,verbose,command,agent,user,config +; +; +; MAC Address for res_phoneprov +; +;macaddress = 112233445566 +; +; Auto provision the phone with res_phoneprov +; +;autoprov = yes +; +; Line Keys for hardphone +; +;LINEKEYS = 1 +; +; Line number for hardphone +; +;linenumber = 1 +; +; Local Caller ID number used with res_phoneprov and Asterisk GUI +; +;cid_number = 6000 +; +; Remaining options are not specific to users.conf entries but are general. +; +;callwaiting = yes +;threewaycalling = yes +;callwaitingcallerid = yes +;transfer = yes +;canpark = yes +;cancallforward = yes +;callreturn = yes +;callgroup = 1 +;pickupgroup = 1 +;nat = no + +;[6000] +;fullname = Joe User +;description = Courtesy Phone In Lobby ; Used to provide a description of the + ; peer in console output +;email = joe@foo.bar +;secret = 1234 +;dahdichan = 1 +;hasvoicemail = yes +;vmsecret = 1234 +;hassip = yes +;hasiax = no +;hash323 = no +;hasmanager = no +;callwaiting = no +;context = international +; +; Some administrators choose alphanumeric extensions, but still want their +; users to be reachable by traditional numeric extensions, specified by the +; alternateexts entry. +; +;alternateexts = 7057,3249 +;macaddress = 112233445566 +;autoprov = yes +;LINEKEYS = 1 +;linenumber = 1 +;cid_number = 6000 diff --git a/version_1.8.2/pabx/etc/asterisk/voicemail.conf b/version_1.8.2/pabx/etc/asterisk/voicemail.conf new file mode 100644 index 0000000..0befd6d --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/voicemail.conf @@ -0,0 +1,27 @@ +[general] +attach=yes +format=wav49 +charset=ISO-8859-1 +delete=yes +emailsubject=Nova Mensagem de voz de ${VM_CALLERID} +emailbody=Caro(a) ${VM_NAME} você tem uma nova mensagem de voz.Duração: ${VM_DUR}.Enviado por: ${VM_CALLERID},em ${VM_DATE}.Obrigado! +serveremail=voicemail@simplesip.com.br +fromstring=SimpleS PBX +mailcmd=/usr/bin/msmtp -t +forcegreetings=no +forcename=yes +maxmsg=100 +maxsecs=120 +minsecs=5 +maxgreet=3 +maxsilence=4 +silencethreshold=6 +maxlogins=8 +skipms=5 +saycid=yes +emaildateformat=%A, %B %d, %Y at %r +[zonemessages] +zonemessages=brazil=America/cuiaba|'vm-received' QR + +[default] + diff --git a/version_1.8.2/pabx/etc/asterisk/vpb.conf b/version_1.8.2/pabx/etc/asterisk/vpb.conf new file mode 100644 index 0000000..bdc89df --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/vpb.conf @@ -0,0 +1,248 @@ +; +; Voicetronix Voice Processing Board (VPB) telephony interface +; +; Configuration file +; + +[general] +; +; Total number of Voicetronix cards in this machine +; +cards=0 + +; +; Which indication functions to use +; 1 = use Asterisk functions +; 0 = use VPB functions +; +indication=1 + +; +; Echo Canceller suppression threshold +; 0 = no suppression threshold +; 2048 = -18dB +; 4096 = -24dB +; +;ecsuppthres=0 + +; +; Inter-digit delay timeout, used when collecting DTMF tones for dialling +; from a station port. Measured in milliseconds. +; +dtmfidd=3000 + +; +; How to play DTMF tones +; any value = use Asterisk functions +; commented out = use VPB functions +; +;ast-dtmf=1 + +; +; How to detect DTMF tones +; any value = use Asterisk functions +; commented out = use VPB functions +; +; NOTE: this setting is currently broken, and uncommenting it will +; stop dialling from working. Any volunteers to fix it? +;ast-dtmf-det=1 + +; +; Use relaxed DTMF detection (ignored unless ast-dtmf-det is set) +; +relaxdtmf=1 + +; +; When we do a native bridge between two VPB channels: +; yes = only break the connection for '#' and '*' +; no = break the connection for any DTMF +; +; NOTE: this is currently broken, and setting to no will segfault +; Asterisk while dialling. Any volunteers to fix it? +; +break-for-dtmf=yes + +; +; The maximum period between received rings. Measures in milliseconds. +; +timer_period_ring=4000 + + +[interfaces] +; +; Default language +; +language=en + +; +; Default context +; +context=public + +; +; Echo cancellation +; off = no not use echo cancellation +; on = use echo cancellation +; +echocancel=off + +; +; Caller ID routines/signalling +; For FXO ports, select one of: +; on = collect caller ID between 1st/2nd rings using VPB routines +; off = do not use caller ID +; bell = bell202 as used in US, using Asterisk's caller ID routines +; v23 = v23 as used in the UK, using Asterisk's caller ID routines +; For FXS ports, set the channel's CID in '"name" ' format +; +; NOTE that other caller ID standards are supported in Asterisk, but are +; not yet active in chan_vpb. It should be reasonably trivial to add +; support for the other standards (see the default chan_dahdi.conf for a +; list of them) that Asterisk already handles. +; +callerid=bell + +; +; Use a polarity reversal as the trigger for the start of caller ID, +; rather than triggering after the first ring. +; +usepolaritycid=0 + +; +; Use loop drop to detect the end of a call. On by default, but if you +; experience unexpected hangups, try turning it off. +; +useloopdrop=1 + +; +; Use in-kernel bridging. This will generally give lower delay audio if +; bridging between two VPB channels. It will not affect bridging +; between VPB channels and other technologies. +; +usenativebridge=1 + +; +; Software transmit and receive gain. Adjusting these will change the +; volume of audio files that are played (tx) and recorded (rx). It will +; _not_ affect audio between channels in a native bridge. It will, +; however, affect the volume of audio between VPB channels and channels +; using other technologies (such as VoIP channels). Usually it's best to +; leave these as they are. If you're looking to get rid of echo, the +; first thing to do is match your line impedance with the bal1/bal2/bal3 +; settings. +; +;txgain=0.0 +;rxgain=0.0 + +; +; Hardware transmit and receive gain. Adjusting these will change the +; volume of all audio on a channel. The allowed range of settings is +; -12.0 to 12.0 (measured in dB). +; +;txhwgain=0.0 +;rxhwgain=0.0 + +; +; Balance register settings, for matching the impedance of the card to +; that of the connected equipment. Only relevant for OpenLine and +; OpenSwitch series cards. Values should be in the range 0 - 255. +; +; We (Voicetronix) have determined the best codec balance values for +; standard interfaces based on their US, Australian and European +; specifications, shown below. +; +; US (600 ohm) +;bal1=0xf8 +;bal2=0x1a +;bal3=0x0c +; +; Australia (complex impedance) +;bal1=0xf0 +;bal2=0x5d +;bal3=0x79 +; +; Europe (CTR-21) +;bal1=0xf0 +;bal2=0x6e +;bal3=0x75 + +; +; Logical groups can be assigned to allow outgoing rollover. Groups range +; from 0 to 63, and multiple groups can be specified. +; +group=1 + +; +; Ring groups (a.k.a. call groups) and pickup groups. If a phone is +; ringing and it is a member of a group which is one of your pickup +; groups, then you can answer it by picking up and dialling *8#. For +; simple offices, just make these both the same. Groups range from 0 to +; 63. +; +callgroup=1 +pickupgroup=1 + +; +; If we haven't had a "grunt" (voice activity detection) for this many +; seconds, then we hang up the line due to inactivity. Default is one +; hour. +; +grunttimeout=3600 + +; +; Type of line and line handling. This setting will usually be overridden +; on a per channel basis. Valid settings are: +; fxo = this is an FXO port +; immediate = this is an FXS port, with no dialtone or dialling +; required (ie it is a "hotline") +; dialtone = this is an FXS port, providing dialtone and dialling +; +mode=immediate + +; ------------------------------------------------------------------------ +; Channel definitions +; +; Each channel inherits the settings specified above, unless the are +; overridden. As a minimum, the board number and channel number must be +; set, starting from 0 for the first board, and for the channels on each +; board. For example, board 0, channels 0 to 11, then board 1, channels +; 0 to 11 for two OpenSwitch12 cards. +; + +; +; First board is an OpenSwitch12 card (jumpers at factory defaults) +; +;board=0 +; +;mode=dialtone +;context=from-handset +;group=1 +;channel=0 +;channel=1 +;channel=2 +;channel=3 +;channel=4 +;channel=5 +;channel=6 +;channel=7 +; +;mode=fxo +;context=from-pstn +;group=2 +;channel=8 +;channel=9 +;channel=10 +;channel=11 + +; +; Second board is an OpenLine4 +; +;board=1 +; +;mode=fxo +;group=2 +;context=from-pstn +;channel=0 +;channel=1 +;channel=2 +;channel=3 diff --git a/version_1.8.2/pabx/etc/asterisk/xmpp.conf b/version_1.8.2/pabx/etc/asterisk/xmpp.conf new file mode 100644 index 0000000..4bd9a92 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/xmpp.conf @@ -0,0 +1,64 @@ +[general] +;debug=yes ; Enable debugging (disabled by default). +;autoprune=yes ; Auto remove users from buddy list. Depending on your + ; setup (ie, using your personal Gtalk account for a test) + ; you might lose your contacts list. Default is 'no'. +;autoregister=yes ; Auto register users from buddy list. +;collection_nodes=yes ; Enable support for XEP-0248 for use with + ; distributed device state. Default is 'no'. +;pubsub_autocreate=yes ; Whether or not the PubSub server supports/is using + ; auto-create for nodes. If it is, we have to + ; explicitly pre-create nodes before publishing them. + ; Default is 'no'. +;auth_policy=accept ; Auto accept users' subscription requests (default). + ; Set to deny for auto denial. +;[asterisk] +;type=client ; Client or Component connection +;serverhost=astjab.org ; Route to server for example, talk.google.com +;pubsub_node=pubsub.astjab.org ; Node to use for publishing events via PubSub +;username=asterisk@astjab.org/asterisk ; Username with optional resource. +;secret=blah ; Password +;refresh_token=TOKEN_VALUE ; Refresh token issued by Google OAuth 2.0 protocol. + ; `secret` must NOT be set if you use OAuth. + ; See https://developers.google.com/identity/protocols/OAuth2WebServer + ; for more details. + ; For test reasons you can obtain one on the page + ; https://developers.google.com/oauthplayground/ + ; 1. Click on Settings icon, check "Use your own OAuth credentials" + ; and enter your Client ID and Client Secret (see below). + ; 2. Input the scope https://www.googleapis.com/auth/googletalk + ; and push "Authorize APIs" button. + ; 3. Approve permissions. + ; 4. On section "Step 2" push "Exchange authorization code for tokens" + ; and get your Refresh token. +;oauth_clientid=OAUTH_CLIENT_ID_VALUE ; The application's client id to authorize using Google OAuth 2.0 protocol. +;oauth_secret=OAUTH_SECRET_VALUE ; The application's client secret to authorize using Google OAuth 2.0 protocol. + ; 1. Create new Project on the page: + ; https://console.cloud.google.com/apis/credentials/oauthclient + ; 2. Create new Application ID on the same page with type Web-application. + ; In section "Allowed URI redirections" put the path to the corresponding + ; script on your site or https://developers.google.com/oauthplayground + ; if you would like to obtain refresh_token from users by hand + ; (for example, for test reasons). + ; 3. Client ID and Client Secret will be shown and available on the same page. +;priority=1 ; Resource priority +;port=5222 ; Port to use defaults to 5222 +;usetls=yes ; Use tls or not +;usesasl=yes ; Use sasl or not +;buddy=mogorman@astjab.org ; Manual addition of buddy to list. + ; For distributed events, these buddies are + ; automatically added in the whitelist as + ; 'owners' of the node(s). +;distribute_events=yes ; Whether or not to distribute events using + ; this connection. Default is 'no'. +;status=available ; One of: chat, available, away, xaway, or dnd +;statusmessage="I am available" ; Have custom status message for Asterisk +;timeout=5 ; Timeout (in seconds) on the message stack, defaults to 5. + ; Messages stored longer than this value will be deleted by Asterisk. + ; This option applies to incoming messages only, which are intended to + ; be processed by the JABBER_RECEIVE dialplan function. +;sendtodialplan=yes ; Send incoming messages into the dialplan. Off by default. +;context=messages ; Dialplan context to send incoming messages to. If not set, + ; "default" will be used. +;forceoldssl=no ; Force the use of old-style SSL. +;keepalive= diff --git a/version_1.8.2/pabx/etc/asterisk/zapata.conf b/version_1.8.2/pabx/etc/asterisk/zapata.conf new file mode 100644 index 0000000..c2ebfa7 --- /dev/null +++ b/version_1.8.2/pabx/etc/asterisk/zapata.conf @@ -0,0 +1,10 @@ +[channels] +context=entrada-md110-pbx-2 +switchtype=euroisdn +signalling=pri_cpe +usecallerid=yes +echocancel=256 +echotraining=yes +echocancelwhenbridged=no +group=3 +channel=> 1-15,17-31 diff --git a/version_1.8.2/pabx/etc/init.d/cnvrtd b/version_1.8.2/pabx/etc/init.d/cnvrtd new file mode 100755 index 0000000..0441ac6 --- /dev/null +++ b/version_1.8.2/pabx/etc/init.d/cnvrtd @@ -0,0 +1,88 @@ +#!/bin/bash +# +# /etc/init.d/Daemon +# +# Starts the at daemon +# +# chkconfig: 345 95 5 +# description: Runs the demonstration daemon. +# processname: Daemon + + +# Source function library. +. /etc/init.d/functions + +#startup values +log=/var/log/cnvrtd.log + +#verify that the executable exists +test -x /var/lib/asterisk/scripts/cnvrtd/cnvrtd.php || exit 0 + +# +# Set prog, proc and bin variables. +# +prog="cnvrtd" +proc=/var/lock/subsys/cnvrtd +bin=/var/lib/asterisk/scripts/cnvrtd/cnvrtd.php + +start() { + # Check if Daemon is already running + if [ ! -f $proc ]; then + echo -n $"Starting $prog: " + daemon $bin --log=$log + RETVAL=$? + [ $RETVAL -eq 0 ] && touch $proc + echo + fi + + return $RETVAL +} + +stop() { + echo -n $"Stopping $prog: " + killproc $bin + RETVAL=$? + [ $RETVAL -eq 0 ] && rm -f $proc + echo + return $RETVAL +} + +restart() { + stop + start +} + +reload() { + restart +} + +status_at() { + status $bin +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +reload|restart) + restart + ;; +condrestart) + if [ -f $proc ]; then + restart + fi + ;; +status) + status_at + ;; +*) + +echo $"Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $? +exit $RETVAL diff --git a/version_1.8.2/pabx/etc/init.d/functions b/version_1.8.2/pabx/etc/init.d/functions new file mode 100755 index 0000000..158307a --- /dev/null +++ b/version_1.8.2/pabx/etc/init.d/functions @@ -0,0 +1,593 @@ +# -*-Shell-script-*- +# +# functions This file contains functions to be used by most or all +# shell scripts in the /etc/init.d directory. +# + +TEXTDOMAIN=initscripts + +# Make sure umask is sane +umask 022 + +# Set up a default search path. +PATH="/sbin:/usr/sbin:/bin:/usr/bin" +export PATH + +if [ $PPID -ne 1 -a -z "$SYSTEMCTL_SKIP_REDIRECT" ] && \ + ( /bin/mountpoint -q /cgroup/systemd || /bin/mountpoint -q /sys/fs/cgroup/systemd ) ; then + case "$0" in + /etc/init.d/*|/etc/rc.d/init.d/*) + _use_systemctl=1 + ;; + esac +fi + +systemctl_redirect () { + local s + local prog=${1##*/} + local command=$2 + local options="" + + case "$command" in + start) + s=$"Starting $prog (via systemctl): " + ;; + stop) + s=$"Stopping $prog (via systemctl): " + ;; + reload|try-reload) + s=$"Reloading $prog configuration (via systemctl): " + ;; + restart|try-restart|condrestart) + s=$"Restarting $prog (via systemctl): " + ;; + esac + + if [ -n "$SYSTEMCTL_IGNORE_DEPENDENCIES" ] ; then + options="--ignore-dependencies" + fi + + action "$s" /bin/systemctl $options $command "$prog.service" +} + +# Get a sane screen width +[ -z "${COLUMNS:-}" ] && COLUMNS=80 + +if [ -z "${CONSOLETYPE:-}" ]; then + if [ -c "/dev/stderr" -a -r "/dev/stderr" ]; then + CONSOLETYPE="$(/sbin/consoletype < /dev/stderr 2>/dev/null)" + else + CONSOLETYPE="serial" + fi +fi + +if [ -z "${NOLOCALE:-}" ] && [ -z "${LANGSH_SOURCED:-}" ] && [ -f /etc/sysconfig/i18n -o -f /etc/locale.conf ] ; then + . /etc/profile.d/lang.sh 2>/dev/null + # avoid propagating LANGSH_SOURCED any further + unset LANGSH_SOURCED +fi + +# Read in our configuration +if [ -z "${BOOTUP:-}" ]; then + if [ -f /etc/sysconfig/init ]; then + . /etc/sysconfig/init + else + # This all seem confusing? Look in /etc/sysconfig/init, + # or in /usr/share/doc/initscripts-*/sysconfig.txt + BOOTUP=color + RES_COL=60 + MOVE_TO_COL="echo -en \\033[${RES_COL}G" + SETCOLOR_SUCCESS="echo -en \\033[1;32m" + SETCOLOR_FAILURE="echo -en \\033[1;31m" + SETCOLOR_WARNING="echo -en \\033[1;33m" + SETCOLOR_NORMAL="echo -en \\033[0;39m" + LOGLEVEL=1 + fi + if [ "$CONSOLETYPE" = "serial" ]; then + BOOTUP=serial + MOVE_TO_COL= + SETCOLOR_SUCCESS= + SETCOLOR_FAILURE= + SETCOLOR_WARNING= + SETCOLOR_NORMAL= + fi +fi + +# Check if any of $pid (could be plural) are running +checkpid() { + local i + + for i in $* ; do + [ -d "/proc/$i" ] && return 0 + done + return 1 +} + +# __proc_pids {program} [pidfile] +# Set $pid to pids from /var/run* for {program}. $pid should be declared +# local in the caller. +# Returns LSB exit code for the 'status' action. +__pids_var_run() { + local base=${1##*/} + local pid_file=${2:-/var/run/$base.pid} + + pid= + if [ -f "$pid_file" ] ; then + local line p + + [ ! -r "$pid_file" ] && return 4 # "user had insufficient privilege" + while : ; do + read line + [ -z "$line" ] && break + for p in $line ; do + [ -z "${p//[0-9]/}" ] && [ -d "/proc/$p" ] && pid="$pid $p" + done + done < "$pid_file" + + if [ -n "$pid" ]; then + return 0 + fi + return 1 # "Program is dead and /var/run pid file exists" + fi + return 3 # "Program is not running" +} + +# Output PIDs of matching processes, found using pidof +__pids_pidof() { + pgrep -f "$1" +} + + +# A function to start a program. +daemon() { + # Test syntax. + local gotbase= force= nicelevel corelimit + local pid base= user= nice= bg= pid_file= + local cgroup= + nicelevel=0 + while [ "$1" != "${1##[-+]}" ]; do + case $1 in + '') echo $"$0: Usage: daemon [+/-nicelevel] {program}" + return 1;; + --check) + base=$2 + gotbase="yes" + shift 2 + ;; + --check=?*) + base=${1#--check=} + gotbase="yes" + shift + ;; + --user) + user=$2 + shift 2 + ;; + --user=?*) + user=${1#--user=} + shift + ;; + --pidfile) + pid_file=$2 + shift 2 + ;; + --pidfile=?*) + pid_file=${1#--pidfile=} + shift + ;; + --force) + force="force" + shift + ;; + [-+][0-9]*) + nice="nice -n $1" + shift + ;; + *) echo $"$0: Usage: daemon [+/-nicelevel] {program}" + return 1;; + esac + done + + # Save basename. + [ -z "$gotbase" ] && base=${1##*/} + + # See if it's already running. Look *only* at the pid file. + __pids_var_run "$base" "$pid_file" + + [ -n "$pid" -a -z "$force" ] && return + + # make sure it doesn't core dump anywhere unless requested + corelimit="ulimit -S -c ${DAEMON_COREFILE_LIMIT:-0}" + + # if they set NICELEVEL in /etc/sysconfig/foo, honor it + [ -n "${NICELEVEL:-}" ] && nice="nice -n $NICELEVEL" + + # if they set CGROUP_DAEMON in /etc/sysconfig/foo, honor it + if [ -n "${CGROUP_DAEMON}" ]; then + if [ ! -x /bin/cgexec ]; then + echo -n "Cgroups not installed"; warning + echo + else + cgroup="/bin/cgexec"; + for i in $CGROUP_DAEMON; do + cgroup="$cgroup -g $i"; + done + fi + fi + + # Echo daemon + [ "${BOOTUP:-}" = "verbose" -a -z "${LSB:-}" ] && echo -n " $base" + + # And start it up. + if [ -z "$user" ]; then + $cgroup $nice /bin/bash -c "$corelimit >/dev/null 2>&1 ; $*" + else + $cgroup $nice runuser -s /bin/bash $user -c "$corelimit >/dev/null 2>&1 ; $*" + fi + + [ "$?" -eq 0 ] && success $"$base startup" || failure $"$base startup" +} + +# A function to stop a program. +killproc() { + local RC killlevel= base pid pid_file= delay try + + RC=0; delay=3; try=0 + # Test syntax. + if [ "$#" -eq 0 ]; then + echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" + return 1 + fi + if [ "$1" = "-p" ]; then + pid_file=$2 + shift 2 + fi + if [ "$1" = "-d" ]; then + delay=$(echo $2 | awk -v RS=' ' -v IGNORECASE=1 '{if($1!~/^[0-9.]+[smhd]?$/) exit 1;d=$1~/s$|^[0-9.]*$/?1:$1~/m$/?60:$1~/h$/?60*60:$1~/d$/?24*60*60:-1;if(d==-1) exit 1;delay+=d*$1} END {printf("%d",delay+0.5)}') + if [ "$?" -eq 1 ]; then + echo $"Usage: killproc [-p pidfile] [ -d delay] {program} [-signal]" + return 1 + fi + shift 2 + fi + + + # check for second arg to be kill level + [ -n "${2:-}" ] && killlevel=$2 + + # Save basename. + base=${1##*/} + + # Find pid. + __pids_var_run "$1" "$pid_file" + RC=$? + if [ -z "$pid" ]; then + if [ -z "$pid_file" ]; then + pid="$(__pids_pidof "$1")" + else + [ "$RC" = "4" ] && { failure $"$base shutdown" ; return $RC ;} + fi + fi + + # Kill it. + if [ -n "$pid" ] ; then + [ "$BOOTUP" = "verbose" -a -z "${LSB:-}" ] && echo -n "$base " + if [ -z "$killlevel" ] ; then + if checkpid $pid 2>&1; then + # TERM first, then KILL if not dead + kill -TERM $pid >/dev/null 2>&1 + sleep 1 + if checkpid $pid ; then + try=0 + while [ $try -lt $delay ] ; do + checkpid $pid || break + sleep 1 + let try+=1 + done + if checkpid $pid ; then + kill -KILL $pid >/dev/null 2>&1 + sleep 1 + fi + fi + fi + checkpid $pid + RC=$? + [ "$RC" -eq 0 ] && failure $"$base shutdown" || success $"$base shutdown" + RC=$((! $RC)) + # use specified level only + else + if checkpid $pid; then + kill $killlevel $pid >/dev/null 2>&1 + RC=$? + [ "$RC" -eq 0 ] && success $"$base $killlevel" || failure $"$base $killlevel" + elif [ -n "${LSB:-}" ]; then + RC=7 # Program is not running + fi + fi + else + if [ -n "${LSB:-}" -a -n "$killlevel" ]; then + RC=7 # Program is not running + else + failure $"$base shutdown" + RC=0 + fi + fi + + # Remove pid file if any. + if [ -z "$killlevel" ]; then + rm -f "${pid_file:-/var/run/$base.pid}" + fi + return $RC +} + +# A function to find the pid of a program. Looks *only* at the pidfile +pidfileofproc() { + local pid + + # Test syntax. + if [ "$#" = 0 ] ; then + echo $"Usage: pidfileofproc {program}" + return 1 + fi + + __pids_var_run "$1" + [ -n "$pid" ] && echo $pid + return 0 +} + +# A function to find the pid of a program. +pidofproc() { + local RC pid pid_file= + + # Test syntax. + if [ "$#" = 0 ]; then + echo $"Usage: pidofproc [-p pidfile] {program}" + return 1 + fi + if [ "$1" = "-p" ]; then + pid_file=$2 + shift 2 + fi + fail_code=3 # "Program is not running" + + # First try "/var/run/*.pid" files + __pids_var_run "$1" "$pid_file" + RC=$? + if [ -n "$pid" ]; then + echo $pid + return 0 + fi + + [ -n "$pid_file" ] && return $RC + __pids_pidof "$1" || return $RC +} + +status() { + local base pid lock_file= pid_file= + + # Test syntax. + if [ "$#" = 0 ] ; then + echo $"Usage: status [-p pidfile] {program}" + return 1 + fi + if [ "$1" = "-p" ]; then + pid_file=$2 + shift 2 + fi + if [ "$1" = "-l" ]; then + lock_file=$2 + shift 2 + fi + base=${1##*/} + + if [ "$_use_systemctl" = "1" ]; then + systemctl status ${0##*/}.service + return $? + fi + + # First try "pidof" + __pids_var_run "$1" "$pid_file" + RC=$? + if [ -z "$pid_file" -a -z "$pid" ]; then + pid="$(__pids_pidof "$1")" + fi + if [ -n "$pid" ]; then + echo $"${base} (pid $pid) is running..." + return 0 + fi + + case "$RC" in + 0) + echo $"${base} (pid $pid) is running..." + return 0 + ;; + 1) + echo $"${base} dead but pid file exists" + return 1 + ;; + 4) + echo $"${base} status unknown due to insufficient privileges." + return 4 + ;; + esac + if [ -z "${lock_file}" ]; then + lock_file=${base} + fi + # See if /var/lock/subsys/${lock_file} exists + if [ -f /var/lock/subsys/${lock_file} ]; then + echo $"${base} dead but subsys locked" + return 2 + fi + echo $"${base} is stopped" + return 3 +} + +echo_success() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_SUCCESS + echo -n $" OK " + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 0 +} + +echo_failure() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_FAILURE + echo -n $"FAILED" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 1 +} + +echo_passed() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING + echo -n $"PASSED" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 1 +} + +echo_warning() { + [ "$BOOTUP" = "color" ] && $MOVE_TO_COL + echo -n "[" + [ "$BOOTUP" = "color" ] && $SETCOLOR_WARNING + echo -n $"WARNING" + [ "$BOOTUP" = "color" ] && $SETCOLOR_NORMAL + echo -n "]" + echo -ne "\r" + return 1 +} + +# Inform the graphical boot of our current state +update_boot_stage() { + if [ -x /bin/plymouth ]; then + /bin/plymouth --update="$1" + fi + return 0 +} + +# Log that something succeeded +success() { + [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_success + return 0 +} + +# Log that something failed +failure() { + local rc=$? + [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_failure + [ -x /bin/plymouth ] && /bin/plymouth --details + return $rc +} + +# Log that something passed, but may have had errors. Useful for fsck +passed() { + local rc=$? + [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_passed + return $rc +} + +# Log a warning +warning() { + local rc=$? + [ "$BOOTUP" != "verbose" -a -z "${LSB:-}" ] && echo_warning + return $rc +} + +# Run some action. Log its output. +action() { + local STRING rc + + STRING=$1 + echo -n "$STRING " + shift + "$@" && success $"$STRING" || failure $"$STRING" + rc=$? + echo + return $rc +} + +# returns OK if $1 contains $2 +strstr() { + [ "${1#*$2*}" = "$1" ] && return 1 + return 0 +} + +# Check whether file $1 is a backup or rpm-generated file and should be ignored +is_ignored_file() { + case "$1" in + *~ | *.bak | *.orig | *.rpmnew | *.rpmorig | *.rpmsave) + return 0 + ;; + esac + return 1 +} + +# Evaluate shvar-style booleans +is_true() { + case "$1" in + [tT] | [yY] | [yY][eE][sS] | [tT][rR][uU][eE]) + return 0 + ;; + esac + return 1 +} + +# Evaluate shvar-style booleans +is_false() { + case "$1" in + [fF] | [nN] | [nN][oO] | [fF][aA][lL][sS][eE]) + return 0 + ;; + esac + return 1 +} + +# Apply sysctl settings, including files in /etc/sysctl.d +apply_sysctl() { + if [ -x /lib/systemd/systemd-sysctl ]; then + /lib/systemd/systemd-sysctl + else + for file in /usr/lib/sysctl.d/*.conf ; do + is_ignored_file "$file" && continue + [ -f /run/sysctl.d/${file##*/} ] && continue + [ -f /etc/sysctl.d/${file##*/} ] && continue + test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 + done + for file in /run/sysctl.d/*.conf ; do + is_ignored_file "$file" && continue + [ -f /etc/sysctl.d/${file##*/} ] && continue + test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 + done + for file in /etc/sysctl.d/*.conf ; do + is_ignored_file "$file" && continue + test -f "$file" && sysctl -e -p "$file" >/dev/null 2>&1 + done + sysctl -e -p /etc/sysctl.conf >/dev/null 2>&1 + fi +} + +# A sed expression to filter out the files that is_ignored_file recognizes +__sed_discard_ignored_files='/\(~\|\.bak\|\.orig\|\.rpmnew\|\.rpmorig\|\.rpmsave\)$/d' + +if [ "$_use_systemctl" = "1" ]; then + if [ "x$1" = xstart -o \ + "x$1" = xstop -o \ + "x$1" = xrestart -o \ + "x$1" = xreload -o \ + "x$1" = xtry-restart -o \ + "x$1" = xforce-reload -o \ + "x$1" = xcondrestart ] ; then + + systemctl_redirect $0 $1 + exit $? + fi +fi diff --git a/version_1.8.2/pabx/etc/init.d/rtabd b/version_1.8.2/pabx/etc/init.d/rtabd new file mode 100755 index 0000000..393c0a2 --- /dev/null +++ b/version_1.8.2/pabx/etc/init.d/rtabd @@ -0,0 +1,87 @@ +#!/bin/bash +# +# /etc/init.d/rtabd +# +# Starts the at daemon +# +# chkconfig: 345 95 5 +# description: Servico para controle de chamadas abandonadas. +# processname: rtabd + +# Source function library. +. /etc/init.d/functions + +#startup values +log=/var/log/retornoAbandonada.log + +#verify that the executable exists +test -x /var/lib/asterisk/scripts/abandonadas/retornoAbandonada.php || exit 0 + +# +# Set prog, proc and bin variables. +# +prog="rtabd" +proc=/var/lock/subsys/rtabd +bin=/var/lib/asterisk/scripts/abandonadas/retornoAbandonada.php + +start() { + # Check if Daemon is already running + if [ ! -f $proc ]; then + echo -n $"Starting $prog: " + daemon $bin --log=$log + RETVAL=$? + [ $RETVAL -eq 0 ] && touch $proc + echo + fi + + return $RETVAL +} + +stop() { + echo -n $"Stopping $prog: " + killproc $bin + RETVAL=$? + [ $RETVAL -eq 0 ] && rm -f $proc + echo + return $RETVAL +} + +restart() { + stop + start +} + +reload() { + restart +} + +status_at() { + status $bin +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +reload|restart) + restart + ;; +condrestart) + if [ -f $proc ]; then + restart + fi + ;; +status) + status_at + ;; +*) + +echo $"Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $? +exit $RETVAL diff --git a/version_1.8.2/pabx/etc/init.d/supervisor b/version_1.8.2/pabx/etc/init.d/supervisor new file mode 100755 index 0000000..766576c --- /dev/null +++ b/version_1.8.2/pabx/etc/init.d/supervisor @@ -0,0 +1,87 @@ +#!/bin/bash +# +# /etc/init.d/Daemon +# +# Starts the at daemon +# +# chkconfig: 345 95 5 +# description: Runs the demonstration daemon. +# processname: Daemon + +# Source function library. +. /etc/init.d/functions + +#startup values +log=/var/log/superivisor.log + +#verify that the executable exists +test -x /var/lib/asterisk/scripts/supervisor/ssupervisor.php || exit 0 + +# +# Set prog, proc and bin variables. +# +prog="superivisor" +proc=/var/lock/subsys/superivisor +bin=/var/lib/asterisk/scripts/supervisor/ssupervisor.php + +start() { + # Check if Daemon is already running + if [ ! -f $proc ]; then + echo -n $"Starting $prog: " + daemon $bin --log=$log + RETVAL=$? + [ $RETVAL -eq 0 ] && touch $proc + echo + fi + + return $RETVAL +} + +stop() { + echo -n $"Stopping $prog: " + killproc $bin + RETVAL=$? + [ $RETVAL -eq 0 ] && rm -f $proc + echo + return $RETVAL +} + +restart() { + stop + start +} + +reload() { + restart +} + +status_at() { + status $bin +} + +case "$1" in +start) + start + ;; +stop) + stop + ;; +reload|restart) + restart + ;; +condrestart) + if [ -f $proc ]; then + restart + fi + ;; +status) + status_at + ;; +*) + +echo $"Usage: $0 {start|stop|restart|condrestart|status}" + exit 1 +esac + +exit $? +exit $RETVAL diff --git a/version_1.8.2/pabx/supervisord.conf b/version_1.8.2/pabx/supervisord.conf new file mode 100755 index 0000000..4a6a62c --- /dev/null +++ b/version_1.8.2/pabx/supervisord.conf @@ -0,0 +1,46 @@ +[supervisord] +logfile=/var/log/supervisor/supervisord.log ; localização do arquivo de log do Supervisor +pidfile=/var/run/supervisord.pid ; localização do arquivo PID do Supervisor +user=root + +[program:apache2] +priority=100 +notdaemon=false +command=/usr/sbin/apachectl -D BACKGROUND +startsecs=0 +startretries=0 + +[program:asterisk] +priority=100 +notdaemon=false +command=/usr/sbin/asterisk -vvvdddf -T -W -U pbx -p +startsecs=0 +startretries=0 + +[program:cron] +priority=150 +notdaemon=false +command=/usr/sbin/cron +startsecs=0 +startretries=0 + +[program:rtabd] +priority=200 +notdaemon=false +command=/etc/init.d/rtabd start +startsecs=0 +startretries=0 + +[program:cnvrtd] +priority=200 +notdaemon=false +command=/etc/init.d/cnvrtd start +startsecs=0 +startretries=0 + +[program:supervisor] +priority=200 +notdaemon=false +command=/etc/init.d/supervisor start +startsecs=0 +startretries=0 diff --git a/version_1.8.2/postgres-13/Dockerfile b/version_1.8.2/postgres-13/Dockerfile new file mode 100644 index 0000000..f69a4a5 --- /dev/null +++ b/version_1.8.2/postgres-13/Dockerfile @@ -0,0 +1,30 @@ +#postgres:13.14 +FROM postgres@sha256:c1db66c55c1a4f6b3e51c81b60fca0e79d697141fbe085511c88bf12207c5a11 + +ARG ADD_SQL +ARG ID_USER_VOLUME + + +ENV LC_ALL=en_US.ISO-8859-1 +ENV LC_MESSAGES=en_US.ISO-8859-1 +ENV LC_MONETARY=en_US.ISO-8859-1 +ENV LC_NUMERIC=en_US.ISO-8859-1 +ENV LC_TIME=en_US.ISO-8859-1 + +RUN echo "en_US ISO-8859-1" > /etc/locale.gen +RUN locale-gen "en_US ISO-8859-1" +RUN export LC_ALL="en_US ISO-8859-1" +RUN update-locale + +# Mudar o id do usuario postgres +RUN usermod -u $ID_USER_VOLUME postgres +RUN chown -R postgres:postgres /var/lib/postgresql/ + +COPY include_sql.sh /docker-entrypoint-initdb.d/ +RUN chmod 755 /docker-entrypoint-initdb.d/include_sql.sh + +COPY permission_pg_hba.sh /docker-entrypoint-initdb.d/ +RUN chmod 755 /docker-entrypoint-initdb.d/permission_pg_hba.sh + + +EXPOSE 5432 diff --git a/version_1.8.2/postgres-13/include_sql.sh b/version_1.8.2/postgres-13/include_sql.sh new file mode 100644 index 0000000..8abdd19 --- /dev/null +++ b/version_1.8.2/postgres-13/include_sql.sh @@ -0,0 +1,21 @@ + +psql -U contacte -d pbx -f /base/schema/createSchema.sql + +psql -U contacte -d pbx -f /base/schema/putData.sql + +psql -U contacte -d pbx -f /base/schema/whatsapp.sql + +psql -U contacte -d pbx -f /base/sql/versao-1.7.11.3.sql + +psql -U contacte -d pbx -f /base/sql/versao-1.7.11.4.sql + +psql -U contacte -d pbx -f /base/sql/versao-1.7.11.5.sql + +psql -U contacte -d pbx -f /base/sql/versao-1.7.12.sql + +psql -U contacte -d pbx -f /base/sql/versao-1.8.1.sql + +psql -U contacte -d pbx -f /base/sql/versao-1.8.2.sql + +psql -U contacte -d pbx -f /base/sql/grupo_licenca_developers.sql + diff --git a/version_1.8.2/postgres-13/permission_pg_hba.sh b/version_1.8.2/postgres-13/permission_pg_hba.sh new file mode 100644 index 0000000..e42031b --- /dev/null +++ b/version_1.8.2/postgres-13/permission_pg_hba.sh @@ -0,0 +1,5 @@ +#!/bin/sh + +echo "host all all 192.168.115.0/24 password" >> /var/lib/postgresql/data/pg_hba.conf +echo "host all all 10.252.252.0/24 password" >> /var/lib/postgresql/data/pg_hba.conf +echo "host all all 177.67.197.146/32 password" >> /var/lib/postgresql/data/pg_hba.conf