Merge branch 'master' of ssh://git.freeswitch.org:222/freeswitch

This commit is contained in:
Michal Bielicki - cypromis 2012-03-21 17:08:54 +01:00
commit 5a12866608
530 changed files with 110204 additions and 7391 deletions

28
.gitignore vendored
View File

@ -35,6 +35,7 @@
*.xz
*.bz2
*.tbz2
*.swp
aclocal.m4
autom4te.cache
config.cache
@ -171,3 +172,30 @@ Freeswitch.2010.sdf
src/mod/codecs/mod_celt/*/*/mod_celt.log
src/mod/endpoints/mod_skinny/*/*/mod_skinny_2010.log
src/mod/formats/mod_shout/*/*/mod_shout.log
/w32/Setup/obj
/src/mod/asr_tts/mod_pocketsphinx/x64/Debug/mod_pocketsphinx_manifest.rc
/src/mod/endpoints/mod_h323/x64/Debug/mod_h323_manifest.rc
/src/mod/endpoints/mod_rtmp/Win32/Debug/mod_rtmp_2010.log
/src/mod/endpoints/mod_rtmp/Win32/Release/mod_rtmp_2010.log
/src/mod/endpoints/mod_rtmp/x64/Debug/mod_rtmp_2010.log
/src/mod/endpoints/mod_rtmp/x64/Debug/mod_rtmp_manifest.rc
/src/mod/endpoints/mod_rtmp/x64/Release/mod_rtmp_2010.log
/src/mod/endpoints/mod_skinny/x64/Debug/mod_skinny_manifest.rc
/src/mod/languages/mod_managed/x64/Debug_CLR/FREESWITCH.MANAGED.DLL.metagen
/src/mod/languages/mod_managed/x64/Debug_CLR/RSAENH.DLL.bi
/src/mod/languages/mod_managed/x64/Debug_CLR/TZRES.DLL.bi
/w32/Library/x64/Debug/FreeSwitch_manifest.rc
/src/mod/endpoints/mod_h323/Win32/Debug/mod_h323_manifest.rc
/src/mod/endpoints/mod_rtmp/Win32/Debug/mod_rtmp_manifest.rc
/src/mod/endpoints/mod_skinny/Win32/Debug/mod_skinny_manifest.rc
/src/mod/languages/mod_managed/Win32/Debug_CLR/FREESWITCH.MANAGED.DLL.metagen
/src/mod/languages/mod_managed/Win32/Debug_CLR/RSAENH.DLL.bi
/src/mod/languages/mod_managed/Win32/Debug_CLR/TZRES.DLL.bi
/w32/Library/Win32/Debug/FreeSwitch_manifest.rc
/src/mod/languages/mod_managed/Win32/Release_CLR/FREESWITCH.MANAGED.DLL.metagen
/src/mod/languages/mod_managed/Win32/Release_CLR/RSAENH.DLL.bi
/src/mod/languages/mod_managed/Win32/Release_CLR/TZRES.DLL.bi
/src/mod/languages/mod_managed/x64/Release_CLR/FREESWITCH.MANAGED.DLL.metagen
/src/mod/languages/mod_managed/x64/Release_CLR/RSAENH.DLL.bi
/src/mod/languages/mod_managed/x64/Release_CLR/TZRES.DLL.bi

View File

@ -467,8 +467,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_dingaling", "src\mod\en
ProjectSection(ProjectDependencies) = postProject
{1906D736-08BD-4EE1-924F-B536249B9A54} = {1906D736-08BD-4EE1-924F-B536249B9A54}
{D331904D-A00A-4694-A5A3-FCFF64AB5DBE} = {D331904D-A00A-4694-A5A3-FCFF64AB5DBE}
{B4B62169-5AD4-4559-8707-3D933AC5DB39} = {B4B62169-5AD4-4559-8707-3D933AC5DB39}
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
{B4B62169-5AD4-4559-8707-3D933AC5DB39} = {B4B62169-5AD4-4559-8707-3D933AC5DB39}
{F6C55D93-B927-4483-BB69-15AEF3DD2DFF} = {F6C55D93-B927-4483-BB69-15AEF3DD2DFF}
{E727E8F6-935D-46FE-8B0E-37834748A0E3} = {E727E8F6-935D-46FE-8B0E-37834748A0E3}
EndProjectSection
@ -946,6 +946,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_h323", "src\mod\endpoin
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iSAC", "src\mod\codecs\mod_isac\mod_iSAC.2008.vcproj", "{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_skinny", "src\mod\endpoints\mod_skinny\mod_skinny_2008.vcproj", "{CC1DD008-9406-448D-A0AD-33C3186CFADB}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
@ -1137,9 +1142,22 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "openssl", "libs\win32\opens
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_directory", "src\mod\applications\mod_directory\mod_directory.2008.vcproj", "{42E721FD-43D6-4B04-A34B-42567199FFB8}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "ldns", "libs\win32\ldns\ldns-lib\ldns-lib.2008.vcproj", "{23B4D303-79FC-49E0-89E2-2280E7E28940}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_httapi", "src\mod\applications\mod_httapi\mod_httapi.2008.vcproj", "{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_abstraction", "src\mod\applications\mod_abstraction\mod_abstraction.2008.vcproj", "{BDA173DB-F8EF-4270-9553-B453AF92E43A}"
ProjectSection(ProjectDependencies) = postProject
{202D7A4E-760D-4D0E-AFA1-D7459CED30FF} = {202D7A4E-760D-4D0E-AFA1-D7459CED30FF}
EndProjectSection
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
All|Win32 = All|Win32
@ -2405,6 +2423,13 @@ Global
{05C9FB27-480E-4D53-B3B7-7338E2514666}.Debug|x64.ActiveCfg = Debug|x64
{05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|Win32.ActiveCfg = Release|Win32
{05C9FB27-480E-4D53-B3B7-7338E2514666}.Release|x64.ActiveCfg = Release|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|Win32.ActiveCfg = All|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|Win32.Build.0 = All|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|x64.ActiveCfg = All|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Debug|Win32.ActiveCfg = Debug|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Debug|x64.ActiveCfg = Debug|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Release|Win32.ActiveCfg = Release|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Release|x64.ActiveCfg = Release|x64
{CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|Win32.ActiveCfg = Release|Win32
{CC1DD008-9406-448D-A0AD-33C3186CFADB}.All|x64.ActiveCfg = Release|Win32
{CC1DD008-9406-448D-A0AD-33C3186CFADB}.Debug|Win32.ActiveCfg = Debug|Win32
@ -2856,6 +2881,28 @@ Global
{23B4D303-79FC-49E0-89E2-2280E7E28940}.Release|Win32.Build.0 = Release|Win32
{23B4D303-79FC-49E0-89E2-2280E7E28940}.Release|x64.ActiveCfg = Release|x64
{23B4D303-79FC-49E0-89E2-2280E7E28940}.Release|x64.Build.0 = Release|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.All|Win32.ActiveCfg = Release|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.All|x64.ActiveCfg = Release|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.All|x64.Build.0 = Release|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Debug|Win32.ActiveCfg = Debug|Win32
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Debug|Win32.Build.0 = Debug|Win32
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Debug|x64.ActiveCfg = Debug|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Debug|x64.Build.0 = Debug|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Release|Win32.ActiveCfg = Release|Win32
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Release|Win32.Build.0 = Release|Win32
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Release|x64.ActiveCfg = Release|x64
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169}.Release|x64.Build.0 = Release|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.All|Win32.ActiveCfg = Release|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.All|x64.ActiveCfg = Release|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.All|x64.Build.0 = Release|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Debug|Win32.ActiveCfg = Debug|Win32
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Debug|Win32.Build.0 = Debug|Win32
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Debug|x64.ActiveCfg = Debug|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Debug|x64.Build.0 = Debug|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Release|Win32.ActiveCfg = Release|Win32
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Release|Win32.Build.0 = Release|Win32
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Release|x64.ActiveCfg = Release|x64
{BDA173DB-F8EF-4270-9553-B453AF92E43A}.Release|x64.Build.0 = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -2868,6 +2915,7 @@ Global
{8DEB383C-4091-4F42-A56F-C9E46D552D79} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{2C3C2423-234B-4772-8899-D3B137E5CA35} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{0B6C905B-142E-4999-B39D-92FF7951E921} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{D5C87B19-150D-4EF3-A671-96589BD2D14A} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{4D418176-3B33-47E6-A63E-01BA34ADD21C} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{AFA983D6-4569-4F88-BA94-555ED00FD9A8} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
@ -2903,6 +2951,8 @@ Global
{1E21AFE0-6FDB-41D2-942D-863607C24B91} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{2E250296-0C08-4342-9C8A-BCBDD0E7DF65} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{42E721FD-43D6-4B04-A34B-42567199FFB8} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{0807C5CB-F6FF-451D-89F0-1F7B2E1D9169} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{BDA173DB-F8EF-4270-9553-B453AF92E43A} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
{A27CCA23-1541-4337-81A4-F0A6413078A0} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}

View File

@ -453,6 +453,8 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "pthread", "libs\win32\pthre
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_g723_1", "src\mod\codecs\mod_g723_1\mod_g723_1.2010.vcxproj", "{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_iSAC", "src\mod\codecs\mod_isac\mod_iSAC.2010.vcxproj", "{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_native_file", "src\mod\formats\mod_native_file\mod_native_file.2010.vcxproj", "{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_spidermonkey_core_db", "src\mod\languages\mod_spidermonkey\mod_spidermonkey_core_db.2010.vcxproj", "{ACFFF684-4D19-4D48-AF12-88EA1D778BDF}"
@ -718,6 +720,12 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_callcenter", "src\mod\a
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_blacklist", "src\mod\applications\mod_blacklist\mod_blacklist.2010.vcxproj", "{50AAC2CE-BFC9-4912-87CC-C6381850D735}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_httapi", "src\mod\applications\mod_httapi\mod_httapi.2010.vcxproj", "{4748FF56-CA85-4809-97D6-A94C0FAC1D77}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_abstraction", "src\mod\applications\mod_abstraction\mod_abstraction.2010.vcxproj", "{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}"
EndProject
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "mod_sms", "src\mod\applications\mod_sms\mod_sms.2010.vcxproj", "{2469B306-B027-4FF2-8815-C9C1EA2CAE79}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
All|Win32 = All|Win32
@ -1428,6 +1436,20 @@ Global
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64.Build.0 = Release Passthrough|x64
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x64 Setup.ActiveCfg = Release Passthrough|x64
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758}.Release|x86 Setup.ActiveCfg = Release Passthrough|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|Win32.ActiveCfg = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|x64.ActiveCfg = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|x64.Build.0 = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|x64 Setup.ActiveCfg = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|x64 Setup.Build.0 = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.All|x86 Setup.ActiveCfg = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Debug|Win32.ActiveCfg = Debug|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Debug|x64.ActiveCfg = Debug|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Debug|x64 Setup.ActiveCfg = Debug|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Debug|x86 Setup.ActiveCfg = Debug|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Release|Win32.ActiveCfg = Release|Win32
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Release|x64.ActiveCfg = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Release|x64 Setup.ActiveCfg = Release|x64
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD}.Release|x86 Setup.ActiveCfg = Release|Win32
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|Win32.ActiveCfg = Release|x64
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.ActiveCfg = Release|x64
{9254C4B0-6F60-42B6-BB3A-36D63FC001C7}.All|x64.Build.0 = Release|x64
@ -2895,11 +2917,11 @@ Global
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x86 Setup.ActiveCfg = Release|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.All|x86 Setup.Build.0 = Release|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|Win32.ActiveCfg = Debug|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64.ActiveCfg = Debug|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64.ActiveCfg = Debug|x64
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x64 Setup.ActiveCfg = Debug|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Debug|x86 Setup.ActiveCfg = Debug|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|Win32.ActiveCfg = Release|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64.ActiveCfg = Release|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64.ActiveCfg = Release|x64
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x64 Setup.ActiveCfg = Release|Win32
{C6E78A4C-DB1E-47F4-9B63-4DC27D86343F}.Release|x86 Setup.ActiveCfg = Release|Win32
{1F0A8A77-E661-418F-BB92-82172AE43803}.All|Win32.ActiveCfg = Release|Win32
@ -3680,6 +3702,53 @@ Global
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|x64.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|x64 Setup.ActiveCfg = Release|x64
{50AAC2CE-BFC9-4912-87CC-C6381850D735}.Release|x86 Setup.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.All|Win32.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.All|x64.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.All|x64.Build.0 = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.All|x64 Setup.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.All|x86 Setup.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Debug|Win32.ActiveCfg = Debug|Win32
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Debug|Win32.Build.0 = Debug|Win32
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Debug|x64.ActiveCfg = Debug|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Debug|x64.Build.0 = Debug|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Debug|x64 Setup.ActiveCfg = Debug|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Debug|x86 Setup.ActiveCfg = Debug|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Release|Win32.ActiveCfg = Release|Win32
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Release|Win32.Build.0 = Release|Win32
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Release|x64.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Release|x64.Build.0 = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Release|x64 Setup.ActiveCfg = Release|x64
{4748FF56-CA85-4809-97D6-A94C0FAC1D77}.Release|x86 Setup.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.All|Win32.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.All|x64.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.All|x64.Build.0 = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.All|x64 Setup.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.All|x86 Setup.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Debug|Win32.ActiveCfg = Debug|Win32
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Debug|Win32.Build.0 = Debug|Win32
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Debug|x64.ActiveCfg = Debug|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Debug|x64.Build.0 = Debug|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Debug|x64 Setup.ActiveCfg = Debug|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Debug|x86 Setup.ActiveCfg = Debug|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|Win32.ActiveCfg = Release|Win32
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|Win32.Build.0 = Release|Win32
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x64.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x64.Build.0 = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x64 Setup.ActiveCfg = Release|x64
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F}.Release|x86 Setup.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|Win32.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x64.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x64.Build.0 = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x64 Setup.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.All|x86 Setup.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|Win32.ActiveCfg = Debug|Win32
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|x64.ActiveCfg = Debug|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|x64 Setup.ActiveCfg = Debug|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Debug|x86 Setup.ActiveCfg = Debug|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|Win32.ActiveCfg = Release|Win32
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|x64.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|x64 Setup.ActiveCfg = Release|x64
{2469B306-B027-4FF2-8815-C9C1EA2CAE79}.Release|x86 Setup.ActiveCfg = Release|x64
EndGlobalSection
GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE
@ -3689,6 +3758,7 @@ Global
{5580D60E-0F77-4716-9CD4-B8E5986FA375} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{D3EC0AFF-76FC-4210-A825-9A17410660A3} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{FEA1EEF7-876F-48DE-88BF-C0E3E606D758} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{7F1610F1-DD5A-4CF7-8610-30AB12C60ADD} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{8DEB383C-4091-4F42-A56F-C9E46D552D79} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{2C3C2423-234B-4772-8899-D3B137E5CA35} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
{0B6C905B-142E-4999-B39D-92FF7951E921} = {F881ADA2-2F1A-4046-9FEB-191D9422D781}
@ -3730,6 +3800,9 @@ Global
{5C2B4D88-3BEA-4FE0-90DF-FA9836099D5F} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{47886A6C-CCA6-4F9F-A7D4-F97D06FB2B1A} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{50AAC2CE-BFC9-4912-87CC-C6381850D735} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{4748FF56-CA85-4809-97D6-A94C0FAC1D77} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{60C542EE-6882-4EA2-8C21-5AB6DB1BA73F} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{2469B306-B027-4FF2-8815-C9C1EA2CAE79} = {E72B5BCB-6462-4D23-B419-3AF1A4AC3D78}
{07113B25-D3AF-4E04-BA77-4CD1171F022C} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
{A27CCA23-1541-4337-81A4-F0A6413078A0} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}
{E7BC026C-7CC5-45A3-BC7C-3B88EEF01F24} = {C5F182F9-754A-4EC5-B50F-76ED02BE13F4}

View File

@ -415,13 +415,6 @@ src/include/switch_version.h: src/include/switch_version.h.in .version $(libfree
else \
version="git-$$version" ; \
fi ;\
else \
version=`svnversion . -n || echo hacked` ; \
if [ "x$$version" = "xhacked" ] ; then \
version="hacked-`date -u +%Y%m%dT%H%M%SZ`" ; \
else \
version="svn-$$version" ; \
fi ;\
fi ; \
oldversion=`cat .version 2>/dev/null || echo "0"` ; \
if test "$$oldversion" != "$$version" || test $$force = 1 ; then \
@ -497,7 +490,7 @@ samples-conf:
samples-htdocs:
test -d $(DESTDIR)$(htdocsdir) || $(mkinstalldirs) $(DESTDIR)$(htdocsdir)
for htdocsfile in `cd $(switch_srcdir)/htdocs && find . -type f -name \* | grep -v .svn | sed -e 's|^\.||' ` ; do \
for htdocsfile in `cd $(switch_srcdir)/htdocs && find . -type f -name \* | sed -e 's|^\.||'` ; do \
dir=`echo $$htdocsfile | sed -e 's|/[^/]*$$||'`; \
filename=`echo $$htdocsfile | sed -e 's|^.*/||'`; \
test -d $(DESTDIR)$(htdocsdir)$$dir || $(mkinstalldirs) $(DESTDIR)$(htdocsdir)$$dir ; \
@ -518,29 +511,23 @@ install-data-local:
test -d $(DESTDIR)$(htdocsdir) || $(MAKE) samples-htdocs
is-scm:
@if [ ! -d .svn -a ! -d .git ] ; then \
@if [ ! -d .git ] ; then \
echo ; echo ; \
echo "*****************************************************************************************************" ; \
echo "You can not update a release tarball or without a git or svn working copy please clone our git tree: " ; \
echo "git clone git://git.freeswitch.org/freeswitch.git " ; \
echo "or check out our read only svn mirror: " ; \
echo "svn checkout http://svn.freeswitch.org/svn/freeswitch/trunk " ; \
echo "You cannot update a release tarball without a git tree. Please clone FreeSWITCH as so: " ; \
echo " git clone git://git.freeswitch.org/freeswitch.git " ; \
echo "*****************************************************************************************************" ; \
echo ; echo ; \
exit 1; \
fi
update: is-scm
@if test -d .svn ; then \
test ! -f .version || rm -f .version ; \
echo Updating... ; \
svn update ; \
elif test -d .git ; then \
@if test -d .git ; then \
test ! -f .version || rm -f .version ; \
echo "Pulling updates..." ; \
git pull ; \
else \
echo "This source directory is not a git tree or svn working copy" ; \
echo "This source directory is not a git tree." ; \
fi
.nodepends:

View File

@ -97,7 +97,7 @@ AC_DEFUN([LIBCURL_CHECK_CONFIG],
LIBCURL_CPPFLAGS=`$_libcurl_config --cflags`
fi
if test x"$LIBCURL" = "x" ; then
LIBCURL=`$_libcurl_config --libs`
LIBCURL=`$_libcurl_config --libs --static`
# This is so silly, but Apple actually has a bug in their
# curl-config script. Fixed in Tiger, but there are still

View File

@ -23,7 +23,7 @@ fi
uncompressed=`echo $tarfile | sed 's/\(\(\.tar\.gz\|\.tar\.bz2\|\.tar\.xz\)\|\(\.tgz\|\.tbz2\)\)$//'`
case `echo $tarfile | sed 's/.*\.\([^.]\+\)$/\1/'` in
case `echo $tarfile | sed 's/^.*\.//'` in
bz2|tbz2) UNZIPPER=$BZIP ;;
xz) UNZIPPER=$XZ ;;
gz|tgz|*) UNZIPPER=$ZCAT ;;

View File

@ -44,6 +44,7 @@ applications/mod_valet_parking
#applications/mod_abstraction
#applications/mod_esl
applications/mod_sms
applications/mod_httapi
codecs/mod_g723_1
codecs/mod_amr
#codecs/mod_amrwb
@ -60,6 +61,7 @@ codecs/mod_siren
#codecs/mod_opus
#codecs/mod_sangoma_codec
#codecs/mod_dahdi_codec
#codecs/mod_isac
#dialplans/mod_dialplan_directory
dialplans/mod_dialplan_xml
dialplans/mod_dialplan_asterisk

View File

@ -1,3 +1,3 @@
en-us-callie 1.0.16
en-us-callie 1.0.18
ru-RU-elena 1.0.13

View File

@ -17,6 +17,7 @@
<template name="snom">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}", "${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${call_clientcode}","${sip_rtp_rxstat}","${sip_rtp_txstat}","${sofia_record_file}"</template>
<template name="linksys">"${caller_id_name}","${caller_id_number}","${destination_number}","${context}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${uuid}","${bleg_uuid}","${accountcode}","${read_codec}","${write_codec}","${sip_user_agent}","${sip_p_rtp_stat}"</template>
<template name="asterisk">"${accountcode}","${caller_id_number}","${destination_number}","${context}","${caller_id}","${channel_name}","${bridge_channel}","${last_app}","${last_arg}","${start_stamp}","${answer_stamp}","${end_stamp}","${duration}","${billsec}","${hangup_cause}","${amaflags}","${uuid}","${userfield}"</template>
<template name="opencdrrate">"${uuid}","${signal_bond}","${direction}","${ani}","${destination_number}","${answer_stamp}","${end_stamp}","${billsec}","${accountcode}","${userfield}","${network_addr}","${regex('${original_caller_id_name}'|^.)}","${sip_gateway_name}"</template>
</templates>
</configuration>

View File

@ -0,0 +1,127 @@
<configuration name="httapi.conf" description="HT-TAPI Hypertext Telephony API">
<settings>
<!-- print xml on the consol -->
<param name="debug" value="true"/>
<!-- time to keep audio files when discoverd they were deleted from the http server -->
<param name="file-not-found-expires" value="300"/>
<!-- how often to re-check the server to make sure the remote file has not changed -->
<param name="file-cache-ttl" value="300"/>
</settings>
<profiles>
<profile name="default">
<!-- default params for conference action tags -->
<conference>
<param name="default-profile" value="default"/>
</conference>
<!-- default params for dial action tags -->
<dial>
<param name="context" value="default"/>
<param name="dialplan" value="XML"/>
</dial>
<!-- permissions -->
<permissions>
<!-- <permission name="all" value="true"/> -->
<!--<permission name="none" value="true"/> -->
<permission name="set-params" value="true"/>
<permission name="set-vars" value="false">
<!-- default to "deny" or "allow" -->
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<!--
<variable-list default="deny">
<variable name="caller_id_name"/>
<variable name="hangup"/>
</variable-list>
-->
</permission>
<permission name="get-vars" value="false">
<!-- default to "deny" or "allow" -->
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<!--
<variable-list default="deny">
<variable name="caller_id_name"/>
<variable name="hangup"/>
</variable-list>
-->
</permission>
<permission name="extended-data" value="false"/>
<permission name="execute-apps" value="true">
<!-- default to "deny" or "allow" -->
<application-list default="deny">
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<application name="info"/>
<application name="hangup"/>
</application-list>
</permission>
<permission name="expand-vars-in-tag-body" value="false">
<!-- default to "deny" or "allow" -->
<!-- type attr can be "deny" or "allow" nothing defaults to opposite of the list default so allow in this case -->
<!--
<variable-list default="deny">
<variable name="caller_id_name"/>
<variable name="hangup"/>
</variable-list>
<api-list default="deny">
<api name="expr"/>
<api name="lua"/>
</api-list>
-->
</permission>
<permission name="dial" value="true"/>
<permission name="dial-set-context" value="false"/>
<permission name="dial-set-dialplan" value="false"/>
<permission name="dial-set-cid-name" value="false"/>
<permission name="dial-set-cid-number" value="false"/>
<permission name="dial-full-originate" value="false"/>
<permission name="conference" value="true"/>
<permission name="conference-set-profile" value="false"/>
</permissions>
<params>
<!-- default url can be overridden by app data -->
<param name="gateway-url" value="http://www.freeswitch.org/api/index.cgi" />
<!-- set this to provide authentication credentials to the server -->
<!--<param name="gateway-credentials" value="muser:mypass"/>-->
<!--<param name="auth-scheme" value="basic"/>-->
<!-- optional: this will enable the CA root certificate check by libcurl to
verify that the certificate was issued by a major Certificate Authority.
note: default value is disabled. only enable if you want this! -->
<!--<param name="enable-cacert-check" value="true"/>-->
<!-- optional: verify that the server is actually the one listed in the cert -->
<!-- <param name="enable-ssl-verifyhost" value="true"/> -->
<!-- optional: these options can be used to specify custom SSL certificates
to use for HTTPS communications. Either use both options or neither.
Specify your public key with 'ssl-cert-path' and the private key with
'ssl-key-path'. If your private key has a password, specify it with
'ssl-key-password'. -->
<!-- <param name="ssl-cert-path" value="$${base_dir}/conf/certs/public_key.pem"/> -->
<!-- <param name="ssl-key-path" value="$${base_dir}/conf/certs/private_key.pem"/> -->
<!-- <param name="ssl-key-password" value="MyPrivateKeyPassword"/> -->
<!-- optional timeout -->
<!-- <param name="timeout" value="10"/> -->
<!-- optional: use a custom CA certificate in PEM format to verify the peer
with. This is useful if you are acting as your own certificate authority.
note: only makes sense if used in combination with "enable-cacert-check." -->
<!-- <param name="ssl-cacert-file" value="$${base_dir}/conf/certs/cacert.pem"/> -->
<!-- optional: specify the SSL version to force HTTPS to use. Valid options are
"SSLv3" and "TLSv1". Otherwise libcurl will auto-negotiate the version. -->
<!-- <param name="ssl-version" value="TLSv1"/> -->
<!-- optional: enables cookies and stores them in the specified file. -->
<!-- <param name="cookie-file" value="/tmp/cookie-mod_xml_curl.txt"/> -->
<!-- one or more of these imply you want to pick the exact variables that are transmitted -->
<!--<param name="enable-post-var" value="Unique-ID"/>-->
</params>
</profile>
</profiles>
</configuration>

View File

@ -3,6 +3,8 @@
<param name="max-urls" value="10000"/>
<param name="location" value="$${base_dir}/http_cache"/>
<param name="default-max-age" value="86400"/>
<param name="prefetch-thread-count" value="8"/>
<param name="prefetch-queue-size" value="100"/>
</settings>
</configuration>

View File

@ -62,6 +62,7 @@
<load module="mod_valet_parking"/>
<!--<load module="mod_fsk"/>-->
<!--<load module="mod_spy"/>-->
<load module="mod_httapi"/>
<!-- SNOM Module -->
<!--<load module="mod_snom"/>-->
@ -83,12 +84,14 @@
<load module="mod_speex"/>
<load module="mod_h26x"/>
<load module="mod_siren"/>
<!--<load module="mod_isac"/>-->
<!--<load module="mod_celt"/>-->
<!--<load module="mod_opus"/>-->
<!-- File Format Interfaces -->
<load module="mod_sndfile"/>
<load module="mod_native_file"/>
<!-- <load module="mod_shell_stream"/> -->
<!--For icecast/mp3 streams/files-->
<!--<load module="mod_shout"/>-->
<!--For local streams (play all the files in a directory)-->

View File

@ -16,32 +16,32 @@
</cli-keybindings>
<default-ptimes>
<!-- set this to override the 20ms assumption of various codecs in the sdp with no ptime defined -->
<!--<codec name="G729" ptime="40"/>-->
<!-- Set this to override the 20ms assumption of various codecs in the sdp with no ptime defined -->
<!-- <codec name="G729" ptime="40"/> -->
</default-ptimes>
<settings>
<!--Colorize the Console -->
<!-- Colorize the Console -->
<param name="colorize-console" value="true"/>
<!-- Run the timer at 20ms by default and drop down as needed unless you set 1m-timer=true which was previous default -->
<!-- <param name="1ms-timer" value="true"/> -->
<!--
Set the Switch Name for HA environments.
When setting the switch name, it will override the system hostname for all DB and CURL requests
allowing cluster environments such as RHCS to have identical FreeSWITCH configurations but run
as different hostnames.
Set the Switch Name for HA environments.
When setting the switch name, it will override the system hostname for all DB and CURL requests
allowing cluster environments such as RHCS to have identical FreeSWITCH configurations but run
as different hostnames.
-->
<!-- <param name="switchname" value="freeswitch"/>-->
<!-- <param name="switchname" value="freeswitch"/> -->
<!-- maximum number of simo db handles open -->
<!-- Maximum number of simultaneous DB handles open -->
<param name="max-db-handles" value="50"/>
<!-- maximum number of seconds to wait for a new db handle before failing -->
<!-- Maximum number of seconds to wait for a new DB handle before failing -->
<param name="db-handle-timeout" value="10"/>
<!-- minimum idle CPU before refusing calls -->
<!--<param name="min-idle-cpu" value="25"/>-->
<!-- Minimum idle CPU before refusing calls -->
<!-- <param name="min-idle-cpu" value="25"/> -->
<!--
Max number of sessions to allow at any given time.
@ -55,68 +55,112 @@
<param name="sessions-per-second" value="30"/>
<!-- Default Global Log Level - value is one of debug,info,notice,warning,err,crit,alert -->
<param name="loglevel" value="debug"/>
<!-- The min-dtmf-duration specifies the minimum DTMF duration to use on
outgoing events. Events shorter than this will be increased in duration
to match min_dtmf_duration. You cannot configure a dtmf duration on a
profile that is less than this setting. You may increase this value,
but cannot set it lower than 400. This value cannot exceed
max-dtmf-duration. -->
<!--<param name="min-dtmf-duration" value="400"/>-->
<!-- The max-dtmf-duration caps the playout of a DTMF event at the specified
duration. Events exceeding this duration will be truncated to this
duration. You cannot configure a duration on a profile that exceeds
this setting. This setting can be lowered, but cannot exceed 192000.
This setting cannot be set lower than min_dtmf_duration. -->
<!--<param name="max-dtmf-duration" value="192000"/>-->
<!-- The default_dtmf_duration specifies the DTMF duration to use on
originated DTMF events or on events that are received without a
duration specified. This value can be increased or lowered. This
value is lower-bounded by min_dtmf_duration and upper-bounded by
max-dtmf-duration\. -->
<!--<param name="default-dtmf-duration" value="2000"/>-->
<!-- Set the core DEBUG level (0-10) -->
<!-- <param name="debug-level" value="10"/> -->
<!-- SQL Buffer length within rage of 32k to 10m -->
<!-- <param name="sql-buffer-len" value="1m"/> -->
<!-- Maximum SQL Buffer length must be greater than sql-buffer-len -->
<!-- <param name="max-sql-buffer-len" value="2m"/> -->
<!--
The min-dtmf-duration specifies the minimum DTMF duration to use on
outgoing events. Events shorter than this will be increased in duration
to match min_dtmf_duration. You cannot configure a dtmf duration on a
profile that is less than this setting. You may increase this value,
but cannot set it lower than 400. This value cannot exceed
max-dtmf-duration. -->
<!-- <param name="min-dtmf-duration" value="400"/> -->
<!--
The max-dtmf-duration caps the playout of a DTMF event at the specified
duration. Events exceeding this duration will be truncated to this
duration. You cannot configure a duration on a profile that exceeds
this setting. This setting can be lowered, but cannot exceed 192000.
This setting cannot be set lower than min_dtmf_duration. -->
<!-- <param name="max-dtmf-duration" value="192000"/> -->
<!--
The default_dtmf_duration specifies the DTMF duration to use on
originated DTMF events or on events that are received without a
duration specified. This value can be increased or lowered. This
value is lower-bounded by min_dtmf_duration and upper-bounded by
max-dtmf-duration\. -->
<!-- <param name="default-dtmf-duration" value="2000"/> -->
<!--
If you want to send out voicemail notifications via Windows you'll need to change the mailer-app
variable to the setting below:
<param name="mailer-app" value="msmtp"/>
Do not change mailer-app-args.
You will also need to download a sendmail clone for Windows (msmtp). This version works without issue:
http://msmtp.sourceforge.net/index.html. Download and copy the .exe to %winddir%\system32.
You'll need to create a small config file for smtp credentials (host name, authentication, tls, etc.) in
%USERPROFILE%\Application Data\ called "msmtprc.txt". Below is a sample copy of this file:
###################################
# The SMTP server of the provider.
account provider
host smtp.myisp.com
from john@myisp.com
auth login
user johndoe
password mypassword
# Set a default account
account default : provider
###################################
-->
If you want to send out voicemail notifications via Windows you'll need to change the mailer-app
variable to the setting below:
<param name="mailer-app" value="msmtp"/>
Do not change mailer-app-args.
You will also need to download a sendmail clone for Windows (msmtp). This version works without issue:
http://msmtp.sourceforge.net/index.html. Download and copy the .exe to %winddir%\system32.
You'll need to create a small config file for smtp credentials (host name, authentication, tls, etc.) in
%USERPROFILE%\Application Data\ called "msmtprc.txt". Below is a sample copy of this file:
###################################
# The SMTP server of the provider.
account provider
host smtp.myisp.com
from john@myisp.com
auth login
user johndoe
password mypassword
# Set a default account
account default : provider
###################################
-->
<param name="mailer-app" value="sendmail"/>
<param name="mailer-app-args" value="-t"/>
<param name="dump-cores" value="yes"/>
<!-- enable verbose-channel-events to dump every detail about a channel on every event -->
<!--<param name="verbose-channel-events" value="no"/>-->
<!--RTP port range -->
<!--<param name="rtp-start-port" value="16384"/>-->
<!--<param name="rtp-end-port" value="32768"/>-->
<!-- Enable verbose channel events to include every detail about a channel on every event -->
<!-- <param name="verbose-channel-events" value="no"/> -->
<!-- Enable clock nanosleep -->
<!-- <param name="enable-clock-nanosleep" value="true"/> -->
<!-- Enable monotonic timing -->
<!-- <param name="enable-monotonic-timing" value="true"/> -->
<!-- NEEDS DOCUMENTATION -->
<!-- <param name="enable-softtimer-timerfd" value="true"/> -->
<!-- <param name="enable-cond-yield" value="true"/> -->
<!-- <param name="enable-timer-matrix" value="true"/> -->
<!-- <param name="threaded-system-exec" value="true"/> -->
<!-- <param name="tipping-point" value="0"/> -->
<!-- <param name="timer-affinity" value="disabled"/> -->
<!-- NEEDS DOCUMENTATION -->
<!-- RTP port range -->
<!-- <param name="rtp-start-port" value="16384"/> -->
<!-- <param name="rtp-end-port" value="32768"/> -->
<param name="rtp-enable-zrtp" value="true"/>
<!-- <param name="core-db-dsn" value="dsn:username:password" /> -->
<!-- Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for better performance on most linux distro (note, you loose the data if you reboot)) -->
<!--
Allow to specify the sqlite db at a different location (In this example, move it to ramdrive for
better performance on most linux distro (note, you loose the data if you reboot))
-->
<!-- <param name="core-db-name" value="/dev/shm/core.db" /> -->
<!-- The system will create all the db schemas automatically, set this to false to avoid this behaviour-->
<!--<param name="auto-create-schemas" value="true"/>-->
<!-- The system will create all the db schemas automatically, set this to false to avoid this behaviour -->
<!-- <param name="auto-create-schemas" value="true"/> -->
<!-- <param name="auto-clear-sql" value="true"/> -->
<!-- <param name="enable-early-hangup" value="true"/> -->
<!-- <param name="core-dbtype" value="MSSQL"/> -->
<!-- Allow multiple registrations to the same account in the central registration table -->
<!-- <param name="multiple-registrations" value="true"/> -->
</settings>
</configuration>

