commit a13186eff608903962e7f46f39e1a4741d7ac4f7 Author: root Date: Wed Oct 11 04:39:21 2023 +0000 v1.10.10 diff --git a/README.md b/README.md new file mode 100644 index 0000000..1f3e1c1 --- /dev/null +++ b/README.md @@ -0,0 +1,129 @@ +# docker一键运行阿里云SDM(MRCP)和FreeSWITCH + +## 版本 + +FreeSWITCH 1.10.10 +SDM单机版(支持100路asr并发+100路tts并发) + +## 系统要求 + +linux +docker +docker compose (安装docker engine时会自动安装好) +lua5.1 +luarocks +jq +openssl + +## 业务要求 + +在阿里云开通“智能语音交互”业务,完成创建项目并生成AccessKeyID和AccessKeySecret,需要得到AccessKeyID、AccessKeySecret和appkey这几个参数(注意AccessKey要具有使用智能语音交互的权限)。 + +## 使用方法 + +初次使用时,当确定满足系统要求和业务要求的情况下,直接执行 + +```sh +./install.sh +``` + +如果没有执行权限就手动加一下`chmod +x install.sh`。 + +安装过程中会要求填入阿里云的AccessKeyID、AccessKeySecret、appkey参数,这些参数以后可以在`sdm/data/nls-cloud-sdm/conf/`中的配置文件中修改。 + +安装过程会随机生成FreeSWITCH的ESL密码和默认SIP密码,这些参数以后可以在`switch/conf/`中的配置文件中修改。 + +安装程序会自动启动容器。 + +### 进入fs_cli + +```sh +./fs_cli.sh +``` + +如果没有执行权限就手动加一下`chmod +x fs_cli.sh`。 + +如果执行后无法进入请检查: + +- 检查switch容器是否启动; +- 检查.fs_cli_conf中的密码和端口是否与event_socket.conf.xml中一致; +- 也有可能是FreeSWITCH服务还没有完全启动好。 + +### 重启服务 + +无论修改sdm配置还是switch配置,都得在服务重启后才会生效(fs_cli中也有reloadxml等重载配置的命令) + +```sh +# 重启sdm和switch +./restart.sh +# 重启sdm +./restart.sh sdm +# 重启switch +./restart.sh switch +``` + +> 在switch/scripts中写的lua脚本修改后不需要重启服务就能生效。 + +## 默认端口 + +这个包完全修改了FreeSWITCH的默认端口号,具体如下: + +| 业务 | 端口号 | +|---|---| +| internal_sip_port | 62260 | +| internal_tls_port | 62261 | +| external_sip_port | 62280 | +| external_tls_port | 62281 | +| ws-binding | 62266 | +| wss-binding | 62243 | +| event_socket | 62221 | +| rtp-start-port | 30000 | +| rtp-end-port | 39999 | +| (mrcp)rtp-port-min | 20000 | +| (mrcp)rtp-port-max | 29999 | + +除了FreeSWITCH外,SDM也是以host模式启动,其占用的端口都是阿里云出厂时的默认值: + +| 业务 | 端口号 | +|---|---| +| SIP | 7010 | +| MRCP | 1544、1554 | +| RTP | 10000 - 20000 | + +## 测试演示 + +### 分机注册 + +容器启动后,通过SIP端口使用1001-1019分机号和安装时生成的默认SIP密码,应该可以正确注册成功。 + +### 回声演示 + +分机注册成功后,用分机呼叫9196,应该可以启动回声应答(你说什么它同时给你放什么)。 + +### TTS演示 + +进入fs_cli,执行下面的命令 + +```sh +bgapi originate user/1001 &lua(demo/tts.lua) +``` + +1001应该可以接到电话,电话接起来后可以听到“你好,我是机器人XXX,很高兴认识你……”。 + +### ASR演示 + +进入fs_cli,执行下面的命令 + +```sh +bgapi originate user/1001 &lua(demo/asr.lua) +``` + +1001应该可以接到电话,电话接起来后可以跟机器人做“复读游戏”,你说一句,它用asr识别后再用tts给你复读一句。 + +> 如果asr.lua执行出错,请按照`switch/scripts/demo/asr.lua`中的注释安装lua依赖包再试试。 + +## 开发建议 + +请不要把业务代码提交到这个仓库里来,建议你把仓库接到你的业务目录中后直接删除.git目录,让你的业务仓库接管后面的代码管理工作。 + +安装成功后删除switch/sounds/sounds.tar.bz2文件可以节省一点磁盘空间。 \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c52d051 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,30 @@ +version: "3.1" +services: + switch: + image: registry.cn-shanghai.aliyuncs.com/wandoubaba/sdmswitch:1.10.10 + restart: always + container_name: switch + volumes: + - ./switch/.fs_cli_conf:/root/.fs_cli_conf + - ./switch/conf:/usr/local/freeswitch/conf + - ./switch/grammar:/usr/local/freeswitch/grammar + - ./switch/recordings:/usr/local/freeswitch/recordings + - ./switch/scripts:/usr/local/freeswitch/scripts + - ./switch/sounds:/usr/local/freeswitch/sounds + - ./switch/log:/usr/local/freeswitch/log + - /usr/local/share/lua/5.1:/usr/local/share/lua/5.1 + - /usr/local/lib/lua/5.1:/usr/local/lib/lua/5.1 + network_mode: host + command: ["freeswitch"] + depends_on: + - sdm + sdm: + image: registry.cn-shanghai.aliyuncs.com/nls-cloud/sdm + restart: always + container_name: sdm + volumes: + - ./sdm/data:/home/admin/disk + - ./sdm/logs:/home/admin/logs + network_mode: host + privileged: true + command: ["standalone"] diff --git a/fs_cli.sh b/fs_cli.sh new file mode 100755 index 0000000..b9b75a8 --- /dev/null +++ b/fs_cli.sh @@ -0,0 +1,2 @@ +#!/bin/bash +docker exec -it switch fs_cli diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..43d59f3 --- /dev/null +++ b/install.sh @@ -0,0 +1,104 @@ +#!/bin/bash + +set -e + +# Check if Docker is installed +if ! command -v docker &> /dev/null; then + echo "Docker is not installed. Please refer to https://docs.docker.com/engine/install/ to install Docker Engine." + exit 1 +fi + +# Check if 'switch' container exists +if docker ps -a --format '{{.Names}}' | grep -q '^switch$'; then + container_id=$(docker ps -a --format '{{.ID}}' --filter name=switch) + echo "The 'switch' container already exists. Container ID: $container_id. Installation cannot proceed." + exit 1 +fi + +# Check if 'sdm' container exists +if docker ps -a --format '{{.Names}}' | grep -q '^sdm$'; then + container_id=$(docker ps -a --format '{{.ID}}' --filter name=sdm) + echo "The 'sdm' container already exists. Container ID: $container_id. Installation cannot proceed." + exit 1 +fi + +# Check if jq is installed +if ! dpkg -s jq >/dev/null 2>&1; then + echo "jq package is not installed. Please install it using 'sudo apt-get install jq' and try again." + exit 1 +fi + +# Check if openssl is installed +if ! dpkg -s openssl >/dev/null 2>&1; then + echo "openssl package is not installed. Please install it using 'sudo apt-get install openssl' and try again." + exit 1 +fi + +# Define prompt with retry function +prompt_with_retry() { + local prompt=$1 + local max_attempts=$2 + local input + + for (( i=1; i<=$max_attempts; i++ )); do + read -p "$prompt" input + if [[ -n "$input" ]]; then + echo "$input" + return 0 + else + echo "Input cannot be blank. Please try again." + fi + done + + echo "Input cannot be blank. Install terminated." + exit 1 +} + +# Prompt user for Aliyun AccessKeyId +access_key_id=$(prompt_with_retry "Enter Aliyun AccessKeyId: " 3) + +# Prompt user for Aliyun AccessKeySecret +access_key_secret=$(prompt_with_retry "Enter Aliyun AccessKeySecret: " 3) + +# Prompt user for Aliyun appkey +app_key=$(prompt_with_retry "Enter Aliyun appkey: " 3) + +# Update values in json files +jq --arg access_key_id "$access_key_id" '.AccessKeyId = $access_key_id' sdm/data/nls-cloud-sdm/conf/nlstoken.json > tmp.json && mv tmp.json sdm/data/nls-cloud-sdm/conf/nlstoken.json +jq --arg access_key_secret "$access_key_secret" '.AccessKeySecret = $access_key_secret' sdm/data/nls-cloud-sdm/conf/nlstoken.json > tmp.json && mv tmp.json sdm/data/nls-cloud-sdm/conf/nlstoken.json +jq --arg app_key "$app_key" '.appkey = $app_key' sdm/data/nls-cloud-sdm/conf/service-asr.json > tmp.json && mv tmp.json sdm/data/nls-cloud-sdm/conf/service-asr.json +jq --arg app_key "$app_key" '.appkey = $app_key' sdm/data/nls-cloud-sdm/conf/service-tts.json > tmp.json && mv tmp.json sdm/data/nls-cloud-sdm/conf/service-tts.json + +# Generate ESL password hash +esl_password=$(openssl rand -hex 8) + +# Update event_socket.conf.xml file +sed -i "s/\(\)/\1$esl_password\2/" switch/conf/autoload_configs/event_socket.conf.xml +# Update .fs_cli_conf file +sed -i "s/\(password => \)[^\"]*/\1$esl_password/" switch/.fs_cli_conf + +# Generate default SIP password hash +default_password=$(openssl rand -hex 8) + +# Update vars.xml file +sed -i "s/\(\)/\1$default_password\2/" switch/conf/vars.xml + +# Extract sounds package +echo "Extracting sounds package..." +cd switch/sounds/ +if [[ -f sounds.tar.bz2 ]]; then + tar -xvjf sounds.tar.bz2 + echo "Sounds package extracted." +else + echo "Sounds package not found." + cd ../.. + exit 1 +fi +cd ../.. + +# Run docker compose +docker compose up -d + +echo "ESL Password: $esl_password" +echo "Default SIP Password: $default_password" +echo "Install complete." \ No newline at end of file diff --git a/restart.sh b/restart.sh new file mode 100755 index 0000000..e22a946 --- /dev/null +++ b/restart.sh @@ -0,0 +1,43 @@ +#!/bin/bash + +set -e + +usage() { + echo "Usage: restart.sh [sdm|switch]" + echo " sdm - Restart 'sdm' service" + echo " switch - Restart 'switch' service" + echo " (none) - Restart both 'sdm' and 'switch' service" + echo " -h - Show this help message" +} + +if [[ $# -eq 0 ]]; then + read -p "Do you want to restart both 'sdm' and 'switch' services? (y/n) [default: y]: " choice + choice="${choice:-y}" + + if [[ $choice == "y" ]]; then + echo "Restarting 'sdm' service..." + docker restart sdm + echo "Restarting 'switch' service..." + docker restart switch + else + echo "No services restarted." + fi + +elif [[ $# -eq 1 ]]; then + if [[ $1 == "sdm" ]]; then + echo "Restarting 'sdm' service..." + docker restart sdm + elif [[ $1 == "switch" ]]; then + echo "Restarting 'switch' service..." + docker restart switch + elif [[ $1 == "-h" ]]; then + usage + else + echo "Invalid argument: $1" + usage + fi + +else + echo "Invalid number of arguments" + usage +fi \ No newline at end of file diff --git a/sdm/data/nls-cloud-sdm/conf/alimrcp-client.xml b/sdm/data/nls-cloud-sdm/conf/alimrcp-client.xml new file mode 100755 index 0000000..0db2f81 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/alimrcp-client.xml @@ -0,0 +1,105 @@ + + + + + + + + + + + + + 127.0.0.1 + + + + + + + + + + + + + + + + + 0 + udp,tcp + UniMRCP SofiaSIP + AliMrcpClient + + + + + + + + + + + + 100 + + AliMrcpClient + + + + + 100 + false + 1024 + 1024 + + + + + + 1 + + + + + + + + 6000 + 7000 + + + + + + + + 1 + 50 + 600 + 1 + + 20 + PCMU PCMA L16/96/8000 telephone-event/101/8000 + + + + + 1 + + 5000 + + 1000 + + + + diff --git a/sdm/data/nls-cloud-sdm/conf/alimrcp-server.xml b/sdm/data/nls-cloud-sdm/conf/alimrcp-server.xml new file mode 100755 index 0000000..1fe4342 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/alimrcp-server.xml @@ -0,0 +1,159 @@ + + + + + + 0.0.0.0 + + + + + + + + + + + + + + + + + 7010 + udp,tcp + + UniMRCP SofiaSIP + AliMrcpServer + + + + + > + 189216000 + 120 + + + + + + + + 1554 + + + + + 100 + 600 + AliMrcpServer + + + + + + 1544 + 300 + 100 + true + 1024 + 1024 + 600 + 3 + + + + 1 + + + + + 10000 + 20000 + + + + + + 100 + + + + + + + 100 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 50 + 600 + 1 + + 20 + PCMU PCMA L16/96/8000 telephone-event/101/8000 + + + + 1 + + 5000 + + 1000 + + + + + + + + SIP-Agent-1 + MRCPv2-Agent-1 + Media-Engine-1 + RTP-Factory-1 + RTP-Settings-1 + + + + + RTSP-Agent-1 + Media-Engine-1 + RTP-Factory-1 + RTP-Settings-1 + + + + diff --git a/sdm/data/nls-cloud-sdm/conf/asr_result_template_full.xml b/sdm/data/nls-cloud-sdm/conf/asr_result_template_full.xml new file mode 100755 index 0000000..43a9fce --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/asr_result_template_full.xml @@ -0,0 +1,37 @@ + + + + + + + $$asr_result$$ + $$asr_begin_time$$ + $$asr_end_time$$ + $$asr_task_id$$ + $$asr_code$$ + $$asr_code_text$$ + $$mrcp_code$$ + $$mrcp_code_text$$ + $$asr_waveform_path$$ + $$asr_waveform_uri$$ + + $$asr_result$$ + + diff --git a/sdm/data/nls-cloud-sdm/conf/client-profiles/mrcpserver.xml b/sdm/data/nls-cloud-sdm/conf/client-profiles/mrcpserver.xml new file mode 100755 index 0000000..e3234a9 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/client-profiles/mrcpserver.xml @@ -0,0 +1,57 @@ + + + + + + + + + 7010 + + + + + + + + 1554 + + media + + + + + + + + + + + SIP-Agent-1 + MRCPv2-Agent-1 + Media-Engine-1 + RTP-Factory-1 + UniMRCP-SIP-Settings + RTP-Settings-1 + + + + + RTSP-Agent-1 + Media-Engine-1 + RTP-Factory-1 + UniMRCP-RTSP-Settings + RTP-Settings-1 + + + + + diff --git a/sdm/data/nls-cloud-sdm/conf/logger.xml b/sdm/data/nls-cloud-sdm/conf/logger.xml new file mode 100755 index 0000000..bf701a1 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/logger.xml @@ -0,0 +1,52 @@ + + + + + CONSOLE + + + 1073741824 + + + DATE,TIME,PRIORITY + + + INFO + + + NONE + + + + + + + + diff --git a/sdm/data/nls-cloud-sdm/conf/nginx-proxy.conf b/sdm/data/nls-cloud-sdm/conf/nginx-proxy.conf new file mode 100755 index 0000000..cd03609 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/nginx-proxy.conf @@ -0,0 +1,94 @@ +user admin; + +worker_processes 1; +worker_rlimit_nofile 100000; + +error_log "pipe:/opt/taobao/install/cronolog/sbin/cronolog /home/admin/cai/logs/cronolog/%Y/%m/%Y-%m-%d-error_log" warn; +pid /home/admin/cai/tengine.pid; + +events { + use epoll; + worker_connections 20480; +} + +http { + include mime.types; + default_type application/octet-stream; + + root htdocs; + + sendfile on; + tcp_nopush on; + + server_tokens off; + + keepalive_timeout 0; + + client_header_timeout 1m; + send_timeout 1m; + client_max_body_size 100m; + variables_hash_max_size 1024; + + index index.html index.htm; + + log_format proxyformat "$remote_addr $request_time_usec $http_x_readtime [$time_local] \"$request_method http://$host:$server_port:$request_uri\" $status $body_bytes_sent \"$http_referer\" \"$http_user_agent\" \"$md5_encode_cookie_unb\" \"$md5_encode_cookie_cookie2\""; + + #access_log "pipe:/opt/taobao/install/cronolog/sbin/cronolog /home/admin/cai/logs/cronolog/%Y/%m/%Y-%m-%d-%H-taobao-access_log" proxyformat; + log_not_found off; + + gzip on; + gzip_http_version 1.0; + gzip_comp_level 6; + gzip_min_length 1024; + gzip_proxied any; + gzip_vary on; + gzip_disable msie6; + gzip_buffers 96 8k; + gzip_types text/xml text/plain text/css application/javascript application/x-javascript application/rss+xml application/json; + + proxy_redirect off; + proxy_buffers 128 8k; + proxy_intercept_errors on; + + proxy_headers_hash_max_size 51200; + proxy_headers_hash_bucket_size 6400; + + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header Web-Server-Type nginx; + proxy_set_header WL-Proxy-Client-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_read_timeout 5m; + + #websocket + map $http_upgrade $connection_upgrade { + default upgrade; + '' close; + } + + server { + listen 7008 default_server; + + location /metrics { + proxy_pass http://127.0.0.1:7009/metrics; + } + + location /sdm_metrics { + proxy_pass http://127.0.0.1:7009/metrics; + } + + location ~ /maybeOtherPath/prefix { + rewrite '^/maybeOtherPath/prefix/(.*)$' /$1; + } + + location ~ \.(fla|pcm|mp3|wav)$ { + #access_log assets.access.log; + default_type audio/x-wav; + expires 180d; + root /home/admin/nls-cloud-sdm/var/; + if ($arg_download){ + add_header Content-Disposition "attachment; filename=$arg_download"; + } + } + } +} \ No newline at end of file diff --git a/sdm/data/nls-cloud-sdm/conf/nlstoken.json b/sdm/data/nls-cloud-sdm/conf/nlstoken.json new file mode 100755 index 0000000..2da67e5 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/nlstoken.json @@ -0,0 +1,10 @@ +{ + "AccessKeyId": "", + "AccessKeySecret": "", + "Domain": "nls-meta.cn-shanghai.aliyuncs.com", + "ServerVersion": "2018-05-18", + "ServerResourcePath": "/pop/2018-05-18/tokens", + "IntervalTime": 72000, + "DefaultToken": "", + "Desc": "私有云调用情况下,仅仅设置DefalutToken字段为default,其他字段不要求;公有云调用情况下务必设置DefaultToken为空,而除DefaultToken之外的其他所有字段务必不为空" +} diff --git a/sdm/data/nls-cloud-sdm/conf/sdmlog.conf b/sdm/data/nls-cloud-sdm/conf/sdmlog.conf new file mode 100755 index 0000000..0363930 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/sdmlog.conf @@ -0,0 +1,30 @@ +alog.rootLogger=INFO +alog.max_msg_len=1310720 + +##### CONSOLE LOG ###### +alog.appender.consoleAppender=ConsoleAppender +alog.appender.consoleAppender.layout.LogPattern=[%%d] [%%l] [%%t,%%F -- %%f():%%n] [%%m] + +###### ASR LOG ####### +alog.appender.asrAppender=FileAppender +alog.appender.asrAppender.fileName=../log/sdm-asr-request.log +alog.appender.asrAppender.max_file_size=128 +alog.appender.asrAppender.delay_time=24 +alog.appender.asrAppender.async_flush=true +alog.appender.asrAppender.layout=PatternLayout +alog.appender.asrAppender.layout.LogPattern=%%m +alog.appender.asrAppender.log_keep_count=25 + +###### TTS LOG ####### +alog.appender.ttsAppender=FileAppender +alog.appender.ttsAppender.fileName=../log/sdm-tts-request.log +alog.appender.ttsAppender.max_file_size=128 +alog.appender.ttsAppender.delay_time=24 +alog.appender.ttsAppender.async_flush=true +alog.appender.ttsAppender.layout=PatternLayout +alog.appender.ttsAppender.layout.LogPattern=%%m +alog.appender.ttsAppender.log_keep_count=25 + +###### LOG CONTROL ###### +alog.logger.sdm.asr=INFO, asrAppender +alog.logger.sdm.tts=INFO, ttsAppender diff --git a/sdm/data/nls-cloud-sdm/conf/service-asr.json b/sdm/data/nls-cloud-sdm/conf/service-asr.json new file mode 100755 index 0000000..02c6f62 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/service-asr.json @@ -0,0 +1,31 @@ +{ + "url": "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1", + "appkey": "", + "format": "pcm", + "sample_rate": 8000, + "enable_intermediate_result": 1, + "enable_punctuation_prediction": 1, + "enable_inverse_text_normalization": 1, + "enable_semantic_sentence_detection": 0, + "enable_ignore_sentence_timeout": 1, + "enable_ner": 0, + "ner_name": "aca", + "enbale_gender_detect": 0, + "desc": { + "notice": "此处仅仅是描述信息,无需修改", + "url": "访问ASR的url, 如果是调用公有云ASR,无需变动;如果是调用私有云ASR,需根据现场部署情况进行设置,一般为:vip://gateway-ip.vipserver_1:port_1,gateway-ip.vipserver_2:port_2/vipTargetDomain,其中vipServerIp:port可以有一个或者多个,用逗号分割,端口不指定默认为80,最后指定vipServer的Domain", + "appkey": "appkey, 调用公有云ASR时需要在阿里云官网获取, 调用私有云ASR时固定设置为(全小写):default", + "format": "编码格式,pcm或opu, 保持pcm不变", + "sample_rate": "采样率, 8000或16000, 保持8000不变", + "enable_intermediate_result": "设置是否返回中间识别结果, 可选参数. 服务端默认0", + "enable_punctuation_prediction": "设置是否在识别结果中添加标点, 可选参数. 服务端默认0", + "enable_inverse_text_normalization": "设置是否在识别结果中执行文本正则化/数字转换, 比如'一千六百五十'会返回'1650', 可选参数. 服务端默认0", + "enable_semantic_sentence_detection": "设置是否使用语义断句, 可选参数. 服务端默认0, 保持配置0不变", + "customization_id": "设置热词定制模型id, 默认不设置,除非已经训练了定制模型且通过本配置生效,则需要在上面json格式上增加", + "vocabulary_id": "设置热词id, 默认不设置,除非已经训练了定制热词且通过本配置生效,则需要在上面json格式上增加", + "class_vocabulary_id": "设置类热词id, 默认不设置,除非已经训练了定制类热词且通过本配置生效,则需要在上面json格式上增加", + "als_am_id": "在am混部时候设置的am模型id", + "enable_ner": "启动ner、地址解析功能,默认不启用", + "enbale_gender_detect": "是否开启性别识别,默认不启用" + } +} diff --git a/sdm/data/nls-cloud-sdm/conf/service-tts.json b/sdm/data/nls-cloud-sdm/conf/service-tts.json new file mode 100755 index 0000000..28ecdfb --- /dev/null +++ b/sdm/data/nls-cloud-sdm/conf/service-tts.json @@ -0,0 +1,23 @@ +{ + "url": "wss://nls-gateway.cn-shanghai.aliyuncs.com/ws/v1", + "appkey": "", + "format": "pcm", + "sample_rate": 8000, + "voice": "xiaoyun", + "volume": 50, + "speech_rate": 0, + "pitch_rate": 0, + "method": 0, + "desc": { + "url": "访问TTS的url, 如果是调用公有云TTS,无需变动;如果是调用私有云TTS,需根据现场部署情况进行设置,一般为:vip://gateway-ip.vipserver_1:port_1,gateway-ip.vipserver_2:port_2/vipTargetDomain,其中vipServerIp:port可以有一个或者多个,用逗号分割,端口不指定默认为80,最后指定vipServer的Domain", + "appkey": "appkey, 调用公有云TTS时需要在阿里云官网获取, 调用私有云TTS时固定设置为(全小写):default", + "format": "编码格式,支持pcm, wav, mp3, 保持pcm不变", + "sample_rate": "采样率, 8000或16000, 保持8000不变", + "volume": "音量, 范围是0~100, 可选参数, 默认50", + "voice": "发音人, 支持xiaoyun(女), xiaogang(男)等", + "speech_rate": "语速, 范围是-500~500, 可选参数, 默认是0", + "pitch_rate": "语调, 范围是-500~500, 可选参数, 默认是0", + "method": "合成方法, 可选参数, 默认是0. 参数含义0:不带录音的参数合成; 1:带录音的拼接合成; 2:不带录音的拼接合成; 3:带录音的参数合成", + "notice": "此处仅仅是描述信息,无需修改" + } +} diff --git a/sdm/data/nls-cloud-sdm/script/HangupNotifierDemo.py b/sdm/data/nls-cloud-sdm/script/HangupNotifierDemo.py new file mode 100755 index 0000000..231ba1d --- /dev/null +++ b/sdm/data/nls-cloud-sdm/script/HangupNotifierDemo.py @@ -0,0 +1,24 @@ +# coding=utf-8 +import os +import time +import sys + +# Demo示例,需要在具体项目具体场景下自行实现相关调用逻辑 + +def hangupNotify(channelId, vendorParams, asrResult, asrBeginTime, asrEndTime): + # channelId: 唯一sessionid, 是mrcp-server产生的 + # vendorParams: ivr发送给mrcp-server的RECOGNIZE消息时携带的扩展参数 + # asrResult : 识别结果 + # asrBeginTime : 识别结果的开始时间 + # asrEndTime : 识别结果的结束时间 + print "handupNotify = ", channelId, vendorParams, asrResult, asrBeginTime, asrEndTime + if len(asrResult) == 0 or (asrBeginTime < 0 and asrEndTime < 0): + # 说明挂机时没有识别结果 + return + # 挂机时可能有识别结果,需要将该结果抛给nlu + # TODO + + +if __name__ == '__main__': + hangupNotify("123f", "ke=1", "hi", 124, -1) + print "Game Over" \ No newline at end of file diff --git a/sdm/data/nls-cloud-sdm/script/NluClientDemo.py b/sdm/data/nls-cloud-sdm/script/NluClientDemo.py new file mode 100755 index 0000000..dfbbf22 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/script/NluClientDemo.py @@ -0,0 +1,100 @@ +# coding=utf-8 +import os +import time +import sys +import urllib +import json +import requests +#import xmltodict + +# Demo示例,需要在具体项目具体场景下自行实现相关调用逻辑 + +class XiaoMiNlu: + def __init__(self): + self.nlpUrl = 'http://39.106.157.134:8110/chatbot/chat/ivr?' + self.appId = 402 + def makeUrl(self, sessionId, asrResult, asrBeginTime, asrEndTime, emotionValue, vendorParams): + #http://39.106.157.134:8110/chatbot/chat/ivr?AppId=402&Utterance=%E4%BD%A0%E5%A5%BD&VendorParam={%22index%22:%221%22}&SessionId=ee8a166cd1cc4bab + url = self.nlpUrl + "AppId=" + str(self.appId) + "&Utterance=" + urllib.quote(asrResult) + if sessionId is not None and sessionId != "": + url = url + "&SessionId=" + sessionId + if vendorParams is not None and vendorParams != "": + #按需将 k1=v1;k2=v2;k3=v3的形式转成json格式(云小蜜调用要求) + items = vendorParams.split(';') + d = dict() + for item in items: + key,value = item.split('=') + d[key] = value + url = url + "&VendorParam=" + json.dumps(d) + return url + + def request(self, ssionId, asrResult, asrBeginTime, asrEndTime, emotionValue, vendorParams): + url = self.makeUrl(ssionId, asrResult, asrBeginTime, asrEndTime, emotionValue, vendorParams) + req = requests.get(url) + if(req.status_code != 200): + print req.text + print "ERROR url(%s), request Fail(%d)" % (url, req.status_code) + return "" + ''' + { + "SessionId": "123f", + "MessageId": "601762b2951e4a2381e26ec0a2703fc7", + "Messages": [ + { + "Type": "Text", + "Text": { + "Content": "{\"INTEL_CUST_HEAD\":{\"RESP_DESC\":\"\",\"APP_ID\":\" \",\"RESP_CODE\":\"\",\"TIMESTAMP\":\"\",\"TRANS_ID\":\"\"},\"INTEL_CUST_BODY\":{\"RESP_DESC\":\"\",\"OPERTYPE\":\"0\",\"RESP_CODE\":\"0000\",\"BROADCAST1\":\"engine \",\"INTERRUPT1\":\"\"}}", + "AnswerSource": "ChitChat" + } + } + ] + } + ''' + # 按需对NLU的返回进行解析,获取需要关注的内容并打包为xml格式返回:此处示例只获取"Messages->Text->Content"字段对应的值 + print "result = ", req.text + jss = json.loads(req.text.encode('utf-8')) + reply = "" + if(jss.has_key('Messages') and jss['Messages'][0].has_key('Text')): + result = jss['Messages'][0]['Text'] + if result.has_key('Content'): + reply = result['Content'].encode('utf-8') + + # 把 json格式转为xml格式(MRCPSERVER和IVR交互时只有XML格式) + reply_json = json.loads(reply) + #print type(reply_json), reply_json + #xmlstr = xmltodict.unparse(reply_json, full_document=False) + xmlstr = "fff" + #print "xmlstr = ", xmlstr + return xmlstr + +def nluRequest(sessionId, asrResult, asrBeginTime, asrEndTime, emotionValue, vendorParams): + print "python nluRequest = ", sessionId, asrResult, asrBeginTime, asrEndTime, emotionValue, vendorParams + ''' 需要NLU服务关注asrResult的取值范围: + NO-MTACH : 检测到了语音(vad检测到了起始点),但ASR并没有得到有效的结果,这种一般是客户声音过小、背景音过大、声音有能量但无法听到实际内容导致 + NO-INPUT-TIMEOUT : 无话超时,也即:用户侧没有说法,全是静音 + ASR-ERROR : 调用ASR进行识别,可能需要NLU服务进行兜底处理 + 其他情况 : 用户语音的ASR识别结果 + ''' + if asrResult == "NO-MTACH": + print "check speech, but no valid result!" + elif asrResult == "NO-INPUT-TIMEOUT": + print "check no speech, user may be not speak!" + elif asrResult == "ASR-ERROR": + print "call ASR failure, you should hold this!" + else: + print "check speech, and recognized success: ", asrResult + + #time.sleep(1) + # 注意:一定要返回如下格式 + # 返回fff类似结构,该结构即是xml格式(去掉xml头)) + return "value" + nlu = XiaoMiNlu() + return nlu.request(sessionId, asrResult, asrBeginTime, asrEndTime, emotionValue, vendorParams) + +if __name__ == '__main__': + print nluRequest("123f", "你好", 1234, 4569, 5, "ke=1;phone=123;callid=zxcvb"), "\n" + print nluRequest("123f", "WELCOME", 1234, 4569, 0, "ke=1"), "\n" + print nluRequest("123f", "NO-MTACH", 1234, 4569, 0, "ke=1"), "\n" + print nluRequest("123f", "NO-INPUT-TIMEOUT", 1234, 1, 4569, "ke=1"), "\n" + print nluRequest("123f", "ASR-ERROR", 1234, 4569, 0, ""), "\n" + print "Game Over" diff --git a/sdm/data/nls-cloud-sdm/script/RequestTransformer.lua b/sdm/data/nls-cloud-sdm/script/RequestTransformer.lua new file mode 100755 index 0000000..24aa8b0 --- /dev/null +++ b/sdm/data/nls-cloud-sdm/script/RequestTransformer.lua @@ -0,0 +1,43 @@ +function grammarTransformer(grammar) + -- see : https://www.runoob.com/lua/lua-tables.html + --print("c++ call lua function parse") + mytable = {} + + --mytable["SPEECH_URL"] = "custom:ws://11.164.63.252:8101/ws/v1" + --print("mytable 索引为 1 的元素是 ", mytable[1]) + --print("mytable 索引为 wow 的元素是 ", mytable["wow"]) + + return mytable +end + + +function split(str, reps) + local resultStrList = {} + string.gsub(str, '[^'..reps..']+', function (w) + table.insert(resultStrList, w) + end) + return resultStrList +end + +function vendorParamsTransformer(vendorParams) + -- vendorParams = k1=v1;k2=v2;k3=v3 + -- 将verndorParam按需拆分为key:value对,并可在此处进行相应修改 + --print("input : ", vendorParams) + mytable = {} + + local list = split(vendorParams, ";") + for _, s in ipairs(list) do + print(s) + local pos = string.find(s, '=') + if pos then + local key = string.sub(s, 0, pos - 1) + local value = string.sub(s, pos + 1) + --print("key = ", key, ", value = ", value) + mytable[key] = value + end + end + + --mytable["SPEECH_VOCAB_ID"] = "11111" + return mytable +end + diff --git a/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-1.wav b/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-1.wav new file mode 100755 index 0000000..1ffc8fc Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-2.wav b/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-2.wav new file mode 100755 index 0000000..bbc61ca Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-2.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-3.wav b/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-3.wav new file mode 100755 index 0000000..a4e7623 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231007/1709729e5d8a438e-3.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231007/dec8b945eabb44d0-1.wav b/sdm/data/nls-cloud-sdm/var/20231007/dec8b945eabb44d0-1.wav new file mode 100755 index 0000000..94880e4 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231007/dec8b945eabb44d0-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-1.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-1.wav new file mode 100755 index 0000000..bf2e2e0 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-2.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-2.wav new file mode 100755 index 0000000..c41c5b9 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-2.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-3.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-3.wav new file mode 100755 index 0000000..eb6a6af Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-3.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-4.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-4.wav new file mode 100755 index 0000000..49fd04c Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-4.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-5.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-5.wav new file mode 100755 index 0000000..a5b404e Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-5.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-6.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-6.wav new file mode 100755 index 0000000..84cdd34 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-6.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-7.wav b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-7.wav new file mode 100755 index 0000000..a50f55b Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/3a060f5b681a4e93-7.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/9dafe440b1db46b1-1.wav b/sdm/data/nls-cloud-sdm/var/20231008/9dafe440b1db46b1-1.wav new file mode 100755 index 0000000..47aa4b0 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/9dafe440b1db46b1-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-1.wav b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-1.wav new file mode 100755 index 0000000..da4baec Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-2.wav b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-2.wav new file mode 100755 index 0000000..2aa115c Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-2.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-3.wav b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-3.wav new file mode 100755 index 0000000..36c235c Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-3.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-4.wav b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-4.wav new file mode 100755 index 0000000..4023d39 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/d262403bece34f77-4.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/f592113d44fb4e1b-1.wav b/sdm/data/nls-cloud-sdm/var/20231008/f592113d44fb4e1b-1.wav new file mode 100755 index 0000000..f2094ff Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/f592113d44fb4e1b-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/f592113d44fb4e1b-2.wav b/sdm/data/nls-cloud-sdm/var/20231008/f592113d44fb4e1b-2.wav new file mode 100755 index 0000000..2cad522 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/f592113d44fb4e1b-2.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-1.wav b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-1.wav new file mode 100755 index 0000000..78dea85 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-2.wav b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-2.wav new file mode 100755 index 0000000..ee549f4 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-2.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-3.wav b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-3.wav new file mode 100755 index 0000000..82c9d37 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-3.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-4.wav b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-4.wav new file mode 100755 index 0000000..0dcf176 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231008/f74b7310256e4bcf-4.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231011/e1211ff11a37499c-1.wav b/sdm/data/nls-cloud-sdm/var/20231011/e1211ff11a37499c-1.wav new file mode 100755 index 0000000..d259dde Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231011/e1211ff11a37499c-1.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/20231011/e1211ff11a37499c-2.wav b/sdm/data/nls-cloud-sdm/var/20231011/e1211ff11a37499c-2.wav new file mode 100755 index 0000000..c657c3f Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/20231011/e1211ff11a37499c-2.wav differ diff --git a/sdm/data/nls-cloud-sdm/var/synth-8kHz-e00b9f58600748a0.pcm b/sdm/data/nls-cloud-sdm/var/synth-8kHz-e00b9f58600748a0.pcm new file mode 100755 index 0000000..8f1ec92 Binary files /dev/null and b/sdm/data/nls-cloud-sdm/var/synth-8kHz-e00b9f58600748a0.pcm differ diff --git a/sdm/logs/nls-cloud-sdm/.gitignore b/sdm/logs/nls-cloud-sdm/.gitignore new file mode 100755 index 0000000..c96a04f --- /dev/null +++ b/sdm/logs/nls-cloud-sdm/.gitignore @@ -0,0 +1,2 @@ +* +!.gitignore \ No newline at end of file diff --git a/switch/.fs_cli_conf b/switch/.fs_cli_conf new file mode 100644 index 0000000..00f1036 --- /dev/null +++ b/switch/.fs_cli_conf @@ -0,0 +1,5 @@ +[default] +host => 127.0.0.1 +port => 62221 +password => 305852127a3c0a6c +debug => 6 \ No newline at end of file diff --git a/switch/conf/autoload_configs/abstraction.conf.xml b/switch/conf/autoload_configs/abstraction.conf.xml new file mode 100644 index 0000000..7244681 --- /dev/null +++ b/switch/conf/autoload_configs/abstraction.conf.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/switch/conf/autoload_configs/acl.conf.xml b/switch/conf/autoload_configs/acl.conf.xml new file mode 100644 index 0000000..091d80b --- /dev/null +++ b/switch/conf/autoload_configs/acl.conf.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/alsa.conf.xml b/switch/conf/autoload_configs/alsa.conf.xml new file mode 100644 index 0000000..e589aca --- /dev/null +++ b/switch/conf/autoload_configs/alsa.conf.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/amqp.conf.xml b/switch/conf/autoload_configs/amqp.conf.xml new file mode 100644 index 0000000..3db3c32 --- /dev/null +++ b/switch/conf/autoload_configs/amqp.conf.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/amr.conf.xml b/switch/conf/autoload_configs/amr.conf.xml new file mode 100644 index 0000000..19b8cb8 --- /dev/null +++ b/switch/conf/autoload_configs/amr.conf.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/amrwb.conf.xml b/switch/conf/autoload_configs/amrwb.conf.xml new file mode 100644 index 0000000..1163ffd --- /dev/null +++ b/switch/conf/autoload_configs/amrwb.conf.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/av.conf.xml b/switch/conf/autoload_configs/av.conf.xml new file mode 100644 index 0000000..43e8514 --- /dev/null +++ b/switch/conf/autoload_configs/av.conf.xml @@ -0,0 +1,167 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/avmd.conf.xml b/switch/conf/autoload_configs/avmd.conf.xml new file mode 100644 index 0000000..86b2500 --- /dev/null +++ b/switch/conf/autoload_configs/avmd.conf.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/blacklist.conf.xml b/switch/conf/autoload_configs/blacklist.conf.xml new file mode 100644 index 0000000..9995feb --- /dev/null +++ b/switch/conf/autoload_configs/blacklist.conf.xml @@ -0,0 +1,11 @@ + + + + + diff --git a/switch/conf/autoload_configs/callcenter.conf.xml b/switch/conf/autoload_configs/callcenter.conf.xml new file mode 100644 index 0000000..a0cd6f0 --- /dev/null +++ b/switch/conf/autoload_configs/callcenter.conf.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/cdr_csv.conf.xml b/switch/conf/autoload_configs/cdr_csv.conf.xml new file mode 100644 index 0000000..8d796c6 --- /dev/null +++ b/switch/conf/autoload_configs/cdr_csv.conf.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/cdr_mongodb.conf.xml b/switch/conf/autoload_configs/cdr_mongodb.conf.xml new file mode 100644 index 0000000..ce366d1 --- /dev/null +++ b/switch/conf/autoload_configs/cdr_mongodb.conf.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/cdr_pg_csv.conf.xml b/switch/conf/autoload_configs/cdr_pg_csv.conf.xml new file mode 100644 index 0000000..9891455 --- /dev/null +++ b/switch/conf/autoload_configs/cdr_pg_csv.conf.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/cdr_sqlite.conf.xml b/switch/conf/autoload_configs/cdr_sqlite.conf.xml new file mode 100644 index 0000000..872c04c --- /dev/null +++ b/switch/conf/autoload_configs/cdr_sqlite.conf.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/cepstral.conf.xml b/switch/conf/autoload_configs/cepstral.conf.xml new file mode 100644 index 0000000..cf4aa92 --- /dev/null +++ b/switch/conf/autoload_configs/cepstral.conf.xml @@ -0,0 +1,12 @@ + + + + + + \ No newline at end of file diff --git a/switch/conf/autoload_configs/cidlookup.conf.xml b/switch/conf/autoload_configs/cidlookup.conf.xml new file mode 100644 index 0000000..fd28f9b --- /dev/null +++ b/switch/conf/autoload_configs/cidlookup.conf.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/conference.conf.xml b/switch/conf/autoload_configs/conference.conf.xml new file mode 100644 index 0000000..b927d9b --- /dev/null +++ b/switch/conf/autoload_configs/conference.conf.xml @@ -0,0 +1,382 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/conference_layouts.conf.xml b/switch/conf/autoload_configs/conference_layouts.conf.xml new file mode 100644 index 0000000..4dc974a --- /dev/null +++ b/switch/conf/autoload_configs/conference_layouts.conf.xml @@ -0,0 +1,393 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1x1 + 2x1 + 1x1+2x1 + 2x2 + 3x3 + 4x4 + 5x5 + 6x6 + 8x8 + + + 1x1 + 2x1-zoom + 3x1-zoom + 2x2 + 5-grid-zoom + 3x2-zoom + 7-grid-zoom + 4x2-zoom + 3x3 + + + 1up_top_left+5 + 1up_top_left+7 + 1up_top_left+9 + + + 3up+4 + 3up+9 + + + + diff --git a/switch/conf/autoload_configs/console.conf.xml b/switch/conf/autoload_configs/console.conf.xml new file mode 100644 index 0000000..6c2b828 --- /dev/null +++ b/switch/conf/autoload_configs/console.conf.xml @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/curl.conf.xml b/switch/conf/autoload_configs/curl.conf.xml new file mode 100644 index 0000000..eff3c6b --- /dev/null +++ b/switch/conf/autoload_configs/curl.conf.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/switch/conf/autoload_configs/db.conf.xml b/switch/conf/autoload_configs/db.conf.xml new file mode 100644 index 0000000..abc6c0c --- /dev/null +++ b/switch/conf/autoload_configs/db.conf.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/switch/conf/autoload_configs/dialplan_directory.conf.xml b/switch/conf/autoload_configs/dialplan_directory.conf.xml new file mode 100644 index 0000000..e4edcd6 --- /dev/null +++ b/switch/conf/autoload_configs/dialplan_directory.conf.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/switch/conf/autoload_configs/directory.conf.xml b/switch/conf/autoload_configs/directory.conf.xml new file mode 100644 index 0000000..748b233 --- /dev/null +++ b/switch/conf/autoload_configs/directory.conf.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/distributor.conf.xml b/switch/conf/autoload_configs/distributor.conf.xml new file mode 100644 index 0000000..99a4c9d --- /dev/null +++ b/switch/conf/autoload_configs/distributor.conf.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/switch/conf/autoload_configs/easyroute.conf.xml b/switch/conf/autoload_configs/easyroute.conf.xml new file mode 100644 index 0000000..350a509 --- /dev/null +++ b/switch/conf/autoload_configs/easyroute.conf.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/enum.conf.xml b/switch/conf/autoload_configs/enum.conf.xml new file mode 100644 index 0000000..a8f6f52 --- /dev/null +++ b/switch/conf/autoload_configs/enum.conf.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/erlang_event.conf.xml b/switch/conf/autoload_configs/erlang_event.conf.xml new file mode 100644 index 0000000..7f62766 --- /dev/null +++ b/switch/conf/autoload_configs/erlang_event.conf.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/event_multicast.conf.xml b/switch/conf/autoload_configs/event_multicast.conf.xml new file mode 100644 index 0000000..eac0392 --- /dev/null +++ b/switch/conf/autoload_configs/event_multicast.conf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/event_socket.conf.xml b/switch/conf/autoload_configs/event_socket.conf.xml new file mode 100644 index 0000000..9a8d560 --- /dev/null +++ b/switch/conf/autoload_configs/event_socket.conf.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/switch/conf/autoload_configs/fax.conf.xml b/switch/conf/autoload_configs/fax.conf.xml new file mode 100644 index 0000000..d6a5ff7 --- /dev/null +++ b/switch/conf/autoload_configs/fax.conf.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/fifo.conf.xml b/switch/conf/autoload_configs/fifo.conf.xml new file mode 100644 index 0000000..b1db4dd --- /dev/null +++ b/switch/conf/autoload_configs/fifo.conf.xml @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/switch/conf/autoload_configs/format_cdr.conf.xml b/switch/conf/autoload_configs/format_cdr.conf.xml new file mode 100644 index 0000000..0c42e78 --- /dev/null +++ b/switch/conf/autoload_configs/format_cdr.conf.xml @@ -0,0 +1,88 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/graylog2.conf.xml b/switch/conf/autoload_configs/graylog2.conf.xml new file mode 100644 index 0000000..0a05482 --- /dev/null +++ b/switch/conf/autoload_configs/graylog2.conf.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/hash.conf.xml b/switch/conf/autoload_configs/hash.conf.xml new file mode 100644 index 0000000..95b7928 --- /dev/null +++ b/switch/conf/autoload_configs/hash.conf.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/switch/conf/autoload_configs/hiredis.conf.xml b/switch/conf/autoload_configs/hiredis.conf.xml new file mode 100644 index 0000000..e824539 --- /dev/null +++ b/switch/conf/autoload_configs/hiredis.conf.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/httapi.conf.xml b/switch/conf/autoload_configs/httapi.conf.xml new file mode 100644 index 0000000..c3566d1 --- /dev/null +++ b/switch/conf/autoload_configs/httapi.conf.xml @@ -0,0 +1,129 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/http_cache.conf.xml b/switch/conf/autoload_configs/http_cache.conf.xml new file mode 100644 index 0000000..f8cc936 --- /dev/null +++ b/switch/conf/autoload_configs/http_cache.conf.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/ivr.conf.xml b/switch/conf/autoload_configs/ivr.conf.xml new file mode 100644 index 0000000..bd4e73d --- /dev/null +++ b/switch/conf/autoload_configs/ivr.conf.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/switch/conf/autoload_configs/java.conf.xml b/switch/conf/autoload_configs/java.conf.xml new file mode 100644 index 0000000..705114a --- /dev/null +++ b/switch/conf/autoload_configs/java.conf.xml @@ -0,0 +1,8 @@ + + + + + + diff --git a/switch/conf/autoload_configs/kazoo.conf.xml b/switch/conf/autoload_configs/kazoo.conf.xml new file mode 100644 index 0000000..b730523 --- /dev/null +++ b/switch/conf/autoload_configs/kazoo.conf.xml @@ -0,0 +1,215 @@ + + + + + + + + + + + + + + + + + + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ + +
+
+
+
+
+
+
+
+
+
+ + + diff --git a/switch/conf/autoload_configs/lcr.conf.xml b/switch/conf/autoload_configs/lcr.conf.xml new file mode 100644 index 0000000..9d106d4 --- /dev/null +++ b/switch/conf/autoload_configs/lcr.conf.xml @@ -0,0 +1,89 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/local_stream.conf.xml b/switch/conf/autoload_configs/local_stream.conf.xml new file mode 100644 index 0000000..16371d2 --- /dev/null +++ b/switch/conf/autoload_configs/local_stream.conf.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/logfile.conf.xml b/switch/conf/autoload_configs/logfile.conf.xml new file mode 100644 index 0000000..670bae9 --- /dev/null +++ b/switch/conf/autoload_configs/logfile.conf.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/lua.conf.xml b/switch/conf/autoload_configs/lua.conf.xml new file mode 100644 index 0000000..fafd336 --- /dev/null +++ b/switch/conf/autoload_configs/lua.conf.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/memcache.conf.xml b/switch/conf/autoload_configs/memcache.conf.xml new file mode 100644 index 0000000..dc0173f --- /dev/null +++ b/switch/conf/autoload_configs/memcache.conf.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/switch/conf/autoload_configs/modules.conf.xml b/switch/conf/autoload_configs/modules.conf.xml new file mode 100644 index 0000000..1fcb15e --- /dev/null +++ b/switch/conf/autoload_configs/modules.conf.xml @@ -0,0 +1,148 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/mongo.conf.xml b/switch/conf/autoload_configs/mongo.conf.xml new file mode 100644 index 0000000..5adf148 --- /dev/null +++ b/switch/conf/autoload_configs/mongo.conf.xml @@ -0,0 +1,15 @@ + + + + + + + + + diff --git a/switch/conf/autoload_configs/msrp.conf.xml b/switch/conf/autoload_configs/msrp.conf.xml new file mode 100644 index 0000000..65c2d61 --- /dev/null +++ b/switch/conf/autoload_configs/msrp.conf.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/nibblebill.conf.xml b/switch/conf/autoload_configs/nibblebill.conf.xml new file mode 100644 index 0000000..043c985 --- /dev/null +++ b/switch/conf/autoload_configs/nibblebill.conf.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/opal.conf.xml b/switch/conf/autoload_configs/opal.conf.xml new file mode 100644 index 0000000..280b693 --- /dev/null +++ b/switch/conf/autoload_configs/opal.conf.xml @@ -0,0 +1,21 @@ + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/opus.conf.xml b/switch/conf/autoload_configs/opus.conf.xml new file mode 100644 index 0000000..8494c2d --- /dev/null +++ b/switch/conf/autoload_configs/opus.conf.xml @@ -0,0 +1,35 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/oreka.conf.xml b/switch/conf/autoload_configs/oreka.conf.xml new file mode 100644 index 0000000..29eabd5 --- /dev/null +++ b/switch/conf/autoload_configs/oreka.conf.xml @@ -0,0 +1,13 @@ + + + + + + + + + + diff --git a/switch/conf/autoload_configs/osp.conf.xml b/switch/conf/autoload_configs/osp.conf.xml new file mode 100644 index 0000000..b320dbb --- /dev/null +++ b/switch/conf/autoload_configs/osp.conf.xml @@ -0,0 +1,53 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/perl.conf.xml b/switch/conf/autoload_configs/perl.conf.xml new file mode 100644 index 0000000..0249119 --- /dev/null +++ b/switch/conf/autoload_configs/perl.conf.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/pocketsphinx.conf.xml b/switch/conf/autoload_configs/pocketsphinx.conf.xml new file mode 100644 index 0000000..3bf7d5e --- /dev/null +++ b/switch/conf/autoload_configs/pocketsphinx.conf.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/portaudio.conf.xml b/switch/conf/autoload_configs/portaudio.conf.xml new file mode 100644 index 0000000..a715571 --- /dev/null +++ b/switch/conf/autoload_configs/portaudio.conf.xml @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/post_load_modules.conf.xml b/switch/conf/autoload_configs/post_load_modules.conf.xml new file mode 100644 index 0000000..8f4e132 --- /dev/null +++ b/switch/conf/autoload_configs/post_load_modules.conf.xml @@ -0,0 +1,4 @@ + + + + diff --git a/switch/conf/autoload_configs/pre_load_modules.conf.xml b/switch/conf/autoload_configs/pre_load_modules.conf.xml new file mode 100644 index 0000000..620a6c1 --- /dev/null +++ b/switch/conf/autoload_configs/pre_load_modules.conf.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/switch/conf/autoload_configs/presence_map.conf.xml b/switch/conf/autoload_configs/presence_map.conf.xml new file mode 100644 index 0000000..8a9d1dd --- /dev/null +++ b/switch/conf/autoload_configs/presence_map.conf.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/switch/conf/autoload_configs/python.conf.xml b/switch/conf/autoload_configs/python.conf.xml new file mode 100644 index 0000000..d3a8fdc --- /dev/null +++ b/switch/conf/autoload_configs/python.conf.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/redis.conf.xml b/switch/conf/autoload_configs/redis.conf.xml new file mode 100644 index 0000000..1a1f474 --- /dev/null +++ b/switch/conf/autoload_configs/redis.conf.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/switch/conf/autoload_configs/rss.conf.xml b/switch/conf/autoload_configs/rss.conf.xml new file mode 100644 index 0000000..f8c4f6d --- /dev/null +++ b/switch/conf/autoload_configs/rss.conf.xml @@ -0,0 +1,7 @@ + + + + + + + diff --git a/switch/conf/autoload_configs/rtmp.conf.xml b/switch/conf/autoload_configs/rtmp.conf.xml new file mode 100644 index 0000000..d5d2788 --- /dev/null +++ b/switch/conf/autoload_configs/rtmp.conf.xml @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/sangoma_codec.conf.xml b/switch/conf/autoload_configs/sangoma_codec.conf.xml new file mode 100644 index 0000000..eed9d67 --- /dev/null +++ b/switch/conf/autoload_configs/sangoma_codec.conf.xml @@ -0,0 +1,37 @@ + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/shout.conf.xml b/switch/conf/autoload_configs/shout.conf.xml new file mode 100644 index 0000000..3f381e6 --- /dev/null +++ b/switch/conf/autoload_configs/shout.conf.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/switch/conf/autoload_configs/signalwire.conf.xml b/switch/conf/autoload_configs/signalwire.conf.xml new file mode 100644 index 0000000..86e7056 --- /dev/null +++ b/switch/conf/autoload_configs/signalwire.conf.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/skinny.conf.xml b/switch/conf/autoload_configs/skinny.conf.xml new file mode 100644 index 0000000..6a878fc --- /dev/null +++ b/switch/conf/autoload_configs/skinny.conf.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/switch/conf/autoload_configs/smpp.conf.xml b/switch/conf/autoload_configs/smpp.conf.xml new file mode 100644 index 0000000..d5b7c0d --- /dev/null +++ b/switch/conf/autoload_configs/smpp.conf.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/sms_flowroute.conf.xml b/switch/conf/autoload_configs/sms_flowroute.conf.xml new file mode 100644 index 0000000..43d1c3e --- /dev/null +++ b/switch/conf/autoload_configs/sms_flowroute.conf.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/sndfile.conf.xml b/switch/conf/autoload_configs/sndfile.conf.xml new file mode 100644 index 0000000..d9e0cff --- /dev/null +++ b/switch/conf/autoload_configs/sndfile.conf.xml @@ -0,0 +1,9 @@ + + + + + + + diff --git a/switch/conf/autoload_configs/sofia.conf.xml b/switch/conf/autoload_configs/sofia.conf.xml new file mode 100644 index 0000000..629a001 --- /dev/null +++ b/switch/conf/autoload_configs/sofia.conf.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/spandsp.conf.xml b/switch/conf/autoload_configs/spandsp.conf.xml new file mode 100644 index 0000000..6345512 --- /dev/null +++ b/switch/conf/autoload_configs/spandsp.conf.xml @@ -0,0 +1,119 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/switch.conf.xml b/switch/conf/autoload_configs/switch.conf.xml new file mode 100644 index 0000000..8d34391 --- /dev/null +++ b/switch/conf/autoload_configs/switch.conf.xml @@ -0,0 +1,213 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/syslog.conf.xml b/switch/conf/autoload_configs/syslog.conf.xml new file mode 100644 index 0000000..7a06e8f --- /dev/null +++ b/switch/conf/autoload_configs/syslog.conf.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/timezones.conf.xml b/switch/conf/autoload_configs/timezones.conf.xml new file mode 100644 index 0000000..48206d1 --- /dev/null +++ b/switch/conf/autoload_configs/timezones.conf.xml @@ -0,0 +1,1816 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/translate.conf.xml b/switch/conf/autoload_configs/translate.conf.xml new file mode 100644 index 0000000..453ef3a --- /dev/null +++ b/switch/conf/autoload_configs/translate.conf.xml @@ -0,0 +1,28 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/tts_commandline.conf.xml b/switch/conf/autoload_configs/tts_commandline.conf.xml new file mode 100644 index 0000000..c5da4ab --- /dev/null +++ b/switch/conf/autoload_configs/tts_commandline.conf.xml @@ -0,0 +1,15 @@ + + + + + + diff --git a/switch/conf/autoload_configs/unicall.conf.xml b/switch/conf/autoload_configs/unicall.conf.xml new file mode 100644 index 0000000..eeaa078 --- /dev/null +++ b/switch/conf/autoload_configs/unicall.conf.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/unimrcp.conf.xml b/switch/conf/autoload_configs/unimrcp.conf.xml new file mode 100644 index 0000000..b1dbddc --- /dev/null +++ b/switch/conf/autoload_configs/unimrcp.conf.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/switch/conf/autoload_configs/v8.conf.xml b/switch/conf/autoload_configs/v8.conf.xml new file mode 100644 index 0000000..0f57fff --- /dev/null +++ b/switch/conf/autoload_configs/v8.conf.xml @@ -0,0 +1,15 @@ + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/verto.conf.xml b/switch/conf/autoload_configs/verto.conf.xml new file mode 100644 index 0000000..91f75f1 --- /dev/null +++ b/switch/conf/autoload_configs/verto.conf.xml @@ -0,0 +1,63 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/voicemail.conf.xml b/switch/conf/autoload_configs/voicemail.conf.xml new file mode 100644 index 0000000..33d5a97 --- /dev/null +++ b/switch/conf/autoload_configs/voicemail.conf.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/voicemail_ivr.conf.xml b/switch/conf/autoload_configs/voicemail_ivr.conf.xml new file mode 100644 index 0000000..1cdf3c2 --- /dev/null +++ b/switch/conf/autoload_configs/voicemail_ivr.conf.xml @@ -0,0 +1,211 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/vpx.conf.xml b/switch/conf/autoload_configs/vpx.conf.xml new file mode 100644 index 0000000..ee75490 --- /dev/null +++ b/switch/conf/autoload_configs/vpx.conf.xml @@ -0,0 +1,237 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/xml_cdr.conf.xml b/switch/conf/autoload_configs/xml_cdr.conf.xml new file mode 100644 index 0000000..bdb20e6 --- /dev/null +++ b/switch/conf/autoload_configs/xml_cdr.conf.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/xml_curl.conf.xml b/switch/conf/autoload_configs/xml_curl.conf.xml new file mode 100644 index 0000000..19214ee --- /dev/null +++ b/switch/conf/autoload_configs/xml_curl.conf.xml @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/xml_rpc.conf.xml b/switch/conf/autoload_configs/xml_rpc.conf.xml new file mode 100644 index 0000000..c5c3354 --- /dev/null +++ b/switch/conf/autoload_configs/xml_rpc.conf.xml @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/xml_scgi.conf.xml b/switch/conf/autoload_configs/xml_scgi.conf.xml new file mode 100644 index 0000000..b9662d1 --- /dev/null +++ b/switch/conf/autoload_configs/xml_scgi.conf.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/switch/conf/autoload_configs/zeroconf.conf.xml b/switch/conf/autoload_configs/zeroconf.conf.xml new file mode 100644 index 0000000..84c1a46 --- /dev/null +++ b/switch/conf/autoload_configs/zeroconf.conf.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/switch/conf/chatplan/default.xml b/switch/conf/chatplan/default.xml new file mode 100644 index 0000000..22d34da --- /dev/null +++ b/switch/conf/chatplan/default.xml @@ -0,0 +1,14 @@ + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/default.xml b/switch/conf/dialplan/default.xml new file mode 100644 index 0000000..7f7ff6f --- /dev/null +++ b/switch/conf/dialplan/default.xml @@ -0,0 +1,861 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ]]> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/default/00_ladspa.xml b/switch/conf/dialplan/default/00_ladspa.xml new file mode 100644 index 0000000..a26b193 --- /dev/null +++ b/switch/conf/dialplan/default/00_ladspa.xml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/default/00_pizza_demo.xml b/switch/conf/dialplan/default/00_pizza_demo.xml new file mode 100644 index 0000000..4b308fe --- /dev/null +++ b/switch/conf/dialplan/default/00_pizza_demo.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/switch/conf/dialplan/default/01_Talking_Clock.xml b/switch/conf/dialplan/default/01_Talking_Clock.xml new file mode 100644 index 0000000..1424f2e --- /dev/null +++ b/switch/conf/dialplan/default/01_Talking_Clock.xml @@ -0,0 +1,32 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/default/01_example.com.xml b/switch/conf/dialplan/default/01_example.com.xml new file mode 100644 index 0000000..bd61cd2 --- /dev/null +++ b/switch/conf/dialplan/default/01_example.com.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/features.xml b/switch/conf/dialplan/features.xml new file mode 100644 index 0000000..665925f --- /dev/null +++ b/switch/conf/dialplan/features.xml @@ -0,0 +1,67 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/public.xml b/switch/conf/dialplan/public.xml new file mode 100644 index 0000000..020bb62 --- /dev/null +++ b/switch/conf/dialplan/public.xml @@ -0,0 +1,74 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/public/00_inbound_did.xml b/switch/conf/dialplan/public/00_inbound_did.xml new file mode 100644 index 0000000..22b7223 --- /dev/null +++ b/switch/conf/dialplan/public/00_inbound_did.xml @@ -0,0 +1,18 @@ + + + + + + + + + + diff --git a/switch/conf/dialplan/skinny-patterns.xml b/switch/conf/dialplan/skinny-patterns.xml new file mode 100644 index 0000000..55f261f --- /dev/null +++ b/switch/conf/dialplan/skinny-patterns.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/skinny-patterns/20-Demo.xml b/switch/conf/dialplan/skinny-patterns/20-Demo.xml new file mode 100644 index 0000000..f696581 --- /dev/null +++ b/switch/conf/dialplan/skinny-patterns/20-Demo.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/switch/conf/dialplan/skinny-patterns/20-Local_extension.xml b/switch/conf/dialplan/skinny-patterns/20-Local_extension.xml new file mode 100644 index 0000000..9ad5651 --- /dev/null +++ b/switch/conf/dialplan/skinny-patterns/20-Local_extension.xml @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/switch/conf/dialplan/skinny-patterns/90-External.xml b/switch/conf/dialplan/skinny-patterns/90-External.xml new file mode 100644 index 0000000..50d6c37 --- /dev/null +++ b/switch/conf/dialplan/skinny-patterns/90-External.xml @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/switch/conf/dialplan/skinny-patterns/99-Default_Drop.xml b/switch/conf/dialplan/skinny-patterns/99-Default_Drop.xml new file mode 100644 index 0000000..897fd8f --- /dev/null +++ b/switch/conf/dialplan/skinny-patterns/99-Default_Drop.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/switch/conf/directory/default.xml b/switch/conf/directory/default.xml new file mode 100644 index 0000000..54100b9 --- /dev/null +++ b/switch/conf/directory/default.xml @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1000.xml b/switch/conf/directory/default/1000.xml new file mode 100644 index 0000000..9bee406 --- /dev/null +++ b/switch/conf/directory/default/1000.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1001.xml b/switch/conf/directory/default/1001.xml new file mode 100644 index 0000000..97c1931 --- /dev/null +++ b/switch/conf/directory/default/1001.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1002.xml b/switch/conf/directory/default/1002.xml new file mode 100644 index 0000000..d33691d --- /dev/null +++ b/switch/conf/directory/default/1002.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1003.xml b/switch/conf/directory/default/1003.xml new file mode 100644 index 0000000..f8b5926 --- /dev/null +++ b/switch/conf/directory/default/1003.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1004.xml b/switch/conf/directory/default/1004.xml new file mode 100644 index 0000000..c3e7da5 --- /dev/null +++ b/switch/conf/directory/default/1004.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1005.xml b/switch/conf/directory/default/1005.xml new file mode 100644 index 0000000..0e1165f --- /dev/null +++ b/switch/conf/directory/default/1005.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1006.xml b/switch/conf/directory/default/1006.xml new file mode 100644 index 0000000..beaaa7e --- /dev/null +++ b/switch/conf/directory/default/1006.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1007.xml b/switch/conf/directory/default/1007.xml new file mode 100644 index 0000000..10470a5 --- /dev/null +++ b/switch/conf/directory/default/1007.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1008.xml b/switch/conf/directory/default/1008.xml new file mode 100644 index 0000000..0e63fcf --- /dev/null +++ b/switch/conf/directory/default/1008.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1009.xml b/switch/conf/directory/default/1009.xml new file mode 100644 index 0000000..24db7f8 --- /dev/null +++ b/switch/conf/directory/default/1009.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1010.xml b/switch/conf/directory/default/1010.xml new file mode 100644 index 0000000..6d8e0c1 --- /dev/null +++ b/switch/conf/directory/default/1010.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1011.xml b/switch/conf/directory/default/1011.xml new file mode 100644 index 0000000..79d731d --- /dev/null +++ b/switch/conf/directory/default/1011.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1012.xml b/switch/conf/directory/default/1012.xml new file mode 100644 index 0000000..3839824 --- /dev/null +++ b/switch/conf/directory/default/1012.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1013.xml b/switch/conf/directory/default/1013.xml new file mode 100644 index 0000000..6f9c8e4 --- /dev/null +++ b/switch/conf/directory/default/1013.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1014.xml b/switch/conf/directory/default/1014.xml new file mode 100644 index 0000000..6a554c0 --- /dev/null +++ b/switch/conf/directory/default/1014.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1015.xml b/switch/conf/directory/default/1015.xml new file mode 100644 index 0000000..e94b888 --- /dev/null +++ b/switch/conf/directory/default/1015.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1016.xml b/switch/conf/directory/default/1016.xml new file mode 100644 index 0000000..4f856fc --- /dev/null +++ b/switch/conf/directory/default/1016.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1017.xml b/switch/conf/directory/default/1017.xml new file mode 100644 index 0000000..b0e43a0 --- /dev/null +++ b/switch/conf/directory/default/1017.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1018.xml b/switch/conf/directory/default/1018.xml new file mode 100644 index 0000000..6d70719 --- /dev/null +++ b/switch/conf/directory/default/1018.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/1019.xml b/switch/conf/directory/default/1019.xml new file mode 100644 index 0000000..f23a95f --- /dev/null +++ b/switch/conf/directory/default/1019.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/brian.xml b/switch/conf/directory/default/brian.xml new file mode 100644 index 0000000..98f720f --- /dev/null +++ b/switch/conf/directory/default/brian.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/default.xml b/switch/conf/directory/default/default.xml new file mode 100644 index 0000000..aa138f1 --- /dev/null +++ b/switch/conf/directory/default/default.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + diff --git a/switch/conf/directory/default/example.com.xml b/switch/conf/directory/default/example.com.xml new file mode 100644 index 0000000..42a33dd --- /dev/null +++ b/switch/conf/directory/default/example.com.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/switch/conf/directory/default/skinny-example.xml b/switch/conf/directory/default/skinny-example.xml new file mode 100644 index 0000000..357eb72 --- /dev/null +++ b/switch/conf/directory/default/skinny-example.xml @@ -0,0 +1,35 @@ + + + + + + + + + + +