View File

@ -3,7 +3,7 @@
<profile name="default">
<settings>
<param name="IVR-Maximum-Attempts" value="3" />
<param name="IVR-Entry-Timeout" value="3" />
<param name="IVR-Entry-Timeout" value="3000" />
<param name="Record-Format" value="wav" />
<!--<param name="Record-Sample-Rate" value="8000" />-->
<param name="Record-Silence-Hits" value="4" />

View File

@ -145,7 +145,7 @@
<action application="hash" data="insert/${domain_name}-spymap/${caller_id_number}/${uuid}"/>
<action application="hash" data="insert/${domain_name}-last_dial/${caller_id_number}/${destination_number}"/>
<action application="hash" data="insert/${domain_name}-last_dial/global/${uuid}"/>
<action application="set" data="RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}"/>
<action application="export" data="RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}"/>
</condition>
</extension>

View File

@ -27,7 +27,7 @@
<extension name="outside_call" continue="true">
<condition>
<action application="set" data="outside_call=true"/>
<action application="set" data="RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}"/>
<action application="export" data="RFC2822_DATE=${strftime(%a, %d %b %Y %T %z)}"/>
</condition>
</extension>

View File

@ -9,3 +9,14 @@
</phrases>
</language>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,71 +1,82 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="Sie haben $1 Nachrichten"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="Die Eingabe war ungültig."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sek">
<match>
<action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="Die Eingabe war ungültig."/>
</nomatch>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="Sie haben $1 Nachrichten"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="Die Eingabe war ungültig."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sek">
<match>
<action function="speak-text" data="Sie haben $1 Minuten, $2 Sekunden übrig $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="Die Eingabe war ungültig."/>
</nomatch>
</input>
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,9 +1,10 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -11,8 +12,8 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -20,7 +21,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
</match>
</input>
</macro>
@ -28,7 +29,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
</match>
</input>
</macro>
@ -36,7 +37,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
</match>
</input>
</macro>
@ -44,7 +45,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-abort.wav"/>
<action function="play-file" data="voicemail/vm-abort.wav"/>
</match>
</input>
</macro>
@ -52,19 +53,19 @@
<macro name="voicemail_message_count">
<input pattern="^(1):(.*)$" break_on_match="true">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action application="log" data="INFO $1 $2"/>
<action function="say" data="$1" method="pronounced" type="items" gender="feminine"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action application="log" data="INFO $1 $2"/>
<action function="say" data="$1" method="pronounced" type="items" gender="feminine"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
</match>
</input>
<input pattern="^(\d+):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items" gender="feminine"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items" gender="feminine"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
</match>
</input>
</macro>
@ -72,28 +73,25 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!-- To listen to new messages -->
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to saved messages -->
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- For advanced options -->
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To exit -->
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
<!-- To listen to new messages -->
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to saved messages -->
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- For advanced options -->
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To exit -->
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
@ -101,34 +99,30 @@
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!-- To record a greeting -->
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To choose greeting -->
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record your name -->
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To change password -->
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To return to main menu -->
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<!-- To record a greeting -->
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To choose greeting -->
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record your name -->
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To change password -->
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To return to main menu -->
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -136,7 +130,7 @@
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
</match>
</input>
</macro>
@ -144,15 +138,15 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
</match>
</input>
</macro>
@ -160,12 +154,12 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -173,12 +167,12 @@
<macro name="voicemail_forward_prepend">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -186,9 +180,9 @@
<macro name="voicemail_forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -196,7 +190,7 @@
<macro name="voicemail_invalid_extension">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
</match>
</input>
</macro>
@ -204,43 +198,43 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -248,7 +242,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
</match>
</input>
</macro>
@ -256,7 +250,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
</match>
</input>
</macro>
@ -264,7 +258,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
</match>
</input>
</macro>
@ -272,7 +266,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
</match>
</input>
</macro>
@ -280,9 +274,9 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
</match>
</input>
</macro>
@ -290,9 +284,9 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
</match>
</input>
</macro>
@ -300,7 +294,7 @@
<macro name="voicemail_say_number">
<input pattern="^(\d+)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -308,10 +302,10 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action application="log" data="INFO $1 $2"/>
<action function="say" data="$2" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action application="log" data="INFO $1 $2"/>
<action function="say" data="$2" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -319,7 +313,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -327,39 +321,39 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
<macro name="voicemail_ack">
<macro name="voicemail_ack">
<input pattern="^(too-small)$">
<match>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
</match>
</input>
<input pattern="^(deleted)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(saved)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(emailed)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(marked-urgent)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
</macro>
@ -367,17 +361,17 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action application="log" data="INFO $1"/>
<action function="say" data="$1" method="counted" type="current_date_time"/>
<action application="log" data="INFO $1"/>
<action function="say" data="$1" method="counted" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="voicemail_disk_quota_exceeded">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
</input>
</macro>
@ -404,4 +398,16 @@
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,8 +1,9 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Bitte geben Sie Ihren Benutzernamen ein, gefolgt von $1."/>
<action function="speak-text" data="Bitte geben Sie Ihren Benutzernamen ein, gefolgt von $1."/>
</match>
</input>
</macro>
@ -10,7 +11,7 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Bitte geben Sie Ihr Passwort ein, gefolgt von $1."/>
<action function="speak-text" data="Bitte geben Sie Ihr Passwort ein, gefolgt von $1."/>
</match>
</input>
</macro>
@ -18,7 +19,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Falsche Benutzerdaten."/>
<action function="speak-text" data="Falsche Benutzerdaten."/>
</match>
</input>
</macro>
@ -26,7 +27,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Willkommen in Ihrem Postfach."/>
<action function="speak-text" data="Willkommen in Ihrem Postfach."/>
</match>
</input>
</macro>
@ -34,7 +35,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Auf Wiedersehen."/>
<action function="speak-text" data="Auf Wiedersehen."/>
</match>
</input>
</macro>
@ -42,7 +43,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Zu viele Fehlversuche."/>
<action function="speak-text" data="Zu viele Fehlversuche."/>
</match>
</input>
</macro>
@ -50,12 +51,12 @@
<macro name="voicemail_message_count">
<input pattern="^1:(.*)$">
<match>
<action function="speak-text" data="Sie haben 1 $2 Nachricht im Ordner ${voicemail_current_folder}."/>
<action function="speak-text" data="Sie haben 1 $2 Nachricht im Ordner ${voicemail_current_folder}."/>
</match>
</input>
<input pattern="^([0,2-9]+):(.*)$">
<match>
<action function="speak-text" data="Sie haben $1 $2 Nachrichten im Ordner ${voicemail_current_folder}."/>
<action function="speak-text" data="Sie haben $1 $2 Nachrichten im Ordner ${voicemail_current_folder}."/>
</match>
</input>
</macro>
@ -63,27 +64,25 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Um neue Nachrichten zu hören, drücken Sie $1. Um gespeicherte Nachrichten zu hören, drücken Sie $2, Für erweiterte Optionen, drücken Sie $3. Zum beenden drücken Sie $4."/>
<action function="speak-text"
data="Um neue Nachrichten zu hören, drücken Sie $1. Um gespeicherte Nachrichten zu hören, drücken Sie $2, Für erweiterte Optionen, drücken Sie $3. Zum beenden drücken Sie $4."/>
</match>
</input>
</macro>
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Um eine Ansage aufzunehmen, drücken Sie $1. Um eine Ansage auszuwählen, drücken Sie $2. Um ihren Namen aufzunehmen, drücken Sie $3. Um zum Hauptmenü zurückzukehren, drücken Sie $4."/>
<action function="speak-text"
data="Um eine Ansage aufzunehmen, drücken Sie $1. Um eine Ansage auszuwählen, drücken Sie $2. Um ihren Namen aufzunehmen, drücken Sie $3. Um zum Hauptmenü zurückzukehren, drücken Sie $4."/>
</match>
</input>
</macro>
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Sprechen Sie Ihren Namen nach dem Ton, drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
<action function="speak-text" data="Sprechen Sie Ihren Namen nach dem Ton, drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
</match>
</input>
</macro>
@ -91,8 +90,8 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Um die Aufzeichnung anzuhören, drücken Sie $1. Um die Aufzeichnung zu speichern, drücken Sie $2. Für eine erneute Aufnahme drücken Sie $3."/>
<action function="speak-text"
data="Um die Aufzeichnung anzuhören, drücken Sie $1. Um die Aufzeichnung zu speichern, drücken Sie $2. Für eine erneute Aufnahme drücken Sie $3."/>
</match>
</input>
</macro>
@ -100,8 +99,8 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Drücken Sie $1 um diese Nachricht als wichtig zu markieren. Um fortzufahren drücken Sie $2."/>
<action function="speak-text"
data="Drücken Sie $1 um diese Nachricht als wichtig zu markieren. Um fortzufahren drücken Sie $2."/>
</match>
</input>
</macro>
@ -109,8 +108,8 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Drücken Sie $1 um die Nachricht erneut zu hören. Um die Nachricht zu speichern, drücken Sie $2. Zum löschen der Nachricht drücken Sie $3. Für die Weiterleitung als Email, drücken Sie $4."/>
<action function="speak-text"
data="Drücken Sie $1 um die Nachricht erneut zu hören. Um die Nachricht zu speichern, drücken Sie $2. Zum löschen der Nachricht drücken Sie $3. Für die Weiterleitung als Email, drücken Sie $4."/>
</match>
</input>
</macro>
@ -118,7 +117,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Wählen Sie eine Ansage zwischen 1 und 3."/>
<action function="speak-text" data="Wählen Sie eine Ansage zwischen 1 und 3."/>
</match>
</input>
</macro>
@ -126,7 +125,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Ungültige Eingabe."/>
<action function="speak-text" data="Ungültige Eingabe."/>
</match>
</input>
</macro>
@ -134,7 +133,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Zeichnen Sie Ihre Ansage nach dem Ton auf. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
<action function="speak-text" data="Zeichnen Sie Ihre Ansage nach dem Ton auf. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
</match>
</input>
</macro>
@ -142,7 +141,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Sprechen Sie nach dem Ton. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
<action function="speak-text" data="Sprechen Sie nach dem Ton. Drücken Sie eine beliebige Taste oder hören Sie auf zu sprechen um die Aufnahme zu beenden."/>
</match>
</input>
</macro>
@ -150,7 +149,7 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Ansage $1 ausgewählt."/>
<action function="speak-text" data="Ansage $1 ausgewählt."/>
</match>
</input>
</macro>
@ -158,7 +157,7 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 ist nicht verfügbar."/>
<action function="speak-text" data="$1 ist nicht verfügbar."/>
</match>
</input>
</macro>
@ -166,7 +165,7 @@
<macro name="voicemail_say_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
@ -174,7 +173,7 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(.*)$">
<match>
<action function="speak-text" data="$1 Nachricht Nummer $2."/>
<action function="speak-text" data="$1 Nachricht Nummer $2."/>
</match>
</input>
</macro>
@ -182,7 +181,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -190,7 +189,7 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -198,7 +197,7 @@
<macro name="voicemail_ack">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Nachricht $1"/>
<action function="speak-text" data="Nachricht $1"/>
</match>
</input>
</macro>
@ -206,9 +205,20 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$strftime($1|%A, %B %d %Y, %I %M %p)"/>
<action function="speak-text" data="$strftime($1|%A, %B %d %Y, %I %M %p)"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="Windows-1252"?>
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="demo_ivr_count">
<input pattern="^(\d+)$">
@ -69,7 +67,7 @@
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
<!-- The short version has all the options but not the initial greeting -->
<macro name="demo_ivr_main_menu_short" pause="100">
<macro name="demo_ivr_main_menu_short" pause="100">
<input pattern="(.*)">
<match>
<!-- Menu option 1: Call FreeSWITCH conference-->
@ -132,7 +130,7 @@
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
<!-- The short version has all the options but not the initial greeting -->
<macro name="demo_ivr_sub_menu_short">
<macro name="demo_ivr_sub_menu_short">
<input pattern="(.*)">
<match>
<!-- Menu option *: Return to top menu -->
@ -140,9 +138,19 @@
<action function="play-file" data="ivr/ivr-please.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="play-file" data="digits/star.wav"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,71 +1,82 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="you have $1 messages"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sec">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="you have $1 messages"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sec">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -117,3 +117,14 @@
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -93,3 +93,14 @@
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -3,12 +3,23 @@
<phrases>
<macros>
<X-PRE-PROCESS cmd="include" data="demo/*.xml"/> <!-- Note: this now grabs whole subdir, previously grabbed only demo.xml -->
<!--voicemail_en_tts is purely implemented with tts, we have the files based one that is the default. -->
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
<X-PRE-PROCESS cmd="include" data="ivr/*.xml"/> <!-- IVR and custom phrases go here -->
<!-- voicemail_en_tts is purely implemented with tts, we have the files based one that is the default. -->
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/> <!-- vm/tts.xml if you want to use tts and have cepstral -->
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
<X-PRE-PROCESS cmd="include" data="ivr/*.xml"/> <!-- IVR and custom phrases go here -->
</macros>
<X-PRE-PROCESS cmd="include" data="vm/voicemail_ivr.xml"/>
</phrases>
</language>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,106 +1,145 @@
<include> <!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="queue_position">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="ivr/ivr-you_are_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="ivr/ivr-in_line.wav"/>
</match>
</input>
</macro>
<include>
<macro name="queue_position">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="ivr/ivr-you_are_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="ivr/ivr-in_line.wav"/>
</match>
</input>
</macro>
<macro name="has_called_conf">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="$1"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-has_joined.wav"/>
</match>
</input>
</macro>
<macro name="has_left_conf">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="$1"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-has_left.wav"/>
</match>
</input>
</macro>
<macro name="has_called_conf">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="$1"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-has_joined.wav"/>
</match>
</input>
</macro>
<macro name="enter_dest_number">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-enter_destination_telephone_number.wav"/>
<action function="sleep" data="1000"/>
</match>
</input>
</macro>
<macro name="has_left_conf">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="$1"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-has_left.wav"/>
</match>
</input>
</macro>
<macro name="enter_src_number">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-enter_source_telephone_number.wav"/>
<action function="sleep" data="1000"/>
</match>
</input>
</macro>
<macro name="callers_in_conf">
<input pattern="^1$" break_on_match="true">
<match>
<action function="sleep" data="500"/>
<!--<action function="play-file" data="ivr/ivr-there_is.wav"/>-->
<action function="play-file" data="digits/1.wav"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-listener_in_conference.wav"/>
</match>
</input>
<input pattern="^(\d+)$">
<match>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-there_are.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-members_in_conference.wav"/>
</match>
<nomatch>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-there_are.wav"/>
<action function="play-file" data="digits/0.wav"/>
<action function="sleep" data="100"/>
<action function="play-file" data="conference/conf-members_in_conference.wav"/>
</nomatch>
</input>
</macro>
<macro name="call_forward_set">
<input pattern="^(\d+):(\d+)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
<action function="sleep" data="400"/>
<action function="say" data="$1" method="iterated" type="number"/>
<action function="sleep" data="400"/>
<action function="play-file" data="digits/2.wav"/>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
<action function="sleep" data="400"/>
<action function="say" data="$2" method="iterated" type="number"/>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-call_forwarding_has_been_set.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
<macro name="enter_dest_number">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-enter_destination_telephone_number.wav"/>
<action function="sleep" data="1000"/>
</match>
</input>
</macro>
<macro name="call_forward_cancel">
<input pattern="^(\d+)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
<action function="sleep" data="400"/>
<action function="say" data="$1" method="iterated" type="number"/>
<action function="play-file" data="ivr/ivr-call_forwarding_has_been_cancelled.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
<macro name="enter_src_number">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-enter_source_telephone_number.wav"/>
<action function="sleep" data="1000"/>
</match>
</input>
</macro>
<macro name="screen_confirm">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-call_from.wav"/>
<action function="sleep" data="250"/>
<!-- Note, be sure to pass in the full path to the file or else!! -->
<action function="play-file" data="$1"/>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-accept_reject_voicemail.wav"/>
<action function="sleep" data="1500"/>
<action function="play-file" data="ivr/ivr-call_from.wav"/>
<action function="sleep" data="250"/>
<action function="play-file" data="$1"/>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-accept_reject_voicemail.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
<macro name="call_forward_set">
<input pattern="^(\d+):(\d+)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
<action function="sleep" data="400"/>
<action function="say" data="$1" method="iterated" type="number"/>
<action function="sleep" data="400"/>
<action function="play-file" data="digits/2.wav"/>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
<action function="sleep" data="400"/>
<action function="say" data="$2" method="iterated" type="number"/>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-call_forwarding_has_been_set.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
<macro name="call_forward_cancel">
<input pattern="^(\d+)$">
<match>
<action function="sleep" data="1000"/>
<action function="play-file" data="ivr/ivr-extension_number.wav"/>
<action function="sleep" data="400"/>
<action function="say" data="$1" method="iterated" type="number"/>
<action function="play-file" data="ivr/ivr-call_forwarding_has_been_cancelled.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
<macro name="screen_confirm">
<input pattern="^(.*)$">
<match>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-call_from.wav"/>
<action function="sleep" data="250"/>
<!-- Note, be sure to pass in the full path to the file or else!! -->
<action function="play-file" data="$1"/>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-accept_reject_voicemail.wav"/>
<action function="sleep" data="1500"/>
<action function="play-file" data="ivr/ivr-call_from.wav"/>
<action function="sleep" data="250"/>
<action function="play-file" data="$1"/>
<action function="sleep" data="500"/>
<action function="play-file" data="ivr/ivr-accept_reject_voicemail.wav"/>
<action function="sleep" data="1500"/>
</match>
</input>
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,9 +1,10 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -11,8 +12,8 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -20,7 +21,23 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
</match>
</input>
</macro>
<macro name="voicemail_change_pass_success">
<input pattern="(.*)">
<match>
<action function="play-file" data="ivr/ivr-Thank_you.wav"/>
</match>
</input>
</macro>
<macro name="voicemail_change_pass_fail">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
</match>
</input>
</macro>
@ -28,7 +45,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
</match>
</input>
</macro>
@ -36,7 +53,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
</match>
</input>
</macro>
@ -44,7 +61,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-abort.wav"/>
<action function="play-file" data="voicemail/vm-abort.wav"/>
</match>
</input>
</macro>
@ -52,18 +69,18 @@
<macro name="voicemail_message_count">
<input pattern="^(1):(.*)$" break_on_match="true">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
</match>
</input>
<input pattern="^(\d+):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
</match>
</input>
</macro>
@ -71,28 +88,28 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!-- To listen to new messages -->
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to new messages -->
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to saved messages -->
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to saved messages -->
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- For advanced options -->
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- For advanced options -->
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To exit -->
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
<!-- To exit -->
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
@ -100,34 +117,34 @@
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!-- To record a greeting -->
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record a greeting -->
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To choose greeting -->
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To choose greeting -->
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record your name -->
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record your name -->
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To change password -->
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To change password -->
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To return to main menu -->
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<!-- To return to main menu -->
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -135,7 +152,7 @@
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
</match>
</input>
</macro>
@ -143,15 +160,15 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
</match>
</input>
</macro>
@ -159,12 +176,12 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -172,12 +189,12 @@
<macro name="voicemail_forward_prepend">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -185,9 +202,9 @@
<macro name="voicemail_forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -195,7 +212,7 @@
<macro name="voicemail_invalid_extension">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
</match>
</input>
</macro>
@ -203,43 +220,43 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -247,7 +264,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
</match>
</input>
</macro>
@ -255,7 +272,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
</match>
</input>
</macro>
@ -263,7 +280,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
</match>
</input>
</macro>
@ -271,7 +288,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
</match>
</input>
</macro>
@ -279,9 +296,9 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
</match>
</input>
</macro>
@ -289,9 +306,9 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
</match>
</input>
</macro>
@ -299,7 +316,7 @@
<macro name="voicemail_say_number">
<input pattern="^(\d+)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -307,17 +324,25 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="$2" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="$2" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="voicemail_say_phone_number">
<input pattern="^000|^$|^[Aa]non|^[Pp]rivate" break_on_match="true">
<match>
<!-- add 'anonymous caller' sound here -->
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="ivr/ivr-this_is_a_call_from.wav"/>
<action function="execute" data="sleep(100)"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(500)"/>
</match>
</input>
</macro>
@ -325,39 +350,39 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
<macro name="voicemail_ack">
<macro name="voicemail_ack">
<input pattern="^(too-small)$">
<match>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
</match>
</input>
<input pattern="^(deleted)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(saved)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(emailed)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(marked-urgent)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
</macro>
@ -365,16 +390,16 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
</match>
</input>
</macro>
<macro name="voicemail_disk_quota_exceeded">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
</input>
</macro>
@ -401,4 +426,16 @@
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,8 +1,9 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="speak-text" data="please enter your i d, followed by $1."/>
<action function="speak-text" data="please enter your i d, followed by $1."/>
</match>
</input>
</macro>
@ -10,7 +11,7 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="speak-text" data="please enter your password, followed by $1."/>
<action function="speak-text" data="please enter your password, followed by $1."/>
</match>
</input>
</macro>
@ -18,7 +19,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="speak-text" data="login incorrect."/>
<action function="speak-text" data="login incorrect."/>
</match>
</input>
</macro>
@ -26,7 +27,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<action function="speak-text" data="welcome to your voicemail."/>
<action function="speak-text" data="welcome to your voicemail."/>
</match>
</input>
</macro>
@ -34,7 +35,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="speak-text" data="goodbye."/>
<action function="speak-text" data="goodbye."/>
</match>
</input>
</macro>
@ -42,7 +43,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="speak-text" data="too many failed attempts."/>
<action function="speak-text" data="too many failed attempts."/>
</match>
</input>
</macro>
@ -50,12 +51,12 @@
<macro name="voicemail_message_count">
<input pattern="^1:(.*)$" break_on_match="true">
<match>
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
</match>
</input>
<input pattern="^(\d+):(.*)$">
<match>
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
</match>
</input>
</macro>
@ -63,27 +64,25 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
<action function="speak-text"
data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
</match>
</input>
</macro>
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
<action function="speak-text"
data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
</match>
</input>
</macro>
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
<action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
</match>
</input>
@ -92,8 +91,8 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
<action function="speak-text"
data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
</match>
</input>
</macro>
@ -101,8 +100,8 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To mark this message urgent, press $1, To continue, press $2."/>
<action function="speak-text"
data="To mark this message urgent, press $1, To continue, press $2."/>
</match>
</input>
</macro>
@ -110,7 +109,7 @@
<macro name="voicemail_invalid_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="speak-text" data="$1 is not a valid extension."/>
<action function="speak-text" data="$1 is not a valid extension."/>
</match>
</input>
</macro>
@ -118,7 +117,7 @@
<macro name="voicemail_forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
<action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
</match>
</input>
</macro>
@ -126,7 +125,7 @@
<macro name="voicemail_forward_prepend">
<input pattern="^([0-9#*])$">
<match>
<action function="speak-text" data="To record an announcement, press $1."/>
<action function="speak-text" data="To record an announcement, press $1."/>
</match>
</input>
</macro>
@ -134,8 +133,8 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To listen to the recording again, press $1, To save the recording, press $2, To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
<action function="speak-text"
data="To listen to the recording again, press $1, To save the recording, press $2, To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
</match>
</input>
</macro>
@ -143,7 +142,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="choose a greeting between 1 and 3."/>
<action function="speak-text" data="choose a greeting between 1 and 3."/>
</match>
</input>
</macro>
@ -151,7 +150,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="invalid value."/>
<action function="speak-text" data="invalid value."/>
</match>
</input>
</macro>
@ -159,7 +158,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
<action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
</match>
</input>
</macro>
@ -167,7 +166,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
<action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
</match>
</input>
</macro>
@ -175,7 +174,7 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="greeting $1 selected."/>
<action function="speak-text" data="greeting $1 selected."/>
</match>
</input>
</macro>
@ -183,7 +182,7 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 is not available."/>
<action function="speak-text" data="$1 is not available."/>
</match>
</input>
</macro>
@ -191,7 +190,7 @@
<macro name="voicemail_say_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
@ -199,7 +198,7 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(.*)$">
<match>
<action function="speak-text" data="$1 message number $2."/>
<action function="speak-text" data="$1 message number $2."/>
</match>
</input>
</macro>
@ -207,7 +206,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -215,7 +214,7 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -223,7 +222,7 @@
<macro name="voicemail_ack">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="message $1"/>
<action function="speak-text" data="message $1"/>
</match>
</input>
</macro>
@ -231,9 +230,20 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,142 +1,142 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macros name="voicemail_ivr">
<include>
<macros name="voicemail_ivr">
<macro name="press_key">
<input pattern="^(.*):(.*)$">
<match>
<action function="play-file" data="$2"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="$2"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="plurial_msg">
<input pattern="^[01]:(.*):(.*)$" break_on_match="true">
<match>
<action function="play-file" data="$1"/>
<action function="play-file" data="$1"/>
</match>
</input>
<input pattern="^.*:(.*):(.*)$" break_on_match="true">
<match>
<action function="play-file" data="$2"/>
<action function="play-file" data="$2"/>
</match>
</input>
</macro>
<macro name="enter_id">
<input pattern="(.+)">
<match>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
<nomatch>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="${VM-Key-Terminator}" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="${VM-Key-Terminator}" method="pronounced" type="name_spelled"/>
</nomatch>
</input>
</input>
</macro>
<macro name="enter_pass">
<input pattern="(.+)">
<match>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
<nomatch>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="${VM-Key-Terminator}" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="${VM-Key-Terminator}" method="pronounced" type="name_spelled"/>
</nomatch>
</input>
</macro>
<macro name="fail_auth">
<input>
<match>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
</match>
</input>
</macro>
<macro name="hello">
<input>
<match>
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
</match>
</input>
</macro>
<macro name="goodbye">
<input>
<match>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
</match>
</input>
</macro>
<macro name="abort">
<input>
<match>
<action function="play-file" data="voicemail/vm-abort.wav"/>
<action function="play-file" data="voicemail/vm-abort.wav"/>
</match>
</input>
</macro>
<macro name="message_count">
<input field="${VM-Total-New-Urgent-Messages}" pattern="^(0)$">
<nomatch>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="${VM-Total-New-Urgent-Messages}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-urgent-new.wav"/>
<action function="phrase" phrase="plurial_msg@voicemail_ivr" data="${VM-Total-New-Urgent-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="${VM-Total-New-Urgent-Messages}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-urgent-new.wav"/>
<action function="phrase" phrase="plurial_msg@voicemail_ivr" data="${VM-Total-New-Urgent-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
</nomatch>
</input>
<input field="${VM-Total-New-Messages}" pattern="^(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="${VM-Total-New-Messages}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-new.wav"/>
<action function="phrase" phrase="plurial_msg@voicemail_ivr" data="${VM-Total-New-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="${VM-Total-New-Messages}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-new.wav"/>
<action function="phrase" phrase="plurial_msg@voicemail_ivr" data="${VM-Total-New-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
</match>
</input>
<input field="${VM-Total-Saved-Messages}" pattern="^(0)$">
<nomatch>
<action function="play-file" data="currency/and.wav"/>
<action function="say" data="${VM-Total-Saved-Messages}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-saved.wav"/>
<action function="phrase" phrase="plurial_msg@voicemail_ivr" data="${VM-Total-Saved-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
<action function="play-file" data="currency/and.wav"/>
<action function="say" data="${VM-Total-Saved-Messages}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-saved.wav"/>
<action function="phrase" phrase="plurial_msg@voicemail_ivr" data="${VM-Total-Saved-Messages}:voicemail/vm-message.wav:voicemail/vm-messages.wav"/>
</nomatch>
</input>
</macro>
<macro name="menu">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Play-New-Messages}:voicemail/vm-listen_new.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Play-Saved-Messages}:voicemail/vm-listen_saved.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Config-Menu}:voicemail/vm-advanced.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Terminator}:voicemail/vm-to_exit.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Play-New-Messages}:voicemail/vm-listen_new.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Play-Saved-Messages}:voicemail/vm-listen_saved.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Config-Menu}:voicemail/vm-advanced.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Terminator}:voicemail/vm-to_exit.wav"/>
</match>
</input>
</macro>
<macro name="config_menu">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-Greeting}:voicemail/vm-to_record_greeting.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Choose-Greeting}:voicemail/vm-choose_greeting.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-Name}:voicemail/vm-record_name2.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Change-Password}:voicemail/vm-change_password.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Menu}:voicemail/vm-main_menu.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-Greeting}:voicemail/vm-to_record_greeting.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Choose-Greeting}:voicemail/vm-choose_greeting.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-Name}:voicemail/vm-record_name2.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Change-Password}:voicemail/vm-change_password.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Menu}:voicemail/vm-main_menu.wav"/>
</match>
</input>
</macro>
<macro name="record_name">
<input>
<match>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
</match>
</input>
</macro>
@ -144,8 +144,8 @@
<macro name="forward_ask_prepend">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Prepend}:voicemail/vm-forward_add_intro.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Forward}:voicemail/vm-send_message_now.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Prepend}:voicemail/vm-forward_add_intro.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Forward}:voicemail/vm-send_message_now.wav"/>
</match>
</input>
</macro>
@ -153,215 +153,214 @@
<macro name="forward_ask_extension">
<input>
<match>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<!-- <action function="phrase" phrase="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="${VM-Key-Terminate}" method="pronounced" type="name_spelled"/>-->
</match>
</input>
</macro>
<macro name="record_file_check">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Listen-File}:voicemail/vm-listen_to_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Save-File}:voicemail/vm-save_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-File}:voicemail/vm-rerecord.wav"/>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<!--<action function="phrase" phrase="play-file" data="voicemail/vm-followed_by.wav"/>-->
<!--<action function="say" data="${VM-Key-Terminate}" method="pronounced" type="name_spelled"/>-->
</match>
</input>
</macro>
<macro name="record_file_check">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Listen-File}:voicemail/vm-listen_to_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Save-File}:voicemail/vm-save_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Record-File}:voicemail/vm-rerecord.wav"/>
</match>
</input>
</macro>
<macro name="record_urgent_check">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Urgent}:voicemail/vm-mark-urgent.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Terminator}:voicemail/vm-continue.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Urgent}:voicemail/vm-mark-urgent.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Terminator}:voicemail/vm-continue.wav"/>
</match>
</input>
</macro>
<macro name="forward_prepend">
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Prepend}:voicemail/vm-forward_add_intro.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Forward}:voicemail/vm-send_message_now.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Prepend}:voicemail/vm-forward_add_intro.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Forward}:voicemail/vm-send_message_now.wav"/>
</match>
</input>
</macro>
<macro name="forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="invalid_extension">
<input>
<match>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
</match>
</input>
</macro>
<macro name="listen_file_check">
<input>
<match>
<!--<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Next-Msg}:voicemail/vm-for_next_msg.wav"/>--> <!-- Not existant in callie recordings -->
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Listen-File}:voicemail/vm-listen_to_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Save-File}:voicemail/vm-save_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Delete-File}:voicemail/vm-delete_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Forward}:voicemail/vm-to_forward.wav"/>
</match>
<!--<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Next-Msg}:voicemail/vm-for_next_msg.wav"/>--> <!-- Not existant in callie recordings -->
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Listen-File}:voicemail/vm-listen_to_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Save-File}:voicemail/vm-save_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Delete-File}:voicemail/vm-delete_recording.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Forward}:voicemail/vm-to_forward.wav"/>
</match>
</input>
<input field="${VM-Message-Email}" pattern="^$">
<nomatch>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Email}:voicemail/vm-forward_to_email.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Email}:voicemail/vm-forward_to_email.wav"/>
</nomatch>
</input>
<input>
<match>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Callback}:voicemail/vm-return_call.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Forward}:voicemail/vm-to_forward.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Callback}:voicemail/vm-return_call.wav"/>
<action function="phrase" phrase="press_key@voicemail_ivr" data="${VM-Key-Main-Forward}:voicemail/vm-to_forward.wav"/>
</match>
</input>
</macro>
<macro name="choose_greeting">
<input>
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
</match>
</input>
</macro>
<macro name="choose_greeting_fail">
<input>
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
</match>
</input>
</macro>
<macro name="record_greeting">
<input>
<match>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
</match>
</input>
</macro>
<macro name="record_message">
<input>
<match>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
</match>
</input>
</macro>
<macro name="greeting_selected">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
</match>
</input>
</macro>
<macro name="play_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
</match>
</input>
</macro>
<macro name="say_number">
<input pattern="^(\d+)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="say_message_number">
<input>
<match>
<action function="play-file" data="voicemail/vm-${VM-Message-Type}.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="${VM-Message-Number}" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-${VM-Message-Type}.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="${VM-Message-Number}" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
<macro name="ack">
<macro name="ack">
<input pattern="^(too-small)$">
<match>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
</match>
</input>
<input pattern="^(undeleted)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(deleted)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(saved)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(emailed)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(marked-urgent)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
</macro>
<macro name="say_date">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
<action function="say" data="$1" method="pronounced" type="short_date_time"/>
</match>
</input>
</macro>
<macro name="say_date_event">
<input>
<match>
@ -369,7 +368,7 @@
</match>
</input>
</macro>
<macro name="play_message">
<input>
<match>
@ -377,7 +376,7 @@
</match>
</input>
</macro>
<macro name="play_recording">
<input>
<match>
@ -385,13 +384,25 @@
</match>
</input>
</macro>
<macro name="disk_quota_exceeded">
<input>
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
</input>
</macro>
</macros>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,18 +1,29 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="play-file" data="tuas.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="messages.wav"/>
</match>
</input>
</macro>
<macro name="timeleft">
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="il reste $1 minutes et $2 secondes"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="play-file" data="tuas.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="messages.wav"/>
</match>
</input>
</macro>
<macro name="timeleft">
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="il reste $1 minutes et $2 secondes"/>
</match>
</input>
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,121 +1,130 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<include>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
</match>
</input>
</macro>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="play-file" data="directory/dir-no_match_entry.wav"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-result_match.wav"/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
</match>
</input>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-to_many_result.wav"/>
</match>
</input>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="play-file" data="directory/dir-no_match_entry.wav"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-result_match.wav"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-to_many_result.wav"/>
</match>
</input>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-no_more_result.wav"/>
</match>
</input>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-no_more_result.wav"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-result_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-result_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-at_extension.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-at_extension.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_next.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_prev.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-to_make_new_search.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_next.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_prev.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-to_make_new_search.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,101 +1,110 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="speak-text" data="Veuillez entrer les premières lettres du nom de famille"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="speak-text" data="Veuillez entrer les premières lettres du prénom"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="pour chercher par prénom, tapez $2"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="pour chercher par nom de famille, tapez $2"/>
</match>
</input>
</macro>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="speak-text" data="Veuillez entrer les premières lettres du nom de famille"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="speak-text" data="Veuillez entrer les premières lettres du prénom"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="pour chercher par prénom, tapez $2"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="pour chercher par nom de famille, tapez $2"/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(1)$">
<match>
<action function="speak-text" data="Vous devez entrer au minimum une lettre du nom de la personne, essayez encore"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Vous devez entrer au minimum $1 lettres du nom de la personne, essayer encore"/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(1)$">
<match>
<action function="speak-text" data="Vous devez entrer au minimum une lettre du nom de la personne, essayez encore"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Vous devez entrer au minimum $1 lettres du nom de la personne, essayer encore"/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="speak-text" data="Votre recherche n'a retournée aucun résultat, essayez encore"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 résultats correspondent à votre recherche"/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="speak-text" data="Votre recherche n'a retournée aucun résultat, essayez encore"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 résultats correspondent à votre recherche"/>
</match>
</input>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Votre recherche retourne trop de résultats, essayer encore"/>
</match>
</input>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Votre recherche retourne trop de résultats, essayer encore"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Fin des résultats."/>
</match>
</input>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Fin des résultats."/>
</match>
</input>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Résultat numéro $1"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="speak-text" data="Pour sélectionner ce nom, tapez $1, pour le nom suivant tapez $2, pour le nom précédent, tapez $3, pour faire une nouvelle recherche, tapez $4"/>
</match>
</input>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Résultat numéro $1"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="au poste $1"/>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="speak-text" data="Pour sélectionner ce nom, tapez $1, pour le nom suivant tapez $2, pour le nom précédent, tapez $3, pour faire une nouvelle recherche, tapez $4"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="au poste $1"/>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -3,10 +3,21 @@
<phrases>
<macros>
<X-PRE-PROCESS cmd="include" data="demo/demo.xml"/>
<!--voicemail_fr_tts is purely implemented with tts, we need a files based implementation too -->
<!-- voicemail_fr_tts is purely implemented with tts, we need a files based implementation too -->
<X-PRE-PROCESS cmd="include" data="vm/sounds.xml"/>
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
<X-PRE-PROCESS cmd="include" data="dir/sounds.xml"/> <!-- dir/tts.xml if you want to use tts and have cepstral -->
</macros>
</phrases>
</language>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,9 +1,9 @@
<?xml version="1.0" encoding="utf-8"?>
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Entrez votre Identification, suivi par $1."/>
<action function="speak-text" data="Entrez votre Identification, suivi par $1."/>
</match>
</input>
</macro>
@ -11,7 +11,7 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Entrez votre code, suivi par $1."/>
<action function="speak-text" data="Entrez votre code, suivi par $1."/>
</match>
</input>
</macro>
@ -19,7 +19,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Identification incorrecte."/>
<action function="speak-text" data="Identification incorrecte."/>
</match>
</input>
</macro>
@ -27,7 +27,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Bienvenue sur votre répondeur."/>
<action function="speak-text" data="Bienvenue sur votre répondeur."/>
</match>
</input>
</macro>
@ -35,7 +35,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Au revoir."/>
<action function="speak-text" data="Au revoir."/>
</match>
</input>
</macro>
@ -43,7 +43,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="speak-text" data="Trop de tentatives ont échouées."/>
<action function="speak-text" data="Trop de tentatives ont échouées."/>
</match>
</input>
</macro>
@ -51,17 +51,17 @@
<macro name="voicemail_message_count">
<input pattern="^([^:]+):urgent-new">
<match>
<action function="speak-text" data="Vous avez $1 nouveaux messages urgents dans le répertoire ${voicemail_current_folder}."/>
<action function="speak-text" data="Vous avez $1 nouveaux messages urgents dans le répertoire ${voicemail_current_folder}."/>
</match>
</input>
<input pattern="^([^:]+):new">
<match>
<action function="speak-text" data="Vous avez $1 nouveaux messages dans le répertoire ${voicemail_current_folder}."/>
<action function="speak-text" data="Vous avez $1 nouveaux messages dans le répertoire ${voicemail_current_folder}."/>
</match>
</input>
<input pattern="^([^:]+):saved">
<match>
<action function="speak-text" data="Vous avez $1 messages sauvegardés dans le répertoire ${voicemail_current_folder}."/>
<action function="speak-text" data="Vous avez $1 messages sauvegardés dans le répertoire ${voicemail_current_folder}."/>
</match>
</input>
</macro>
@ -69,27 +69,25 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Pour écouter les nouveaux messages, tapez $1, Pour écouter les messages enregistrés, tapez $2, Pour les options avancées, tapez $3, pour sortir, tapez $4."/>
<action function="speak-text"
data="Pour écouter les nouveaux messages, tapez $1, Pour écouter les messages enregistrés, tapez $2, Pour les options avancées, tapez $3, pour sortir, tapez $4."/>
</match>
</input>
</macro>
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="pour enregistrer un message d'accueil, tapez $1, Pour choisir votre message d'accueil, tapez $2, Pour enregistrer votre nom, tapez $3, Pour changer votre mot de passe, tapez $4, Pour retourner au menu principal, tapez $5."/>
<action function="speak-text"
data="pour enregistrer un message d'accueil, tapez $1, Pour choisir votre message d'accueil, tapez $2, Pour enregistrer votre nom, tapez $3, Pour changer votre mot de passe, tapez $4, Pour retourner au menu principal, tapez $5."/>
</match>
</input>
</macro>
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="enregistrez votre nom après le bip, puis tapez une touche, ou arrêtez de parler pour arrêter l'enregistrement."/>
<action function="speak-text" data="enregistrez votre nom après le bip, puis tapez une touche, ou arrêtez de parler pour arrêter l'enregistrement."/>
</match>
</input>
@ -98,8 +96,8 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Pour écouter l'enregistrement, tapez $1, pour sauvegarder l'enregistrement, tapez $2, Pour réenregistrer, tapez $3."/>
<action function="speak-text"
data="Pour écouter l'enregistrement, tapez $1, pour sauvegarder l'enregistrement, tapez $2, Pour réenregistrer, tapez $3."/>
</match>
</input>
</macro>
@ -107,8 +105,8 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="Pour indiquer que ce message est urgent, tapez $1, Pour continuer, tapez $2."/>
<action function="speak-text"
data="Pour indiquer que ce message est urgent, tapez $1, Pour continuer, tapez $2."/>
</match>
</input>
</macro>
@ -116,8 +114,8 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])(:(.*))?$">
<match>
<action function="speak-text"
data="Pour réécouter l'enregistrement à nouveau, tapez $1, Pour sauvegarder l'enregistrement, tapez $2, Pour supprimer l'enregistrement, tapez $3, pour transférer l'enregistrement à votre email $8, tapez $4, Pour appeler l'auteur du message, tapez $5, Pour transférer ce message à un autre numéro, tapez $6."/>
<action function="speak-text"
data="Pour réécouter l'enregistrement à nouveau, tapez $1, Pour sauvegarder l'enregistrement, tapez $2, Pour supprimer l'enregistrement, tapez $3, pour transférer l'enregistrement à votre email $8, tapez $4, Pour appeler l'auteur du message, tapez $5, Pour transférer ce message à un autre numéro, tapez $6."/>
</match>
</input>
</macro>
@ -125,7 +123,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="choisissez un message d'accueil entre 1 et 3."/>
<action function="speak-text" data="choisissez un message d'accueil entre 1 et 3."/>
</match>
</input>
</macro>
@ -133,7 +131,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="valeur incorrecte."/>
<action function="speak-text" data="valeur incorrecte."/>
</match>
</input>
</macro>
@ -141,7 +139,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="enregistrez votre message d'accueil après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
<action function="speak-text" data="enregistrez votre message d'accueil après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
</match>
</input>
</macro>
@ -149,7 +147,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="enregistrez votre message après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
<action function="speak-text" data="enregistrez votre message après le bip, puis tapez une touche ou arrêtez de parler pour arrêter l'enregistrement."/>
</match>
</input>
</macro>
@ -157,7 +155,7 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="message d'accueil numéro $1 sélectionné."/>
<action function="speak-text" data="message d'accueil numéro $1 sélectionné."/>
</match>
</input>
</macro>
@ -165,7 +163,7 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 n'est pas disponible."/>
<action function="speak-text" data="$1 n'est pas disponible."/>
</match>
</input>
</macro>
@ -173,7 +171,7 @@
<macro name="voicemail_say_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
@ -181,12 +179,12 @@
<macro name="voicemail_say_message_number">
<input pattern="^new:(.*)$">
<match>
<action function="speak-text" data="nouveau message numéro $1."/>
<action function="speak-text" data="nouveau message numéro $1."/>
</match>
</input>
<input pattern="^saved:(.*)$">
<match>
<action function="speak-text" data="message sauvegardé numéro $1."/>
<action function="speak-text" data="message sauvegardé numéro $1."/>
</match>
</input>
</macro>
@ -194,7 +192,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -202,7 +200,7 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -210,27 +208,27 @@
<macro name="voicemail_ack">
<input pattern="^(too-small)$">
<match>
<action function="speak-text" data="message trop court"/>
<action function="speak-text" data="message trop court"/>
</match>
</input>
<input pattern="^(deleted)$">
<match>
<action function="speak-text" data="message supprimé"/>
<action function="speak-text" data="message supprimé"/>
</match>
</input>
<input pattern="^(saved)$">
<match>
<action function="speak-text" data="message sauvegardé"/>
<action function="speak-text" data="message sauvegardé"/>
</match>
</input>
<input pattern="^(emailed)$">
<match>
<action function="speak-text" data="message envoyé"/>
<action function="speak-text" data="message envoyé"/>
</match>
</input>
<input pattern="^(marked-urgent)$">
<match>
<action function="speak-text" data="message marqué urgent"/>
<action function="speak-text" data="message marqué urgent"/>
</match>
</input>
</macro>
@ -238,9 +236,20 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="${strftime($1|%e/%m/%Y, %H heures %M)}"/>
<action function="speak-text" data="${strftime($1|%e/%m/%Y, %H heures %M)}"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="Windows-1252"?>
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="demo_ivr_count">
<input pattern="^(\d+)$">
@ -69,7 +67,7 @@
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
<!-- The short version has all the options but not the initial greeting -->
<macro name="demo_ivr_main_menu_short" pause="100">
<macro name="demo_ivr_main_menu_short" pause="100">
<input pattern="(.*)">
<match>
<!-- Menu option 1: Call FreeSWITCH conference-->
@ -132,7 +130,7 @@
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
<!-- The short version has all the options but not the initial greeting -->
<macro name="demo_ivr_sub_menu_short">
<macro name="demo_ivr_sub_menu_short">
<input pattern="(.*)">
<match>
<!-- Menu option *: Return to top menu -->
@ -145,4 +143,15 @@
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,71 +1,82 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="you have $1 messages"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sec">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="you have $1 messages"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sec">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,121 +1,130 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter_person.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter_person.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<include>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
</match>
</input>
</macro>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter_person.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter_person.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-result_match.wav"/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-specify_mininum.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
</match>
</input>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-too_many_result.wav"/>
</match>
</input>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="play-file" data="directory/dir-no_matching_results.wav"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-result_match.wav"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-too_many_result.wav"/>
</match>
</input>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-no_more_results.wav"/>
</match>
</input>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-no_more_results.wav"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-result_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-result_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-at_extension.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-at_extension.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_next.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_prev.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-start_new_search.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_next.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_prev.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-start_new_search.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -9,3 +9,14 @@
</phrases>
</language>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,9 +1,10 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -11,8 +12,8 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -20,7 +21,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
</match>
</input>
</macro>
@ -28,7 +29,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
<!--<action function="play-file" data="voicemail/vm-hello.wav"/> -->
</match>
</input>
</macro>
@ -36,7 +37,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
</match>
</input>
</macro>
@ -44,7 +45,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-abort.wav"/>
<action function="play-file" data="voicemail/vm-abort.wav"/>
</match>
</input>
</macro>
@ -52,18 +53,18 @@
<macro name="voicemail_message_count">
<input pattern="^(1):(.*)$" break_on_match="true">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
</match>
</input>
<input pattern="^(\d+):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
</match>
</input>
</macro>
@ -71,28 +72,28 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!-- To listen to new messages -->
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to new messages -->
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to saved messages -->
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To listen to saved messages -->
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- For advanced options -->
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- For advanced options -->
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To exit -->
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
<!-- To exit -->
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
@ -100,34 +101,34 @@
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<!-- To record a greeting -->
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record a greeting -->
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To choose greeting -->
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To choose greeting -->
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record your name -->
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To record your name -->
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To change password -->
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To change password -->
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="execute" data="sleep(100)"/>
<!-- To return to main menu -->
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<!-- To return to main menu -->
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -135,7 +136,7 @@
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
</match>
</input>
</macro>
@ -143,15 +144,15 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
</match>
</input>
</macro>
@ -159,12 +160,12 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -172,12 +173,12 @@
<macro name="voicemail_forward_prepend">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -185,9 +186,9 @@
<macro name="voicemail_forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -195,7 +196,7 @@
<macro name="voicemail_invalid_extension">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
</match>
</input>
</macro>
@ -203,43 +204,43 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_to_email.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-delete_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-return_call.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_forward.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$6" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -247,7 +248,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
</match>
</input>
</macro>
@ -255,7 +256,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
</match>
</input>
</macro>
@ -263,7 +264,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
</match>
</input>
</macro>
@ -271,7 +272,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
</match>
</input>
</macro>
@ -279,9 +280,9 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
</match>
</input>
</macro>
@ -289,9 +290,9 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
</match>
</input>
</macro>
@ -299,7 +300,7 @@
<macro name="voicemail_say_number">
<input pattern="^(\d+)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -307,9 +308,9 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="$2" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="$2" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -317,7 +318,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -325,39 +326,39 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
<macro name="voicemail_ack">
<macro name="voicemail_ack">
<input pattern="^(too-small)$">
<match>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
</match>
</input>
<input pattern="^(deleted)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(saved)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(emailed)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(marked-urgent)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
</macro>
@ -365,16 +366,16 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="voicemail_disk_quota_exceeded">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
<match>
<action function="play-file" data="voicemail/vm-mailbox_full.wav"/>
</match>
</input>
</macro>
@ -401,4 +402,16 @@
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,6 +1,4 @@
<?xml version="1.0" encoding="Windows-1252"?>
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="demo_ivr_count">
<input pattern="^(\d+)$">
@ -66,7 +64,7 @@
<!-- The following macro is the same as demo_ivr_main_menu except it is the "short" version -->
<!-- The short version has all the options but not the initial greeting -->
<macro name="demo_ivr_main_menu_short" pause="250">
<macro name="demo_ivr_main_menu_short" pause="250">
<input pattern="(.*)">
<match>
<!-- Menu option 1: Call FreeSWITCH conference-->
@ -129,7 +127,7 @@
<!-- The following macro is the same as demo_ivr_sub_menu except it is the "short" version -->
<!-- The short version has all the options but not the initial greeting -->
<macro name="demo_ivr_sub_menu_short">
<macro name="demo_ivr_sub_menu_short">
<input pattern="(.*)">
<match>
<!-- Menu option *: Return to top menu -->
@ -142,4 +140,15 @@
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,100 +1,109 @@
<?xml version="1.0" encoding="utf-8"?>
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="saymoney">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="currency"/>
</match>
</input>
</macro>
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="you have $1 messages"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="saydatetime">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="timespec2">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="CURRENT_DATE_TIME"/>
</match>
</input>
</macro>
<macro name="ip-addr-interated">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sec">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="saymoney">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="currency"/>
</match>
</input>
</macro>
<macro name="msgcount">
<input pattern="(.*)">
<match>
<action function="execute" data="sleep(1000)"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<!-- or -->
<!--<action function="speak-text" data="you have $1 messages"/>-->
</match>
</input>
</macro>
<macro name="saydate">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="saydatetime">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
<macro name="timespec">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="time_measurement"/>
</match>
</input>
</macro>
<macro name="timespec2">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="CURRENT_DATE_TIME"/>
</match>
</input>
</macro>
<macro name="ip-addr-interated">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="iterated" type="ip_address"/>
</match>
</input>
</macro>
<macro name="ip-addr">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="ip_address"/>
</match>
</input>
</macro>
<macro name="spell">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="spell-phonetic">
<input pattern="(.*)">
<match>
<action function="say" data="$1" method="pronounced" type="name_phonetic"/>
</match>
</input>
</macro>
<macro name="tts-timeleft">
<!-- The parser will visit each <input> tag and execute the actions in <match> or <nomatch> depending on the pattern param -->
<!-- If the function "break" is encountered all parsing will cease -->
<input pattern="(\d+):(\d+)">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
<action function="break"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
<input pattern="(\d+) min (\d+) sec">
<match>
<action function="speak-text" data="You have $1 minutes, $2 seconds remaining $strftime(%Y-%m-%d)"/>
</match>
<nomatch>
<action function="speak-text" data="That input was invalid."/>
</nomatch>
</input>
</macro>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,121 +1,130 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<include>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
</match>
</input>
</macro>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-enter-person.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-first_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="play-file" data="directory/dir-to_search_by.wav"/>
<action function="play-file" data="directory/dir-last_name.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="play-file" data="directory/dir-no_match_entry.wav"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-result_match.wav"/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-specify_mininum_first.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-letters_of_person_name.wav"/>
</match>
</input>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-to_many_result.wav"/>
</match>
</input>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="play-file" data="directory/dir-no_match_entry.wav"/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="directory/dir-result_match.wav"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-to_many_result.wav"/>
</match>
</input>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-no_more_result.wav"/>
</match>
</input>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-no_more_result.wav"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-result_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-result_number.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-at_extension.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="directory/dir-at_extension.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_next.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_prev.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-to_make_new_search.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="play-file" data="directory/dir-to_select_entry.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_next.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-for_prev.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="directory/dir-to_make_new_search.wav"/>
<action function="play-file" data="directory/dir-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,96 +1,105 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="speak-text" data="Please enter the first few digit of the person last name"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="speak-text" data="Please enter the first few digit of the person first name"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="to search by first name, press $2"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="to search by last name, press $2"/>
</match>
</input>
</macro>
<macro name="directory_intro">
<input pattern="^(last_name)" break_on_match="false">
<match>
<action function="speak-text" data="Please enter the first few digit of the person last name"/>
</match>
</input>
<input pattern="^(first_name)" break_on_match="false">
<match>
<action function="speak-text" data="Please enter the first few digit of the person first name"/>
</match>
</input>
<input pattern="^(last_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="to search by first name, press $2"/>
</match>
</input>
<input pattern="^(first_name):([0-9#*])$" break_on_match="false">
<match>
<action function="speak-text" data="to search by last name, press $2"/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="You need to specify a minimum the first $1 letters of the person name, try again."/>
</match>
</input>
</macro>
<macro name="directory_min_search_digits">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="You need to specify a minimum the first $1 letters of the person name, try again."/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="speak-text" data="Your search match no user on this system, try again."/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 result match your search"/>
</match>
</input>
</macro>
<macro name="directory_result_count">
<input pattern="^0$" break_on_match="true">
<match>
<action function="speak-text" data="Your search match no user on this system, try again."/>
</match>
</input>
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 result match your search"/>
</match>
</input>
</macro>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Your search returned too many result, please try again"/>
</match>
</input>
<macro name="directory_result_count_too_large">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Your search returned too many result, please try again"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="No more result"/>
</match>
</input>
</macro>
<macro name="directory_result_last">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="No more result"/>
</match>
</input>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Result number $1"/>
</match>
</input>
</macro>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="speak-text" data="To select this entry press $1, for the next entry press $2, for the previous entry press $3, to make a new search press $4"/>
</match>
</input>
</macro>
<macro name="directory_result_item">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="Result number $1"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="at extension $1"/>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
<macro name="directory_result_menu">
<input pattern="^([0-9#*]),([0-9#*]),([0-9#*]),([0-9#*])$">
<match>
<action function="speak-text" data="To select this entry press $1, for the next entry press $2, for the previous entry press $3, to make a new search press $4"/>
</match>
</input>
</macro>
<macro name="directory_result_at">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="at extension $1"/>
</match>
</input>
</macro>
<macro name="directory_result_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,4 +1,3 @@
<?xml version="1.0" encoding="utf-8"?>
<!--тестовые файлы Вы звуковые файлы можно взять тут svn co http://svn.freeswitch.ru/bbv/mod_say_ru/ru/ -->
<include>
<language name="ru" sound-prefix="$${sounds_dir}/ru/RU/elena" tts-engine="cepstral" tts-voice="elena">
@ -11,3 +10,14 @@
</phrases>
</language>
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="utf-8"?>
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<!-- <action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
<action function="play-file" data="voicemail/vm-enter_id.wav"/>
<!--<action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
</match>
</input>
</macro>
@ -12,8 +12,8 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<!-- лишнее и так долго <action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
<action function="play-file" data="voicemail/vm-enter_pass.wav"/>
<!-- лишнее и так долго <action function="say" data="$1" method="pronounced" type="name_spelled"/>-->
</match>
</input>
</macro>
@ -21,7 +21,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
<action function="play-file" data="voicemail/vm-fail_auth.wav"/>
</match>
</input>
</macro>
@ -29,7 +29,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-hello.wav"/>
<action function="play-file" data="voicemail/vm-hello.wav"/>
</match>
</input>
</macro>
@ -37,7 +37,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
<action function="play-file" data="voicemail/vm-goodbye.wav"/>
</match>
</input>
</macro>
@ -45,7 +45,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="play-file" data="voicemail/vm-abort.wav"/>
<action function="play-file" data="voicemail/vm-abort.wav"/>
</match>
</input>
</macro>
@ -53,30 +53,30 @@
<macro name="voicemail_message_count">
<input pattern="^(\d+[0,2-9]1|[2-9]1|1):(.*)$"> <!--1, и всё что больше 20-ти 21,31,41 .. -->
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<!-- <action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
<action function="play-file" data="voicemail/vm-$2.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<!--<action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
</match>
</input>
<!-- от 10 до 19 и ноль --> <!-- от 5до 9 и больше 20-ти 25-29 -->
<!-- от 10 до 19 и ноль --> <!-- от 5до 9 и больше 20-ти 25-29 -->
<input pattern="^(\d+1[0-9]|1[0-9]|0|\d+[0-9][0,5-9]|[2-9][0,5-9]|[0,5-9]):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
<action function="play-file" data="voicemail/vm-$2x.wav"/>
<action function="play-file" data="voicemail/vm-messagex.wav"/>
<!-- <action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
<action function="play-file" data="voicemail/vm-$2x.wav"/>
<action function="play-file" data="voicemail/vm-messagex.wav"/>
<!--<action function="play-file" data="voicemail/vm-in_folder.wav"/>-->
</match>
</input>
<input pattern="^(\d+[0,2-9][2-4]|[2-9][2-4]|[2-4]):(.*)$">
<input pattern="^(\d+[0,2-9][2-4]|[2-9][2-4]|[2-4]):(.*)$">
<match>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
<action function="play-file" data="voicemail/vm-$2x.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-in_folder.wav"/>
<action function="play-file" data="voicemail/vm-you_have.wav"/>
<action function="say" data="$1" method="pronounced" type="MESSAGES"/>
<action function="play-file" data="voicemail/vm-$2x.wav"/>
<action function="play-file" data="voicemail/vm-messages.wav"/>
<action function="play-file" data="voicemail/vm-in_folder.wav"/>
</match>
</input>
</macro>
@ -84,50 +84,48 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_new.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_saved.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-advanced.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_phonetic"/>
<action function="play-file" data="voicemail/vm-to_exit.wav"/>
</match>
</input>
</macro>
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-to_record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-choose_greeting.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-record_name2.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$4" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-change_password.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$5" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-main_menu.wav"/>
</match>
</input>
</macro>
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
<action function="play-file" data="voicemail/vm-record_name1.wav"/>
</match>
</input>
</macro>
@ -135,15 +133,15 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-listen_to_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-save_recording.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$3" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-rerecord.wav"/>
</match>
</input>
</macro>
@ -151,12 +149,12 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-mark-urgent.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-continue.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -164,12 +162,12 @@
<macro name="voicemail_forward_prepend">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_add_intro.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-send_message_now.wav"/>
<action function="play-file" data="voicemail/vm-press.wav"/>
<action function="say" data="$2" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -177,9 +175,9 @@
<macro name="voicemail_forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-forward_enter_ext.wav"/>
<action function="play-file" data="voicemail/vm-followed_by.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -187,7 +185,7 @@
<macro name="voicemail_invalid_extension">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
<action function="play-file" data="voicemail/vm-that_was_an_invalid_ext.wav"/>
</match>
</input>
</macro>
@ -239,7 +237,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_choose.wav"/>
</match>
</input>
</macro>
@ -247,7 +245,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
<action function="play-file" data="voicemail/vm-choose_greeting_fail.wav"/>
</match>
</input>
</macro>
@ -255,7 +253,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
<action function="play-file" data="voicemail/vm-record_greeting.wav"/>
</match>
</input>
</macro>
@ -263,7 +261,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
<action function="play-file" data="voicemail/vm-record_message.wav"/>
</match>
</input>
</macro>
@ -271,9 +269,9 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
<action function="play-file" data="voicemail/vm-greeting.wav"/>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-selected.wav"/>
</match>
</input>
</macro>
@ -281,9 +279,9 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
<action function="play-file" data="voicemail/vm-person.wav"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="play-file" data="voicemail/vm-not_available.wav"/>
</match>
</input>
</macro>
@ -291,7 +289,7 @@
<macro name="voicemail_say_number">
<input pattern="^(\d+)$">
<match>
<action function="say" data="$1" method="pronounced" type="items"/>
<action function="say" data="$1" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -299,9 +297,9 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(\d+)$">
<match>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="$2" method="pronounced" type="items"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message_number.wav"/>
<action function="say" data="$2" method="pronounced" type="items"/>
</match>
</input>
</macro>
@ -309,7 +307,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
@ -317,39 +315,39 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
<action function="say" data="$1" method="pronounced" type="name_spelled"/>
</match>
</input>
</macro>
<!-- Note: Update this to marked-urgent,emailed and saved once new sound files are recorded -->
<macro name="voicemail_ack">
<macro name="voicemail_ack">
<input pattern="^(too-small)$">
<match>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
<action function="play-file" data="voicemail/vm-too-small.wav"/>
</match>
</input>
<input pattern="^(deleted)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(saved)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(emailed)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
<input pattern="^(marked-urgent)$">
<match>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
<action function="play-file" data="voicemail/vm-message.wav"/>
<action function="play-file" data="voicemail/vm-$1.wav"/>
</match>
</input>
</macro>
@ -357,9 +355,20 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
<action function="say" data="$1" method="pronounced" type="current_date_time"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -1,8 +1,9 @@
<include><!--This line will be ignored it's here to validate the xml and is optional -->
<include>
<macro name="voicemail_enter_id">
<input pattern="(.*)">
<match>
<action function="speak-text" data="please enter your i d, followed by $1."/>
<action function="speak-text" data="please enter your i d, followed by $1."/>
</match>
</input>
</macro>
@ -10,7 +11,7 @@
<macro name="voicemail_enter_pass">
<input pattern="(.*)">
<match>
<action function="speak-text" data="please enter your password, followed by $1."/>
<action function="speak-text" data="please enter your password, followed by $1."/>
</match>
</input>
</macro>
@ -18,7 +19,7 @@
<macro name="voicemail_fail_auth">
<input pattern="(.*)">
<match>
<action function="speak-text" data="login incorrect."/>
<action function="speak-text" data="login incorrect."/>
</match>
</input>
</macro>
@ -26,7 +27,7 @@
<macro name="voicemail_hello">
<input pattern="(.*)">
<match>
<action function="speak-text" data="welcome to your voicemail."/>
<action function="speak-text" data="welcome to your voicemail."/>
</match>
</input>
</macro>
@ -34,7 +35,7 @@
<macro name="voicemail_goodbye">
<input pattern="(.*)">
<match>
<action function="speak-text" data="goodbye."/>
<action function="speak-text" data="goodbye."/>
</match>
</input>
</macro>
@ -42,7 +43,7 @@
<macro name="voicemail_abort">
<input pattern="(.*)">
<match>
<action function="speak-text" data="too many failed attempts."/>
<action function="speak-text" data="too many failed attempts."/>
</match>
</input>
</macro>
@ -50,12 +51,12 @@
<macro name="voicemail_message_count">
<input pattern="^1:(.*)$" break_on_match="true">
<match>
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
<action function="speak-text" data="you have 1 $1 message in folder ${voicemail_current_folder}."/>
</match>
</input>
<input pattern="^(\d+):(.*)$">
<match>
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
<action function="speak-text" data="you have $1 $2 messages in folder ${voicemail_current_folder}."/>
</match>
</input>
</macro>
@ -63,27 +64,25 @@
<macro name="voicemail_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
<action function="speak-text"
data="To listen to new messages, press $1, To listen to saved messages, press $2, For advanced options, press $3, to exit, press $4."/>
</match>
</input>
</macro>
<macro name="voicemail_config_menu">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
<action function="speak-text"
data="To record a greeting, press $1, To choose a greeting, press $2, To record your name, press $3, to change your password, press $5, to return to the main menu, press $5."/>
</match>
</input>
</macro>
<macro name="voicemail_record_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
<action function="speak-text" data="at the tone, please record your name, press any key or stop talking to end the recording."/>
</match>
</input>
@ -92,8 +91,8 @@
<macro name="voicemail_record_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
<action function="speak-text"
data="To listen to the recording, press $1, To save the recording, press $2, To re record, press $3."/>
</match>
</input>
</macro>
@ -101,8 +100,8 @@
<macro name="voicemail_record_urgent_check">
<input pattern="^([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To mark this message urgent, press $1, To continue, press $2."/>
<action function="speak-text"
data="To mark this message urgent, press $1, To continue, press $2."/>
</match>
</input>
</macro>
@ -110,7 +109,7 @@
<macro name="voicemail_invalid_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="speak-text" data="$1 is not a valid extension."/>
<action function="speak-text" data="$1 is not a valid extension."/>
</match>
</input>
</macro>
@ -118,7 +117,7 @@
<macro name="voicemail_forward_message_enter_extension">
<input pattern="^([0-9#*])$">
<match>
<action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
<action function="speak-text" data="enter the extension you wish to forward to, then press $1"/>
</match>
</input>
</macro>
@ -126,7 +125,7 @@
<macro name="voicemail_forward_prepend">
<input pattern="^([0-9#*])$">
<match>
<action function="speak-text" data="To record an announcement, press $1."/>
<action function="speak-text" data="To record an announcement, press $1."/>
</match>
</input>
</macro>
@ -134,8 +133,8 @@
<macro name="voicemail_listen_file_check">
<input pattern="^([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*]):([0-9#*])$">
<match>
<action function="speak-text"
data="To listen to the recording again, press $1, To save the recording, press $2, To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
<action function="speak-text"
data="To listen to the recording again, press $1, To save the recording, press $2, To delete the recording, press $3, to forward the recording to your email, press $4, to call the caller now, press $5, To forward this message to another extension, press $6."/>
</match>
</input>
</macro>
@ -143,7 +142,7 @@
<macro name="voicemail_choose_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="choose a greeting between 1 and 3."/>
<action function="speak-text" data="choose a greeting between 1 and 3."/>
</match>
</input>
</macro>
@ -151,7 +150,7 @@
<macro name="voicemail_choose_greeting_fail">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="invalid value."/>
<action function="speak-text" data="invalid value."/>
</match>
</input>
</macro>
@ -159,7 +158,7 @@
<macro name="voicemail_record_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
<action function="speak-text" data="record your greeting at the tone, press any key or stop talking to end the recording."/>
</match>
</input>
</macro>
@ -167,7 +166,7 @@
<macro name="voicemail_record_message">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
<action function="speak-text" data="record your message at the tone, press any key or stop talking to end the recording."/>
</match>
</input>
</macro>
@ -175,7 +174,7 @@
<macro name="voicemail_greeting_selected">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="greeting $1 selected."/>
<action function="speak-text" data="greeting $1 selected."/>
</match>
</input>
</macro>
@ -183,7 +182,7 @@
<macro name="voicemail_play_greeting">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1 is not available."/>
<action function="speak-text" data="$1 is not available."/>
</match>
</input>
</macro>
@ -191,7 +190,7 @@
<macro name="voicemail_say_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1"/>
<action function="speak-text" data="$1"/>
</match>
</input>
</macro>
@ -199,7 +198,7 @@
<macro name="voicemail_say_message_number">
<input pattern="^([a-z]+):(.*)$">
<match>
<action function="speak-text" data="$1 message number $2."/>
<action function="speak-text" data="$1 message number $2."/>
</match>
</input>
</macro>
@ -207,7 +206,7 @@
<macro name="voicemail_say_phone_number">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -215,7 +214,7 @@
<macro name="voicemail_say_name">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="$1."/>
<action function="speak-text" data="$1."/>
</match>
</input>
</macro>
@ -223,7 +222,7 @@
<macro name="voicemail_ack">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="message $1"/>
<action function="speak-text" data="message $1"/>
</match>
</input>
</macro>
@ -231,9 +230,20 @@
<macro name="voicemail_say_date">
<input pattern="^(.*)$">
<match>
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
<action function="speak-text" data="${strftime($1|%A, %B %d %Y, %I:%M %p)}"/>
</match>
</input>
</macro>
</include><!--This line will be ignored it's here to validate the xml and is optional -->
</include>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -28,7 +28,7 @@ WORKDIR=/opt/$NAME
CALLEDSCRIPT=`basename $0`
if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME; fi
if [ -r /etc/default/$NAME ]; then . /etc/default/$NAME; fi
if [ "$FREESWITCH_ENABLED" != "true" ]; then
echo "$DESC not enabled yet. Edit /etc/default/$NAME first."
@ -180,5 +180,3 @@ case "$1" in
exit 3
;;
esac
:

View File

@ -31,6 +31,9 @@ freeswitch (1.0.7)
build: unimrcp vs2010 build fixes for new version (r:2dcca5f4)
build: add sqlite to clean on make current or update-clean (r:2366f429)
build: Update windows to use Lame 3.98.4 (r:4349ec00)
build: fix mod_silk build issue (r:6fe6d8d7/FS-3649)
build: Rename AUTOMAKE_OPTS to AUTOMAKE_OPTIONS in several places (r:992eafd0)
build: don't allow using system libcurl on systems that strip out Curl_setopt, we use it (r:36f0a5b8/FS-2936)
codec2: working prototype, still for testing only (r:04ca0751)
config: move limit.conf to db.conf
config: Update VM phrase macros to voice option then action on main, config menus
@ -57,6 +60,7 @@ freeswitch (1.0.7)
config: Fix mod_directory phrase file references to 'dir-press.wav' (correct: vm-press) (r:3ef2692f)
config: bump ru sounds version to 1.0.13 (r:2b1b19bf)
config: Fix eavesdrop so that *0 works as well as 88 as the access code (r:cbfe83cc)
config: change default to short date-time in VM sounds (r:3603a69d)
core: Add RTCP support (FSRTP-14)
core: handle some errors on missing db handle conditions
core: add ... and shutdown as a fail-safe when no modules are loaded
@ -336,6 +340,15 @@ freeswitch (1.0.7)
core: add getGlobalVariable and setGlobalVariable to swig stuff (r:2faaee0e)
core: Fix erroneous "module busy" messages on module unload (r:bad5964b/FS-3589)
core: move code from uuid_kill into core (r:3c9551ee)
core: Directed pickup sends "call completed elsewhere" (r:43ca3ee8/FS-3634)
core: jitter-buffer tweaks (r:e3ade445/FS-3671 and r:599a4543/FS-3672)
core: Add option to disable PLC when using the jitter buffer (r:ba14f95d/FS-3678)
core: Allow fail_on_single_reject to do negated causes, i.e. fail_on_single_reject=!UNALLOCATED_NUMBER (r:522c0d53/FS-3675)
core: move the thing that passes proto_specific_hangup_cause to the core and prefix it with last_bridge_ and also log last_bridge_hangup_cauuse for good measure (r:e04f9ba9)
core: Add CHANNEL_EXECUTE to the list of default "verbose events" (r:ff7432d9/FS-3680)
core: fix queued dtmf on channels with no timer issue (r:bc968ca8)
core: use the non-signal checking version of switch_channel_up/down in the core (r:9ecf187d)
core: Link curl into core (r:74ed2cef)
docs: Major clean up of doxygen generated core API documentation (r:794246e1)
docs: Add libteletone back to core API documentation (r:c35c138d)
embedded languages: Provide core level support for conditional Set Global Variable (r:c017c24b/FSCORE-612)
@ -404,6 +417,7 @@ freeswitch (1.0.7)
libs: Merged OpenZAP and FreeTDM into the FreeSWITCH tree.
libs: Add support for TLS on Windows using openssl (r:1abe3b93/MODSOFIA-92)
libs: fix bsd shell incompatibility (r:e2b85e94/FS-287)
libsndfile: Update libsndfile and edit mod_sndfile.c to support ogg and flac (r:02a604f7/FS-1197)
libsofiasip: Fix random crashes (r:c15ee980/SFSIP-219)
libsofiasip: Fix T.38 bug in sofia_glue (r:2843f1ad/MODSOFIA-94)
libsofiasip: VS2010 sofia posix problem (r:46dd24c2/SFSIP-220)
@ -478,6 +492,7 @@ freeswitch (1.0.7)
mod_callcenter: New strategies: round-robin, random, and 'top-down' (r:2b4b23aa,r:bee247ca)
mod_callcenter: Display an warning when MOH is invalid and resume wait with silence. (r:37b14c9a/FS-2740)
mod_callcenter: Fix member been switch as abandoned when he was pickup by an agent (r:9ff8f53f/FS-3281)
mod_callcenter: Adapt mod_callcenter loopback agent fix to work with commit 2eae19e6 (r:d32ba761/FS-3657)
mod_cdr_mongodb: add MongoDB CDR module (r:a9169199)
mod_cdr_sqlite: initial commit (r:f625fe3b)
mod_cdr_sqlite: config file for mod_cdr_sqlite (r:25bc8fe3)
@ -562,9 +577,14 @@ freeswitch (1.0.7)
mod_conference: remove waste flags from both conference and member and explicitly always send audio from conferences to avoid random interop issues and general discomfort these flags are now deprecated (r:5d77e789)
mod_conference: add conference cdrs to mod_conference (r:127be02d)
mod_conference: add custom kick sound to conference (r:8fde25cc)
mod_conference: Fix bug where not entering PIN allows caller into PIN-protected conference (r:9dd45e35/FS-3661)
mod_conference: fix crash in video-bridge mode (r:4c13e7c0)
mod_curl: use method=post when post requested (r:c6a4ddd0/FSMOD-69)
mod_db: fix stack corruption (MODAPP-407)
mod_dialplan_xml: Add in the INFO log the caller id number when processing a request (Currenly only show the caller name) (r:e1df5e13)
mod_dialplan_xml: Add <regex> tag for OR logic in XML dialplan (r:c1615dbb/FS-3655)
mod_dialplan_xml: add xor to regex attr (r:7c7b0068/FS-3655)
mod_dialplan_xml: add tod_tz_offset variable to set to the integer value of the tz offset or the tz-offset tag on a per-tag basis (r:65a75664)
mod_dingaling: make mod_dingaling compat with google's new free phonecalls thing (r:ba0a2a32)
mod_dingaling: make dingaling work with google voice inbound too (r:4ee68141)
mod_dingaling: Fix crash when testing the new gv-dingaling with around 24 concurrent calls (r:73e1ec5e/FSCORE-667)
@ -602,6 +622,8 @@ freeswitch (1.0.7)
mod_dptools: fix seg on user_recurse_variables reported on the mailing list (r:01b2bd04)
mod_dptools: add digit_action_set_target app that can set the target (direction of the dtmf flow and subsequent channel who gets the events) to self or peer (bridged channel when possible) (r:cf9859ea)
mod_dptools: get rid of digit_action_set target and add target,bind_target params to bind_digit_action (r:42b64ccd)
mod_dptools: add flags to digit bindings (r:d93ed90b)
mod_dptools: New dialplan app: play_and_detect_speech (r:34338e5a/FS-3692)
mod_easyroute: Fix possible segfaults and memory leak during unload, and add new setting odbc-retries (r:7fbc47f8/FS-2973)
mod_enum: switch mod_enum to use new portable in-tree version (r:2bbc37e3)
mod_enum: fix race condition between ldns configure creating ldns/util.h and mod_enum (r:87884c5c)
@ -685,6 +707,15 @@ freeswitch (1.0.7)
mod_gsmopen: copy from branch
mod_gsmopen: fix FS-2793, compilation stops (r:355c0dbb/FS-2793)
mod_gsmopen: retry serial initialization if failed, zeroing audio buffers, slower retry on soundcard busy (EAGAIN) (r:c7aefe93)
mod_h323: initial t.38 support. remake logical channel opening. add missing param name in example config. (r:8c58074c)
mod_h323: some t.38 and locking improvements. replace ptrace with switch_log_printf. (r:5efe5c88)
mod_h323: add missing conf praameter (r:0b353d7a)
mod_h323: Add mod_h323 to windows (r:015bcaf6/MODENDP-301)
mod_h323: move PTrace level set to FSH323EndPoint::Initialise. partially apply patch from from Peter Olsson, Remove UnLock() when TryLock() failed and DEBUG_RTP_PACKETS directiv e. (r:7b5803f7)
mod_h323: set network_addr of caller profile to signaling ip address. (requested by Steven Ayre) (r:072bf5ad)
mod_h323: fix race condition on destroying signaling thread in h323 library (r:c22aac0e)
mod_h323: move the switch_rtp_request_port() call from the contructor to FSH323Connection::CreateRealTimeLogicalChannel() - fix rtp port leak. tnx to Peter Olsson. (r:6f4c4ea0)
mod_h323: fix stale calls then fax send/recv in some circumstance (r:00fce043)
mod_hash: free all hashtables on shutdown (r:e76d7d92)
mod_hash: remove unneeded initializer (r:10d468a6)
mod_hash: begin working on remote support (r:c5ad49da)
@ -701,14 +732,6 @@ freeswitch (1.0.7)
mod_hash: limit_remote_thread sending invalid handle to esl_connect_timeout causing core (r:6cdd3e2a/MODAPP-446)
mod_hash: avoid scheduler calling a function on null hash during shutdown (r:8458adeb)
mod_hash: add realm filter to hash_dump db command so that you can quickly dump all entries that belong only to a specific realm without getting the whole db (r:81347126)
mod_h323: initial t.38 support. remake logical channel opening. add missing param name in example config. (r:8c58074c)
mod_h323: some t.38 and locking improvements. replace ptrace with switch_log_printf. (r:5efe5c88)
mod_h323: add missing conf praameter (r:0b353d7a)
mod_h323: Add mod_h323 to windows (r:015bcaf6/MODENDP-301)
mod_h323: move PTrace level set to FSH323EndPoint::Initialise. partially apply patch from from Peter Olsson, Remove UnLock() when TryLock() failed and DEBUG_RTP_PACKETS directiv e. (r:7b5803f7)
mod_h323: set network_addr of caller profile to signaling ip address. (requested by Steven Ayre) (r:072bf5ad)
mod_h323: fix race condition on destroying signaling thread in h323 library (r:c22aac0e)
mod_h323: move the switch_rtp_request_port() call from the contructor to FSH323Connection::CreateRealTimeLogicalChannel() - fix rtp port leak. tnx to Peter Olsson. (r:6f4c4ea0)
mod_http_cache: Initial commit of new module (thanks crienzo) (r:c51acfcc/FS-3597)
mod_java: fix eventConsumer issue and add flush() method (r:7fd3aff6)
mod_java: Allow user defined java methods to be called at startup and shutdown of JVM (r:1339e218/MODLANG-117)
@ -730,6 +753,7 @@ freeswitch (1.0.7)
mod_lcr: fix "as xml" for larger number of arguments (r:3dca2ebb/FS-3283)
mod_lcr: fix malformed XML when has embedded %s (r:5fa9619f/FS-3284)
mod_lcr: initial addition of very basic LRN (r:6d1d4a9c)
mod_logfile: Replace hard-coded file permissions w/ OS default or umask (r:513a9e1a/FS-3710)
mod_loopback: add loopback_bowout_on_execute var to make 1 legged loopback calls bow out of the picture
mod_loopback: only execute app once in app mode (r:64f58f2d)
mod_loopback: fix bug in mod_loopback where bowout=false (r:e9ab5368)
@ -780,7 +804,8 @@ freeswitch (1.0.7)
mod_portaudio: move load_config a bit lower since it needs to use the hashtables (r:1529c0ec)
mod_portaudio: Fix Windows crash (r:94c9cbf6/FS-3498)
mod_portaudio_stream: update to specify the channel index (r:d1169d6e)
mod_protovm: This is a very early new prototype voicemail ivr system. You need to copy the sounds.xml and make it loadale in the language folder and protovm.conf.xml inside the autoload_configs folder. Configs file will most definitly change. Once stabilized, we make it install those file by default. (r:fb549777)
mod_portaudio: mod_portaudio: fix incorrect use of pa input buffer that could lead to garbage audio (r:f2cf68bf)
mod_protovm: Removed by author; replaced by mod_voicemail_ivr
mod_python: add chat app to python (r:08917021)
mod_radius_cdr: Add 'Freeswitch-Direction' av pair (r:a5170df0)
mod_radius_cdr: Add 'Freeswitch-Other-Leg-Id' av pair (r:18d29b46)
@ -818,6 +843,7 @@ freeswitch (1.0.7)
mod_say_de: method PRONOUNCED - grammatical fixes, thank you Christian Benke (r:5d46ddbc/FS-3195)
mod_say_en: introduce new say_string method of doing say and use it in mod_say_en as an example. try: eval ${say_string en.gsm en current_date_time pronounced ${strepoch()}} from the cli with this patch. We can do more to centralize the say things and go back and apply it to other langs, using this method you can set the desired file ext as well which I think is a bounty.... (r:d5ef86d7)
mod_say_en: If you only tell SAY CURRENCY to say 100 it should only say 100 dollars without the "0 cents" (r:426a4e76/FS-2922)
mod_say_en: add "PRONOUNCED_YEAR" so 1985 is "nineteen eighty-five" (r:c0af0a85)
mod_say_es: fix grammar when saying dates and time (r:6bed19b2/MODAPP-429)
mod_say_he: Add Hebrew say module (r:ebd9c83e/FS-3211)
mod_say_ja: initial commit, still needs sound files (r:b2423158/FS-2755)
@ -828,6 +854,7 @@ freeswitch (1.0.7)
mod_shout: bump mod_shout to use mpg123-1.13.2 to hopefully address unwanted calls to exit() and inherit other upstream fixes (r:079f3f73)
mod_shout: add append flag to mod_shout, can append MP3's (r:0419c4e0)
mod_shout: add ability to set bitrate, samplerate, and encoder quality in config file (r:8ea3cbd5/FS-1231)
mod_shout: Initialize Lame sooner for file open (r:44b5cf82/FS-3646)
mod_silk: Fix mod_silk compliance and performance issues (r:2ddbc457/MODCODEC-20)
mod_skinny: Add the missing api files
mod_skinny: add example dialplan and directory config (r:1bfcc17e)
@ -1093,6 +1120,16 @@ freeswitch (1.0.7)
mod_sofia: add presence_map config (r:48416707)
mod_sofia: add lookup params to presence_map (r:ea7f6a18)
mod_sofia: add missing mod_sofia indexes (r:40df8d65)
mod_sofia: When doing direct pickup send CANCEL with reason="call completed elsewhere" (r:6cd6a719/FS-3634)
mod_sofia: Handle "isup-oli" in SIP From: field (similar to "gw" handling) (r:0ed54079/FS-3663)
mod_sofia: Fix NOTIFY expiry time to conform to RFC 3265 (r:42c69c04/FS-3685)
mod_sofia: Preserve VIA headers in sofia recovery (r:5a6231b6/FS-3686)
mod_sofia: Add respond 503 "Maximum Calls In Progress" param for incoming SIP OPTIONS when busy (r:a891514c/FS-3697)
mod_sofia: don't list all registrations when doing "sofia status profile foo" (use 'reg' option instead) (r:00e381f1/FS-3699)
mod_sofia: Fix typo and possible memory corruption in sofia presence (r:ff910276/FS-3706)
mod_sofia: comment out optional Require header from re-invites for the sake of interop with testy t.38 terminals (r:58c3c3a0)
mod_sofia: Set reg and invite auto failures to loglevel debug10 to satisfy Fail2ban (r:35112f22/FS-3586)
mod_sofia: Fix segfault on malformed NOTIFY (r:82807998/FS-3718)
mod_soundtouch: updated soundtouch to library 1.5.0 to fix gcc > 4.3 incompatibilities (r:dfb5c629)
mod_soundtouch: Update soundtouch to 1.6.0 to fix FS-3634 (r:d8ae59fd/FS-3634)
mod_spandsp: initial checkin of mod_fax/mod_voipcodecs merge into mod_spandsp (r:fa9a59a8)
@ -1143,6 +1180,7 @@ freeswitch (1.0.7)
mod_valet_parking: valet_info now returns uuid properly (r:34ddeb75/FS-3613)
mod_valet_parking: add presence to mod_valet_parking subscribe to the lot name for general stats or individual slots to monitor with park+ prefix *note* this used to be used in mod_fifo which now will use queue+ going forward (r:9daa42c1)
mod_valet_parking: lower token freq to 5, put it in a define and have more obvious warning about full lots (r:2f786a07)
mod_valet_parking: make auto unpark choose the one waiting the longest instead of the earliest ext val (r:00cf5aed)
mod_voicemail: Fix vm_prefs profile lock (MODAPP-417)
mod_voicemail: add 'vm-enabled' param (default true)
mod_voicemail: fix vm msg being deleted when pressing key to forward to email (MODAPP-403)
@ -1167,6 +1205,9 @@ freeswitch (1.0.7)
mod_voicemail: use vm_email as notification address if vm_notify_email isn't set (that behavior was in voicemail_leave_main but not in deliver_vm) (r:8974f9d6)
mod_voicemail: better fix for voicemail email key match (r:aff4bcbe/FS-3080)
mod_voicemail: Prevent rewind key from breaking out of message playback (r:923a104b/FS-3637)
mod_voicemail: add variable vm_auth_only or option auth_only to voicemail app so you can use it as a pin checker (r:3051480d)
mod_voicemail: fix wrong message count with saved urgent messages (r:54b4b088)
mod_voicemail: add voicemail_formatted_caller_id_number param for templates in vm (r:94b9cc0f)
mod_xml_cdr: add force_process_cdr var to process b leg cdr on a case by case basis when b leg cdr is disabled (XML-17)
mod_xml_cdr: add leg param to query string (XML-24)
mod_xml_cdr: fix locked sessions (XML-26)

View File

@ -186,7 +186,7 @@
</time>
<voicemail>
<prompt phrase="The person at extension" filename="vm-person.wav"/>
<prompt phrase="marked urgent" filename="vm-marked-urgent.wav"/>
<prompt phrase="marked urgent" filename="vm-marked_urgent.wav"/>
<prompt phrase="emailed" filename="vm-emailed.wav"/>
<prompt phrase="you have" filename="vm-you_have.wav"/>
<prompt phrase="please enter your i d, followed by" filename="vm-enter_id.wav"/>
@ -220,7 +220,7 @@
<prompt phrase="to listen to the recording" filename="vm-listen_to_recording.wav"/>
<prompt phrase="to save the recording" filename="vm-save_recording.wav"/>
<prompt phrase="to rerecord" filename="vm-rerecord.wav"/>
<prompt phrase="to mark this message urgent" filename="vm-mark-urgent.wav"/>
<prompt phrase="to mark this message urgent" filename="vm-mark_urgent.wav"/>
<prompt phrase="to continue" filename="vm-continue.wav"/>
<prompt phrase="to listen to the recording again" filename="vm-listen_to_recording_again.wav"/>
<prompt phrase="to delete the recording" filename="vm-delete_recording.wav"/>
@ -239,8 +239,15 @@
<prompt phrase="I need to record your first and last name. This recording is used throughout the system, including in the company directory." filename="vm-tutorial_record_name.wav"/>
<prompt phrase="Your personal identification number, or 'pin', is used to prevent others from accessing your voicemail messages. Would you like to change it now?" filename="vm-tutorial_change_pin.wav"/>
<prompt phrase="The person you are trying to reach is not available and does not have voicemail." filename="vm-not_available_no_voicemail.wav"/>
<prompt phrase="The PIN you entered is below the minimum length." filename="voicemail/vm-pin_below_minimum_length.wav"/>
<prompt phrase="The minimum PIN length is..." filename="voicemail/vm-minimum_pin_length_is.wav"/>
<prompt phrase="The PIN you entered is below the minimum length." filename="vm-pin_below_minimum_length.wav"/>
<prompt phrase="The minimum PIN length is..." filename="vm-minimum_pin_length_is.wav"/>
<prompt phrase="Your password has been changed." filename="vm-password_has_been_changed.wav"/>
<prompt phrase="Please enter your new password, then press the pound key." filename="vm-enter_new_pin.wav"/>
<prompt phrase="The password you entered is not valid on this system." filename="vm-password_not_valid.wav"/>
<prompt phrase="A password such as '1111' or '1234' is not secure." filename="vm-password_is_not_secure.wav"/>
<prompt phrase="Please choose a password that does not contain all repeating or all consecutive digits." filename="vm-choose_password.wav"/>
<prompt phrase="Remember that your voicemail password is also your Web interface password." filename="vm-voicemail_password_is_web_password.wav"/>
<prompt phrase="Message from..." filename="vm-message_from.wav"/>
</voicemail>
<directory>
<prompt phrase="Please enter the first few letters of the persons" filename="dir-enter_person.wav"/>
@ -291,10 +298,15 @@
<prompt phrase="...listeners in this conference." filename="conf-listeners_in_conference.wav"/>
<prompt phrase="...listener in this conference." filename="conf-listener_in_conference.wav"/>
<prompt phrase="...members in this conference." filename="conf-members_in_conference.wav"/>
<prompt phrase="This conference is in Q and A mode." filename="conference/conf-conference_is_in_qna_mode.wav"/>
<prompt phrase="Q and A mode..." filename="conference/conf-qna_mode.wav"/>
<prompt phrase="Entry sound..." filename="conference/conf-entry_sound.wav"/>
<prompt phrase="Exit sound..." filename="conference/conf-exit_sound.wav"/>
<prompt phrase="This conference is in Q and A mode." filename="conf-conference_is_in_qna_mode.wav"/>
<prompt phrase="Q and A mode..." filename="conf-qna_mode.wav"/>
<prompt phrase="Entry sound..." filename="conf-entry_sound.wav"/>
<prompt phrase="Exit sound..." filename="conf-exit_sound.wav"/>
<prompt phrase="This conference is full. Please contact the conference moderator." filename="conf-conference_is_full.wav"/>
<prompt phrase="Your conference will start shortly. Please stay on the line." filename="conf-conference_will_start_shortly.wav"/>
<prompt phrase="...other persons in this conference." filename="conf-other_persons_conference.wav"/>
<prompt phrase="There is one other person in this conference." filename="conf-one_other_person_conference.wav"/>
<prompt phrase="There is one other member in this conference." filename="conf-one_other_member_conference.wav"/>
</conference>
<ivr>
<prompt phrase="Account number" filename="ivr-account_number.wav"/>
@ -312,7 +324,6 @@
<prompt phrase="Send this caller to voicemail" filename="ivr-send_to_voicemail.wav"/>
<prompt phrase="To speak to a customer service representative" filename="ivr-speak_to_a_customer_service_representative.wav"/>
<prompt phrase="Take a message" filename="ivr-take_a_message.wav"/>
<prompt phrase="Thank you" filename="ivr-thank_you.wav"/>
<prompt phrase="That was an invalid entry" filename="ivr-that_was_an_invalid_entry.wav"/>
<prompt phrase="This is a call from" filename="ivr-this_is_a_call_from.wav"/>
<prompt phrase="This IVR will let you test some of the features..." filename="ivr-this_ivr_will_let_you_test_features.wav"/>
@ -397,7 +408,7 @@
<prompt phrase="The account balance is..." filename="ivr-account_balance_is.wav"/>
<prompt phrase="Thank you for calling. If you know your party's extension, please enter it now. For a directory, press..." filename="ivr-generic_greeting.wav"/>
<prompt phrase="...file..." filename="ivr-file.wav"/>
<prompt phrase="...files..." filename="ivr-files-.wav"/>
<prompt phrase="...files..." filename="ivr-files.wav"/>
<prompt phrase="For a wakeup call..." filename="ivr-for_a_wakeup_call.wav"/>
<prompt phrase="This is your wakeup call." filename="ivr-this_is_your_wakeup_call.wav"/>
<prompt phrase="To request a wakeup call..." filename="ivr-request_wakeup_call.wav"/>
@ -468,8 +479,8 @@
<prompt phrase="...has been answered." filename="ivr-has_been_answered.wav"/>
<prompt phrase="...has been removed." filename="ivr-has_been_removed.wav"/>
<prompt phrase="No questions in queue." filename="ivr-no_questions_in_queue.wav"/>
<prompt phrase="...is now on." filename="ivr/ivr_is_now_on.wav"/>
<prompt phrase="...is now off." filename="ivr/ivr_is_now_off.wav"/>
<prompt phrase="...is now on." filename="ivr-is_now_on.wav"/>
<prompt phrase="...is now off." filename="ivr-is_now_off.wav"/>
<prompt phrase="This phone is not allowed to make external calls." filename="ivr-phone_not_make_external_calls.wav"/>
<prompt phrase="I.D. number..." filename="ivr-id_number.wav"/>
<prompt phrase="To skip these instructions..." filename="ivr-skip_instructions.wav"/>
@ -489,13 +500,34 @@
<prompt phrase="Normal unspecified" filename="ivr-normal_unspecified.wav"/>
<prompt phrase="Incompatible destination" filename="ivr-incompatible_destination.wav"/>
<prompt phrase="Normal clearing" filename="ivr-normal_clearing.wav"/>
<!-- The following phrases still need to be recorded -->
<prompt phrase="This conference is full. Please contact the conference moderator." filename="conf-conference_is_full.wav"/>
<prompt phrase="You do not have permission to perform this action." filename="ivr-not_have_permission.wav"/>
<prompt phrase="You're doing it wrong, but I'll try to connect you anyway. (Douchebag!)" filename="ivr-youre_doing_it_wrong.wav"/>
<prompt phrase="3... 2... 1... WE'RE ASTERISK FREE!!!" filename="ivr-were_asterisk_free"/>
<prompt phrase="" filename=""/>
<prompt phrase="" filename=""/>
<prompt phrase="3... 2... 1... WE'RE ASTERISK FREE!!!" filename="ivr-were_asterisk_free.wav"/>
<prompt phrase="Thank you for calling Douche Telecom, where we make sure that your communications never have that 'not so fresh' feeling!" filename="ivr-douche_telecom.wav"/>
<prompt phrase="To learn more about FreeSWITCH..." filename="ivr-to_learn_more_about_freeswitch.wav"/>
<prompt phrase="Asterisk is like syphilis: it hurts until it's gone." filename="ivr-asterisk_like_syphilis.wav"/>
<prompt phrase="There is..." filename="ivr-there_is.wav"/>
<prompt phrase="That number is on the Do Not Call list." filename="ivr-do_not_call_list.wav"/>
<prompt phrase="The call attempt has been aborted." filename="ivr-call_attempt_aborted.wav"/>
<prompt phrase="To wait for the next available representative, please stay on the line." filename="ivr_to_wait_stay_on_the_line.wav"/>
<prompt phrase="If you would like us to call you back, press..." filename="ivr-if_you_would_like_us_to_call_back.wav"/>
<prompt phrase="It appears that your phone number is..." filename="ivr-it_appears_that_your_phone_number_is.wav"/>
<prompt phrase="Would you like to receive a call at this number?" filename="ivr-would_you_like_to_receive_a_call_at_this_number.wav"/>
<prompt phrase="Please enter the number where we can reach you." filename="ivr-please_enter_the_number_where_we_can_reach_you.wav"/>
<prompt phrase="We will return your call at this number as soon as possible." filename="ivr-we_will_return_your_call_at_this_number.wav"/>
<prompt phrase="Anonymous caller." filename="ivr-anonymous_caller.wav"/>
<prompt phrase="Have your self a slice of free gooey pie!" filename="ivr-freeguipy.wav"/>
<prompt phrase="Learn more at F-R-E-E-G-U-I-P-Y dot O-R-G" filename="ivr-learn_more_freeguipydotorg.wav"/>
<prompt phrase="Something went terribly, terribly wrong... (awkward!)" filename="ivr-terribly_wrong_awkward.wav"/>
<prompt phrase="Well I'll be a monkey's bitch! It *was* that bug!" filename="ivr-it_was_that_bug.wav"/>
<prompt phrase="CONCENTRATE! Focus on the bunny! FOCUS ON THE BUNNY!" filename="ivr-concentrate.wav"/>
<prompt phrase="If you dont like it, you can file a JIRA!" filename="ivr-file_a_jira.wav"/>
<prompt phrase="Allow me to introduce, the founder of FreeSOURCE, Anthony Ministrone." filename="ivr-founder_of_freesource.wav"/>
<prompt phrase="Man, that is cold foolish...COLD Foolish" filename="ivr-cold_foolish.wav"/>
<prompt phrase="Congratulations! You've earned 1500 Trollover minutes this month!" filename="ivr-trollover_minutes.wav"/>
<prompt phrase="Y U NO Silent Drill?!" filename="ivr-yuno_silent_drill.wav"/>
<prompt phrase="Beacuase, the voices where pretty good" filename="ivr-beacuase.wav"/>
<!-- The following phrases still need to be recorded -->
</ivr>
<misc>
<prompt phrase="This call has been secured" filename="call_secured.wav"/>
@ -509,6 +541,14 @@
<prompt phrase="An error has occurred please contact the administrator" filename="error.wav"/>
<prompt phrase="Your call will be terminated in..." filename="misc-your_call_will_be_terminated_in.wav"/>
<prompt phrase="Your call has been terminated." filename="misc-your_call_has_been_terminated.wav"/>
<prompt phrase="To hear about ClueCon..." filename="misc-to_hear_about_cluecon.wav"/>
<prompt phrase="ClueCon is the premier open source telephony developer conference." filename="misc-cluecon_is_premier_conference.wav"/>
<prompt phrase="It is held in downtown Chicago each summer." filename="misc-chicago_each_summer.wav"/>
<prompt phrase="ClueCon brings together a wide range of VoIP engineers, software developers, and business persons." filename="misc-wide_range_of_persons.wav"/>
<prompt phrase="By attending ClueCon, you are showing support not only for FreeSWITCH but also the entire spectrum of open source telephony software." filename="misc-support_open_source_by_attending.wav"/>
<prompt phrase="CudaTel! You know you want one!" filename="misc-cudatel_you_know_you_want_one.wav"/>
<prompt phrase="FreeSWITCH is open source software that is sponsored by OSTAG - the Open Source Telephony Advancement Group." filename="misc-freeswitch_sponsored_by_ostag.wav"/>
<prompt phrase="OSTAG is advancing the next generation of telephony through open-source software. Learn more at www.ostag.org." filename="misc-ostag_learn_more.wav"/>
</misc>
<zrtp>
<!-- base256 prompts for SAS -->
@ -1044,8 +1084,13 @@
</en>
</language>
<!--
For Emacs:
Local Variables:
mode:xml
indent-tabs-mode:nil
tab-width:2
c-basic-offset:2
End:
For VIM:
vim:set softtabstop=2 shiftwidth=2 tabstop=2 expandtab:
-->

View File

@ -178,7 +178,7 @@
<prompt phrase="Bienvenue dans votre boîte aux lettres" filename="vm-hello.wav"/>
<prompt phrase="Au revoir" filename="vm-goodbye.wav"/>
<prompt phrase="Au bip, enregistrez votre nom, puis appuyez sur une touche ou arrêtez de parler pour finir l'enregistrement." filename="vm-record_name1.wav"/>
<prompt phrase="Choisissez un message d'accueil entre 1 et 9" filename="vm-choose_greeting.wav"/>
<prompt phrase="Choisissez un message d'accueil entre 1 et 9" filename="vm-choose_greeting_choose.wav"/>
<prompt phrase="Valeur incorrecte" filename="vm-choose_greeting_fail.wav"/>
<prompt phrase="Trop de tentatives incorrectes" filename="vm-abort.wav"/>
<prompt phrase="Pour modifier votre code d'accès" filename="vm-change_password.wav"/>
@ -210,7 +210,7 @@
<prompt phrase="Pour transférer l'enregistrement vers votre messagerie électronique" filename="vm-forward_to_email.wav"/>
<prompt phrase="message d'accueil" filename="vm-greeting.wav"/>
<prompt phrase="choisi" filename="vm-selected.wav"/>
<prompt phrase="n'est pas disponible" filename="vm-not_avaliable.wav"/>
<prompt phrase="n'est pas disponible" filename="vm-not_available.wav"/>
<prompt phrase="message numéro" filename="vm-message_number.wav"/>
<prompt phrase="effacé" filename="vm-deleted.wav"/>
<prompt phrase="Votre enregistrement est trop court, veuillez réessayer" filename="vm-too-small.wav"/>
@ -223,7 +223,7 @@
<prompt phrase="nom de famille." filename="dir-last_name.wav"/>
<prompt phrase="Pour chercher par" filename="dir-to_search_by.wav"/>
<prompt phrase="prénom." filename="dir-first_name.wav"/>
<prompt phrase="Votre recherche a retourner aucune résultat, essayer de nouveaux." filename="dir-no_match_entry.wav"/>
<prompt phrase="Votre recherche a retourner aucune résultat, essayer de nouveaux." filename="dir-no_matching_results.wav"/>
<prompt phrase="résultats correspond a votre recherche." filename="dir-result_match.wav"/>
<prompt phrase="Votre recherche retourne trop de résultat, essayer de nouveaux." filename="dir-too_many_result.wav"/>
<prompt phrase="Fin des résultats." filename="dir-no_more_results.wav"/>
@ -240,7 +240,7 @@
<conference>
<prompt phrase="NULL" filename="conf-ack.wav" type="tone"/>
<prompt phrase="NULL" filename="conf-nack.wav" type="tone"/>
<prompt phrase="Personne ne peut vous entendre." filename="conf-mute.wav"/>
<prompt phrase="Personne ne peut vous entendre." filename="conf-muted.wav"/>
<prompt phrase="Tout le monde peut vous entendre." filename="conf-unmuted.wav"/>
<prompt phrase="Vous êtes actuellement le seul participant dans cette conférence." filename="conf-alone.wav"/>
<prompt phrase="NULL" filename="conf-perpetual.wav" type="music"/>

View File

@ -896,7 +896,7 @@ fi
# Modules in Alphabetical Order, please keep them that way..
#
######################################################################################################################
%{prefix}/mod/mod_abtraction.so*
%{prefix}/mod/mod_abstraction.so*
%{prefix}/mod/mod_amrwb.so*
%{prefix}/mod/mod_avmd.so*
%{prefix}/mod/mod_blacklist.so*

View File

@ -124,7 +124,7 @@ int Curl_select(curl_socket_t readfd, curl_socket_t writefd, int timeout_ms)
if (writefd != CURL_SOCKET_BAD) {
if (pfd[num].revents & POLLOUT)
ret |= CSELECT_OUT;
if (pfd[num].revents & POLLERR)
if (pfd[num].revents & (POLLERR|POLLHUP))
ret |= CSELECT_ERR;
}

View File

@ -614,8 +614,7 @@ static void clear_line(void)
static void redisplay(void)
{
#ifdef WIN32
#else
#ifndef WIN32
const LineInfo *lf = el_line(el);
const char *c = lf->buffer;
if (!(write_str(prompt_str))) goto done;
@ -1124,7 +1123,6 @@ int main(int argc, char *argv[])
char dft_cfile[512] = "fs_cli.conf";
#endif
char *home = getenv("HOME");
char *term = getenv("TERM");
/* Vars for optargs */
int opt;
static struct option options[] = {
@ -1159,15 +1157,11 @@ int main(int argc, char *argv[])
int argv_quiet = 0;
int loops = 2, reconnect = 0, timeout = 0;
if (term && (!strncasecmp("screen", term, 6) ||
!strncasecmp("vt100", term, 5))) {
feature_level = 1;
} else {
feature_level = 0;
}
#ifdef WIN32
feature_level = 0;
#else
feature_level = 1;
#endif
strncpy(internal_profile.host, "127.0.0.1", sizeof(internal_profile.host));

View File

@ -166,7 +166,7 @@ namespace ManagedEslTest
ESLconnection eslConnection = new ESLconnection(sckClient.Handle.ToInt32());
ESLevent eslEvent = eslConnection.GetInfo();
string strUuid = eslEvent.GetHeader("UNIQUE-ID");
string strUuid = eslEvent.GetHeader("UNIQUE-ID", -1);
eslConnection.SendRecv("myevents");
eslConnection.SendRecv("divert_events on");

View File

@ -741,9 +741,10 @@ ESL_DECLARE(int) esl_wait_sock(esl_socket_t sock, uint32_t ms, esl_poll_t flags)
FD_ZERO(&wfds);
FD_ZERO(&efds);
#ifndef WIN32
/* Wouldn't you rather know?? */
assert(sock <= FD_SETSIZE);
#endif
if ((flags & ESL_POLL_READ)) {

View File

@ -285,7 +285,7 @@ ESL_DECLARE(char *)esl_event_get_body(esl_event_t *event)
ESL_DECLARE(esl_status_t) esl_event_del_header_val(esl_event_t *event, const char *header_name, const char *val)
{
esl_event_header_t *hp, *lp = NULL, *tp;
esl_status_t status = ESL_FALSE;
esl_status_t status = (esl_status_t) ESL_FALSE;
int x = 0;
esl_ssize_t hlen = -1;
unsigned long hash = 0;
@ -875,12 +875,12 @@ ESL_DECLARE(esl_status_t) esl_event_create_json(esl_event_t **event, const char
if (!(cj = cJSON_Parse(json))) {
return ESL_FALSE;
return (esl_status_t) ESL_FALSE;
}
if (esl_event_create(&new_event, ESL_EVENT_CLONE) != ESL_SUCCESS) {
cJSON_Delete(cj);
return ESL_FALSE;
return (esl_status_t) ESL_FALSE;
}
for (cjp = cj->child; cjp; cjp = cjp->next) {

View File

@ -1 +1 @@
Fri Oct 3 17:54:41 EDT 2008
Fri Feb 3 11:55:29 PST 2012

View File

@ -281,6 +281,253 @@ with the signaling protocols that you can run on top of your I/O interfaces.
</span>
</r2_spans>
<!-- Sangoma ISDN PRI/BRI spans. Requires libsng_isdn to be installed -->
<sangoma_pri_spans>
<span name="wp1">
<!--
Switch emulation/Variant
Possible values are:
national
4ess
5ess
qsig
euroisdn
ntt
<param name="switchtype" value="national"/>
-->
<!--
Signalling
Possible values are:
net
cpe
<param name="signalling" value="cpe"/>
-->
<!--
Overlap - whether to support overlap receive
Possible values are: Yes/No
<param name="overlap" value="yes"/>
-->
<!--
Facility - whether to support facility messages
Possible values are: Yes/No
<param name="facility" value="yes"/>
-->
<!--
Minimum Digits
In overlap receive mode.
Minimum number of digits to receive before sending notification
to the dialplan
Possible values are: <Any digit>
<param name="min-digits" value="8"/>
-->
<!--
TEI - default value for Terminal Equipment Identifier.
Used in Point-to-point connections
Possible values are: <1-127>
<param name="tei" value="0"/>
-->
<!--
Type of Number (TON)
Set the TON on outbound calls
Possible values are:
unknown
international
national
network-specific
subscriber-number
abbreviated-number
<param name="outbound-called-ton" value="unknown"/>
<param name="outbound-calling-ton" value="unknown"/>
<param name="outbound-rdnis-ton" value="unknown"/>
-->
<!--
Numbering Plan Indendification (NPI)
Set the NPI on outbound calls
Possible values are:
unknown
isdn
data
telex
national
private
reserved
<param name="outbound-called-npi" value="unknown"/>
<param name="outbound-calling-npi" value="unknown"/>
<param name="outbound-rdnis-npi" value="unknown"/>
-->
<!--
Bearer Capability - Transfer Capability
Set the Bearer Capability - Transfer Capability on outbound calls
Possible values are:
speech
unrestricted-digital-information
restricted-digital-information
3.1-Khz-audio
7-Khz-audio
15-Khz-audio
video
<param name="outbound-bc-transfer-cap" value="speech"/>
-->
<!--
Bearer Capability - User Layer 1
Set the Bearer Capability - User Layer 1 on outbound calls
Possible values are:
V.110
ulaw
alaw
<param name="outbound-bc-user-layer1" value="speech"/>
-->
<!--
Channel Restart Timeout
If we do not receive a RESTART message within this timeout on link
UP, we will send a channel restart.
<param name="channel-restart-timeout" value="20"/>
-->
<!--
Local Number (MSN)
On incoming calls, we will only respond to this call if
the Called Party Number matches this value.
Note: Up to 8 local numbers can be added per span.
<param name="local-number" value="9054741990"/>
-->
<!--
Facility Timeout
Amount of time to wait for the FACILITY message after a SETUP message is
received
<param name="facility-timeout" value="1"/>
-->
<!--
Transfer Timeout
Amount of time to wait for the remote switch to respond to a transfer request
<param name="transfer-timeout" value="20"/>
-->
<!--
AT&T Transfer - Remove DTMF
Whether to remove DTMF tones received from remote switch when performing
AT&T Transfer.
<param name="att-remove-dtmf" value="yes/no"/>
-->
<!--
Facility Information Element Decoding
Whether to decode contents within Facility IE. You should only disable this option if your custom application has its own Facility IE decoding.
<param name="facility-ie-decode" value="yes/no"/>
-->
<!--
Ignore cause value
When using 5ESS switchtype, whether or not do initiate disconnects based on cause code.
<param name="ignore-cause-value" value="yes/no"/>
-->
<!--
Trace (Interpreted)
Whether or not to enable Q921/Q931 trace on start
<param name="q931-trace" value="yes/no"/>
<param name="q921-trace" value="yes/no"/>
-->
<!--
Trace (Raw)
Whether or not to enable Q921/Q931 trace on start
<param name="q931-raw-trace" value="yes/no"/>
<param name="q921-raw-trace" value="yes/no"/>
-->
<!--
Force sending complete
Will add Sending Complete IE to outgoing SETUP message
By default, enabled on EuroISDN, disabled on US variants.
<param name="force-sending-complete" value="yes/no"/>
-->
<!--
Early Media Override
Assume early media is available, even if Q.931 message does not have
progress indicator IE = in-band data ready
Possible values
on-proceed
on-progress
on-alert
<param name="early-media-override" value="on-alert"/>
-->
<!--
Invert Channel ID Invert Bit
Invert the Channel ID Extend Bit
<param name="chan-id-invert-extend-bit" value="yes/no"/>
-->
<!--
CID Name transmit method
How to transmit Caller ID Name
Possible values:
display-ie
user-user-ie
facility-ie
default (will transmit CID-Name based on variant)
<param name="cid-name-transmit-method" value="default"/>
-->
<!--
CID Name transmit
Whether to transmit Caller ID Name
Possible values:
yes - always send CID-name
no - nether send CID-name
default (will transmit CID-Name based on variant)
<param name="cid-name-transmit-method" value="default"/>
-->
<!--
Q.931 Timers in seconds
Override default Q.931 values
timers:
timer-t301
timer-t302
timer-t303
timer-t304
timer-t305
timer-t306
timer-t307
timer-t308
timer-t310
timer-t312
timer-t313
timer-t314
timer-t316
timer-t318
timer-t319
timer-t322
<param name="timer-t301" value="10"/>
-->
</span>
</sangoma_pri_spans>
<!--
PRI passive tapping spans. Requires patched version from libpri at http://svn.digium.com/svn/libpri/team/moy/tap-1.4
You must also configure FreeTDM with "-with-pritap" (see ./configure help for details)

View File

@ -586,6 +586,7 @@ static switch_status_t channel_on_hangup(switch_core_session_t *session)
break;
case FTDM_CHAN_TYPE_FXS:
{
tokencnt = ftdm_channel_get_token_count(tech_pvt->ftdmchan);
if (!ftdm_channel_call_check_busy(tech_pvt->ftdmchan) && !ftdm_channel_call_check_done(tech_pvt->ftdmchan)) {
if (tokencnt) {
cycle_foreground(tech_pvt->ftdmchan, 0, NULL);
@ -4236,6 +4237,42 @@ end:
return SWITCH_STATUS_SUCCESS;
}
FTDM_CLI_DECLARE(ftdm_cmd_alarms)
{
ftdm_alarm_flag_t alarmbits = FTDM_ALARM_NONE;
uint32_t chan_id = 0;
ftdm_span_t *span;
if (argc < 3) {
print_usage(stream, cli);
goto end;
}
ftdm_span_find_by_name(argv[1], &span);
chan_id = atoi(argv[2]);
if (!span) {
stream->write_function(stream, "-ERR invalid span\n");
} else if (chan_id) {
if(chan_id > ftdm_span_get_chan_count(span)) {
stream->write_function(stream, "-ERR invalid channel\n");
} else {
ftdm_channel_t *chan = ftdm_span_get_channel(span, chan_id);
if (!chan) {
stream->write_function(stream, "-ERR channel not configured\n");
} else {
ftdm_channel_get_alarms(chan, &alarmbits);
if (!strlen(ftdm_channel_get_last_error(chan))) {
stream->write_function(stream, "+OK No alarms\n");
} else {
stream->write_function(stream, "-ERR %s on %s:%d\n", ftdm_channel_get_last_error(chan), argv[1], chan);
}
}
}
}
end:
return SWITCH_STATUS_SUCCESS;
}
FTDM_CLI_DECLARE(ftdm_cmd_sigstatus)
{
ftdm_span_t *span = NULL;
@ -4642,6 +4679,7 @@ static ftdm_cli_entry_t ftdm_cli_options[] =
{ "start", "<span_id|span_name>", "", ftdm_cmd_start_stop },
{ "stop", "<span_id|span_name>", "", ftdm_cmd_start_stop },
{ "reset", "<span_id|span_name> [<chan_id>]", "", ftdm_cmd_reset },
{ "alarms", "<span_id> <chan_id>", "", ftdm_cmd_alarms },
{ "dump", "<span_id|span_name> [<chan_id>]", "", ftdm_cmd_dump },
{ "sigstatus", "get|set <span_id|span_name> [<chan_id>] [<sigstatus>]", "::[set:get", ftdm_cmd_sigstatus },
{ "trace", "<path> <span_id|span_name> [<chan_id>]", "", ftdm_cmd_trace },

View File

@ -255,7 +255,8 @@ FT_DECLARE (int) ftdm_config_get_cas_bits(char *strvalue, unsigned char *outbits
if ('1' == cas_bits[x]) {
*outbits |= bit;
} else if ('0' != cas_bits[x]) {
ftdm_log(FTDM_LOG_ERROR, "Invalid CAS pattern specified: %s, just 0 or 1 allowed for each bit\n");
ftdm_log(FTDM_LOG_ERROR, "Invalid CAS pattern specified: %s, just 0 or 1 allowed for each bit\n",
strvalue);
return -1;
}
bit >>= 1;

View File

@ -149,7 +149,7 @@ static void dump_chan_io_to_file(ftdm_channel_t *fchan, ftdm_io_dump_t *dump, FI
if (dump->wrapped) {
rc = fwrite(&dump->buffer[dump->windex], 1, towrite, file);
if (rc != towrite) {
ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %d out of %d bytes in io dump buffer\n",
ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %"FTDM_SIZE_FMT" out of %"FTDM_SIZE_FMT" bytes in io dump buffer: %s\n",
rc, towrite, strerror(errno));
}
}
@ -157,7 +157,7 @@ static void dump_chan_io_to_file(ftdm_channel_t *fchan, ftdm_io_dump_t *dump, FI
towrite = dump->windex;
rc = fwrite(&dump->buffer[0], 1, towrite, file);
if (rc != towrite) {
ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %d out of %d bytes in io dump buffer: %s\n",
ftdm_log_chan(fchan, FTDM_LOG_ERROR, "only wrote %"FTDM_SIZE_FMT" out of %"FTDM_SIZE_FMT" bytes in io dump buffer: %s\n",
rc, towrite, strerror(errno));
}
}
@ -1174,7 +1174,7 @@ FT_DECLARE(ftdm_status_t) ftdm_span_next_event(ftdm_span_t *span, ftdm_event_t *
status = ftdm_event_handle_oob(*event);
if (status != FTDM_SUCCESS) {
ftdm_log(FTDM_LOG_ERROR, "failed to handle event %d\n", **event);
ftdm_log(FTDM_LOG_ERROR, "failed to handle event %d\n", (*event)->e_type);
}
return status;
}
@ -1188,7 +1188,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_read_event(ftdm_channel_t *ftdmchan, ftdm
ftdm_channel_lock(ftdmchan);
if (!span->fio->channel_next_event) {
ftdm_log(FTDM_LOG_ERROR, "channel_next_event method not implemented in module %s!", span->fio->name);
ftdm_log(FTDM_LOG_ERROR, "channel_next_event method not implemented in module %s!\n", span->fio->name);
status = FTDM_NOTIMPL;
goto done;
}
@ -1204,7 +1204,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_read_event(ftdm_channel_t *ftdmchan, ftdm
status = ftdm_event_handle_oob(*event);
if (status != FTDM_SUCCESS) {
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "failed to handle event %d\n", **event);
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "failed to handle event %d\n", (*event)->e_type);
}
done:
@ -2548,7 +2548,9 @@ FT_DECLARE(ftdm_status_t) _ftdm_call_place(const char *file, const char *func, i
goto done;
}
/* let the user know which channel was picked and which call id was generated */
caller_data->fchan = fchan;
caller_data->call_id = fchan->caller_data.call_id;
done:
ftdm_channel_unlock(fchan);
@ -2978,7 +2980,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
GOTO_STATUS(done, FTDM_FAIL);
}
if (start_chan_io_dump(ftdmchan, &ftdmchan->txdump, size) != FTDM_SUCCESS) {
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to enable output dump of size %d\n", size);
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to enable output dump of size %"FTDM_SIZE_FMT"\n", size);
GOTO_STATUS(done, FTDM_FAIL);
}
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Enabled output dump with size %"FTDM_SIZE_FMT"\n", size);
@ -3010,7 +3012,7 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_command(ftdm_channel_t *ftdmchan, ftdm_co
GOTO_STATUS(done, FTDM_FAIL);
}
dump_chan_io_to_file(ftdmchan, &ftdmchan->rxdump, obj);
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Dumped input of size %d to file %p\n", ftdmchan->rxdump.size, obj);
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Dumped input of size %"FTDM_SIZE_FMT" to file %p\n", ftdmchan->rxdump.size, obj);
GOTO_STATUS(done, FTDM_SUCCESS);
}
break;
@ -3633,7 +3635,7 @@ FT_DECLARE(ftdm_status_t) ftdm_raw_write (ftdm_channel_t *ftdmchan, void *data,
}
if (ftdmchan->fds[FTDM_WRITE_TRACE_INDEX] > -1) {
if ((write(ftdmchan->fds[FTDM_WRITE_TRACE_INDEX], data, dlen)) != dlen) {
ftdm_log(FTDM_LOG_WARNING, "Raw output trace failed to write all of the %"FTDM_SIZE_FMT" bytes\n", dlen);
ftdm_log(FTDM_LOG_WARNING, "Raw output trace failed to write all of the %d bytes\n", dlen);
}
}
write_chan_io_dump(&ftdmchan->txdump, data, dlen);
@ -3679,7 +3681,8 @@ FT_DECLARE(ftdm_status_t) ftdm_raw_read (ftdm_channel_t *ftdmchan, void *data, f
if (ftdmchan->dtmfdbg.file) {
rc = fwrite(data, 1, dlen, ftdmchan->dtmfdbg.file);
if (rc != dlen) {
ftdm_log(FTDM_LOG_WARNING, "DTMF debugger wrote only %d out of %d bytes: %s\n", rc, datalen, strerror(errno));
ftdm_log(FTDM_LOG_WARNING, "DTMF debugger wrote only %"FTDM_SIZE_FMT" out of %"FTDM_SIZE_FMT" bytes: %s\n",
rc, *datalen, strerror(errno));
}
ftdmchan->dtmfdbg.closetimeout--;
if (!ftdmchan->dtmfdbg.closetimeout) {
@ -3898,7 +3901,9 @@ FT_DECLARE(ftdm_status_t) ftdm_channel_process_media(ftdm_channel_t *ftdmchan, v
*(str+mlen) = '\0';
ftdm_copy_string(str, sp, ++mlen);
ftdm_clean_string(str);
ftdm_log(FTDM_LOG_DEBUG, "FSK: TYPE %s LEN %d VAL [%s]\n", ftdm_mdmf_type2str(type), mlen-1, str);
ftdm_log(FTDM_LOG_DEBUG, "FSK: TYPE %s LEN %"FTDM_SIZE_FMT" VAL [%s]\n",
ftdm_mdmf_type2str(type), mlen-1, str);
switch(type) {
case MDMF_DDN:
@ -4574,7 +4579,7 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const
ftdm_assert_return(span->fio != NULL, FTDM_EINVAL, "span with no I/O configured\n");
ftdm_assert_return(span->fio->configure_span != NULL, FTDM_NOTIMPL, "span I/O with no channel configuration implemented\n");
currindex = span->chan_count;
currindex = span->chan_count;
*configured = 0;
*configured = span->fio->configure_span(span, str, chan_config->type, chan_config->name, chan_config->number);
if (!*configured) {
@ -4604,7 +4609,12 @@ FT_DECLARE(ftdm_status_t) ftdm_configure_span_channels(ftdm_span_t *span, const
}
if (chan_config->debugdtmf) {
span->channels[chan_index]->dtmfdbg.requested = 1;
span->channels[chan_index]->dtmfdbg.requested = 1;
}
span->channels[chan_index]->dtmfdetect.duration_ms = chan_config->dtmfdetect_ms;
if (chan_config->dtmf_on_start) {
span->channels[chan_index]->dtmfdetect.trigger_on_start = 1;
}
}
@ -4802,6 +4812,24 @@ static ftdm_status_t load_config(void)
} else if (!strcasecmp(var, "debugdtmf")) {
chan_config.debugdtmf = ftdm_true(val);
ftdm_log(FTDM_LOG_DEBUG, "Setting debugdtmf to '%s'\n", chan_config.debugdtmf ? "yes" : "no");
} else if (!strncasecmp(var, "dtmfdetect_ms", sizeof("dtmfdetect_ms")-1)) {
if (chan_config.dtmf_on_start == FTDM_TRUE) {
chan_config.dtmf_on_start = FTDM_FALSE;
ftdm_log(FTDM_LOG_WARNING, "dtmf_on_start parameter disabled because dtmfdetect_ms specified\n");
}
if (sscanf(val, "%d", &(chan_config.dtmfdetect_ms)) != 1) {
ftdm_log(FTDM_LOG_ERROR, "invalid dtmfdetect_ms: '%s'\n", val);
}
} else if (!strncasecmp(var, "dtmf_on_start", sizeof("dtmf_on_start")-1)) {
if (chan_config.dtmfdetect_ms) {
ftdm_log(FTDM_LOG_WARNING, "dtmf_on_start parameter ignored because dtmf_detect_ms specified\n");
} else {
if (ftdm_true(val)) {
chan_config.dtmf_on_start = FTDM_TRUE;
} else {
chan_config.dtmf_on_start = FTDM_FALSE;
}
}
} else if (!strncasecmp(var, "iostats", sizeof("iostats")-1)) {
if (ftdm_true(val)) {
chan_config.iostats = FTDM_TRUE;

View File

@ -472,7 +472,7 @@ FT_DECLARE(ftdm_status_t) ftdm_interrupt_signal(ftdm_interrupt_t *interrupt)
* otherwise users that never call interrupt wait eventually will
* eventually have the pipe buffer filled */
if ((err = write(interrupt->writefd, "w", 1)) != 1) {
ftdm_log(FTDM_LOG_ERROR, "Failed to signal interrupt: %s\n", errno, strerror(errno));
ftdm_log(FTDM_LOG_ERROR, "Failed to signal interrupt: %s\n", strerror(errno));
return FTDM_FAIL;
}
}

View File

@ -25,6 +25,15 @@
* NOTE: This is intended as a Layer 1 interface only, signaling
* is handled by other modules (e.g. ftmod_libpri or ftmod_isdn).
*/
/*
* TODO:
* - Use a fifo and PH_DATA_CNF for b-channel write polling (drop timerfd)
*
* - Disable L1 idle deactivation on BRI PTMP with IMGL1HOLD ioctl(? optional)
*
* - Add hfcsusb specific state + flag defines and try to do something useful with
* it in misdn_handle_mph_information_ind().
*/
#include <errno.h>
#include <stdlib.h>
@ -91,23 +100,33 @@ typedef enum {
#define MISDN_IS_RAW(x) (x & MISDN_CAPS_RAW)
#define MISDN_IS_HDLC(x) (x & MISDN_CAPS_HDLC)
#define MISDN_MSG_DATA(x) ((void *)((unsigned char *)(x) + MISDN_HEADER_LEN))
const static struct {
const int id;
const char *name;
} misdn_event_types[] = {
{ PH_DATA_REQ, "PH_DATA_REQ" },
{ PH_DATA_IND, "PH_DATA_IND" },
{ PH_DATA_CNF, "PH_DATA_CNF" },
{ PH_CONTROL_REQ, "PH_CONTROL_REQ" },
{ PH_CONTROL_IND, "PH_CONTROL_IND" },
{ PH_CONTROL_CNF, "PH_CONTROL_CNF" },
{ PH_ACTIVATE_REQ, "PH_ACTIVATE_REQ" },
{ PH_ACTIVATE_IND, "PH_ACTIVATE_IND" },
{ PH_ACTIVATE_CNF, "PH_ACTIVATE_CNF" },
{ PH_DEACTIVATE_REQ, "PH_DEACTIVATE_REQ" },
{ PH_DEACTIVATE_IND, "PH_DEACTIVATE_IND" },
{ PH_DEACTIVATE_CNF, "PH_DEACTIVATE_CNF" },
#define MISDN_EVENT_TYPE(x) { x, #x }
MISDN_EVENT_TYPE(PH_DATA_REQ),
MISDN_EVENT_TYPE(PH_DATA_IND),
MISDN_EVENT_TYPE(PH_DATA_CNF),
MISDN_EVENT_TYPE(PH_DATA_E_IND),
MISDN_EVENT_TYPE(PH_CONTROL_REQ),
MISDN_EVENT_TYPE(PH_CONTROL_IND),
MISDN_EVENT_TYPE(PH_CONTROL_CNF),
MISDN_EVENT_TYPE(PH_ACTIVATE_REQ),
MISDN_EVENT_TYPE(PH_ACTIVATE_IND),
MISDN_EVENT_TYPE(PH_ACTIVATE_CNF),
MISDN_EVENT_TYPE(PH_DEACTIVATE_REQ),
MISDN_EVENT_TYPE(PH_DEACTIVATE_IND),
MISDN_EVENT_TYPE(PH_DEACTIVATE_CNF),
MISDN_EVENT_TYPE(MPH_ACTIVATE_REQ),
MISDN_EVENT_TYPE(MPH_ACTIVATE_IND),
MISDN_EVENT_TYPE(MPH_DEACTIVATE_REQ),
MISDN_EVENT_TYPE(MPH_DEACTIVATE_IND),
MISDN_EVENT_TYPE(MPH_INFORMATION_REQ),
MISDN_EVENT_TYPE(MPH_INFORMATION_IND),
#undef MISDN_EVENT_TYPE
};
static const char *misdn_event2str(const int event)
@ -128,6 +147,7 @@ const static struct {
} misdn_control_types[] = {
#define MISDN_CONTROL_TYPE(x) { x, #x }
MISDN_CONTROL_TYPE(DTMF_HFC_COEF),
#undef MISDN_CONTROL_TYPE
};
#if 0 /* unused for now */
@ -189,6 +209,12 @@ struct misdn_chan_private {
#define ftdm_span_io_private(x) ((x)->io_data)
static ftdm_status_t misdn_handle_incoming(ftdm_channel_t *ftdmchan, const char *rbuf, const int size);
static int misdn_handle_mph_information_ind(ftdm_channel_t *chan, const struct mISDNhead *hh, const void *data, const int data_len);
static const char *ftdm_channel_get_type_str(const ftdm_channel_t *chan)
{
return ftdm_chan_type2str(ftdm_channel_get_type(chan));
}
/***********************************************************************************
* mISDN interface functions
@ -432,8 +458,8 @@ static ftdm_status_t misdn_activate_channel(ftdm_channel_t *chan, int activate)
return FTDM_FAIL;
}
//#ifdef MISDN_DEBUG_EVENTS
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN got event '%s' while waiting for %s confirmation\n",
misdn_event2str(hh->prim), (activate) ? "activation" : "deactivation");
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN got event '%s (%#x)' while waiting for %s confirmation\n",
misdn_event2str(hh->prim), hh->prim, (activate) ? "activation" : "deactivation");
//#endif
switch (hh->prim) {
case PH_ACTIVATE_IND: /* success (or not): save last response, */
@ -451,9 +477,14 @@ static ftdm_status_t misdn_activate_channel(ftdm_channel_t *chan, int activate)
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN got '%s' echo while waiting for %s confirmation (id: %#x)\n",
misdn_event2str(hh->prim), (activate) ? "activation" : "deactivation", hh->id);
break;
case MPH_INFORMATION_IND:
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN ignoring event '%s (%#x)' while waiting for %s confirmation\n",
misdn_event2str(hh->prim), hh->prim, (activate) ? "activation" : "deactivation");
misdn_handle_mph_information_ind(chan, hh, MISDN_MSG_DATA(buf), retval - MISDN_HEADER_LEN);
break;
default: /* other messages, ignore */
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN ignoring event '%s' while waiting for %s confirmation\n",
misdn_event2str(hh->prim), (activate) ? "activation" : "deactivation");
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN ignoring event '%s (%#x)' while waiting for %s confirmation\n",
misdn_event2str(hh->prim), hh->prim, (activate) ? "activation" : "deactivation");
break;
}
}
@ -605,50 +636,88 @@ static int misdn_handle_ph_control_ind(ftdm_channel_t *chan, const struct mISDNh
static int misdn_handle_mph_information_ind(ftdm_channel_t *chan, const struct mISDNhead *hh, const void *data, const int data_len)
{
struct misdn_chan_private *priv = ftdm_chan_io_private(chan);
int alarm_flags, value;
if (data_len < sizeof(value)) {
ftdm_log_chan_msg(chan, FTDM_LOG_ERROR, "mISDN MPH_INFORMATION_IND message is too short\n");
/*
* mISDN has some inconsistency issues here.
*
* There are only two drivers that emit MPH_INFORMATION_IND messages,
* hfcsusb and hfcmulti. The former sends a set of ph_info and ph_info_ch structures,
* while the latter just sends an int containing the current L1_SIGNAL_* event id.
*
* The flags and state information in the ph_info and ph_info_ch structures
* are defined in kernel internal hw-specific headers (mISDNhw.h).
*
* Use the payload size to guess the type of message.
*/
if (data_len >= sizeof(struct ph_info)) {
/* complete port status, hfcsusb sends this */
struct ph_info *info = (struct ph_info *)data;
struct ph_info_ch *bch_info = NULL;
if (data_len < (sizeof(*info) + info->dch.num_bch * sizeof(*bch_info))) {
ftdm_log_chan_msg(chan, FTDM_LOG_ERROR, "mISDN MPH_INFORMATION_IND message is too short\n");
return FTDM_FAIL;
}
bch_info = &info->bch[0];
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN port state:\n\tD-Chan state:\t%hu\n\tD-Chan flags:\t%#lx\n\tD-Chan proto:\t%hu\n\tD-Chan active:\t%s\n",
info->dch.state, info->dch.ch.Flags, info->dch.ch.protocol, (info->dch.ch.Flags & (1 << 6)) ? "yes" : "no");
/* TODO: try to translate this to a usable set of alarm flags */
} else if (data_len == sizeof(int)) {
/* alarm info, sent by hfcmulti */
int value = *(int *)data;
int alarm_flags = chan->alarm_flags;
if (data_len < sizeof(value)) {
ftdm_log_chan_msg(chan, FTDM_LOG_ERROR, "mISDN MPH_INFORMATION_IND message is too short\n");
return FTDM_FAIL;
}
switch (value) {
case L1_SIGNAL_LOS_ON:
alarm_flags |= FTDM_ALARM_RED;
break;
case L1_SIGNAL_LOS_OFF:
alarm_flags &= ~FTDM_ALARM_RED;
break;
case L1_SIGNAL_AIS_ON:
alarm_flags |= FTDM_ALARM_AIS;
break;
case L1_SIGNAL_AIS_OFF:
alarm_flags &= ~FTDM_ALARM_AIS;
break;
case L1_SIGNAL_RDI_ON:
alarm_flags |= FTDM_ALARM_YELLOW;
break;
case L1_SIGNAL_RDI_OFF:
alarm_flags &= ~FTDM_ALARM_YELLOW;
break;
case L1_SIGNAL_SLIP_RX:
priv->slip_rx_cnt++;
break;
case L1_SIGNAL_SLIP_TX:
priv->slip_tx_cnt++;
break;
default:
ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN unknown MPH_INFORMATION_IND signal: %#04x\n",
value);
return FTDM_FAIL;
}
/* check whether alarm status has changed, update channel flags if it has */
if ((value = (alarm_flags ^ chan->alarm_flags))) {
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN alarm flags have changed %#x -> %#x\n",
chan->alarm_flags, alarm_flags);
chan->alarm_flags ^= value;
}
} else {
ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN sent MPH_INFORMATION_IND message with unknown size %d\n",
data_len);
return FTDM_FAIL;
}
value = *(int *)data;
alarm_flags = chan->alarm_flags;
switch (value) {
case L1_SIGNAL_LOS_ON:
alarm_flags |= FTDM_ALARM_RED;
break;
case L1_SIGNAL_LOS_OFF:
alarm_flags &= ~FTDM_ALARM_RED;
break;
case L1_SIGNAL_AIS_ON:
alarm_flags |= FTDM_ALARM_AIS;
break;
case L1_SIGNAL_AIS_OFF:
alarm_flags &= ~FTDM_ALARM_AIS;
break;
case L1_SIGNAL_RDI_ON:
alarm_flags |= FTDM_ALARM_YELLOW;
break;
case L1_SIGNAL_RDI_OFF:
alarm_flags &= ~FTDM_ALARM_YELLOW;
break;
case L1_SIGNAL_SLIP_RX:
priv->slip_rx_cnt++;
break;
case L1_SIGNAL_SLIP_TX:
priv->slip_tx_cnt++;
break;
default:
ftdm_log_chan(chan, FTDM_LOG_ERROR, "mISDN unknown MPH_INFORMATION_IND message: %d\n",
value);
return FTDM_FAIL;
}
if ((value = (alarm_flags ^ chan->alarm_flags))) {
ftdm_log_chan(chan, FTDM_LOG_DEBUG, "mISDN alarm flags have changed %#x -> %#x\n",
chan->alarm_flags, alarm_flags);
chan->alarm_flags ^= value;
}
return FTDM_SUCCESS;
}
@ -728,7 +797,7 @@ static FIO_OPEN_FUNCTION(misdn_open)
break;
default:
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "mISDN invalid channel type '%s'\n",
ftdm_channel_get_type(ftdmchan));
ftdm_channel_get_type_str(ftdmchan));
break;
}
return FTDM_SUCCESS;

View File

@ -391,7 +391,7 @@ static void *ftdm_sangoma_isdn_io_run(ftdm_thread_t *me, void *obj)
case FTDM_SUCCESS:
/* Check if there are any channels that have data available */
for (citer = ftdm_span_get_chan_iterator(span, chaniter); citer; citer = ftdm_iterator_next(citer)) {
len = 1000;
len = sizeof(data);
ftdmchan = ftdm_iterator_current(citer);
if (FTDM_IS_VOICE_CHANNEL(ftdmchan)) {
if (ftdm_test_flag(ftdmchan, FTDM_CHANNEL_RX_DISABLED)) {

View File

@ -71,8 +71,6 @@
#define MI_NOTIFY 0x14
#endif
/* TODO: rename all *_cc_* to *_an_* */
typedef enum {
FLAG_RESET_RX = (1 << 0),
FLAG_RESET_TX = (1 << 1),
@ -262,7 +260,7 @@ typedef struct sngisdn_span_data {
uint8_t setup_arb;
uint8_t facility_ie_decode;
uint8_t facility;
int8_t facility_timeout;
int32_t facility_timeout;
uint8_t att_remove_dtmf;
int32_t transfer_timeout;
uint8_t num_local_numbers;
@ -277,6 +275,24 @@ typedef struct sngisdn_span_data {
uint8_t force_sending_complete;
uint8_t cid_name_method;
uint8_t send_cid_name;
int32_t timer_t301;
int32_t timer_t302;
int32_t timer_t303;
int32_t timer_t304;
int32_t timer_t305;
int32_t timer_t306;
int32_t timer_t307;
int32_t timer_t308;
int32_t timer_t310;
int32_t timer_t312;
int32_t timer_t313;
int32_t timer_t314;
int32_t timer_t316;
int32_t timer_t318;
int32_t timer_t319;
int32_t timer_t322;
char* local_numbers[SNGISDN_NUM_LOCAL_NUMBERS];
ftdm_timer_id_t timers[SNGISDN_NUM_SPAN_TIMERS];
ftdm_sched_t *sched;
@ -483,6 +499,7 @@ ftdm_status_t get_calling_subaddr(ftdm_channel_t *ftdmchan, CgPtySad *cgPtySad);
ftdm_status_t get_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd);
ftdm_status_t get_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr);
ftdm_status_t get_facility_ie_str(ftdm_channel_t *ftdmchan, uint8_t *data, uint8_t data_len);
ftdm_status_t get_network_specific_fac(ftdm_channel_t *ftdmchan, NetFac *netFac);
ftdm_status_t set_calling_num(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb);
ftdm_status_t set_calling_num2(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb);
@ -492,6 +509,7 @@ ftdm_status_t set_calling_name(ftdm_channel_t *ftdmchan, ConEvnt *conEvnt);
ftdm_status_t set_calling_subaddr(ftdm_channel_t *ftdmchan, CgPtySad *cgPtySad);
ftdm_status_t set_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd, ftdm_sngisdn_progind_t prog_ind);
ftdm_status_t set_bear_cap_ie(ftdm_channel_t *ftdmchan, BearCap *bearCap);
ftdm_status_t set_network_specific_fac(ftdm_channel_t *ftdmchan, NetFac *netFac);
ftdm_status_t set_chan_id_ie(ftdm_channel_t *ftdmchan, ChanId *chanId);
ftdm_status_t set_restart_ind_ie(ftdm_channel_t *ftdmchan, RstInd *rstInd);
ftdm_status_t set_facility_ie(ftdm_channel_t *ftdmchan, FacilityStr *facilityStr);

View File

@ -34,6 +34,7 @@
#include "ftmod_sangoma_isdn.h"
static ftdm_status_t parse_timer(const char* val, int32_t *target);
static ftdm_status_t parse_switchtype(const char* switch_name, ftdm_span_t *span);
static ftdm_status_t parse_signalling(const char* signalling, ftdm_span_t *span);
static ftdm_status_t add_local_number(const char* val, ftdm_span_t *span);
@ -42,6 +43,16 @@ static ftdm_status_t set_switchtype_defaults(ftdm_span_t *span);
extern ftdm_sngisdn_data_t g_sngisdn_data;
static ftdm_status_t parse_timer(const char* val, int32_t *target)
{
*target = atoi(val);
if (*target < 0) {
*target = 0;
}
return FTDM_SUCCESS;
}
static ftdm_status_t parse_yesno(const char* var, const char* val, uint8_t *target)
{
if (ftdm_true(val)) {
@ -369,15 +380,9 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
return FTDM_FAIL;
}
} else if (!strcasecmp(var, "facility-timeout")) {
signal_data->facility_timeout = atoi(val);
if (signal_data->facility_timeout < 0) {
signal_data->facility_timeout = 0;
}
parse_timer(val, &signal_data->facility_timeout);
} else if (!strcasecmp(var, "transfer-timeout")) {
signal_data->transfer_timeout = atoi(val);
if (signal_data->transfer_timeout < 0) {
signal_data->transfer_timeout = 0;
}
parse_timer(val, &signal_data->transfer_timeout);
} else if (!strcasecmp(var, "att-remove-dtmf")) {
parse_yesno(var, val, &signal_data->att_remove_dtmf);
} else if (!strcasecmp(var, "facility-ie-decode")) {
@ -428,6 +433,38 @@ ftdm_status_t ftmod_isdn_parse_cfg(ftdm_conf_parameter_t *ftdm_parameters, ftdm_
ftdm_log(FTDM_LOG_WARNING, "Invalid option %s for parameter %s\n", val, var);
signal_data->send_cid_name = SNGISDN_OPT_DEFAULT;
}
} else if (!strcasecmp(var, "timer-t301")) {
parse_timer(val, &signal_data->timer_t301);
} else if (!strcasecmp(var, "timer-t302")) {
parse_timer(val, &signal_data->timer_t302);
} else if (!strcasecmp(var, "timer-t303")) {
parse_timer(val, &signal_data->timer_t303);
} else if (!strcasecmp(var, "timer-t304")) {
parse_timer(val, &signal_data->timer_t304);
} else if (!strcasecmp(var, "timer-t305")) {
parse_timer(val, &signal_data->timer_t305);
} else if (!strcasecmp(var, "timer-t306")) {
parse_timer(val, &signal_data->timer_t306);
} else if (!strcasecmp(var, "timer-t307")) {
parse_timer(val, &signal_data->timer_t307);
} else if (!strcasecmp(var, "timer-t308")) {
parse_timer(val, &signal_data->timer_t308);
} else if (!strcasecmp(var, "timer-t310")) {
parse_timer(val, &signal_data->timer_t310);
} else if (!strcasecmp(var, "timer-t312")) {
parse_timer(val, &signal_data->timer_t312);
} else if (!strcasecmp(var, "timer-t313")) {
parse_timer(val, &signal_data->timer_t313);
} else if (!strcasecmp(var, "timer-t314")) {
parse_timer(val, &signal_data->timer_t314);
} else if (!strcasecmp(var, "timer-t316")) {
parse_timer(val, &signal_data->timer_t316);
} else if (!strcasecmp(var, "timer-t318")) {
parse_timer(val, &signal_data->timer_t318);
} else if (!strcasecmp(var, "timer-t319")) {
parse_timer(val, &signal_data->timer_t319);
} else if (!strcasecmp(var, "timer-t322")) {
parse_timer(val, &signal_data->timer_t322);
} else {
ftdm_log(FTDM_LOG_WARNING, "Ignoring unknown parameter %s\n", ftdm_parameters[paramindex].var);
}

View File

@ -746,10 +746,12 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
cfg.t.cfg.s.inDLSAP.redirAdr.eh.pres = NOTPRSNT; /* redirAdr Numbering Plan */
cfg.t.cfg.s.inDLSAP.forwSubsc = FALSE; /* programmed forwarding subscription */
cfg.t.cfg.s.inDLSAP.cndSubsc = TRUE; /* calling adddress delivery service subscription */
/* TODO: Fill in these timers with proper values - eventually pass them */
cfg.t.cfg.s.inDLSAP.tmr.t301.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t301.val = 180;
if (signal_data->timer_t301 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t301.val = signal_data->timer_t301;
}
/* It looks like ETSI is the only variant that supports Overlap */
if (signal_data->switchtype == SNGISDN_SWITCH_EUROISDN) {
@ -760,19 +762,52 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
cfg.t.cfg.s.inDLSAP.tmr.t302.val = 0;
}
if (signal_data->timer_t302 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t302.val = signal_data->timer_t302;
}
cfg.t.cfg.s.inDLSAP.tmr.t303.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t303.val = 4;
if (signal_data->timer_t303 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t303.val = signal_data->timer_t303;
}
cfg.t.cfg.s.inDLSAP.tmr.t304.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t304.val = 30;
if (signal_data->timer_t304 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t304.val = signal_data->timer_t304;
}
cfg.t.cfg.s.inDLSAP.tmr.t305.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t305.val = 30;
if (signal_data->timer_t305 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t305.val = signal_data->timer_t305;
}
cfg.t.cfg.s.inDLSAP.tmr.t306.enb = FALSE;
cfg.t.cfg.s.inDLSAP.tmr.t306.val = 35;
if (signal_data->timer_t306 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t306.val = signal_data->timer_t306;
}
cfg.t.cfg.s.inDLSAP.tmr.t307.enb = FALSE;
cfg.t.cfg.s.inDLSAP.tmr.t307.val = 35;
if (signal_data->timer_t307 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t307.val = signal_data->timer_t307;
}
cfg.t.cfg.s.inDLSAP.tmr.t308.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t308.val = 4;
if (signal_data->timer_t308 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t308.val = signal_data->timer_t308;
}
if (signal_data->signalling == SNGISDN_SIGNALING_NET) {
cfg.t.cfg.s.inDLSAP.tmr.t310.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t310.val = 10;
@ -784,18 +819,52 @@ ftdm_status_t sngisdn_stack_cfg_q931_dlsap(ftdm_span_t *span)
cfg.t.cfg.s.inDLSAP.tmr.t312.enb = FALSE;
}
if (signal_data->timer_t310 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t310.val = signal_data->timer_t310;
}
if (signal_data->timer_t312 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t312.val = signal_data->timer_t312;
}
cfg.t.cfg.s.inDLSAP.tmr.t313.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t313.val = 4;
if (signal_data->timer_t313 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t313.val = signal_data->timer_t313;
}
cfg.t.cfg.s.inDLSAP.tmr.t316.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t316.val = 120;
if (signal_data->timer_t316 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t316.val = signal_data->timer_t316;
}
cfg.t.cfg.s.inDLSAP.tmr.t316c.enb = FALSE;
cfg.t.cfg.s.inDLSAP.tmr.t316c.val = 35;
cfg.t.cfg.s.inDLSAP.tmr.t318.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t318.val = 4;
if (signal_data->timer_t318 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t318.val = signal_data->timer_t318;
}
cfg.t.cfg.s.inDLSAP.tmr.t319.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t319.val = 4;
if (signal_data->timer_t319 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t319.val = signal_data->timer_t319;
}
cfg.t.cfg.s.inDLSAP.tmr.t322.enb = TRUE;
cfg.t.cfg.s.inDLSAP.tmr.t322.val = 4;
if (signal_data->timer_t322 > 0) {
cfg.t.cfg.s.inDLSAP.tmr.t322.val = signal_data->timer_t322;
}
cfg.t.cfg.s.inDLSAP.tmr.t332.enb = FALSE;
cfg.t.cfg.s.inDLSAP.tmr.t332.val = 35;

View File

@ -133,8 +133,9 @@ void sngisdn_process_con_ind (sngisdn_event_data_t *sngisdn_event)
get_redir_num(ftdmchan, &conEvnt->redirNmb);
get_calling_subaddr(ftdmchan, &conEvnt->cgPtySad);
get_prog_ind_ie(ftdmchan, &conEvnt->progInd);
get_facility_ie(ftdmchan, &conEvnt->facilityStr);
get_facility_ie(ftdmchan, &conEvnt->facilityStr);
get_calling_name(ftdmchan, conEvnt);
get_network_specific_fac(ftdmchan, &conEvnt->netFac[0]);
ftdm_log_chan(sngisdn_info->ftdmchan, FTDM_LOG_INFO, "Incoming call: Called No:[%s] Calling No:[%s]\n", ftdmchan->caller_data.dnis.digits, ftdmchan->caller_data.cid_num.digits);
@ -445,7 +446,12 @@ void sngisdn_process_cnst_ind (sngisdn_event_data_t *sngisdn_event)
/* Do nothing */
break;
case FTDM_CHANNEL_STATE_RESET:
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Processing SETUP but channel in RESET state, ignoring\n");
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring ALERT/PROCEED/PROGRESS because channel is in RESET state\n");
break;
case FTDM_CHANNEL_STATE_HANGUP:
case FTDM_CHANNEL_STATE_HANGUP_COMPLETE:
/* Ignore this message as we already started the hangup process */
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "Ignoring ALERT/PROCEED/PROGRESS because we are already hanging up\n");
break;
default:
ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Processing ALERT/PROCEED/PROGRESS in an invalid state (%s)\n", ftdm_channel_state2str(ftdmchan->state));
@ -945,14 +951,8 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event)
break;
}
break;
case 2: /* overlap sending/receiving */
case 2: /* overlap sending */
switch (ftdmchan->state) {
case FTDM_CHANNEL_STATE_COLLECT:
/* T302 Timeout reached */
/* Send the call to user, and see if they accept it */
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "T302 Timer expired, proceeding with call\n");
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RING);
break;
case FTDM_CHANNEL_STATE_PROCEED:
case FTDM_CHANNEL_STATE_PROGRESS:
case FTDM_CHANNEL_STATE_RINGING:
@ -1069,7 +1069,10 @@ void sngisdn_process_sta_cfm (sngisdn_event_data_t *sngisdn_event)
case 25: /* Overlap receiving */
switch (ftdmchan->state) {
case FTDM_CHANNEL_STATE_COLLECT:
/* do nothing */
/* T302 Timeout reached */
/* Send the call to user, and see if they accept it */
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_DEBUG, "T302 Timer expired, proceeding with call\n");
ftdm_set_state(ftdmchan, FTDM_CHANNEL_STATE_RING);
break;
default:
ftdm_log_chan(ftdmchan, FTDM_LOG_CRIT, "Don't know how to handle incompatible state. remote call state:%d our state:%s\n", call_state, ftdm_channel_state2str(ftdmchan->state));

View File

@ -69,6 +69,7 @@ void sngisdn_snd_setup(ftdm_channel_t *ftdmchan)
set_calling_subaddr(ftdmchan, &conEvnt.cgPtySad);
set_redir_num(ftdmchan, &conEvnt.redirNmb);
set_calling_name(ftdmchan, &conEvnt);
set_network_specific_fac(ftdmchan, &conEvnt.netFac[0]);
/* set_facility_ie will overwrite Calling Name for NI-2 if user specifies custom Facility IE */
set_facility_ie(ftdmchan, &conEvnt.facilityStr);
@ -481,6 +482,12 @@ void sngisdn_snd_data(ftdm_channel_t *dchan, uint8_t *data, ftdm_size_t len)
sng_l1_frame_t l1_frame;
sngisdn_span_data_t *signal_data = (sngisdn_span_data_t*) dchan->span->signal_data;
if (len > sizeof(l1_frame.data)) {
ftdm_log_chan(dchan, FTDM_LOG_ERROR, "Received frame of %"FTDM_SIZE_FMT" bytes, exceeding max size of %"FTDM_SIZE_FMT" bytes\n",
len, sizeof(l1_frame.data));
return;
}
memset(&l1_frame, 0, sizeof(l1_frame));
l1_frame.len = len;

View File

@ -43,8 +43,21 @@ SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_progind_descr, ftdm_sngisdn_progind_descr
SNGISDN_ENUM_NAMES(SNGISDN_PROGIND_LOC_NAMES, SNGISDN_PROGIND_LOC_STRINGS)
SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_progind_loc, ftdm_sngisdn_progind_loc2str, ftdm_sngisdn_progind_loc_t, SNGISDN_PROGIND_LOC_NAMES, SNGISDN_PROGIND_LOC_INVALID)
static uint8_t get_trillium_val(ftdm2trillium_t *vals, uint8_t ftdm_val, uint8_t default_val);
static uint8_t get_ftdm_val(ftdm2trillium_t *vals, uint8_t trillium_val, uint8_t default_val);
SNGISDN_ENUM_NAMES(SNGISDN_NETSPECFAC_TYPE_NAMES, SNGISDN_NETSPECFAC_TYPE_STRINGS)
SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_netspecfac_type, ftdm_sngisdn_netspecfac_type2str, ftdm_sngisdn_netspecfac_type_t, SNGISDN_NETSPECFAC_TYPE_NAMES, SNGISDN_NETSPECFAC_TYPE_INVALID)
SNGISDN_ENUM_NAMES(SNGISDN_NETSPECFAC_PLAN_NAMES, SNGISDN_NETSPECFAC_PLAN_STRINGS)
SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_netspecfac_plan, ftdm_sngisdn_netspecfac_plan2str, ftdm_sngisdn_netspecfac_plan_t, SNGISDN_NETSPECFAC_PLAN_NAMES, SNGISDN_NETSPECFAC_PLAN_INVALID)
SNGISDN_ENUM_NAMES(SNGISDN_NETSPECFAC_SPEC_NAMES, SNGISDN_NETSPECFAC_SPEC_STRINGS)
SNGISDN_STR2ENUM(ftdm_str2ftdm_sngisdn_netspecfac_spec, ftdm_sngisdn_netspecfac_spec2str, ftdm_sngisdn_netspecfac_spec_t, SNGISDN_NETSPECFAC_SPEC_NAMES, SNGISDN_NETSPECFAC_SPEC_INVALID)
static uint8_t _get_trillium_val(ftdm2trillium_t *vals, unsigned int num_vals, uint8_t ftdm_val, uint8_t default_val);
static uint8_t _get_ftdm_val(ftdm2trillium_t *vals, unsigned int num_vals, uint8_t trillium_val, uint8_t default_val);
#define get_trillium_val(vals, ftdm_val, default_val) _get_trillium_val(vals, ftdm_array_len(vals), ftdm_val, default_val)
#define get_ftdm_val(vals, trillium_val, default_val) _get_ftdm_val(vals, ftdm_array_len(vals), trillium_val, default_val)
ftdm_status_t get_calling_name_from_usr_usr(ftdm_channel_t *ftdmchan, UsrUsr *usrUsr);
ftdm_status_t get_calling_name_from_display(ftdm_channel_t *ftdmchan, Display *display);
ftdm_status_t get_calling_name_from_ntDisplay(ftdm_channel_t *ftdmchan, NtDisplay *display);
@ -71,29 +84,51 @@ ftdm2trillium_t ton_codes[] = {
{FTDM_TON_RESERVED, IN_TON_EXT},
};
static uint8_t get_trillium_val(ftdm2trillium_t *vals, uint8_t ftdm_val, uint8_t default_val)
ftdm2trillium_t nsf_spec_codes[] = {
{SNGISDN_NETSPECFAC_SPEC_ACCUNET, 0xe6},
{SNGISDN_NETSPECFAC_SPEC_MEGACOM, 0xe3},
{SNGISDN_NETSPECFAC_SPEC_MEGACOM_800, 0xe2},
{SNGISDN_NETSPECFAC_SPEC_SDDN, 0xe1},
{SNGISDN_NETSPECFAC_SPEC_INVALID, 0x00},
};
ftdm2trillium_t nsf_type_codes[] = {
{SNGISDN_NETSPECFAC_TYPE_USER_SPEC, 0x00},
{SNGISDN_NETSPECFAC_TYPE_NATIONAL_NETWORK_IDENT, 0x02},
{SNGISDN_NETSPECFAC_TYPE_INTERNATIONAL_NETWORK_IDENT, 0x03},
{SNGISDN_NETSPECFAC_TYPE_INVALID, 0x00},
};
ftdm2trillium_t nsf_plan_codes[] = {
{SNGISDN_NETSPECFAC_PLAN_UNKNOWN, 0x00},
{SNGISDN_NETSPECFAC_PLAN_CARRIER_IDENT, 0x01},
{SNGISDN_NETSPECFAC_PLAN_DATA_NETWORK_IDENT, 0x03},
{SNGISDN_NETSPECFAC_PLAN_INVALID, 0x00},
};
static uint8_t _get_trillium_val(ftdm2trillium_t *vals, unsigned int num_vals, uint8_t ftdm_val, uint8_t default_val)
{
ftdm2trillium_t *val = vals;
while(val++) {
if (val->ftdm_val == ftdm_val) {
return val->trillium_val;
int i;
for (i = 0; i < num_vals; i++) {
if (vals[i].ftdm_val == ftdm_val) {
return vals[i].trillium_val;
}
}
return default_val;
}
static uint8_t _get_ftdm_val(ftdm2trillium_t *vals, unsigned int num_vals, uint8_t trillium_val, uint8_t default_val)
{
int i;
for (i = 0; i < num_vals; i++) {
if (vals[i].trillium_val == trillium_val) {
return vals[i].ftdm_val;
}
}
return default_val;
}
static uint8_t get_ftdm_val(ftdm2trillium_t *vals, uint8_t trillium_val, uint8_t default_val)
{
ftdm2trillium_t *val = vals;
while(val++) {
if (val->trillium_val == trillium_val) {
return val->ftdm_val;
}
}
return default_val;
}
void clear_call_data(sngisdn_chan_data_t *sngisdn_info)
{
uint32_t cc_id = ((sngisdn_span_data_t*)sngisdn_info->ftdmchan->span->signal_data)->cc_id;
@ -530,6 +565,29 @@ ftdm_status_t get_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd)
}
ftdm_status_t get_network_specific_fac(ftdm_channel_t *ftdmchan, NetFac *netFac)
{
if (!netFac->eh.pres) {
return FTDM_FAIL;
}
if (netFac->netFacSpec.pres == PRSNT_NODEF) {
char digits_string [32];
memcpy(digits_string, (const char*)netFac->netFacSpec.val, netFac->netFacSpec.len);
digits_string[netFac->netFacSpec.len] = '\0';
sngisdn_add_var((sngisdn_chan_data_t*)ftdmchan->call_data, "isdn.netFac.spec", digits_string);
}
if (netFac->typeNetId.pres == PRSNT_NODEF) {
sngisdn_add_var((sngisdn_chan_data_t*)ftdmchan->call_data, "isdn.netFac.type", ftdm_sngisdn_netspecfac_type2str(get_ftdm_val(nsf_type_codes, netFac->typeNetId.val, 0x00)));
}
if (netFac->netIdPlan.pres == PRSNT_NODEF) {
sngisdn_add_var((sngisdn_chan_data_t*)ftdmchan->call_data, "isdn.netFac.plan", ftdm_sngisdn_netspecfac_type2str(get_ftdm_val(nsf_plan_codes, netFac->netIdPlan.val, 0x00)));
}
return FTDM_SUCCESS;
}
ftdm_status_t set_calling_num(ftdm_channel_t *ftdmchan, CgPtyNmb *cgPtyNmb)
{
ftdm_caller_data_t *caller_data = &ftdmchan->caller_data;
@ -900,6 +958,67 @@ ftdm_status_t set_prog_ind_ie(ftdm_channel_t *ftdmchan, ProgInd *progInd, ftdm_s
return FTDM_SUCCESS;
}
ftdm_status_t set_network_specific_fac(ftdm_channel_t *ftdmchan, NetFac *netFac)
{
const char *str = NULL;
str = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.netFac.spec");
if (ftdm_strlen_zero(str)) {
/* Network-specific facility specification is mandatory, cannot send IE
without it */
return FTDM_SUCCESS;
} else {
ftdm_sngisdn_netspecfac_spec_t spec = ftdm_str2ftdm_sngisdn_netspecfac_spec(str);
netFac->eh.pres = PRSNT_NODEF;
netFac->netFacSpec.pres = PRSNT_NODEF;
if (spec == SNGISDN_NETSPECFAC_SPEC_INVALID) {
int byte = 0;
ftdm_log_chan(ftdmchan, FTDM_LOG_DEBUG, "Non-standard NSF specified:%s\n", str);
if (sscanf(str, "%x", &byte) == 1) {
netFac->netFacSpec.val[0] = byte & 0xFF;
}
netFac->netFacSpec.len = 1;
} else {
/* User is using one of the pre-specified NSF's */
netFac->netFacSpec.val[0] = get_trillium_val(nsf_spec_codes, spec, 0x00);
netFac->netFacSpec.len = 1;
}
}
netFac->lenNetId.pres = PRSNT_NODEF;
netFac->lenNetId.val = 0;
str = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.netFac.type");
if (!ftdm_strlen_zero(str)) {
netFac->typeNetId.pres = PRSNT_NODEF;
netFac->typeNetId.val = ftdm_str2ftdm_sngisdn_netspecfac_type(str);
}
str = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.netFac.plan");
if (!ftdm_strlen_zero(str)) {
netFac->netIdPlan.pres = PRSNT_NODEF;
netFac->netIdPlan.val = ftdm_str2ftdm_sngisdn_netspecfac_plan(str);
}
if (netFac->netIdPlan.pres == PRSNT_NODEF || netFac->typeNetId.pres == PRSNT_NODEF) {
netFac->lenNetId.val++;
}
str = ftdm_usrmsg_get_var(ftdmchan->usrmsg, "isdn.netFac.ident");
if (!ftdm_strlen_zero(str)) {
netFac->lenNetId.val++;
netFac->netId.pres = PRSNT_NODEF;
memcpy(netFac->netId.val, str, strlen(str));
}
return FTDM_SUCCESS;
}
ftdm_status_t set_user_to_user_ie(ftdm_channel_t *ftdmchan, UsrUsr *usrUsr)
{
sngisdn_chan_data_t *sngisdn_info = ftdmchan->call_data;

View File

@ -771,7 +771,7 @@ uint32_t sngisdn_decode_ie(char *str, uint32_t *str_len, uint8_t current_codeset
default:
{
*str_len += sprintf(&str[*str_len], "Undecoded");
print_hex_dump((char*)str, str_len, data, index_start, index_end);
print_hex_dump((char*)str, str_len, data, index_start, index_end + 1);
}
break;
}

View File

@ -101,6 +101,42 @@ typedef enum {
#define SNGISDN_PROGIND_LOC_STRINGS "user", "private-net-local-user", "public-net-local-user", "transit-network", "public-net-remote-user", "private-net-remote-user", "beyond-interworking", "invalid"
SNGISDN_STR2ENUM_P(ftdm_str2ftdm_sngisdn_progind_loc, ftdm_sngisdn_progind_loc2str, ftdm_sngisdn_progind_loc_t);
typedef enum {
/* User Specified */
SNGISDN_NETSPECFAC_TYPE_USER_SPEC,
/* National network identification */
SNGISDN_NETSPECFAC_TYPE_NATIONAL_NETWORK_IDENT,
/* International network identification */
SNGISDN_NETSPECFAC_TYPE_INTERNATIONAL_NETWORK_IDENT,
/* Invalid */
SNGISDN_NETSPECFAC_TYPE_INVALID,
} ftdm_sngisdn_netspecfac_type_t;
#define SNGISDN_NETSPECFAC_TYPE_STRINGS "user-specified", "national-network-identification", "national-network-identification", "invalid"
SNGISDN_STR2ENUM_P(ftdm_str2ftdm_sngisdn_netspecfac_type, ftdm_sngisdn_netspecfac_type2str, ftdm_sngisdn_netspecfac_type_t);
typedef enum {
/* Unknown */
SNGISDN_NETSPECFAC_PLAN_UNKNOWN,
/* Carrier Identification Code */
SNGISDN_NETSPECFAC_PLAN_CARRIER_IDENT,
/* Data network identification code */
SNGISDN_NETSPECFAC_PLAN_DATA_NETWORK_IDENT,
/* Invalid */
SNGISDN_NETSPECFAC_PLAN_INVALID,
} ftdm_sngisdn_netspecfac_plan_t;
#define SNGISDN_NETSPECFAC_PLAN_STRINGS "unknown", "carrier-identification", "data-network-identification", "invalid"
SNGISDN_STR2ENUM_P(ftdm_str2ftdm_sngisdn_netspecfac_plan, ftdm_sngisdn_netspecfac_plan2str, ftdm_sngisdn_netspecfac_plan_t);
typedef enum {
/* Unknown */
SNGISDN_NETSPECFAC_SPEC_ACCUNET,
SNGISDN_NETSPECFAC_SPEC_MEGACOM,
SNGISDN_NETSPECFAC_SPEC_MEGACOM_800,
SNGISDN_NETSPECFAC_SPEC_SDDN,
SNGISDN_NETSPECFAC_SPEC_INVALID,
} ftdm_sngisdn_netspecfac_spec_t;
#define SNGISDN_NETSPECFAC_SPEC_STRINGS "accunet", "megacom", "megacom-800", "sddn", "invalid"
SNGISDN_STR2ENUM_P(ftdm_str2ftdm_sngisdn_netspecfac_spec, ftdm_sngisdn_netspecfac_spec2str, ftdm_sngisdn_netspecfac_spec_t);
#endif /* __FTMOD_SANGOMA_ISDN_USER_H__*/

View File

@ -231,11 +231,11 @@ int ftmod_ss7_parse_xml(ftdm_conf_parameter_t *ftdm_parameters, ftdm_span_t *spa
if (!strcasecmp(var, "dialplan")) {
/**********************************************************************/
/* do i give a shit about this??? */
/* don't care for now */
/**********************************************************************/
} else if (!strcasecmp(var, "context")) {
/**********************************************************************/
/* do i give a shit about this??? */
/* don't care for now */
/**********************************************************************/
} else if (!strcasecmp(var, "ccSpanId")) {
/**********************************************************************/

View File

@ -471,6 +471,7 @@ static FIO_CONFIGURE_FUNCTION(wanpipe_configure)
wp_globals.ring_off_ms = num;
}
}
}
return FTDM_SUCCESS;
@ -1475,13 +1476,29 @@ static __inline__ ftdm_status_t wanpipe_channel_process_event(ftdm_channel_t *fc
if (tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_PRESENT) {
ftdm_set_flag(fchan, FTDM_CHANNEL_MUTE);
if (fchan->dtmfdetect.duration_ms) {
fchan->dtmfdetect.start_time = ftdm_current_time_in_ms();
} else if (fchan->dtmfdetect.trigger_on_start) {
ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c\n", tmp_dtmf[0]);
ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
}
}
if (tdm_api->wp_tdm_cmd.event.wp_tdm_api_event_dtmf_type == WAN_EC_TONE_STOP) {
ftdm_clear_flag(fchan, FTDM_CHANNEL_MUTE);
if (ftdm_test_flag(fchan, FTDM_CHANNEL_INUSE)) {
ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c\n", tmp_dtmf[0]);
ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
if (fchan->dtmfdetect.duration_ms) {
ftdm_time_t diff = ftdm_current_time_in_ms() - fchan->dtmfdetect.start_time;
if (diff > fchan->dtmfdetect.duration_ms) {
ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c (duration:%d min:%d)\n", tmp_dtmf[0], diff, fchan->dtmfdetect.duration_ms);
ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
} else {
ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Ignoring wanpipe DTMF: %c (duration:%d min:%d)\n", tmp_dtmf[0], diff, fchan->dtmfdetect.duration_ms);
}
} else if (!fchan->dtmfdetect.trigger_on_start) {
ftdm_log_chan(fchan, FTDM_LOG_DEBUG, "Queuing wanpipe DTMF: %c\n", tmp_dtmf[0]);
ftdm_channel_queue_dtmf(fchan, tmp_dtmf);
}
}
}
}

View File

@ -1052,12 +1052,14 @@ static __inline__ ftdm_status_t zt_channel_process_event(ftdm_channel_t *fchan,
switch(zt_event_id) {
case ZT_EVENT_RINGEROFF:
{
return FTDM_FAIL;
ftdm_log_chan_msg(fchan, FTDM_LOG_DEBUG, "ZT RINGER OFF\n");
*event_id = FTDM_OOB_NOOP;
}
break;
case ZT_EVENT_RINGERON:
{
return FTDM_FAIL;
ftdm_log_chan_msg(fchan, FTDM_LOG_DEBUG, "ZT RINGER ON\n");
*event_id = FTDM_OOB_NOOP;
}
break;
case ZT_EVENT_RINGBEGIN:
@ -1176,7 +1178,7 @@ FIO_CHANNEL_NEXT_EVENT_FUNCTION(zt_channel_next_event)
/* the core already locked the channel for us, so it's safe to call zt_channel_process_event() here */
if ((zt_channel_process_event(ftdmchan, &event_id, zt_event_id)) != FTDM_SUCCESS) {
ftdm_log_chan_msg(ftdmchan, FTDM_LOG_ERROR, "Failed to process event from channel\n");
ftdm_log_chan(ftdmchan, FTDM_LOG_ERROR, "Failed to process DAHDI event %d from channel\n", zt_event_id);
return FTDM_FAIL;
}
@ -1210,7 +1212,7 @@ FIO_SPAN_NEXT_EVENT_FUNCTION(zt_next_event)
ftdm_channel_lock(fchan);
if ((zt_channel_process_event(fchan, &event_id, zt_event_id)) != FTDM_SUCCESS) {
ftdm_log_chan_msg(fchan, FTDM_LOG_ERROR, "Failed to process event from channel\n");
ftdm_log_chan(fchan, FTDM_LOG_ERROR, "Failed to process DAHDI event %d from channel\n", zt_event_id);
ftdm_channel_unlock(fchan);
return FTDM_FAIL;
}
@ -1375,6 +1377,7 @@ static FIO_IO_LOAD_FUNCTION(zt_init)
zt_interface.write = zt_write;
zt_interface.poll_event = zt_poll_event;
zt_interface.next_event = zt_next_event;
zt_interface.channel_next_event = zt_channel_next_event;
zt_interface.channel_destroy = zt_channel_destroy;
zt_interface.get_alarms = zt_get_alarms;
*fio = &zt_interface;

View File

@ -479,7 +479,7 @@ typedef enum {
FTDM_STR2ENUM_P(ftdm_str2ftdm_trunk_type, ftdm_trunk_type2str, ftdm_trunk_type_t)
/*! \brief Basic channel configuration provided to ftdm_configure_span_channels */
typedef struct ftdm_channel_config {
typedef struct ftdm_channel_config {
char name[FTDM_MAX_NAME_STR_SZ];
char number[FTDM_MAX_NUMBER_STR_SZ];
char group_name[FTDM_MAX_NAME_STR_SZ];
@ -487,6 +487,8 @@ typedef struct ftdm_channel_config {
float rxgain;
float txgain;
uint8_t debugdtmf;
uint8_t dtmf_on_start;
uint32_t dtmfdetect_ms;
uint8_t iostats;
} ftdm_channel_config_t;

View File

@ -359,6 +359,13 @@ typedef struct {
ftdm_mutex_t *mutex;
} ftdm_dtmf_debug_t;
typedef struct {
uint32_t duration_ms;
ftdm_time_t start_time;
/* If set to 1, we will send DTMF event the the tone starts, instead of waiting for end */
uint8_t trigger_on_start;
} ftdm_dtmf_detect_t;
/* 2^8 table size, one for each byte (sample) value */
#define FTDM_GAINS_TABLE_SIZE 256
struct ftdm_channel {
@ -438,6 +445,7 @@ struct ftdm_channel {
ftdm_timer_id_t hangup_timer;
ftdm_channel_iostats_t iostats;
ftdm_dtmf_debug_t dtmfdbg;
ftdm_dtmf_detect_t dtmfdetect;
ftdm_io_dump_t rxdump;
ftdm_io_dump_t txdump;
ftdm_interrupt_t *state_completed_interrupt; /*!< Notify when a state change is completed */

View File

@ -10,7 +10,7 @@ static ftdm_channel_indication_t indication = FTDM_CHANNEL_INDICATE_NONE;
static FIO_SIGNAL_CB_FUNCTION(on_r2_signal)
{
int chanid = ftdm_channel_get_ph_id(sigmsg->channel);
ftdm_log(FTDM_LOG_DEBUG, "Got R2 channel sig [%s] in channel\n", ftdm_signal_event2str(sigmsg->event_id), chanid);
ftdm_log(FTDM_LOG_DEBUG, "Got R2 channel sig [%s] in channel %d\n", ftdm_signal_event2str(sigmsg->event_id), chanid);
switch (sigmsg->event_id) {
case FTDM_SIGEVENT_START:
{

59
libs/iksemel/acinclude.m4 Normal file
View File

@ -0,0 +1,59 @@
dnl PKG_CHECK_MODULES(GSTUFF, gtk+-2.0 >= 1.3 glib = 1.3.4, action-if, action-not)
dnl defines GSTUFF_LIBS, GSTUFF_CFLAGS, see pkg-config man page
dnl also defines GSTUFF_PKG_ERRORS on error
AC_DEFUN([PKG_CHECK_MODULES], [
succeeded=no
if test -z "$PKG_CONFIG"; then
AC_PATH_PROG(PKG_CONFIG, pkg-config, no)
fi
if test "$PKG_CONFIG" = "no" ; then
echo "*** The pkg-config script could not be found. Make sure it is"
echo "*** in your path, or set the PKG_CONFIG environment variable"
echo "*** to the full path to pkg-config."
echo "*** Or see http://www.freedesktop.org/software/pkgconfig to get pkg-config."
else
PKG_CONFIG_MIN_VERSION=0.9.0
if $PKG_CONFIG --atleast-pkgconfig-version $PKG_CONFIG_MIN_VERSION; then
AC_MSG_CHECKING(for $2)
if $PKG_CONFIG --exists "$2" ; then
AC_MSG_RESULT(yes)
succeeded=yes
AC_MSG_CHECKING($1_CFLAGS)
$1_CFLAGS=`$PKG_CONFIG --cflags "$2"`
AC_MSG_RESULT($$1_CFLAGS)
AC_MSG_CHECKING($1_LIBS)
$1_LIBS=`$PKG_CONFIG --libs "$2"`
AC_MSG_RESULT($$1_LIBS)
else
$1_CFLAGS=""
$1_LIBS=""
## If we have a custom action on failure, don't print errors, but
## do set a variable so people can do so.
$1_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"`
ifelse([$4], ,echo $$1_PKG_ERRORS,)
fi
AC_SUBST($1_CFLAGS)
AC_SUBST($1_LIBS)
else
echo "*** Your version of pkg-config is too old. You need version $PKG_CONFIG_MIN_VERSION or newer."
echo "*** See http://www.freedesktop.org/software/pkgconfig"
fi
fi
if test $succeeded = yes; then
ifelse([$3], , :, [$3])
else
ifelse([$4], , AC_MSG_ERROR([Library requirements ($2) not met; consider adjusting the PKG_CONFIG_PATH environment variable if your libraries are in a nonstandard prefix so pkg-config can find them.]), [$4])
fi
])

View File

@ -838,12 +838,12 @@ static void do_presence(ldl_handle_t *handle, char *from, char *to, char *type,
char buf[512];
iks *tag;
if (!strchr(from, '/')) {
if (from && !strchr(from, '/')) {
snprintf(buf, sizeof(buf), "%s/talk", from);
from = buf;
}
if (ldl_test_flag(handle, LDL_FLAG_COMPONENT) && ldl_jid_domcmp(from, to)) {
if (ldl_test_flag(handle, LDL_FLAG_COMPONENT) && from && to && ldl_jid_domcmp(from, to)) {
globals.logger(DL_LOG_ERR, "Refusal to send presence from and to the same domain in component mode [%s][%s]\n", from, to);
return;
}
@ -1372,7 +1372,6 @@ static void on_log(ldl_handle_t *handle, const char *data, size_t size, int is_i
} else {
globals.logger(DL_LOG_NOTICE, "+xml:%s%s:%s", iks_is_secure(handle->parser) ? "Sec" : "", is_incoming ? "RECV" : "SEND", data);
}
}
}
@ -1444,7 +1443,11 @@ static ldl_queue_t ldl_flush_queue(ldl_handle_t *handle, int done)
while(apr_queue_trypop(handle->queue, &pop) == APR_SUCCESS) {
if (pop) {
msg = (iks *) pop;
if (!done) iks_send(handle->parser, msg);
if (!done) {
if (iks_send(handle->parser, msg) != IKS_OK) {
globals.logger(DL_LOG_DEBUG, "Failed sending data!\n");
};
};
iks_delete(msg);
pop = NULL;
sent_data = LDL_QUEUE_SENT;
@ -1474,7 +1477,9 @@ static ldl_queue_t ldl_flush_queue(ldl_handle_t *handle, int done)
if (globals.debug) {
globals.logger(DL_LOG_DEBUG, "Sending packet %s (%d left)\n", packet_node->id, packet_node->retries);
}
iks_send(handle->parser, packet_node->xml);
if (iks_send(handle->parser, packet_node->xml) != IKS_OK) {
globals.logger(DL_LOG_DEBUG, "Failed trying re-sending data!\n");
};
packet_node->next = now + 5000000;
sent_data = LDL_QUEUE_SENT;
}
@ -1500,8 +1505,8 @@ static ldl_queue_t ldl_flush_queue(ldl_handle_t *handle, int done)
static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
{
int timeout_ka = LDL_KEEPALIVE_TIMEOUT;
int count_ka = timeout_ka;
int count_ka = LDL_KEEPALIVE_TIMEOUT;
time_t tstart, tnow;
while (ldl_test_flag((&globals), LDL_FLAG_READY) && ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
int e;
@ -1532,6 +1537,8 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
j_setup_filter(handle);
globals.logger(DL_LOG_DEBUG, "xmpp connecting\n");
e = iks_connect_via(handle->parser,
handle->server ? handle->server : handle->acc->server,
handle->port ? handle->port : IKS_JABBER_PORT,
@ -1555,17 +1562,13 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
}
handle->counter = opt_timeout;
if ((tstart = time(NULL)) == -1) {
globals.logger(DL_LOG_DEBUG, "error determining connection time");
}
while (ldl_test_flag((&globals), LDL_FLAG_READY) && ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
e = iks_recv(handle->parser, 1);
if (count_ka-- <= 0) {
if( iks_send_raw(handle->parser, " ") == IKS_OK) {
count_ka = timeout_ka;
globals.logger(DL_LOG_DEBUG, "Sent keep alive signal\n");
}
}
if (handle->loop_callback) {
if (handle->loop_callback(handle) != LDL_STATUS_SUCCESS) {
ldl_clear_flag_locked(handle, LDL_FLAG_RUNNING);
@ -1582,14 +1585,24 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
}
if (IKS_OK != e || ldl_test_flag(handle, LDL_FLAG_BREAK)) {
globals.logger(DL_LOG_DEBUG, "io error 2 %d retry in %d second(s)\n", e, ++handle->fail_count);
globals.logger(DL_LOG_DEBUG, "io error 2 %d retry in %d second(s)", e, ++handle->fail_count);
if ((tnow = time(NULL)) == -1) {
globals.logger(DL_LOG_DEBUG, "error deterniming io error time");
}
if (difftime(tnow, tstart) > 30) {
/* this is a new error situation: reset counter */
globals.logger(DL_LOG_DEBUG, "resetting fail count");
handle->fail_count = 1;
}
microsleep(1000 * handle->fail_count);
goto fail;
}
if (ldl_test_flag(handle, LDL_FLAG_RUNNING)) {
ldl_flush_queue(handle, 0);
}
if (ldl_flush_queue(handle, 0) == LDL_QUEUE_SENT) {
count_ka = LDL_KEEPALIVE_TIMEOUT;
}
}
handle->counter--;
if (!ldl_test_flag(handle, LDL_FLAG_CONNECTED)) {
@ -1606,7 +1619,17 @@ static void xmpp_connect(ldl_handle_t *handle, char *jabber_id, char *pass)
}
}
microsleep(100);
if (count_ka-- <= 0) {
if( iks_send_raw(handle->parser, " ") == IKS_OK) {
globals.logger(DL_LOG_DEBUG, "Sent keep alive signal");
count_ka = LDL_KEEPALIVE_TIMEOUT;
} else {
globals.logger(DL_LOG_DEBUG, "Failed sending keep alive signal");
microsleep(500);
break;
}
}
}
fail:

View File

@ -64,8 +64,8 @@ extern "C" {
#define LDL_MAX_PAYLOADS 50
#define LDL_RETRY 3
#define IKS_NS_COMPONENT "jabber:component:accept"
/* period between keep alive signals in 0.1sec units*/
#define LDL_KEEPALIVE_TIMEOUT 6000
/* period between keep alive signals in 1sec units*/
#define LDL_KEEPALIVE_TIMEOUT 300
/*! \brief A structure to store a jingle candidate */
struct ldl_candidate {

View File

@ -609,10 +609,15 @@ mc_again:
}
del = where - el->el_cursor.h;
#if 0
/* workaround miscounting of control characters in prompt by
avoiding absolute horizontal positioning */
if ((del < -4 || del > 4) && GoodStr(T_ch))
/* go there directly */
(void) tputs(tgoto(Str(T_ch), where, where), where, term__putc);
else {
else
#endif
{
if (del > 0) { /* moving forward */
if ((del > 4) && GoodStr(T_RI))
(void) tputs(tgoto(Str(T_RI), del, del),

View File

@ -171,9 +171,9 @@ int sendnewportmappingrequest(natpmp_t * p, int protocol,
p->pending_request[1] = (char)protocol;
p->pending_request[2] = 0;
p->pending_request[3] = 0;
*((uint16_t *)(p->pending_request + 4)) = htons(privateport);
*((uint16_t *)(p->pending_request + 6)) = htons(publicport);
*((uint32_t *)(p->pending_request + 8)) = htonl(lifetime);
*((uint16_t *)(intptr_t)(p->pending_request + 4)) = htons(privateport);
*((uint16_t *)(intptr_t)(p->pending_request + 6)) = htons(publicport);
*((uint32_t *)(intptr_t)(p->pending_request + 8)) = htonl(lifetime);
p->pending_request_len = 12;
return sendnatpmprequest(p);
}

View File

@ -1 +1 @@
Sun Dec 18 11:07:07 EST 2011
Thu Mar 1 10:03:45 CST 2012

0
libs/sofia-sip/configure.gnu Normal file → Executable file
View File

View File

@ -428,12 +428,16 @@ int nua_subscribe_server_report(nua_server_request_t *sr, tagi_t const *tags)
* @sa @RFC3265, #nua_i_subscribe, #nua_i_refer, NUTAG_ALLOW_EVENTS()
*/
#if 0
static int nua_notify_client_init(nua_client_request_t *cr,
msg_t *, sip_t *,
tagi_t const *tags);
static int nua_notify_client_init_etag(nua_client_request_t *cr,
msg_t *msg, sip_t *sip,
tagi_t const *tags);
static int nua_notify_client_request(nua_client_request_t *cr,
msg_t *, sip_t *,
tagi_t const *tags);
@ -442,7 +446,8 @@ static int nua_notify_client_report(nua_client_request_t *cr,
sip_t const *sip,
nta_outgoing_t *orq,
tagi_t const *tags);
#endif
#if 0
static nua_client_methods_t const nua_notify_client_methods = {
SIP_METHOD_NOTIFY, /* crm_method, crm_method_name */
0, /* crm_extra */
@ -460,6 +465,25 @@ static nua_client_methods_t const nua_notify_client_methods = {
nua_notify_client_report, /* crm_report */
NULL, /* crm_complete */
};
#endif
nua_client_methods_t const nua_notify_client_methods = {
SIP_METHOD_NOTIFY, /* crm_method, crm_method_name */
0, /* crm_extra */
{ /* crm_flags */
/* create_dialog */ 1,
/* in_dialog */ 1,
/* target refresh */ 1
},
NULL, /* crm_template */
NULL, /* crm_init */
NULL, /* crm_send */
NULL, /* crm_check_restart */
NULL, /* crm_recv */
NULL, /* crm_preliminary */
NULL, /* crm_report */
NULL, /* crm_complete */
};
/**@internal Send NOTIFY. */
int nua_stack_notify(nua_t *nua,
@ -469,7 +493,7 @@ int nua_stack_notify(nua_t *nua,
{
return nua_client_create(nh, e, &nua_notify_client_methods, tags);
}
#if 0
static int nua_notify_client_init(nua_client_request_t *cr,
msg_t *msg, sip_t *sip,
tagi_t const *tags)
@ -715,7 +739,7 @@ int nua_notify_client_request(nua_client_request_t *cr,
return nua_base_client_request(cr, msg, sip, tags);
}
#endif
/** @NUA_EVENT nua_r_notify
*
* Response to an outgoing @b NOTIFY request.
@ -747,7 +771,7 @@ int nua_notify_client_request(nua_client_request_t *cr,
*
* @END_NUA_EVENT
*/
#if 0
static int nua_notify_client_report(nua_client_request_t *cr,
int status, char const *phrase,
sip_t const *sip,
@ -782,7 +806,7 @@ static int nua_notify_client_report(nua_client_request_t *cr,
return 0;
}
#endif
static void nua_notify_usage_refresh(nua_handle_t *nh,
nua_dialog_state_t *ds,

View File

@ -1875,10 +1875,11 @@ sdp_rtpmap_t *sdp_rtpmap_find_matching(sdp_rtpmap_t const *list,
sdp_rtpmap_t const *rm)
{
char const *lparam, *rparam;
sdp_rtpmap_t const *cp_list = NULL;
if (rm == NULL)
return NULL;
for (; list; list = list->rm_next) {
if (rm->rm_rate != list->rm_rate)
continue;
@ -1888,8 +1889,11 @@ sdp_rtpmap_t *sdp_rtpmap_find_matching(sdp_rtpmap_t const *list,
lparam = rm->rm_params; rparam = list->rm_params;
if (lparam == rparam)
break;
if (lparam == rparam) {
cp_list = list;
if (rm->rm_pt != list->rm_pt) continue;
break;
}
if (!lparam) lparam = "1"; if (!rparam) rparam = "1";
if (!su_casematch(lparam, rparam))
@ -1898,5 +1902,5 @@ sdp_rtpmap_t *sdp_rtpmap_find_matching(sdp_rtpmap_t const *list,
break;
}
return (sdp_rtpmap_t *)list;
return cp_list ? (sdp_rtpmap_t *) cp_list : (sdp_rtpmap_t *)list;
}

View File

@ -180,7 +180,7 @@ int tport_open_log(tport_master_t *mr, tagi_t *tags)
return n;
}
memcpy(port, p, sizeof(p));
strncpy(port, p, sizeof(port));
*p = '\0';
@ -359,7 +359,7 @@ void tport_capt_msg(tport_t const *self, msg_t *msg, size_t n,
assert(self); assert(msg);
su = msg_addr(msg);
su_self = self->tp_addr;
su_self = self->tp_pri->pri_primary->tp_addr;
mr = self->tp_master;
@ -402,8 +402,8 @@ void tport_capt_msg(tport_t const *self, msg_t *msg, size_t n,
}
#endif
hep_header.hp_dport = dst ? su->su_port : htons(atoi(self->tp_port));
hep_header.hp_sport = dst ? htons(atoi(self->tp_port)) : su->su_port;
hep_header.hp_dport = dst ? su->su_port : su_self->su_port;
hep_header.hp_sport = dst ? su_self->su_port : su->su_port;
/* Copy hepheader */

View File

@ -60,7 +60,7 @@
#define TONE_TWIST 4 /* 6dB */
#define TONE_TO_TOTAL_ENERGY 64 /* -3dB */
#else
#define DETECTION_THRESHOLD 269338317.0f /* -42dBm0 [((128.0*32768.0/1.4142)*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2 => 269338317.0] */
#define DETECTION_THRESHOLD 2104205.6f /* -42dBm0 [(((128.0*32768.0/1.4142)*10^((-42 - DBM0_MAX_SINE_POWER)/20.0))^2)/128 => 2104205.6] */
#define TONE_TWIST 3.981f /* 6dB */
#define TONE_TO_TOTAL_ENERGY 1.995f /* 3dB */
#define DTMF_TO_TOTAL_ENERGY 64.152f /* -3dB [BINS*10^(-3/10.0)] */

View File

@ -234,6 +234,10 @@ static int process_rx_indicator(t38_core_state_t *t, void *user_data, int indica
s = (t38_terminal_state_t *) user_data;
fe = &s->t38_fe;
/* Protect against T.38 stuff arriving after we've actually finished. */
if (fe->current_rx_type == T30_MODEM_DONE)
return 0;
if (t->current_rx_indicator == indicator)
{
/* This is probably due to the far end repeating itself, or slipping
@ -332,6 +336,11 @@ static int process_rx_data(t38_core_state_t *t, void *user_data, int data_type,
s = (t38_terminal_state_t *) user_data;
fe = &s->t38_fe;
/* Protect against T.38 stuff arriving after we've actually finished. */
if (fe->current_rx_type == T30_MODEM_DONE)
return 0;
/* In termination mode we don't care very much what the data type is apart from a couple of
special cases. */
switch (data_type)

View File

@ -76,8 +76,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Downloading Flite."
CommandLine="if not exist &quot;$(ProjectDir)..\flite-1.3.99&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.3.99-latest.tar.gz &quot;$(ProjectDir)..&quot;&#x0D;&#x0A;"
Outputs="$(ProjectDir)..\flite-1.3.99"
CommandLine="if not exist &quot;$(ProjectDir)..\flite-1.5.4&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.5.4-current.tar.bz2 &quot;$(ProjectDir)..&quot;&#x0D;&#x0A;&#x0A;if exist &quot;$(ProjectDir)..\flite-1.5.4-current&quot; move &quot;$(ProjectDir)..\flite-1.5.4-current&quot; &quot;$(ProjectDir)..\flite-1.5.4&quot;&#x0A;&#x0D;&#x0A;"
Outputs="$(ProjectDir)..\flite-1.5.4"
/>
</FileConfiguration>
<FileConfiguration
@ -86,8 +86,8 @@
<Tool
Name="VCCustomBuildTool"
Description="Downloading Flite."
CommandLine="if not exist &quot;$(ProjectDir)..\flite-1.3.99&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.3.99-latest.tar.gz &quot;$(ProjectDir)..&quot;&#x0D;&#x0A;"
Outputs="$(ProjectDir)..\flite-1.3.99"
CommandLine="if not exist &quot;$(ProjectDir)..\flite-1.5.4&quot; cscript /nologo &quot;$(ProjectDir)util.vbs&quot; GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.5.4-current.tar.bz2 &quot;$(ProjectDir)..&quot;&#x0D;&#x0A;&#x0A;if exist &quot;$(ProjectDir)..\flite-1.5.4-current&quot; move &quot;$(ProjectDir)..\flite-1.5.4-current&quot; &quot;$(ProjectDir)..\flite-1.5.4&quot;&#x0A;&#x0D;&#x0A;"
Outputs="$(ProjectDir)..\flite-1.5.4"
/>
</FileConfiguration>
</File>

View File

@ -66,13 +66,15 @@
<CustomBuild Include="cleancount">
<FileType>Document</FileType>
<Message Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Downloading Flite.</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">if not exist "$(ProjectDir)..\flite-1.3.99" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.3.99-latest.tar.gz "$(ProjectDir).."
<Command Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">if not exist "$(ProjectDir)..\flite-1.5.4" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.5.4-current.tar.bz2 "$(ProjectDir).."
if exist "$(ProjectDir)..\flite-1.5.4-current" move "$(ProjectDir)..\flite-1.5.4-current" "$(ProjectDir)..\flite-1.5.4"
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)..\flite-1.3.99;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(ProjectDir)..\flite-1.5.4;%(Outputs)</Outputs>
<Message Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Downloading Flite.</Message>
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">if not exist "$(ProjectDir)..\flite-1.3.99" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.3.99-latest.tar.gz "$(ProjectDir).."
<Command Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">if not exist "$(ProjectDir)..\flite-1.5.4" cscript /nologo "$(ProjectDir)util.vbs" GetUnzip http://files.freeswitch.org/downloads/libs/flite-1.5.4-current.tar.bz2 "$(ProjectDir).."
if exist "$(ProjectDir)..\flite-1.5.4-current" move "$(ProjectDir)..\flite-1.5.4-current" "$(ProjectDir)..\flite-1.5.4"
</Command>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)..\flite-1.3.99;%(Outputs)</Outputs>
<Outputs Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(ProjectDir)..\flite-1.5.4;%(Outputs)</Outputs>
</CustomBuild>
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />

View File

@ -80,8 +80,8 @@
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
@ -111,8 +111,8 @@
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<StringPooling>true</StringPooling>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
<FunctionLevelLinking>true</FunctionLevelLinking>
@ -141,8 +141,8 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
@ -171,8 +171,8 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<AdditionalIncludeDirectories>..\..\curl\lib\;..\..\curl\include;.;..\..\openssl-1.0.0a\include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;BUILDING_LIBCURL;USE_SSLEAY;USE_OPENSSL;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
<RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>

File diff suppressed because it is too large Load Diff

View File

@ -21,7 +21,7 @@
<PropertyGroup Label="Globals">
<ProjectName>flite</ProjectName>
<ProjectGuid>{0AD1177E-1FD8-4643-9391-431467A11084}</ProjectGuid>
<RootNamespace>flite-1.3-current</RootNamespace>
<RootNamespace>flite-1.5.4</RootNamespace>
</PropertyGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
@ -68,7 +68,7 @@
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\flite-1.3.99\include;..\..\flite-1.3.99\lang\usenglish;..\..\flite-1.3.99\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\flite-1.5.4\include;..\..\flite-1.5.4\lang\usenglish;..\..\flite-1.5.4\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>CST_AUDIO_NONE=1;NO_UNION_INITIALIZATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -83,7 +83,7 @@
</Midl>
<ClCompile>
<Optimization>Disabled</Optimization>
<AdditionalIncludeDirectories>..\..\flite-1.3.99\include;..\..\flite-1.3.99\lang\usenglish;..\..\flite-1.3.99\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\flite-1.5.4\include;..\..\flite-1.5.4\lang\usenglish;..\..\flite-1.5.4\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>CST_AUDIO_NONE=1;NO_UNION_INITIALIZATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<BasicRuntimeChecks>EnableFastChecks</BasicRuntimeChecks>
@ -96,7 +96,7 @@
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>..\..\flite-1.3.99\include;..\..\flite-1.3.99\lang\usenglish;..\..\flite-1.3.99\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\flite-1.5.4\include;..\..\flite-1.5.4\lang\usenglish;..\..\flite-1.5.4\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>CST_AUDIO_NONE=1;NO_UNION_INITIALIZATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -112,7 +112,7 @@
<ClCompile>
<Optimization>MaxSpeed</Optimization>
<IntrinsicFunctions>true</IntrinsicFunctions>
<AdditionalIncludeDirectories>..\..\flite-1.3.99\include;..\..\flite-1.3.99\lang\usenglish;..\..\flite-1.3.99\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories>..\..\flite-1.5.4\include;..\..\flite-1.5.4\lang\usenglish;..\..\flite-1.5.4\lang\cmulex;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<PreprocessorDefinitions>CST_AUDIO_NONE=1;NO_UNION_INITIALIZATION=1;_CRT_SECURE_NO_WARNINGS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<MinimalRebuild>true</MinimalRebuild>
<RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
@ -122,189 +122,222 @@
</ClCompile>
</ItemDefinitionGroup>
<ItemGroup>
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_command.c" />
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_none.c" />
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_streaming.c" />
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_wince.c" />
<ClCompile Include="..\..\flite-1.3.99\src\audio\audio.c" />
<ClCompile Include="..\..\flite-1.3.99\src\audio\auserver.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lex.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lex_data.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lex_entries.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lts_model.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lts_rules.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_postlex.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb.c">
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">include;lang/usenglish;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">include;lang/usenglish;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">include;lang/usenglish;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
<AdditionalIncludeDirectories Condition="'$(Configuration)|$(Platform)'=='Release|x64'">include;lang/usenglish;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_clunits.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_lex_entry.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_lpc.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_mcep.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_diphone.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_lpc.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_res.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_residx.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_alloc.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_args.c" />
<ClCompile Include="..\..\flite-1.3.99\src\stats\cst_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_cg.c" />
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_clunits.c" />
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_diphone.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_endian.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_error.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_features.c" />
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_ffeature.c" />
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_ffeatures.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_file_stdio.c" />
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_item.c" />
<ClCompile Include="..\..\flite-1.3.99\src\lexicon\cst_lexicon.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_lpcres.c" />
<ClCompile Include="..\..\flite-1.3.99\src\lexicon\cst_lts.c" />
<ClCompile Include="..\..\flite-1.3.99\src\lexicon\cst_lts_rewrites.c" />
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_mlpg.c" />
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_mlsa.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_mmap_win32.c" />
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_phoneset.c" />
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_reflpc.c" />
<ClCompile Include="..\..\flite-1.3.99\src\regex\cst_regex.c" />
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_rel_io.c" />
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_relation.c" />
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_sigpr.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_socket.c" />
<ClCompile Include="..\..\flite-1.3.99\src\stats\cst_ss.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_string.c" />
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_sts.c" />
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_synth.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_tokenstream.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_track.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_track_io.c" />
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_units.c" />
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_utt_utils.c" />
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_utterance.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_val.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_val_const.c" />
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_val_user.c" />
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_vc.c" />
<ClCompile Include="..\..\flite-1.3.99\src\stats\cst_viterbi.c" />
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_voice.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_wave.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_wave_io.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_wave_utils.c" />
<ClCompile Include="..\..\flite-1.3.99\src\synth\flite.c" />
<ClCompile Include="..\..\flite-1.3.99\src\speech\rateconv.c" />
<ClCompile Include="..\..\flite-1.3.99\src\regex\regexp.c" />
<ClCompile Include="..\..\flite-1.3.99\src\regex\regsub.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_aswd.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_dur_stats.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_durz_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_expand.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_f0_model.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_f0lr.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_ffeatures.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_gpos.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_int_accent_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_int_tone_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_nums_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_phoneset.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_phrasing_cart.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_text.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\usenglish.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_mcep_trees.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_params.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_phonestate.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_mcep_trees.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_params.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_phonestate.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_mcep_trees.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_params.c" />
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_phonestate.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex_data.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex_entries.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lts_model.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lts_rules.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_postlex.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_clunits.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_lex_entry.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_lpc.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_mcep.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_phonestate.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_single_mcep_trees.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_single_params.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_accent.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_accent_params.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_phrase.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_diphone.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_lpc.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_res.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_residx.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_diphone.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_lpc.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_res.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_residx.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_ressize.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_phonestate.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_single_mcep_trees.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_single_params.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_accent.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_accent_params.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_phrase.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_voice.cpp" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_phonestate.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_single_mcep_trees.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_single_params.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_accent.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_accent_params.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_phrase.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\usenglish.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_aswd.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_durz_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_dur_stats.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_expand.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_f0lr.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_f0_model.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_ffeatures.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_gpos.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_int_accent_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_int_tone_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_nums_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_phoneset.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_phrasing_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_pos_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_text.c" />
<ClCompile Include="..\..\flite-1.5.4\src\audio\audio.c" />
<ClCompile Include="..\..\flite-1.5.4\src\audio\au_command.c" />
<ClCompile Include="..\..\flite-1.5.4\src\audio\au_none.c" />
<ClCompile Include="..\..\flite-1.5.4\src\audio\au_streaming.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg_dump_voice.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg_load_voice.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg_map.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_mlpg.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_mlsa.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_spamf0.c" />
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_vc.c" />
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_ffeature.c" />
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_item.c" />
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_relation.c" />
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_rel_io.c" />
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_utterance.c" />
<ClCompile Include="..\..\flite-1.5.4\src\lexicon\cst_lexicon.c" />
<ClCompile Include="..\..\flite-1.5.4\src\lexicon\cst_lts.c" />
<ClCompile Include="..\..\flite-1.5.4\src\lexicon\cst_lts_rewrites.c" />
<ClCompile Include="..\..\flite-1.5.4\src\regex\cst_regex.c" />
<ClCompile Include="..\..\flite-1.5.4\src\regex\regexp.c" />
<ClCompile Include="..\..\flite-1.5.4\src\regex\regsub.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_lpcres.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_track.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_track_io.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_wave.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_wave_io.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_wave_utils.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\g721.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\g723_24.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\g723_40.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\g72x.c" />
<ClCompile Include="..\..\flite-1.5.4\src\speech\rateconv.c" />
<ClCompile Include="..\..\flite-1.5.4\src\stats\cst_cart.c" />
<ClCompile Include="..\..\flite-1.5.4\src\stats\cst_ss.c" />
<ClCompile Include="..\..\flite-1.5.4\src\stats\cst_viterbi.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_ffeatures.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_phoneset.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_ssml.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_synth.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_utt_utils.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_voice.c" />
<ClCompile Include="..\..\flite-1.5.4\src\synth\flite.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_alloc.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_args.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_endian.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_error.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_features.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_file_stdio.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_mmap_win32.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_socket.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_string.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_tokenstream.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_url.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_val.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_val_const.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_val_user.c" />
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_wchar.c" />
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_clunits.c" />
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_diphone.c" />
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_reflpc.c" />
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_sigpr.c" />
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_sts.c" />
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_units.c" />
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\flite-1.3.99\lang\cmulex\cmu_lts_model.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmulex\cmulex.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_alloc.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_args.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_audio.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_cart.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_cg.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_clunits.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_diphone.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_endian.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_error.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_features.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_file.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_hrg.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_item.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_lexicon.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_lts.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_lts_rewrites.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_math.h" />
<ClInclude Include="..\..\flite-1.3.99\src\cg\cst_mlpg.h" />
<ClInclude Include="..\..\flite-1.3.99\src\cg\cst_mlsa.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_phoneset.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_regex.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_relation.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_sigpr.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_socket.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_ss.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_string.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_sts.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_synth.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_tokenstream.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_track.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_units.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_utt_utils.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_utterance.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_val.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_val_const.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_val_defs.h" />
<ClInclude Include="..\..\flite-1.3.99\src\cg\cst_vc.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_viterbi.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_voice.h" />
<ClInclude Include="..\..\flite-1.3.99\include\cst_wave.h" />
<ClInclude Include="..\..\flite-1.3.99\include\flite.h" />
<ClInclude Include="..\..\flite-1.3.99\src\audio\native_audio.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_durz_cart.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_f0.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_ffeatures.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_int_accent_cart.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_int_tone_cart.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_nums_cart.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_phrasing_cart.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_text.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\usenglish.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_time_awb\voxdefs.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_kal\voxdefs.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_mcep_trees.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\voxdefs.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_mcep_trees.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\voxdefs.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_mcep_trees.h" />
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_alloc.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_args.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_audio.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_cg.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_clunits.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_diphone.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_endian.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_error.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_features.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_ffeatures.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_file.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_hrg.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_item.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_lexicon.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_lts.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_lts_rewrites.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_math.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_phoneset.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_regex.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_relation.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_sigpr.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_socket.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_ss.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_string.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_sts.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_synth.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_tokenstream.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_track.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_units.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_utterance.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_utt_utils.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_val.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_val_const.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_val_defs.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_viterbi.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_voice.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_wave.h" />
<ClInclude Include="..\..\flite-1.5.4\include\cst_wchar.h" />
<ClInclude Include="..\..\flite-1.5.4\include\flite.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmulex\cmu_lts_model.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_time_awb\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_single_mcep_trees.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_accent.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_phrase.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_kal16\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_kal\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_single_mcep_trees.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_accent.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_phrase.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\stdafx.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_single_mcep_trees.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_accent.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_phrase.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\voxdefs.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\usenglish.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_durz_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_f0.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_ffeatures.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_int_accent_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_int_tone_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_nums_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_phrasing_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_pos_cart.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_regexes.h" />
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_text.h" />
<ClInclude Include="..\..\flite-1.5.4\src\cg\cst_cg_map.h" />
<ClInclude Include="..\..\flite-1.5.4\src\cg\cst_spamf0.h" />
<ClInclude Include="..\..\flite-1.5.4\src\regex\cst_regex_defs.h" />
<ClInclude Include="..\..\flite-1.5.4\src\speech\g72x.h" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\Download FLITE.2010.vcxproj">

View File

@ -1,558 +1,677 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
</Filter>
<Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav</Extensions>
<Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter>
<Filter Include="sltvoice">
<UniqueIdentifier>{2e2fca2e-fc24-48cd-bfa0-42ceb5aa5331}</UniqueIdentifier>
<Filter Include="voices">
<UniqueIdentifier>{8a9db04d-0a7b-47f2-97ed-73acecd51688}</UniqueIdentifier>
</Filter>
<Filter Include="awbvoice">
<Filter Include="voices\kal">
<UniqueIdentifier>{f4b8438d-32d6-4e75-926b-b3950baf2282}</UniqueIdentifier>
</Filter>
<Filter Include="voices\awb">
<UniqueIdentifier>{58f041f5-13f9-4986-aa26-ab41db21c3b1}</UniqueIdentifier>
</Filter>
<Filter Include="rmsvoice">
<Filter Include="voices\rms">
<UniqueIdentifier>{f4db3d58-e9d3-415a-ae41-cc3dd1012fc2}</UniqueIdentifier>
</Filter>
<Filter Include="voices\slt">
<UniqueIdentifier>{2e2fca2e-fc24-48cd-bfa0-42ceb5aa5331}</UniqueIdentifier>
</Filter>
<Filter Include="voices\kal16">
<UniqueIdentifier>{29f922d5-330d-49c3-9f8d-5aaada042fe0}</UniqueIdentifier>
</Filter>
</ItemGroup>
<ItemGroup>
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_command.c">
<ClCompile Include="..\..\flite-1.5.4\src\audio\au_streaming.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_none.c">
<ClCompile Include="..\..\flite-1.5.4\src\audio\audio.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_streaming.c">
<ClCompile Include="..\..\flite-1.5.4\src\audio\au_command.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\audio\au_wince.c">
<ClCompile Include="..\..\flite-1.5.4\src\audio\au_none.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\audio\audio.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lts_model.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\audio\auserver.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lts_rules.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lex.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_postlex.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lex_data.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lex_entries.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex_data.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lts_model.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex_entries.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_lts_rules.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_mmap_win32.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmulex\cmu_postlex.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_string.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_tokenstream.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_cart.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_val.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_clunits.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_val_const.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_lex_entry.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_val_user.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_lpc.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_wchar.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_time_awb\cmu_time_awb_mcep.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_alloc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_args.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_diphone.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_endian.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_lpc.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_error.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_res.c">
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_features.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_kal\cmu_us_kal_residx.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_lpc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_alloc.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_mcep.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_args.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\stats\cst_cart.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_cg.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_clunits.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_clunits.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_time_awb\cmu_time_awb_lex_entry.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_diphone.c">
<Filter>Source Files</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_single_mcep_trees.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_single_params.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_phonestate.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_voice.cpp">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_endian.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_phonestate.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_single_mcep_trees.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_single_params.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_sigpr.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_error.c">
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_sts.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_features.c">
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_units.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_ffeature.c">
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_clunits.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_ffeatures.c">
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_diphone.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_file_stdio.c">
<ClCompile Include="..\..\flite-1.5.4\src\wavesynth\cst_reflpc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_item.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_utt_utils.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\lexicon\cst_lexicon.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_voice.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_lpcres.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\flite.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\lexicon\cst_lts.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_ffeatures.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\lexicon\cst_lts_rewrites.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_phoneset.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_mlpg.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_ssml.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_mlsa.c">
<ClCompile Include="..\..\flite-1.5.4\src\synth\cst_synth.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_mmap_win32.c">
<ClCompile Include="..\..\flite-1.5.4\src\stats\cst_viterbi.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_phoneset.c">
<ClCompile Include="..\..\flite-1.5.4\src\stats\cst_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_reflpc.c">
<ClCompile Include="..\..\flite-1.5.4\src\stats\cst_ss.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\regex\cst_regex.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_wave_utils.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_rel_io.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\g72x.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_relation.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\g721.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_sigpr.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\g723_24.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_socket.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\g723_40.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\stats\cst_ss.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\rateconv.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_string.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_lpcres.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_sts.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_track.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_synth.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_track_io.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_tokenstream.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_wave.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_track.c">
<ClCompile Include="..\..\flite-1.5.4\src\speech\cst_wave_io.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_track_io.c">
<ClCompile Include="..\..\flite-1.5.4\src\regex\regexp.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\wavesynth\cst_units.c">
<ClCompile Include="..\..\flite-1.5.4\src\regex\regsub.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_utt_utils.c">
<ClCompile Include="..\..\flite-1.5.4\src\regex\cst_regex.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\hrg\cst_utterance.c">
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_mlpg.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_val.c">
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_mlsa.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_val_const.c">
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_vc.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\utils\cst_val_user.c">
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\cg\cst_vc.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_ffeatures.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\stats\cst_viterbi.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_gpos.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\synth\cst_voice.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_int_accent_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_wave.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_int_tone_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_wave_io.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_nums_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\cst_wave_utils.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_phoneset.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\synth\flite.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_phrasing_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\speech\rateconv.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_pos_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\regex\regexp.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_text.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\src\regex\regsub.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\usenglish.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_aswd.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_aswd.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_dur_stats.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_dur_stats.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_durz_cart.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_durz_cart.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_expand.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_expand.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_f0_model.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_f0_model.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_f0lr.c">
<ClCompile Include="..\..\flite-1.5.4\lang\usenglish\us_f0lr.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_ffeatures.c">
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_single_mcep_trees.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_single_params.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_phonestate.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_file_stdio.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_gpos.c">
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_relation.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_int_accent_cart.c">
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_utterance.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_int_tone_cart.c">
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_ffeature.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_nums_cart.c">
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_item.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_phoneset.c">
<ClCompile Include="..\..\flite-1.5.4\src\hrg\cst_rel_io.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_phrasing_cart.c">
<ClCompile Include="..\..\flite-1.5.4\src\lexicon\cst_lts_rewrites.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\us_text.c">
<ClCompile Include="..\..\flite-1.5.4\src\lexicon\cst_lexicon.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\usenglish\usenglish.c">
<ClCompile Include="..\..\flite-1.5.4\src\lexicon\cst_lts.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_accent.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_accent_params.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_phrase.c">
<Filter>voices\awb</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_accent.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_accent_params.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_phrase.c">
<Filter>voices\rms</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_accent.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_mcep_trees.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_accent_params.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_params.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_phrase.c">
<Filter>voices\slt</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_phonestate.c">
<Filter>sltvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_ressize.c">
<Filter>voices\kal</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal.c">
<Filter>voices\kal</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_diphone.c">
<Filter>voices\kal</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_res.c">
<Filter>voices\kal</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_lpc.c">
<Filter>voices\kal</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_mcep_trees.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal\cmu_us_kal_residx.c">
<Filter>voices\kal</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_params.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16.c">
<Filter>voices\kal16</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_phonestate.c">
<Filter>awbvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_diphone.c">
<Filter>voices\kal16</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_lpc.c">
<Filter>voices\kal16</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_res.c">
<Filter>voices\kal16</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\lang\cmu_us_kal16\cmu_us_kal16_residx.c">
<Filter>voices\kal16</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_spamf0.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg_load_voice.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg_dump_voice.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_mcep_trees.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\src\cg\cst_cg_map.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_params.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_url.c">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_phonestate.c">
<Filter>rmsvoice</Filter>
<ClCompile Include="..\..\flite-1.5.4\src\utils\cst_socket.c">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\flite-1.3.99\lang\cmulex\cmu_lts_model.h">
<ClInclude Include="..\..\flite-1.5.4\lang\cmulex\cmu_lts_model.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmulex\cmulex.h">
<ClInclude Include="..\..\flite-1.5.4\lang\cmulex\cmu_lex.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_alloc.h">
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_time_awb\voxdefs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_args.h">
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_single_mcep_trees.h">
<Filter>voices\slt</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\voxdefs.h">
<Filter>voices\slt</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.h">
<Filter>voices\slt</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.h">
<Filter>voices\slt</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_single_mcep_trees.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\stdafx.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\voxdefs.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\src\speech\g72x.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_audio.h">
<ClInclude Include="..\..\flite-1.5.4\src\regex\cst_regex_defs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_cart.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_pos_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_cg.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_regexes.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_clunits.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_text.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_diphone.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\usenglish.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_endian.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_durz_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_error.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_f0.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_features.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_ffeatures.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_file.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_int_accent_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_hrg.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_int_tone_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_item.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_nums_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_lexicon.h">
<ClInclude Include="..\..\flite-1.5.4\lang\usenglish\us_phrasing_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_lts.h">
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.h">
<Filter>voices\awb</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\voxdefs.h">
<Filter>voices\awb</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.h">
<Filter>voices\awb</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.5.4\include\cst_val_const.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_lts_rewrites.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_val_defs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_math.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_viterbi.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\src\cg\cst_mlpg.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_voice.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\src\cg\cst_mlsa.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_wave.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_phoneset.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_wchar.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_regex.h">
<ClInclude Include="..\..\flite-1.5.4\include\flite.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_relation.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_alloc.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_sigpr.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_args.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_socket.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_audio.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_ss.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_cart.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_string.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_cg.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_sts.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_clunits.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_synth.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_diphone.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_tokenstream.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_endian.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_track.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_error.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_units.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_features.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_utt_utils.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_ffeatures.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_utterance.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_file.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_val.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_hrg.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_val_const.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_item.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_val_defs.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_lexicon.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\src\cg\cst_vc.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_lts.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_viterbi.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_lts_rewrites.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_voice.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_math.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\cst_wave.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_phoneset.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\include\flite.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_regex.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\src\audio\native_audio.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_relation.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_durz_cart.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_sigpr.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_f0.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_socket.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_ffeatures.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_ss.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_int_accent_cart.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_string.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_int_tone_cart.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_sts.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_nums_cart.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_synth.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_phrasing_cart.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_tokenstream.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\us_text.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_track.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\usenglish\usenglish.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_units.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_time_awb\voxdefs.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_utt_utils.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_kal\voxdefs.h">
<ClInclude Include="..\..\flite-1.5.4\include\cst_utterance.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_durmodel.h">
<Filter>sltvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\include\cst_val.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_f0_trees.h">
<Filter>sltvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_cg_single_mcep_trees.h">
<Filter>voices\awb</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\cmu_us_slt_cg_mcep_trees.h">
<Filter>sltvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_accent.h">
<Filter>voices\awb</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_slt\voxdefs.h">
<Filter>sltvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_awb\cmu_us_awb_spamf0_phrase.h">
<Filter>voices\awb</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_durmodel.h">
<Filter>awbvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_accent.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_f0_trees.h">
<Filter>awbvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_rms\cmu_us_rms_spamf0_phrase.h">
<Filter>voices\rms</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\cmu_us_awb_cg_mcep_trees.h">
<Filter>awbvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_accent.h">
<Filter>voices\slt</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_awb\voxdefs.h">
<Filter>awbvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_slt\cmu_us_slt_spamf0_phrase.h">
<Filter>voices\slt</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_durmodel.h">
<Filter>rmsvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_kal\voxdefs.h">
<Filter>voices\kal</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_f0_trees.h">
<Filter>rmsvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\lang\cmu_us_kal16\voxdefs.h">
<Filter>voices\kal16</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\cmu_us_rms_cg_mcep_trees.h">
<Filter>rmsvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\src\cg\cst_cg_map.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\flite-1.3.99\lang\cmu_us_rms\voxdefs.h">
<Filter>rmsvoice</Filter>
<ClInclude Include="..\..\flite-1.5.4\src\cg\cst_spamf0.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -3,6 +3,7 @@
CONFDIR=@prefix@/conf/ssl
DAYS=2190
KEY_SIZE=2048
export KEY_SIZE=${KEY_SIZE}
TMPFILE="/tmp/fs-ca-$$-$(date +%Y%m%d%H%M%S)"
@ -36,10 +37,14 @@ setup_ca() {
mkdir -p -m 750 "${CONFDIR}/CA" || exit 1
fi
if [ ! -e "${CONFDIR}/CA/config.tpl" ]; then
if [ -e "${CONFDIR}/CA/config.tpl" ]; then
if [ $0 -nt "${CONFDIR}/CA/config.tpl" ]; then
echo "WARNING! genttls_cert has a modified time more recent than ${CONFDIR}/CA/config.tpl remove config.tpl to re-generate it"
fi
else
cat > "${CONFDIR}/CA/config.tpl" <<-EOF
[ req ]
default_bits = $ENV::KEY_SIZE
default_bits = \$ENV::KEY_SIZE
prompt = no
distinguished_name = req_dn
@ -117,7 +122,7 @@ generate_cert() {
> "${TMPFILE}.cfg" || exit 1
openssl req -new -out "${TMPFILE}.req" \
-newkey rsa: -keyout "${TMPFILE}.key" \
-newkey rsa:${KEY_SIZE} -keyout "${TMPFILE}.key" \
-config "${TMPFILE}.cfg" -nodes -sha1 >/dev/null || exit 1
openssl x509 -req -CAkey "${CONFDIR}/CA/cakey.pem" -CA "${CONFDIR}/CA/cacert.pem" -CAcreateserial \

View File

@ -0,0 +1,87 @@
-- Copyright (c) 2011-2012, Travis Cross.
--
-- The contents of this file are subject to the Mozilla Public License
-- Version 1.1 (the "License"); you may not use this file except in
-- compliance with the License. You may obtain a copy of the License
-- at http://www.mozilla.org/MPL/
--
-- Software distributed under the License is distributed on an "AS IS"
-- basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
-- the License for the specific language governing rights and
-- limitations under the License.
--
-- zrtp_proxy_media.lua
--
-- The logic in this script enables ZRTP sessions to negotiate
-- end-to-end security associations, which is desirable whether or not
-- the switch natively supports ZRTP itself.
--
-- To enable this logic, call the script from the top of your dialplan
-- as so:
--
-- <extension name="global" continue="true">
-- <condition break="never">
-- <action application="lua" data="lua/zrtp_proxy_media.lua"/>
-- </condition>
-- </extension>
--
-- If any particular call flow should never have proxy_media enabled,
-- such as for connecting to voicemail systems or conferences, make
-- sure this is called before the bridge:
--
-- <action application="lua" data="lua/zrtp_proxy_media.lua disable"/>
api=freeswitch.API()
function sappend(s1,s2) if s1 and #s1>0 then return s1..s2 else return s2 end end
function log(level,msg) return freeswitch.consoleLog(level,msg.."\n") end
function ready() return session:ready() end
function getvar(var) return session:getVariable(var) end
function getvarp(var) return getvar(var)=="true" end
function setvar_a(k,v) return session:setVariable(k,v) end
function append_var(k,v) return setvar_a(k,sappend(getvar(k),v)) end
function export(k) return append_var("export_vars",","..k) end
function setvar_ab(k,v) if v then setvar_a(k,v) end return export(k) end
function setvar_b(k,v) return setvar_ab("nolocal:"..k,v) end
function enable_zd(msg)
log("info",msg)
setvar_ab("zrtp_set","true")
setvar_ab("proxy_media","true")
setvar_ab("zrtp_secure_media","false")
end
function disable_zd(msg)
log("info",msg)
setvar_ab("zrtp_set","true")
setvar_ab("proxy_media","false")
setvar_ab("zrtp_secure_media","true")
end
function xfer(x)
return session:transfer(x,getvar("dialplan"),getvar("context"))
end
function main()
if ready() then
session:setAutoHangup(false)
local dst=getvar("destination_number")
if argv[1]=="disable" then
return disable_zd("zrtp-direct disabled on this call flow")
elseif getvarp("zrtp_set") then
return log("notice","zrtp already decided; doing nothing") end
local x=dst:match("^%*%*%*(.*)$")
if x then
enable_zd("going zrtp-direct based on star code")
return xfer(x) end
local x=dst:match("^%*%*(.*)$")
if x then
disable_zd("going zrtp-indirect based on star code")
return xfer(x) end
if getvar("switch_r_sdp"):match("a=zrtp%-hash:") then
return enable_zd("going zrtp-direct based on a=zrtp-hash") end
return disable_zd("not going zrtp-direct")
end
end
main()

View File

@ -7,9 +7,20 @@ if [ ! -d .git ]; then
exit 1;
fi
if [ -z "$1" ]; then
echo "usage: ./scripts/tagscript.sh MAJOR.MINOR.MICRO[.REVISION]" 1>&2
showusage() {
echo "usage: ./scripts/tagscript.sh [-s] MAJOR.MINOR.MICRO[.REVISION]" 1>&2
exit 1;
}
while getopts "s" o; do
case "$o" in
s) opts="-s" ;;
esac
done
shift $(($OPTIND-1))
if [ -z "$1" ]; then
showusage
fi
ver="$1"
@ -46,7 +57,7 @@ fi
git add configure.in
git commit -m "Release freeswitch-$ver"
git tag -a -m "freeswitch-$ver release" v$ver
git tag -a ${opts} -m "freeswitch-$ver release" v$ver
git clone $src_repo $dst_dir
if [ -n "$stash_saved" ]; then

View File

@ -193,6 +193,12 @@ struct switch_media_bug {
switch_thread_id_t thread_id;
char *function;
char *target;
switch_codec_implementation_t read_impl;
switch_codec_implementation_t write_impl;
uint32_t record_frame_size;
uint32_t record_pre_buffer_count;
uint32_t record_pre_buffer_max;
switch_frame_t *ping_frame;
struct switch_media_bug *next;
};
@ -254,6 +260,7 @@ struct switch_runtime {
uint32_t max_db_handles;
uint32_t db_handle_timeout;
int cpu_count;
uint32_t time_sync;
};
extern struct switch_runtime runtime;

Some files were not shown because too many files have changed in this diff Show More